node-red-contrib-knx-ultimate 4.2.7 → 4.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
- (function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))o(c);new MutationObserver(c=>{for(const u of c)if(u.type==="childList")for(const t of u.addedNodes)t.tagName==="LINK"&&t.rel==="modulepreload"&&o(t)}).observe(document,{childList:!0,subtree:!0});function r(c){const u={};return c.integrity&&(u.integrity=c.integrity),c.referrerPolicy&&(u.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?u.credentials="include":c.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function o(c){if(c.ep)return;c.ep=!0;const u=r(c);fetch(c.href,u)}})();function Bn(e){const s=Object.create(null);for(const r of e.split(","))s[r]=1;return r=>r in s}const Ae={},ks=[],Tt=()=>{},xl=()=>!1,Ua=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Vn=e=>e.startsWith("onUpdate:"),Be=Object.assign,Wn=(e,s)=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)},sc=Object.prototype.hasOwnProperty,be=(e,s)=>sc.call(e,s),Y=Array.isArray,Rs=e=>ga(e)==="[object Map]",Ls=e=>ga(e)==="[object Set]",Gr=e=>ga(e)==="[object Date]",Q=e=>typeof e=="function",Oe=e=>typeof e=="string",xt=e=>typeof e=="symbol",_e=e=>e!==null&&typeof e=="object",Il=e=>(_e(e)||Q(e))&&Q(e.then)&&Q(e.catch),Cl=Object.prototype.toString,ga=e=>Cl.call(e),ac=e=>ga(e).slice(8,-1),kl=e=>ga(e)==="[object Object]",Hn=e=>Oe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Zs=Bn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ba=e=>{const s=Object.create(null);return(r=>s[r]||(s[r]=e(r)))},nc=/-\w/g,pt=Ba(e=>e.replace(nc,s=>s.slice(1).toUpperCase())),rc=/\B([A-Z])/g,os=Ba(e=>e.replace(rc,"-$1").toLowerCase()),Rl=Ba(e=>e.charAt(0).toUpperCase()+e.slice(1)),_n=Ba(e=>e?`on${Rl(e)}`:""),At=(e,s)=>!Object.is(e,s),ka=(e,...s)=>{for(let r=0;r<e.length;r++)e[r](...s)},Nl=(e,s,r,o=!1)=>{Object.defineProperty(e,s,{configurable:!0,enumerable:!1,writable:o,value:r})},Va=e=>{const s=parseFloat(e);return isNaN(s)?e:s};let jr;const Wa=()=>jr||(jr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function oa(e){if(Y(e)){const s={};for(let r=0;r<e.length;r++){const o=e[r],c=Oe(o)?cc(o):oa(o);if(c)for(const u in c)s[u]=c[u]}return s}else if(Oe(e)||_e(e))return e}const lc=/;(?![^(]*\))/g,oc=/:([^]+)/,ic=/\/\*[^]*?\*\//g;function cc(e){const s={};return e.replace(ic,"").split(lc).forEach(r=>{if(r){const o=r.split(oc);o.length>1&&(s[o[0].trim()]=o[1].trim())}}),s}function ce(e){let s="";if(Oe(e))s=e;else if(Y(e))for(let r=0;r<e.length;r++){const o=ce(e[r]);o&&(s+=o+" ")}else if(_e(e))for(const r in e)e[r]&&(s+=r+" ");return s.trim()}const uc="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",dc=Bn(uc);function El(e){return!!e||e===""}function fc(e,s){if(e.length!==s.length)return!1;let r=!0;for(let o=0;r&&o<e.length;o++)r=Fs(e[o],s[o]);return r}function Fs(e,s){if(e===s)return!0;let r=Gr(e),o=Gr(s);if(r||o)return r&&o?e.getTime()===s.getTime():!1;if(r=xt(e),o=xt(s),r||o)return e===s;if(r=Y(e),o=Y(s),r||o)return r&&o?fc(e,s):!1;if(r=_e(e),o=_e(s),r||o){if(!r||!o)return!1;const c=Object.keys(e).length,u=Object.keys(s).length;if(c!==u)return!1;for(const t in e){const f=e.hasOwnProperty(t),g=s.hasOwnProperty(t);if(f&&!g||!f&&g||!Fs(e[t],s[t]))return!1}}return String(e)===String(s)}function Kn(e,s){return e.findIndex(r=>Fs(r,s))}const Ml=e=>!!(e&&e.__v_isRef===!0),S=e=>Oe(e)?e:e==null?"":Y(e)||_e(e)&&(e.toString===Cl||!Q(e.toString))?Ml(e)?S(e.value):JSON.stringify(e,Ol,2):String(e),Ol=(e,s)=>Ml(s)?Ol(e,s.value):Rs(s)?{[`Map(${s.size})`]:[...s.entries()].reduce((r,[o,c],u)=>(r[wn(o,u)+" =>"]=c,r),{})}:Ls(s)?{[`Set(${s.size})`]:[...s.values()].map(r=>wn(r))}:xt(s)?wn(s):_e(s)&&!Y(s)&&!kl(s)?String(s):s,wn=(e,s="")=>{var r;return xt(e)?`Symbol(${(r=e.description)!=null?r:s})`:e};let Ye;class pc{constructor(s=!1){this.detached=s,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Ye,!s&&Ye&&(this.index=(Ye.scopes||(Ye.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let s,r;if(this.scopes)for(s=0,r=this.scopes.length;s<r;s++)this.scopes[s].pause();for(s=0,r=this.effects.length;s<r;s++)this.effects[s].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let s,r;if(this.scopes)for(s=0,r=this.scopes.length;s<r;s++)this.scopes[s].resume();for(s=0,r=this.effects.length;s<r;s++)this.effects[s].resume()}}run(s){if(this._active){const r=Ye;try{return Ye=this,s()}finally{Ye=r}}}on(){++this._on===1&&(this.prevScope=Ye,Ye=this)}off(){this._on>0&&--this._on===0&&(Ye=this.prevScope,this.prevScope=void 0)}stop(s){if(this._active){this._active=!1;let r,o;for(r=0,o=this.effects.length;r<o;r++)this.effects[r].stop();for(this.effects.length=0,r=0,o=this.cleanups.length;r<o;r++)this.cleanups[r]();if(this.cleanups.length=0,this.scopes){for(r=0,o=this.scopes.length;r<o;r++)this.scopes[r].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!s){const c=this.parent.scopes.pop();c&&c!==this&&(this.parent.scopes[this.index]=c,c.index=this.index)}this.parent=void 0}}}function gc(){return Ye}let Te;const Pn=new WeakSet;class $l{constructor(s){this.fn=s,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,Ye&&Ye.active&&Ye.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,Pn.has(this)&&(Pn.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Fl(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Ur(this),Gl(this);const s=Te,r=gt;Te=this,gt=!0;try{return this.fn()}finally{jl(this),Te=s,gt=r,this.flags&=-3}}stop(){if(this.flags&1){for(let s=this.deps;s;s=s.nextDep)qn(s);this.deps=this.depsTail=void 0,Ur(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?Pn.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Rn(this)&&this.run()}get dirty(){return Rn(this)}}let Ll=0,ea,ta;function Fl(e,s=!1){if(e.flags|=8,s){e.next=ta,ta=e;return}e.next=ea,ea=e}function zn(){Ll++}function Jn(){if(--Ll>0)return;if(ta){let s=ta;for(ta=void 0;s;){const r=s.next;s.next=void 0,s.flags&=-9,s=r}}let e;for(;ea;){let s=ea;for(ea=void 0;s;){const r=s.next;if(s.next=void 0,s.flags&=-9,s.flags&1)try{s.trigger()}catch(o){e||(e=o)}s=r}}if(e)throw e}function Gl(e){for(let s=e.deps;s;s=s.nextDep)s.version=-1,s.prevActiveLink=s.dep.activeLink,s.dep.activeLink=s}function jl(e){let s,r=e.depsTail,o=r;for(;o;){const c=o.prevDep;o.version===-1?(o===r&&(r=c),qn(o),hc(o)):s=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=c}e.deps=s,e.depsTail=r}function Rn(e){for(let s=e.deps;s;s=s.nextDep)if(s.dep.version!==s.version||s.dep.computed&&(Ul(s.dep.computed)||s.dep.version!==s.version))return!0;return!!e._dirty}function Ul(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===ia)||(e.globalVersion=ia,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Rn(e))))return;e.flags|=2;const s=e.dep,r=Te,o=gt;Te=e,gt=!0;try{Gl(e);const c=e.fn(e._value);(s.version===0||At(c,e._value))&&(e.flags|=128,e._value=c,s.version++)}catch(c){throw s.version++,c}finally{Te=r,gt=o,jl(e),e.flags&=-3}}function qn(e,s=!1){const{dep:r,prevSub:o,nextSub:c}=e;if(o&&(o.nextSub=c,e.prevSub=void 0),c&&(c.prevSub=o,e.nextSub=void 0),r.subs===e&&(r.subs=o,!o&&r.computed)){r.computed.flags&=-5;for(let u=r.computed.deps;u;u=u.nextDep)qn(u,!0)}!s&&!--r.sc&&r.map&&r.map.delete(r.key)}function hc(e){const{prevDep:s,nextDep:r}=e;s&&(s.nextDep=r,e.prevDep=void 0),r&&(r.prevDep=s,e.nextDep=void 0)}let gt=!0;const Bl=[];function Wt(){Bl.push(gt),gt=!1}function Ht(){const e=Bl.pop();gt=e===void 0?!0:e}function Ur(e){const{cleanup:s}=e;if(e.cleanup=void 0,s){const r=Te;Te=void 0;try{s()}finally{Te=r}}}let ia=0;class mc{constructor(s,r){this.sub=s,this.dep=r,this.version=r.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Xn{constructor(s){this.computed=s,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(s){if(!Te||!gt||Te===this.computed)return;let r=this.activeLink;if(r===void 0||r.sub!==Te)r=this.activeLink=new mc(Te,this),Te.deps?(r.prevDep=Te.depsTail,Te.depsTail.nextDep=r,Te.depsTail=r):Te.deps=Te.depsTail=r,Vl(r);else if(r.version===-1&&(r.version=this.version,r.nextDep)){const o=r.nextDep;o.prevDep=r.prevDep,r.prevDep&&(r.prevDep.nextDep=o),r.prevDep=Te.depsTail,r.nextDep=void 0,Te.depsTail.nextDep=r,Te.depsTail=r,Te.deps===r&&(Te.deps=o)}return r}trigger(s){this.version++,ia++,this.notify(s)}notify(s){zn();try{for(let r=this.subs;r;r=r.prevSub)r.sub.notify()&&r.sub.dep.notify()}finally{Jn()}}}function Vl(e){if(e.dep.sc++,e.sub.flags&4){const s=e.dep.computed;if(s&&!e.dep.subs){s.flags|=20;for(let o=s.deps;o;o=o.nextDep)Vl(o)}const r=e.dep.subs;r!==e&&(e.prevSub=r,r&&(r.nextSub=e)),e.dep.subs=e}}const Nn=new WeakMap,ws=Symbol(""),En=Symbol(""),ca=Symbol("");function je(e,s,r){if(gt&&Te){let o=Nn.get(e);o||Nn.set(e,o=new Map);let c=o.get(r);c||(o.set(r,c=new Xn),c.map=o,c.key=r),c.track()}}function Ut(e,s,r,o,c,u){const t=Nn.get(e);if(!t){ia++;return}const f=g=>{g&&g.trigger()};if(zn(),s==="clear")t.forEach(f);else{const g=Y(e),w=g&&Hn(r);if(g&&r==="length"){const y=Number(o);t.forEach((A,O)=>{(O==="length"||O===ca||!xt(O)&&O>=y)&&f(A)})}else switch((r!==void 0||t.has(void 0))&&f(t.get(r)),w&&f(t.get(ca)),s){case"add":g?w&&f(t.get("length")):(f(t.get(ws)),Rs(e)&&f(t.get(En)));break;case"delete":g||(f(t.get(ws)),Rs(e)&&f(t.get(En)));break;case"set":Rs(e)&&f(t.get(ws));break}}Jn()}function Is(e){const s=me(e);return s===e?s:(je(s,"iterate",ca),ut(e)?s:s.map(ht))}function Ha(e){return je(e=me(e),"iterate",ca),e}function wt(e,s){return Kt(e)?Ms(Ps(e)?ht(s):s):ht(s)}const bc={__proto__:null,[Symbol.iterator](){return An(this,Symbol.iterator,e=>wt(this,e))},concat(...e){return Is(this).concat(...e.map(s=>Y(s)?Is(s):s))},entries(){return An(this,"entries",e=>(e[1]=wt(this,e[1]),e))},every(e,s){return Lt(this,"every",e,s,void 0,arguments)},filter(e,s){return Lt(this,"filter",e,s,r=>r.map(o=>wt(this,o)),arguments)},find(e,s){return Lt(this,"find",e,s,r=>wt(this,r),arguments)},findIndex(e,s){return Lt(this,"findIndex",e,s,void 0,arguments)},findLast(e,s){return Lt(this,"findLast",e,s,r=>wt(this,r),arguments)},findLastIndex(e,s){return Lt(this,"findLastIndex",e,s,void 0,arguments)},forEach(e,s){return Lt(this,"forEach",e,s,void 0,arguments)},includes(...e){return Tn(this,"includes",e)},indexOf(...e){return Tn(this,"indexOf",e)},join(e){return Is(this).join(e)},lastIndexOf(...e){return Tn(this,"lastIndexOf",e)},map(e,s){return Lt(this,"map",e,s,void 0,arguments)},pop(){return Xs(this,"pop")},push(...e){return Xs(this,"push",e)},reduce(e,...s){return Br(this,"reduce",e,s)},reduceRight(e,...s){return Br(this,"reduceRight",e,s)},shift(){return Xs(this,"shift")},some(e,s){return Lt(this,"some",e,s,void 0,arguments)},splice(...e){return Xs(this,"splice",e)},toReversed(){return Is(this).toReversed()},toSorted(e){return Is(this).toSorted(e)},toSpliced(...e){return Is(this).toSpliced(...e)},unshift(...e){return Xs(this,"unshift",e)},values(){return An(this,"values",e=>wt(this,e))}};function An(e,s,r){const o=Ha(e),c=o[s]();return o!==e&&!ut(e)&&(c._next=c.next,c.next=()=>{const u=c._next();return u.done||(u.value=r(u.value)),u}),c}const vc=Array.prototype;function Lt(e,s,r,o,c,u){const t=Ha(e),f=t!==e&&!ut(e),g=t[s];if(g!==vc[s]){const A=g.apply(e,u);return f?ht(A):A}let w=r;t!==e&&(f?w=function(A,O){return r.call(this,wt(e,A),O,e)}:r.length>2&&(w=function(A,O){return r.call(this,A,O,e)}));const y=g.call(t,w,o);return f&&c?c(y):y}function Br(e,s,r,o){const c=Ha(e),u=c!==e&&!ut(e);let t=r,f=!1;c!==e&&(u?(f=o.length===0,t=function(w,y,A){return f&&(f=!1,w=wt(e,w)),r.call(this,w,wt(e,y),A,e)}):r.length>3&&(t=function(w,y,A){return r.call(this,w,y,A,e)}));const g=c[s](t,...o);return f?wt(e,g):g}function Tn(e,s,r){const o=me(e);je(o,"iterate",ca);const c=o[s](...r);return(c===-1||c===!1)&&Zn(r[0])?(r[0]=me(r[0]),o[s](...r)):c}function Xs(e,s,r=[]){Wt(),zn();const o=me(e)[s].apply(e,r);return Jn(),Ht(),o}const yc=Bn("__proto__,__v_isRef,__isVue"),Wl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(xt));function Sc(e){xt(e)||(e=String(e));const s=me(this);return je(s,"has",e),s.hasOwnProperty(e)}class Hl{constructor(s=!1,r=!1){this._isReadonly=s,this._isShallow=r}get(s,r,o){if(r==="__v_skip")return s.__v_skip;const c=this._isReadonly,u=this._isShallow;if(r==="__v_isReactive")return!c;if(r==="__v_isReadonly")return c;if(r==="__v_isShallow")return u;if(r==="__v_raw")return o===(c?u?kc:ql:u?Jl:zl).get(s)||Object.getPrototypeOf(s)===Object.getPrototypeOf(o)?s:void 0;const t=Y(s);if(!c){let g;if(t&&(g=bc[r]))return g;if(r==="hasOwnProperty")return Sc}const f=Reflect.get(s,r,Ue(s)?s:o);if((xt(r)?Wl.has(r):yc(r))||(c||je(s,"get",r),u))return f;if(Ue(f)){const g=t&&Hn(r)?f:f.value;return c&&_e(g)?On(g):g}return _e(f)?c?On(f):Ka(f):f}}class Kl extends Hl{constructor(s=!1){super(!1,s)}set(s,r,o,c){let u=s[r];const t=Y(s)&&Hn(r);if(!this._isShallow){const w=Kt(u);if(!ut(o)&&!Kt(o)&&(u=me(u),o=me(o)),!t&&Ue(u)&&!Ue(o))return w||(u.value=o),!0}const f=t?Number(r)<s.length:be(s,r),g=Reflect.set(s,r,o,Ue(s)?s:c);return s===me(c)&&(f?At(o,u)&&Ut(s,"set",r,o):Ut(s,"add",r,o)),g}deleteProperty(s,r){const o=be(s,r);s[r];const c=Reflect.deleteProperty(s,r);return c&&o&&Ut(s,"delete",r,void 0),c}has(s,r){const o=Reflect.has(s,r);return(!xt(r)||!Wl.has(r))&&je(s,"has",r),o}ownKeys(s){return je(s,"iterate",Y(s)?"length":ws),Reflect.ownKeys(s)}}class _c extends Hl{constructor(s=!1){super(!0,s)}set(s,r){return!0}deleteProperty(s,r){return!0}}const wc=new Kl,Pc=new _c,Ac=new Kl(!0);const Mn=e=>e,xa=e=>Reflect.getPrototypeOf(e);function Tc(e,s,r){return function(...o){const c=this.__v_raw,u=me(c),t=Rs(u),f=e==="entries"||e===Symbol.iterator&&t,g=e==="keys"&&t,w=c[e](...o),y=r?Mn:s?Ms:ht;return!s&&je(u,"iterate",g?En:ws),Be(Object.create(w),{next(){const{value:A,done:O}=w.next();return O?{value:A,done:O}:{value:f?[y(A[0]),y(A[1])]:y(A),done:O}}})}}function Ia(e){return function(...s){return e==="delete"?!1:e==="clear"?void 0:this}}function Dc(e,s){const r={get(c){const u=this.__v_raw,t=me(u),f=me(c);e||(At(c,f)&&je(t,"get",c),je(t,"get",f));const{has:g}=xa(t),w=s?Mn:e?Ms:ht;if(g.call(t,c))return w(u.get(c));if(g.call(t,f))return w(u.get(f));u!==t&&u.get(c)},get size(){const c=this.__v_raw;return!e&&je(me(c),"iterate",ws),c.size},has(c){const u=this.__v_raw,t=me(u),f=me(c);return e||(At(c,f)&&je(t,"has",c),je(t,"has",f)),c===f?u.has(c):u.has(c)||u.has(f)},forEach(c,u){const t=this,f=t.__v_raw,g=me(f),w=s?Mn:e?Ms:ht;return!e&&je(g,"iterate",ws),f.forEach((y,A)=>c.call(u,w(y),w(A),t))}};return Be(r,e?{add:Ia("add"),set:Ia("set"),delete:Ia("delete"),clear:Ia("clear")}:{add(c){const u=me(this),t=xa(u),f=me(c),g=!s&&!ut(c)&&!Kt(c)?f:c;return t.has.call(u,g)||At(c,g)&&t.has.call(u,c)||At(f,g)&&t.has.call(u,f)||(u.add(g),Ut(u,"add",g,g)),this},set(c,u){!s&&!ut(u)&&!Kt(u)&&(u=me(u));const t=me(this),{has:f,get:g}=xa(t);let w=f.call(t,c);w||(c=me(c),w=f.call(t,c));const y=g.call(t,c);return t.set(c,u),w?At(u,y)&&Ut(t,"set",c,u):Ut(t,"add",c,u),this},delete(c){const u=me(this),{has:t,get:f}=xa(u);let g=t.call(u,c);g||(c=me(c),g=t.call(u,c)),f&&f.call(u,c);const w=u.delete(c);return g&&Ut(u,"delete",c,void 0),w},clear(){const c=me(this),u=c.size!==0,t=c.clear();return u&&Ut(c,"clear",void 0,void 0),t}}),["keys","values","entries",Symbol.iterator].forEach(c=>{r[c]=Tc(c,e,s)}),r}function Yn(e,s){const r=Dc(e,s);return(o,c,u)=>c==="__v_isReactive"?!e:c==="__v_isReadonly"?e:c==="__v_raw"?o:Reflect.get(be(r,c)&&c in o?r:o,c,u)}const xc={get:Yn(!1,!1)},Ic={get:Yn(!1,!0)},Cc={get:Yn(!0,!1)};const zl=new WeakMap,Jl=new WeakMap,ql=new WeakMap,kc=new WeakMap;function Rc(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Nc(e){return e.__v_skip||!Object.isExtensible(e)?0:Rc(ac(e))}function Ka(e){return Kt(e)?e:Qn(e,!1,wc,xc,zl)}function Ec(e){return Qn(e,!1,Ac,Ic,Jl)}function On(e){return Qn(e,!0,Pc,Cc,ql)}function Qn(e,s,r,o,c){if(!_e(e)||e.__v_raw&&!(s&&e.__v_isReactive))return e;const u=Nc(e);if(u===0)return e;const t=c.get(e);if(t)return t;const f=new Proxy(e,u===2?o:r);return c.set(e,f),f}function Ps(e){return Kt(e)?Ps(e.__v_raw):!!(e&&e.__v_isReactive)}function Kt(e){return!!(e&&e.__v_isReadonly)}function ut(e){return!!(e&&e.__v_isShallow)}function Zn(e){return e?!!e.__v_raw:!1}function me(e){const s=e&&e.__v_raw;return s?me(s):e}function Mc(e){return!be(e,"__v_skip")&&Object.isExtensible(e)&&Nl(e,"__v_skip",!0),e}const ht=e=>_e(e)?Ka(e):e,Ms=e=>_e(e)?On(e):e;function Ue(e){return e?e.__v_isRef===!0:!1}function ms(e){return Oc(e,!1)}function Oc(e,s){return Ue(e)?e:new $c(e,s)}class $c{constructor(s,r){this.dep=new Xn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=r?s:me(s),this._value=r?s:ht(s),this.__v_isShallow=r}get value(){return this.dep.track(),this._value}set value(s){const r=this._rawValue,o=this.__v_isShallow||ut(s)||Kt(s);s=o?s:me(s),At(s,r)&&(this._rawValue=s,this._value=o?s:ht(s),this.dep.trigger())}}function Lc(e){return Ue(e)?e.value:e}const Fc={get:(e,s,r)=>s==="__v_raw"?e:Lc(Reflect.get(e,s,r)),set:(e,s,r,o)=>{const c=e[s];return Ue(c)&&!Ue(r)?(c.value=r,!0):Reflect.set(e,s,r,o)}};function Xl(e){return Ps(e)?e:new Proxy(e,Fc)}class Gc{constructor(s,r,o){this.fn=s,this.setter=r,this._value=void 0,this.dep=new Xn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ia-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!r,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&Te!==this)return Fl(this,!0),!0}get value(){const s=this.dep.track();return Ul(this),s&&(s.version=this.dep.version),this._value}set value(s){this.setter&&this.setter(s)}}function jc(e,s,r=!1){let o,c;return Q(e)?o=e:(o=e.get,c=e.set),new Gc(o,c,r)}const Ca={},Oa=new WeakMap;let _s;function Uc(e,s=!1,r=_s){if(r){let o=Oa.get(r);o||Oa.set(r,o=[]),o.push(e)}}function Bc(e,s,r=Ae){const{immediate:o,deep:c,once:u,scheduler:t,augmentJob:f,call:g}=r,w=z=>c?z:ut(z)||c===!1||c===0?Bt(z,1):Bt(z);let y,A,O,F,Z=!1,K=!1;if(Ue(e)?(A=()=>e.value,Z=ut(e)):Ps(e)?(A=()=>w(e),Z=!0):Y(e)?(K=!0,Z=e.some(z=>Ps(z)||ut(z)),A=()=>e.map(z=>{if(Ue(z))return z.value;if(Ps(z))return w(z);if(Q(z))return g?g(z,2):z()})):Q(e)?s?A=g?()=>g(e,2):e:A=()=>{if(O){Wt();try{O()}finally{Ht()}}const z=_s;_s=y;try{return g?g(e,3,[F]):e(F)}finally{_s=z}}:A=Tt,s&&c){const z=A,Ce=c===!0?1/0:c;A=()=>Bt(z(),Ce)}const xe=gc(),Se=()=>{y.stop(),xe&&xe.active&&Wn(xe.effects,y)};if(u&&s){const z=s;s=(...Ce)=>{z(...Ce),Se()}}let ae=K?new Array(e.length).fill(Ca):Ca;const ge=z=>{if(!(!(y.flags&1)||!y.dirty&&!z))if(s){const Ce=y.run();if(c||Z||(K?Ce.some((Qe,Je)=>At(Qe,ae[Je])):At(Ce,ae))){O&&O();const Qe=_s;_s=y;try{const Je=[Ce,ae===Ca?void 0:K&&ae[0]===Ca?[]:ae,F];ae=Ce,g?g(s,3,Je):s(...Je)}finally{_s=Qe}}}else y.run()};return f&&f(ge),y=new $l(A),y.scheduler=t?()=>t(ge,!1):ge,F=z=>Uc(z,!1,y),O=y.onStop=()=>{const z=Oa.get(y);if(z){if(g)g(z,4);else for(const Ce of z)Ce();Oa.delete(y)}},s?o?ge(!0):ae=y.run():t?t(ge.bind(null,!0),!0):y.run(),Se.pause=y.pause.bind(y),Se.resume=y.resume.bind(y),Se.stop=Se,Se}function Bt(e,s=1/0,r){if(s<=0||!_e(e)||e.__v_skip||(r=r||new Map,(r.get(e)||0)>=s))return e;if(r.set(e,s),s--,Ue(e))Bt(e.value,s,r);else if(Y(e))for(let o=0;o<e.length;o++)Bt(e[o],s,r);else if(Ls(e)||Rs(e))e.forEach(o=>{Bt(o,s,r)});else if(kl(e)){for(const o in e)Bt(e[o],s,r);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&&Bt(e[o],s,r)}return e}function ha(e,s,r,o){try{return o?e(...o):e()}catch(c){za(c,s,r)}}function It(e,s,r,o){if(Q(e)){const c=ha(e,s,r,o);return c&&Il(c)&&c.catch(u=>{za(u,s,r)}),c}if(Y(e)){const c=[];for(let u=0;u<e.length;u++)c.push(It(e[u],s,r,o));return c}}function za(e,s,r,o=!0){const c=s?s.vnode:null,{errorHandler:u,throwUnhandledErrorInProduction:t}=s&&s.appContext.config||Ae;if(s){let f=s.parent;const g=s.proxy,w=`https://vuejs.org/error-reference/#runtime-${r}`;for(;f;){const y=f.ec;if(y){for(let A=0;A<y.length;A++)if(y[A](e,g,w)===!1)return}f=f.parent}if(u){Wt(),ha(u,null,10,[e,g,w]),Ht();return}}Vc(e,r,c,o,t)}function Vc(e,s,r,o=!0,c=!1){if(c)throw e;console.error(e)}const Ke=[];let _t=-1;const Ns=[];let ns=null,Cs=0;const Yl=Promise.resolve();let $a=null;function sa(e){const s=$a||Yl;return e?s.then(this?e.bind(this):e):s}function Wc(e){let s=_t+1,r=Ke.length;for(;s<r;){const o=s+r>>>1,c=Ke[o],u=ua(c);u<e||u===e&&c.flags&2?s=o+1:r=o}return s}function er(e){if(!(e.flags&1)){const s=ua(e),r=Ke[Ke.length-1];!r||!(e.flags&2)&&s>=ua(r)?Ke.push(e):Ke.splice(Wc(s),0,e),e.flags|=1,Ql()}}function Ql(){$a||($a=Yl.then(eo))}function Hc(e){Y(e)?Ns.push(...e):ns&&e.id===-1?ns.splice(Cs+1,0,e):e.flags&1||(Ns.push(e),e.flags|=1),Ql()}function Vr(e,s,r=_t+1){for(;r<Ke.length;r++){const o=Ke[r];if(o&&o.flags&2){if(e&&o.id!==e.uid)continue;Ke.splice(r,1),r--,o.flags&4&&(o.flags&=-2),o(),o.flags&4||(o.flags&=-2)}}}function Zl(e){if(Ns.length){const s=[...new Set(Ns)].sort((r,o)=>ua(r)-ua(o));if(Ns.length=0,ns){ns.push(...s);return}for(ns=s,Cs=0;Cs<ns.length;Cs++){const r=ns[Cs];r.flags&4&&(r.flags&=-2),r.flags&8||r(),r.flags&=-2}ns=null,Cs=0}}const ua=e=>e.id==null?e.flags&2?-1:1/0:e.id;function eo(e){try{for(_t=0;_t<Ke.length;_t++){const s=Ke[_t];s&&!(s.flags&8)&&(s.flags&4&&(s.flags&=-2),ha(s,s.i,s.i?15:14),s.flags&4||(s.flags&=-2))}}finally{for(;_t<Ke.length;_t++){const s=Ke[_t];s&&(s.flags&=-2)}_t=-1,Ke.length=0,Zl(),$a=null,(Ke.length||Ns.length)&&eo()}}let ct=null,to=null;function La(e){const s=ct;return ct=e,to=e&&e.type.__scopeId||null,s}function Kc(e,s=ct,r){if(!s||e._n)return e;const o=(...c)=>{o._d&&el(-1);const u=La(s);let t;try{t=e(...c)}finally{La(u),o._d&&el(1)}return t};return o._n=!0,o._c=!0,o._d=!0,o}function fe(e,s){if(ct===null)return e;const r=Ya(ct),o=e.dirs||(e.dirs=[]);for(let c=0;c<s.length;c++){let[u,t,f,g=Ae]=s[c];u&&(Q(u)&&(u={mounted:u,updated:u}),u.deep&&Bt(t),o.push({dir:u,instance:r,value:t,oldValue:void 0,arg:f,modifiers:g}))}return e}function bs(e,s,r,o){const c=e.dirs,u=s&&s.dirs;for(let t=0;t<c.length;t++){const f=c[t];u&&(f.oldValue=u[t].value);let g=f.dir[o];g&&(Wt(),It(g,r,8,[e.el,f,e,s]),Ht())}}function zc(e,s){if(ze){let r=ze.provides;const o=ze.parent&&ze.parent.provides;o===r&&(r=ze.provides=Object.create(o)),r[e]=s}}function Ra(e,s,r=!1){const o=Hu();if(o||Es){let c=Es?Es._context.provides:o?o.parent==null||o.ce?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:void 0;if(c&&e in c)return c[e];if(arguments.length>1)return r&&Q(s)?s.call(o&&o.proxy):s}}const Jc=Symbol.for("v-scx"),qc=()=>Ra(Jc);function Re(e,s,r){return so(e,s,r)}function so(e,s,r=Ae){const{immediate:o,deep:c,flush:u,once:t}=r,f=Be({},r),g=s&&o||!s&&u!=="post";let w;if(fa){if(u==="sync"){const F=qc();w=F.__watcherHandles||(F.__watcherHandles=[])}else if(!g){const F=()=>{};return F.stop=Tt,F.resume=Tt,F.pause=Tt,F}}const y=ze;f.call=(F,Z,K)=>It(F,y,Z,K);let A=!1;u==="post"?f.scheduler=F=>{Xe(F,y&&y.suspense)}:u!=="sync"&&(A=!0,f.scheduler=(F,Z)=>{Z?F():er(F)}),f.augmentJob=F=>{s&&(F.flags|=4),A&&(F.flags|=2,y&&(F.id=y.uid,F.i=y))};const O=Bc(e,s,f);return fa&&(w?w.push(O):g&&O()),O}function Xc(e,s,r){const o=this.proxy,c=Oe(e)?e.includes(".")?ao(o,e):()=>o[e]:e.bind(o,o);let u;Q(s)?u=s:(u=s.handler,r=s);const t=ma(this),f=so(c,u.bind(o),r);return t(),f}function ao(e,s){const r=s.split(".");return()=>{let o=e;for(let c=0;c<r.length&&o;c++)o=o[r[c]];return o}}const Yc=Symbol("_vte"),Qc=e=>e.__isTeleport,Zc=Symbol("_leaveCb");function tr(e,s){e.shapeFlag&6&&e.component?(e.transition=s,tr(e.component.subTree,s)):e.shapeFlag&128?(e.ssContent.transition=s.clone(e.ssContent),e.ssFallback.transition=s.clone(e.ssFallback)):e.transition=s}function no(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Wr(e,s){let r;return!!((r=Object.getOwnPropertyDescriptor(e,s))&&!r.configurable)}const Fa=new WeakMap;function aa(e,s,r,o,c=!1){if(Y(e)){e.forEach((K,xe)=>aa(K,s&&(Y(s)?s[xe]:s),r,o,c));return}if(na(o)&&!c){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&aa(e,s,r,o.component.subTree);return}const u=o.shapeFlag&4?Ya(o.component):o.el,t=c?null:u,{i:f,r:g}=e,w=s&&s.r,y=f.refs===Ae?f.refs={}:f.refs,A=f.setupState,O=me(A),F=A===Ae?xl:K=>Wr(y,K)?!1:be(O,K),Z=(K,xe)=>!(xe&&Wr(y,xe));if(w!=null&&w!==g){if(Hr(s),Oe(w))y[w]=null,F(w)&&(A[w]=null);else if(Ue(w)){const K=s;Z(w,K.k)&&(w.value=null),K.k&&(y[K.k]=null)}}if(Q(g))ha(g,f,12,[t,y]);else{const K=Oe(g),xe=Ue(g);if(K||xe){const Se=()=>{if(e.f){const ae=K?F(g)?A[g]:y[g]:Z()||!e.k?g.value:y[e.k];if(c)Y(ae)&&Wn(ae,u);else if(Y(ae))ae.includes(u)||ae.push(u);else if(K)y[g]=[u],F(g)&&(A[g]=y[g]);else{const ge=[u];Z(g,e.k)&&(g.value=ge),e.k&&(y[e.k]=ge)}}else K?(y[g]=t,F(g)&&(A[g]=t)):xe&&(Z(g,e.k)&&(g.value=t),e.k&&(y[e.k]=t))};if(t){const ae=()=>{Se(),Fa.delete(e)};ae.id=-1,Fa.set(e,ae),Xe(ae,r)}else Hr(e),Se()}}}function Hr(e){const s=Fa.get(e);s&&(s.flags|=8,Fa.delete(e))}Wa().requestIdleCallback;Wa().cancelIdleCallback;const na=e=>!!e.type.__asyncLoader,ro=e=>e.type.__isKeepAlive;function eu(e,s){lo(e,"a",s)}function tu(e,s){lo(e,"da",s)}function lo(e,s,r=ze){const o=e.__wdc||(e.__wdc=()=>{let c=r;for(;c;){if(c.isDeactivated)return;c=c.parent}return e()});if(Ja(s,o,r),r){let c=r.parent;for(;c&&c.parent;)ro(c.parent.vnode)&&su(o,s,r,c),c=c.parent}}function su(e,s,r,o){const c=Ja(s,e,o,!0);co(()=>{Wn(o[s],c)},r)}function Ja(e,s,r=ze,o=!1){if(r){const c=r[e]||(r[e]=[]),u=s.__weh||(s.__weh=(...t)=>{Wt();const f=ma(r),g=It(s,r,e,t);return f(),Ht(),g});return o?c.unshift(u):c.push(u),u}}const zt=e=>(s,r=ze)=>{(!fa||e==="sp")&&Ja(e,(...o)=>s(...o),r)},au=zt("bm"),oo=zt("m"),nu=zt("bu"),ru=zt("u"),io=zt("bum"),co=zt("um"),lu=zt("sp"),ou=zt("rtg"),iu=zt("rtc");function cu(e,s=ze){Ja("ec",e,s)}const uu=Symbol.for("v-ndc");function ne(e,s,r,o){let c;const u=r,t=Y(e);if(t||Oe(e)){const f=t&&Ps(e);let g=!1,w=!1;f&&(g=!ut(e),w=Kt(e),e=Ha(e)),c=new Array(e.length);for(let y=0,A=e.length;y<A;y++)c[y]=s(g?w?Ms(ht(e[y])):ht(e[y]):e[y],y,void 0,u)}else if(typeof e=="number"){c=new Array(e);for(let f=0;f<e;f++)c[f]=s(f+1,f,void 0,u)}else if(_e(e))if(e[Symbol.iterator])c=Array.from(e,(f,g)=>s(f,g,void 0,u));else{const f=Object.keys(e);c=new Array(f.length);for(let g=0,w=f.length;g<w;g++){const y=f[g];c[g]=s(e[y],y,g,u)}}else c=[];return c}const $n=e=>e?Ro(e)?Ya(e):$n(e.parent):null,ra=Be(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=>$n(e.parent),$root:e=>$n(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>fo(e),$forceUpdate:e=>e.f||(e.f=()=>{er(e.update)}),$nextTick:e=>e.n||(e.n=sa.bind(e.proxy)),$watch:e=>Xc.bind(e)}),Dn=(e,s)=>e!==Ae&&!e.__isScriptSetup&&be(e,s),du={get({_:e},s){if(s==="__v_skip")return!0;const{ctx:r,setupState:o,data:c,props:u,accessCache:t,type:f,appContext:g}=e;if(s[0]!=="$"){const O=t[s];if(O!==void 0)switch(O){case 1:return o[s];case 2:return c[s];case 4:return r[s];case 3:return u[s]}else{if(Dn(o,s))return t[s]=1,o[s];if(c!==Ae&&be(c,s))return t[s]=2,c[s];if(be(u,s))return t[s]=3,u[s];if(r!==Ae&&be(r,s))return t[s]=4,r[s];Ln&&(t[s]=0)}}const w=ra[s];let y,A;if(w)return s==="$attrs"&&je(e.attrs,"get",""),w(e);if((y=f.__cssModules)&&(y=y[s]))return y;if(r!==Ae&&be(r,s))return t[s]=4,r[s];if(A=g.config.globalProperties,be(A,s))return A[s]},set({_:e},s,r){const{data:o,setupState:c,ctx:u}=e;return Dn(c,s)?(c[s]=r,!0):o!==Ae&&be(o,s)?(o[s]=r,!0):be(e.props,s)||s[0]==="$"&&s.slice(1)in e?!1:(u[s]=r,!0)},has({_:{data:e,setupState:s,accessCache:r,ctx:o,appContext:c,props:u,type:t}},f){let g;return!!(r[f]||e!==Ae&&f[0]!=="$"&&be(e,f)||Dn(s,f)||be(u,f)||be(o,f)||be(ra,f)||be(c.config.globalProperties,f)||(g=t.__cssModules)&&g[f])},defineProperty(e,s,r){return r.get!=null?e._.accessCache[s]=0:be(r,"value")&&this.set(e,s,r.value,null),Reflect.defineProperty(e,s,r)}};function Kr(e){return Y(e)?e.reduce((s,r)=>(s[r]=null,s),{}):e}let Ln=!0;function fu(e){const s=fo(e),r=e.proxy,o=e.ctx;Ln=!1,s.beforeCreate&&zr(s.beforeCreate,e,"bc");const{data:c,computed:u,methods:t,watch:f,provide:g,inject:w,created:y,beforeMount:A,mounted:O,beforeUpdate:F,updated:Z,activated:K,deactivated:xe,beforeDestroy:Se,beforeUnmount:ae,destroyed:ge,unmounted:z,render:Ce,renderTracked:Qe,renderTriggered:Je,errorCaptured:at,serverPrefetch:is,expose:dt,inheritAttrs:Jt,components:cs,directives:qt,filters:Gs}=s;if(w&&pu(w,o,null),t)for(const De in t){const ve=t[De];Q(ve)&&(o[De]=ve.bind(r))}if(c){const De=c.call(r,r);_e(De)&&(e.data=Ka(De))}if(Ln=!0,u)for(const De in u){const ve=u[De],ye=Q(ve)?ve.bind(r,r):Q(ve.get)?ve.get.bind(r,r):Tt,$=!Q(ve)&&Q(ve.set)?ve.set.bind(r):Tt,we=q({get:ye,set:$});Object.defineProperty(o,De,{enumerable:!0,configurable:!0,get:()=>we.value,set:Ze=>we.value=Ze})}if(f)for(const De in f)uo(f[De],o,r,De);if(g){const De=Q(g)?g.call(r):g;Reflect.ownKeys(De).forEach(ve=>{zc(ve,De[ve])})}y&&zr(y,e,"c");function $e(De,ve){Y(ve)?ve.forEach(ye=>De(ye.bind(r))):ve&&De(ve.bind(r))}if($e(au,A),$e(oo,O),$e(nu,F),$e(ru,Z),$e(eu,K),$e(tu,xe),$e(cu,at),$e(iu,Qe),$e(ou,Je),$e(io,ae),$e(co,z),$e(lu,is),Y(dt))if(dt.length){const De=e.exposed||(e.exposed={});dt.forEach(ve=>{Object.defineProperty(De,ve,{get:()=>r[ve],set:ye=>r[ve]=ye,enumerable:!0})})}else e.exposed||(e.exposed={});Ce&&e.render===Tt&&(e.render=Ce),Jt!=null&&(e.inheritAttrs=Jt),cs&&(e.components=cs),qt&&(e.directives=qt),is&&no(e)}function pu(e,s,r=Tt){Y(e)&&(e=Fn(e));for(const o in e){const c=e[o];let u;_e(c)?"default"in c?u=Ra(c.from||o,c.default,!0):u=Ra(c.from||o):u=Ra(c),Ue(u)?Object.defineProperty(s,o,{enumerable:!0,configurable:!0,get:()=>u.value,set:t=>u.value=t}):s[o]=u}}function zr(e,s,r){It(Y(e)?e.map(o=>o.bind(s.proxy)):e.bind(s.proxy),s,r)}function uo(e,s,r,o){let c=o.includes(".")?ao(r,o):()=>r[o];if(Oe(e)){const u=s[e];Q(u)&&Re(c,u)}else if(Q(e))Re(c,e.bind(r));else if(_e(e))if(Y(e))e.forEach(u=>uo(u,s,r,o));else{const u=Q(e.handler)?e.handler.bind(r):s[e.handler];Q(u)&&Re(c,u,e)}}function fo(e){const s=e.type,{mixins:r,extends:o}=s,{mixins:c,optionsCache:u,config:{optionMergeStrategies:t}}=e.appContext,f=u.get(s);let g;return f?g=f:!c.length&&!r&&!o?g=s:(g={},c.length&&c.forEach(w=>Ga(g,w,t,!0)),Ga(g,s,t)),_e(s)&&u.set(s,g),g}function Ga(e,s,r,o=!1){const{mixins:c,extends:u}=s;u&&Ga(e,u,r,!0),c&&c.forEach(t=>Ga(e,t,r,!0));for(const t in s)if(!(o&&t==="expose")){const f=gu[t]||r&&r[t];e[t]=f?f(e[t],s[t]):s[t]}return e}const gu={data:Jr,props:qr,emits:qr,methods:Qs,computed:Qs,beforeCreate:He,created:He,beforeMount:He,mounted:He,beforeUpdate:He,updated:He,beforeDestroy:He,beforeUnmount:He,destroyed:He,unmounted:He,activated:He,deactivated:He,errorCaptured:He,serverPrefetch:He,components:Qs,directives:Qs,watch:mu,provide:Jr,inject:hu};function Jr(e,s){return s?e?function(){return Be(Q(e)?e.call(this,this):e,Q(s)?s.call(this,this):s)}:s:e}function hu(e,s){return Qs(Fn(e),Fn(s))}function Fn(e){if(Y(e)){const s={};for(let r=0;r<e.length;r++)s[e[r]]=e[r];return s}return e}function He(e,s){return e?[...new Set([].concat(e,s))]:s}function Qs(e,s){return e?Be(Object.create(null),e,s):s}function qr(e,s){return e?Y(e)&&Y(s)?[...new Set([...e,...s])]:Be(Object.create(null),Kr(e),Kr(s??{})):s}function mu(e,s){if(!e)return s;if(!s)return e;const r=Be(Object.create(null),e);for(const o in s)r[o]=He(e[o],s[o]);return r}function po(){return{app:null,config:{isNativeTag:xl,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let bu=0;function vu(e,s){return function(o,c=null){Q(o)||(o=Be({},o)),c!=null&&!_e(c)&&(c=null);const u=po(),t=new WeakSet,f=[];let g=!1;const w=u.app={_uid:bu++,_component:o,_props:c,_container:null,_context:u,_instance:null,version:Yu,get config(){return u.config},set config(y){},use(y,...A){return t.has(y)||(y&&Q(y.install)?(t.add(y),y.install(w,...A)):Q(y)&&(t.add(y),y(w,...A))),w},mixin(y){return u.mixins.includes(y)||u.mixins.push(y),w},component(y,A){return A?(u.components[y]=A,w):u.components[y]},directive(y,A){return A?(u.directives[y]=A,w):u.directives[y]},mount(y,A,O){if(!g){const F=w._ceVNode||Dt(o,c);return F.appContext=u,O===!0?O="svg":O===!1&&(O=void 0),e(F,y,O),g=!0,w._container=y,y.__vue_app__=w,Ya(F.component)}},onUnmount(y){f.push(y)},unmount(){g&&(It(f,w._instance,16),e(null,w._container),delete w._container.__vue_app__)},provide(y,A){return u.provides[y]=A,w},runWithContext(y){const A=Es;Es=w;try{return y()}finally{Es=A}}};return w}}let Es=null;const yu=(e,s)=>s==="modelValue"||s==="model-value"?e.modelModifiers:e[`${s}Modifiers`]||e[`${pt(s)}Modifiers`]||e[`${os(s)}Modifiers`];function Su(e,s,...r){if(e.isUnmounted)return;const o=e.vnode.props||Ae;let c=r;const u=s.startsWith("update:"),t=u&&yu(o,s.slice(7));t&&(t.trim&&(c=r.map(y=>Oe(y)?y.trim():y)),t.number&&(c=r.map(Va)));let f,g=o[f=_n(s)]||o[f=_n(pt(s))];!g&&u&&(g=o[f=_n(os(s))]),g&&It(g,e,6,c);const w=o[f+"Once"];if(w){if(!e.emitted)e.emitted={};else if(e.emitted[f])return;e.emitted[f]=!0,It(w,e,6,c)}}const _u=new WeakMap;function go(e,s,r=!1){const o=r?_u:s.emitsCache,c=o.get(e);if(c!==void 0)return c;const u=e.emits;let t={},f=!1;if(!Q(e)){const g=w=>{const y=go(w,s,!0);y&&(f=!0,Be(t,y))};!r&&s.mixins.length&&s.mixins.forEach(g),e.extends&&g(e.extends),e.mixins&&e.mixins.forEach(g)}return!u&&!f?(_e(e)&&o.set(e,null),null):(Y(u)?u.forEach(g=>t[g]=null):Be(t,u),_e(e)&&o.set(e,t),t)}function qa(e,s){return!e||!Ua(s)?!1:(s=s.slice(2).replace(/Once$/,""),be(e,s[0].toLowerCase()+s.slice(1))||be(e,os(s))||be(e,s))}function Xr(e){const{type:s,vnode:r,proxy:o,withProxy:c,propsOptions:[u],slots:t,attrs:f,emit:g,render:w,renderCache:y,props:A,data:O,setupState:F,ctx:Z,inheritAttrs:K}=e,xe=La(e);let Se,ae;try{if(r.shapeFlag&4){const z=c||o,Ce=z;Se=Pt(w.call(Ce,z,y,A,F,O,Z)),ae=f}else{const z=s;Se=Pt(z.length>1?z(A,{attrs:f,slots:t,emit:g}):z(A,null)),ae=s.props?f:wu(f)}}catch(z){la.length=0,za(z,e,1),Se=Dt(ls)}let ge=Se;if(ae&&K!==!1){const z=Object.keys(ae),{shapeFlag:Ce}=ge;z.length&&Ce&7&&(u&&z.some(Vn)&&(ae=Pu(ae,u)),ge=Os(ge,ae,!1,!0))}return r.dirs&&(ge=Os(ge,null,!1,!0),ge.dirs=ge.dirs?ge.dirs.concat(r.dirs):r.dirs),r.transition&&tr(ge,r.transition),Se=ge,La(xe),Se}const wu=e=>{let s;for(const r in e)(r==="class"||r==="style"||Ua(r))&&((s||(s={}))[r]=e[r]);return s},Pu=(e,s)=>{const r={};for(const o in e)(!Vn(o)||!(o.slice(9)in s))&&(r[o]=e[o]);return r};function Au(e,s,r){const{props:o,children:c,component:u}=e,{props:t,children:f,patchFlag:g}=s,w=u.emitsOptions;if(s.dirs||s.transition)return!0;if(r&&g>=0){if(g&1024)return!0;if(g&16)return o?Yr(o,t,w):!!t;if(g&8){const y=s.dynamicProps;for(let A=0;A<y.length;A++){const O=y[A];if(ho(t,o,O)&&!qa(w,O))return!0}}}else return(c||f)&&(!f||!f.$stable)?!0:o===t?!1:o?t?Yr(o,t,w):!0:!!t;return!1}function Yr(e,s,r){const o=Object.keys(s);if(o.length!==Object.keys(e).length)return!0;for(let c=0;c<o.length;c++){const u=o[c];if(ho(s,e,u)&&!qa(r,u))return!0}return!1}function ho(e,s,r){const o=e[r],c=s[r];return r==="style"&&_e(o)&&_e(c)?!Fs(o,c):o!==c}function Tu({vnode:e,parent:s},r){for(;s;){const o=s.subTree;if(o.suspense&&o.suspense.activeBranch===e&&(o.el=e.el),o===e)(e=s.vnode).el=r,s=s.parent;else break}}const mo={},bo=()=>Object.create(mo),vo=e=>Object.getPrototypeOf(e)===mo;function Du(e,s,r,o=!1){const c={},u=bo();e.propsDefaults=Object.create(null),yo(e,s,c,u);for(const t in e.propsOptions[0])t in c||(c[t]=void 0);r?e.props=o?c:Ec(c):e.type.props?e.props=c:e.props=u,e.attrs=u}function xu(e,s,r,o){const{props:c,attrs:u,vnode:{patchFlag:t}}=e,f=me(c),[g]=e.propsOptions;let w=!1;if((o||t>0)&&!(t&16)){if(t&8){const y=e.vnode.dynamicProps;for(let A=0;A<y.length;A++){let O=y[A];if(qa(e.emitsOptions,O))continue;const F=s[O];if(g)if(be(u,O))F!==u[O]&&(u[O]=F,w=!0);else{const Z=pt(O);c[Z]=Gn(g,f,Z,F,e,!1)}else F!==u[O]&&(u[O]=F,w=!0)}}}else{yo(e,s,c,u)&&(w=!0);let y;for(const A in f)(!s||!be(s,A)&&((y=os(A))===A||!be(s,y)))&&(g?r&&(r[A]!==void 0||r[y]!==void 0)&&(c[A]=Gn(g,f,A,void 0,e,!0)):delete c[A]);if(u!==f)for(const A in u)(!s||!be(s,A))&&(delete u[A],w=!0)}w&&Ut(e.attrs,"set","")}function yo(e,s,r,o){const[c,u]=e.propsOptions;let t=!1,f;if(s)for(let g in s){if(Zs(g))continue;const w=s[g];let y;c&&be(c,y=pt(g))?!u||!u.includes(y)?r[y]=w:(f||(f={}))[y]=w:qa(e.emitsOptions,g)||(!(g in o)||w!==o[g])&&(o[g]=w,t=!0)}if(u){const g=me(r),w=f||Ae;for(let y=0;y<u.length;y++){const A=u[y];r[A]=Gn(c,g,A,w[A],e,!be(w,A))}}return t}function Gn(e,s,r,o,c,u){const t=e[r];if(t!=null){const f=be(t,"default");if(f&&o===void 0){const g=t.default;if(t.type!==Function&&!t.skipFactory&&Q(g)){const{propsDefaults:w}=c;if(r in w)o=w[r];else{const y=ma(c);o=w[r]=g.call(null,s),y()}}else o=g;c.ce&&c.ce._setProp(r,o)}t[0]&&(u&&!f?o=!1:t[1]&&(o===""||o===os(r))&&(o=!0))}return o}const Iu=new WeakMap;function So(e,s,r=!1){const o=r?Iu:s.propsCache,c=o.get(e);if(c)return c;const u=e.props,t={},f=[];let g=!1;if(!Q(e)){const y=A=>{g=!0;const[O,F]=So(A,s,!0);Be(t,O),F&&f.push(...F)};!r&&s.mixins.length&&s.mixins.forEach(y),e.extends&&y(e.extends),e.mixins&&e.mixins.forEach(y)}if(!u&&!g)return _e(e)&&o.set(e,ks),ks;if(Y(u))for(let y=0;y<u.length;y++){const A=pt(u[y]);Qr(A)&&(t[A]=Ae)}else if(u)for(const y in u){const A=pt(y);if(Qr(A)){const O=u[y],F=t[A]=Y(O)||Q(O)?{type:O}:Be({},O),Z=F.type;let K=!1,xe=!0;if(Y(Z))for(let Se=0;Se<Z.length;++Se){const ae=Z[Se],ge=Q(ae)&&ae.name;if(ge==="Boolean"){K=!0;break}else ge==="String"&&(xe=!1)}else K=Q(Z)&&Z.name==="Boolean";F[0]=K,F[1]=xe,(K||be(F,"default"))&&f.push(A)}}const w=[t,f];return _e(e)&&o.set(e,w),w}function Qr(e){return e[0]!=="$"&&!Zs(e)}const sr=e=>e==="_"||e==="_ctx"||e==="$stable",ar=e=>Y(e)?e.map(Pt):[Pt(e)],Cu=(e,s,r)=>{if(s._n)return s;const o=Kc((...c)=>ar(s(...c)),r);return o._c=!1,o},_o=(e,s,r)=>{const o=e._ctx;for(const c in e){if(sr(c))continue;const u=e[c];if(Q(u))s[c]=Cu(c,u,o);else if(u!=null){const t=ar(u);s[c]=()=>t}}},wo=(e,s)=>{const r=ar(s);e.slots.default=()=>r},Po=(e,s,r)=>{for(const o in s)(r||!sr(o))&&(e[o]=s[o])},ku=(e,s,r)=>{const o=e.slots=bo();if(e.vnode.shapeFlag&32){const c=s._;c?(Po(o,s,r),r&&Nl(o,"_",c,!0)):_o(s,o)}else s&&wo(e,s)},Ru=(e,s,r)=>{const{vnode:o,slots:c}=e;let u=!0,t=Ae;if(o.shapeFlag&32){const f=s._;f?r&&f===1?u=!1:Po(c,s,r):(u=!s.$stable,_o(s,c)),t=s}else s&&(wo(e,s),t={default:1});if(u)for(const f in c)!sr(f)&&t[f]==null&&delete c[f]},Xe=$u;function Nu(e){return Eu(e)}function Eu(e,s){const r=Wa();r.__VUE__=!0;const{insert:o,remove:c,patchProp:u,createElement:t,createText:f,createComment:g,setText:w,setElementText:y,parentNode:A,nextSibling:O,setScopeId:F=Tt,insertStaticContent:Z}=e,K=(p,m,P,C=null,D=null,x=null,N=void 0,E=null,R=!!m.dynamicChildren)=>{if(p===m)return;p&&!Ys(p,m)&&(C=As(p),Ze(p,D,x,!0),p=null),m.patchFlag===-2&&(R=!1,m.dynamicChildren=null);const{type:T,ref:W,shapeFlag:L}=m;switch(T){case Xa:xe(p,m,P,C);break;case ls:Se(p,m,P,C);break;case Na:p==null&&ae(m,P,C,N);break;case X:cs(p,m,P,C,D,x,N,E,R);break;default:L&1?Ce(p,m,P,C,D,x,N,E,R):L&6?qt(p,m,P,C,D,x,N,E,R):(L&64||L&128)&&T.process(p,m,P,C,D,x,N,E,R,kt)}W!=null&&D?aa(W,p&&p.ref,x,m||p,!m):W==null&&p&&p.ref!=null&&aa(p.ref,null,x,p,!0)},xe=(p,m,P,C)=>{if(p==null)o(m.el=f(m.children),P,C);else{const D=m.el=p.el;m.children!==p.children&&w(D,m.children)}},Se=(p,m,P,C)=>{p==null?o(m.el=g(m.children||""),P,C):m.el=p.el},ae=(p,m,P,C)=>{[p.el,p.anchor]=Z(p.children,m,P,C,p.el,p.anchor)},ge=({el:p,anchor:m},P,C)=>{let D;for(;p&&p!==m;)D=O(p),o(p,P,C),p=D;o(m,P,C)},z=({el:p,anchor:m})=>{let P;for(;p&&p!==m;)P=O(p),c(p),p=P;c(m)},Ce=(p,m,P,C,D,x,N,E,R)=>{if(m.type==="svg"?N="svg":m.type==="math"&&(N="mathml"),p==null)Qe(m,P,C,D,x,N,E,R);else{const T=p.el&&p.el._isVueCE?p.el:null;try{T&&T._beginPatch(),is(p,m,D,x,N,E,R)}finally{T&&T._endPatch()}}},Qe=(p,m,P,C,D,x,N,E)=>{let R,T;const{props:W,shapeFlag:L,transition:U,dirs:J}=p;if(R=p.el=t(p.type,x,W&&W.is,W),L&8?y(R,p.children):L&16&&at(p.children,R,null,C,D,xn(p,x),N,E),J&&bs(p,null,C,"created"),Je(R,p,p.scopeId,N,C),W){for(const le in W)le!=="value"&&!Zs(le)&&u(R,le,null,W[le],x,C);"value"in W&&u(R,"value",null,W.value,x),(T=W.onVnodeBeforeMount)&&St(T,C,p)}J&&bs(p,null,C,"beforeMount");const re=Mu(D,U);re&&U.beforeEnter(R),o(R,m,P),((T=W&&W.onVnodeMounted)||re||J)&&Xe(()=>{T&&St(T,C,p),re&&U.enter(R),J&&bs(p,null,C,"mounted")},D)},Je=(p,m,P,C,D)=>{if(P&&F(p,P),C)for(let x=0;x<C.length;x++)F(p,C[x]);if(D){let x=D.subTree;if(m===x||xo(x.type)&&(x.ssContent===m||x.ssFallback===m)){const N=D.vnode;Je(p,N,N.scopeId,N.slotScopeIds,D.parent)}}},at=(p,m,P,C,D,x,N,E,R=0)=>{for(let T=R;T<p.length;T++){const W=p[T]=E?jt(p[T]):Pt(p[T]);K(null,W,m,P,C,D,x,N,E)}},is=(p,m,P,C,D,x,N)=>{const E=m.el=p.el;let{patchFlag:R,dynamicChildren:T,dirs:W}=m;R|=p.patchFlag&16;const L=p.props||Ae,U=m.props||Ae;let J;if(P&&vs(P,!1),(J=U.onVnodeBeforeUpdate)&&St(J,P,m,p),W&&bs(m,p,P,"beforeUpdate"),P&&vs(P,!0),(L.innerHTML&&U.innerHTML==null||L.textContent&&U.textContent==null)&&y(E,""),T?dt(p.dynamicChildren,T,E,P,C,xn(m,D),x):N||ve(p,m,E,null,P,C,xn(m,D),x,!1),R>0){if(R&16)Jt(E,L,U,P,D);else if(R&2&&L.class!==U.class&&u(E,"class",null,U.class,D),R&4&&u(E,"style",L.style,U.style,D),R&8){const re=m.dynamicProps;for(let le=0;le<re.length;le++){const ue=re[le],Fe=L[ue],Ge=U[ue];(Ge!==Fe||ue==="value")&&u(E,ue,Fe,Ge,D,P)}}R&1&&p.children!==m.children&&y(E,m.children)}else!N&&T==null&&Jt(E,L,U,P,D);((J=U.onVnodeUpdated)||W)&&Xe(()=>{J&&St(J,P,m,p),W&&bs(m,p,P,"updated")},C)},dt=(p,m,P,C,D,x,N)=>{for(let E=0;E<m.length;E++){const R=p[E],T=m[E],W=R.el&&(R.type===X||!Ys(R,T)||R.shapeFlag&198)?A(R.el):P;K(R,T,W,null,C,D,x,N,!0)}},Jt=(p,m,P,C,D)=>{if(m!==P){if(m!==Ae)for(const x in m)!Zs(x)&&!(x in P)&&u(p,x,m[x],null,D,C);for(const x in P){if(Zs(x))continue;const N=P[x],E=m[x];N!==E&&x!=="value"&&u(p,x,E,N,D,C)}"value"in P&&u(p,"value",m.value,P.value,D)}},cs=(p,m,P,C,D,x,N,E,R)=>{const T=m.el=p?p.el:f(""),W=m.anchor=p?p.anchor:f("");let{patchFlag:L,dynamicChildren:U,slotScopeIds:J}=m;J&&(E=E?E.concat(J):J),p==null?(o(T,P,C),o(W,P,C),at(m.children||[],P,W,D,x,N,E,R)):L>0&&L&64&&U&&p.dynamicChildren&&p.dynamicChildren.length===U.length?(dt(p.dynamicChildren,U,P,D,x,N,E),(m.key!=null||D&&m===D.subTree)&&Ao(p,m,!0)):ve(p,m,P,W,D,x,N,E,R)},qt=(p,m,P,C,D,x,N,E,R)=>{m.slotScopeIds=E,p==null?m.shapeFlag&512?D.ctx.activate(m,P,C,N,R):Gs(m,P,C,D,x,N,R):us(p,m,R)},Gs=(p,m,P,C,D,x,N)=>{const E=p.component=Wu(p,C,D);if(ro(p)&&(E.ctx.renderer=kt),Ku(E,!1,N),E.asyncDep){if(D&&D.registerDep(E,$e,N),!p.el){const R=E.subTree=Dt(ls);Se(null,R,m,P),p.placeholder=R.el}}else $e(E,p,m,P,D,x,N)},us=(p,m,P)=>{const C=m.component=p.component;if(Au(p,m,P))if(C.asyncDep&&!C.asyncResolved){De(C,m,P);return}else C.next=m,C.update();else m.el=p.el,C.vnode=m},$e=(p,m,P,C,D,x,N)=>{const E=()=>{if(p.isMounted){let{next:L,bu:U,u:J,parent:re,vnode:le}=p;{const rt=To(p);if(rt){L&&(L.el=le.el,De(p,L,N)),rt.asyncDep.then(()=>{Xe(()=>{p.isUnmounted||T()},D)});return}}let ue=L,Fe;vs(p,!1),L?(L.el=le.el,De(p,L,N)):L=le,U&&ka(U),(Fe=L.props&&L.props.onVnodeBeforeUpdate)&&St(Fe,re,L,le),vs(p,!0);const Ge=Xr(p),nt=p.subTree;p.subTree=Ge,K(nt,Ge,A(nt.el),As(nt),p,D,x),L.el=Ge.el,ue===null&&Tu(p,Ge.el),J&&Xe(J,D),(Fe=L.props&&L.props.onVnodeUpdated)&&Xe(()=>St(Fe,re,L,le),D)}else{let L;const{el:U,props:J}=m,{bm:re,m:le,parent:ue,root:Fe,type:Ge}=p,nt=na(m);vs(p,!1),re&&ka(re),!nt&&(L=J&&J.onVnodeBeforeMount)&&St(L,ue,m),vs(p,!0);{Fe.ce&&Fe.ce._hasShadowRoot()&&Fe.ce._injectChildStyle(Ge,p.parent?p.parent.type:void 0);const rt=p.subTree=Xr(p);K(null,rt,P,C,p,D,x),m.el=rt.el}if(le&&Xe(le,D),!nt&&(L=J&&J.onVnodeMounted)){const rt=m;Xe(()=>St(L,ue,rt),D)}(m.shapeFlag&256||ue&&na(ue.vnode)&&ue.vnode.shapeFlag&256)&&p.a&&Xe(p.a,D),p.isMounted=!0,m=P=C=null}};p.scope.on();const R=p.effect=new $l(E);p.scope.off();const T=p.update=R.run.bind(R),W=p.job=R.runIfDirty.bind(R);W.i=p,W.id=p.uid,R.scheduler=()=>er(W),vs(p,!0),T()},De=(p,m,P)=>{m.component=p;const C=p.vnode.props;p.vnode=m,p.next=null,xu(p,m.props,C,P),Ru(p,m.children,P),Wt(),Vr(p),Ht()},ve=(p,m,P,C,D,x,N,E,R=!1)=>{const T=p&&p.children,W=p?p.shapeFlag:0,L=m.children,{patchFlag:U,shapeFlag:J}=m;if(U>0){if(U&128){$(T,L,P,C,D,x,N,E,R);return}else if(U&256){ye(T,L,P,C,D,x,N,E,R);return}}J&8?(W&16&&Ct(T,D,x),L!==T&&y(P,L)):W&16?J&16?$(T,L,P,C,D,x,N,E,R):Ct(T,D,x,!0):(W&8&&y(P,""),J&16&&at(L,P,C,D,x,N,E,R))},ye=(p,m,P,C,D,x,N,E,R)=>{p=p||ks,m=m||ks;const T=p.length,W=m.length,L=Math.min(T,W);let U;for(U=0;U<L;U++){const J=m[U]=R?jt(m[U]):Pt(m[U]);K(p[U],J,P,null,D,x,N,E,R)}T>W?Ct(p,D,x,!0,!1,L):at(m,P,C,D,x,N,E,R,L)},$=(p,m,P,C,D,x,N,E,R)=>{let T=0;const W=m.length;let L=p.length-1,U=W-1;for(;T<=L&&T<=U;){const J=p[T],re=m[T]=R?jt(m[T]):Pt(m[T]);if(Ys(J,re))K(J,re,P,null,D,x,N,E,R);else break;T++}for(;T<=L&&T<=U;){const J=p[L],re=m[U]=R?jt(m[U]):Pt(m[U]);if(Ys(J,re))K(J,re,P,null,D,x,N,E,R);else break;L--,U--}if(T>L){if(T<=U){const J=U+1,re=J<W?m[J].el:C;for(;T<=U;)K(null,m[T]=R?jt(m[T]):Pt(m[T]),P,re,D,x,N,E,R),T++}}else if(T>U)for(;T<=L;)Ze(p[T],D,x,!0),T++;else{const J=T,re=T,le=new Map;for(T=re;T<=U;T++){const Ve=m[T]=R?jt(m[T]):Pt(m[T]);Ve.key!=null&&le.set(Ve.key,T)}let ue,Fe=0;const Ge=U-re+1;let nt=!1,rt=0;const ds=new Array(Ge);for(T=0;T<Ge;T++)ds[T]=0;for(T=J;T<=L;T++){const Ve=p[T];if(Fe>=Ge){Ze(Ve,D,x,!0);continue}let lt;if(Ve.key!=null)lt=le.get(Ve.key);else for(ue=re;ue<=U;ue++)if(ds[ue-re]===0&&Ys(Ve,m[ue])){lt=ue;break}lt===void 0?Ze(Ve,D,x,!0):(ds[lt-re]=T+1,lt>=rt?rt=lt:nt=!0,K(Ve,m[lt],P,null,D,x,N,E,R),Fe++)}const Ts=nt?Ou(ds):ks;for(ue=Ts.length-1,T=Ge-1;T>=0;T--){const Ve=re+T,lt=m[Ve],fs=m[Ve+1],ke=Ve+1<W?fs.el||Do(fs):C;ds[T]===0?K(null,lt,P,ke,D,x,N,E,R):nt&&(ue<0||T!==Ts[ue]?we(lt,P,ke,2):ue--)}}},we=(p,m,P,C,D=null)=>{const{el:x,type:N,transition:E,children:R,shapeFlag:T}=p;if(T&6){we(p.component.subTree,m,P,C);return}if(T&128){p.suspense.move(m,P,C);return}if(T&64){N.move(p,m,P,kt);return}if(N===X){o(x,m,P);for(let L=0;L<R.length;L++)we(R[L],m,P,C);o(p.anchor,m,P);return}if(N===Na){ge(p,m,P);return}if(C!==2&&T&1&&E)if(C===0)E.beforeEnter(x),o(x,m,P),Xe(()=>E.enter(x),D);else{const{leave:L,delayLeave:U,afterLeave:J}=E,re=()=>{p.ctx.isUnmounted?c(x):o(x,m,P)},le=()=>{x._isLeaving&&x[Zc](!0),L(x,()=>{re(),J&&J()})};U?U(x,re,le):le()}else o(x,m,P)},Ze=(p,m,P,C=!1,D=!1)=>{const{type:x,props:N,ref:E,children:R,dynamicChildren:T,shapeFlag:W,patchFlag:L,dirs:U,cacheIndex:J}=p;if(L===-2&&(D=!1),E!=null&&(Wt(),aa(E,null,P,p,!0),Ht()),J!=null&&(m.renderCache[J]=void 0),W&256){m.ctx.deactivate(p);return}const re=W&1&&U,le=!na(p);let ue;if(le&&(ue=N&&N.onVnodeBeforeUnmount)&&St(ue,m,p),W&6)Qa(p.component,P,C);else{if(W&128){p.suspense.unmount(P,C);return}re&&bs(p,null,m,"beforeUnmount"),W&64?p.type.remove(p,m,P,kt,C):T&&!T.hasOnce&&(x!==X||L>0&&L&64)?Ct(T,m,P,!1,!0):(x===X&&L&384||!D&&W&16)&&Ct(R,m,P),C&&js(p)}(le&&(ue=N&&N.onVnodeUnmounted)||re)&&Xe(()=>{ue&&St(ue,m,p),re&&bs(p,null,m,"unmounted")},P)},js=p=>{const{type:m,el:P,anchor:C,transition:D}=p;if(m===X){Us(P,C);return}if(m===Na){z(p);return}const x=()=>{c(P),D&&!D.persisted&&D.afterLeave&&D.afterLeave()};if(p.shapeFlag&1&&D&&!D.persisted){const{leave:N,delayLeave:E}=D,R=()=>N(P,x);E?E(p.el,x,R):R()}else x()},Us=(p,m)=>{let P;for(;p!==m;)P=O(p),c(p),p=P;c(m)},Qa=(p,m,P)=>{const{bum:C,scope:D,job:x,subTree:N,um:E,m:R,a:T}=p;Zr(R),Zr(T),C&&ka(C),D.stop(),x&&(x.flags|=8,Ze(N,p,m,P)),E&&Xe(E,m),Xe(()=>{p.isUnmounted=!0},m)},Ct=(p,m,P,C=!1,D=!1,x=0)=>{for(let N=x;N<p.length;N++)Ze(p[N],m,P,C,D)},As=p=>{if(p.shapeFlag&6)return As(p.component.subTree);if(p.shapeFlag&128)return p.suspense.next();const m=O(p.anchor||p.el),P=m&&m[Yc];return P?O(P):m};let Bs=!1;const Vs=(p,m,P)=>{let C;p==null?m._vnode&&(Ze(m._vnode,null,null,!0),C=m._vnode.component):K(m._vnode||null,p,m,null,null,null,P),m._vnode=p,Bs||(Bs=!0,Vr(C),Zl(),Bs=!1)},kt={p:K,um:Ze,m:we,r:js,mt:Gs,mc:at,pc:ve,pbc:dt,n:As,o:e};return{render:Vs,hydrate:void 0,createApp:vu(Vs)}}function xn({type:e,props:s},r){return r==="svg"&&e==="foreignObject"||r==="mathml"&&e==="annotation-xml"&&s&&s.encoding&&s.encoding.includes("html")?void 0:r}function vs({effect:e,job:s},r){r?(e.flags|=32,s.flags|=4):(e.flags&=-33,s.flags&=-5)}function Mu(e,s){return(!e||e&&!e.pendingBranch)&&s&&!s.persisted}function Ao(e,s,r=!1){const o=e.children,c=s.children;if(Y(o)&&Y(c))for(let u=0;u<o.length;u++){const t=o[u];let f=c[u];f.shapeFlag&1&&!f.dynamicChildren&&((f.patchFlag<=0||f.patchFlag===32)&&(f=c[u]=jt(c[u]),f.el=t.el),!r&&f.patchFlag!==-2&&Ao(t,f)),f.type===Xa&&(f.patchFlag===-1&&(f=c[u]=jt(f)),f.el=t.el),f.type===ls&&!f.el&&(f.el=t.el)}}function Ou(e){const s=e.slice(),r=[0];let o,c,u,t,f;const g=e.length;for(o=0;o<g;o++){const w=e[o];if(w!==0){if(c=r[r.length-1],e[c]<w){s[o]=c,r.push(o);continue}for(u=0,t=r.length-1;u<t;)f=u+t>>1,e[r[f]]<w?u=f+1:t=f;w<e[r[u]]&&(u>0&&(s[o]=r[u-1]),r[u]=o)}}for(u=r.length,t=r[u-1];u-- >0;)r[u]=t,t=s[t];return r}function To(e){const s=e.subTree.component;if(s)return s.asyncDep&&!s.asyncResolved?s:To(s)}function Zr(e){if(e)for(let s=0;s<e.length;s++)e[s].flags|=8}function Do(e){if(e.placeholder)return e.placeholder;const s=e.component;return s?Do(s.subTree):null}const xo=e=>e.__isSuspense;function $u(e,s){s&&s.pendingBranch?Y(e)?s.effects.push(...e):s.effects.push(e):Hc(e)}const X=Symbol.for("v-fgt"),Xa=Symbol.for("v-txt"),ls=Symbol.for("v-cmt"),Na=Symbol.for("v-stc"),la=[];let st=null;function b(e=!1){la.push(st=e?null:[])}function Lu(){la.pop(),st=la[la.length-1]||null}let da=1;function el(e,s=!1){da+=e,e<0&&st&&s&&(st.hasOnce=!0)}function Io(e){return e.dynamicChildren=da>0?st||ks:null,Lu(),da>0&&st&&st.push(e),e}function v(e,s,r,o,c,u){return Io(i(e,s,r,o,c,u,!0))}function Fu(e,s,r,o,c){return Io(Dt(e,s,r,o,c,!0))}function Co(e){return e?e.__v_isVNode===!0:!1}function Ys(e,s){return e.type===s.type&&e.key===s.key}const ko=({key:e})=>e??null,Ea=({ref:e,ref_key:s,ref_for:r})=>(typeof e=="number"&&(e=""+e),e!=null?Oe(e)||Ue(e)||Q(e)?{i:ct,r:e,k:s,f:!!r}:e:null);function i(e,s=null,r=null,o=0,c=null,u=e===X?0:1,t=!1,f=!1){const g={__v_isVNode:!0,__v_skip:!0,type:e,props:s,key:s&&ko(s),ref:s&&Ea(s),scopeId:to,slotScopeIds:null,children:r,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:u,patchFlag:o,dynamicProps:c,dynamicChildren:null,appContext:null,ctx:ct};return f?(nr(g,r),u&128&&e.normalize(g)):r&&(g.shapeFlag|=Oe(r)?8:16),da>0&&!t&&st&&(g.patchFlag>0||u&6)&&g.patchFlag!==32&&st.push(g),g}const Dt=Gu;function Gu(e,s=null,r=null,o=0,c=null,u=!1){if((!e||e===uu)&&(e=ls),Co(e)){const f=Os(e,s,!0);return r&&nr(f,r),da>0&&!u&&st&&(f.shapeFlag&6?st[st.indexOf(e)]=f:st.push(f)),f.patchFlag=-2,f}if(Xu(e)&&(e=e.__vccOpts),s){s=ju(s);let{class:f,style:g}=s;f&&!Oe(f)&&(s.class=ce(f)),_e(g)&&(Zn(g)&&!Y(g)&&(g=Be({},g)),s.style=oa(g))}const t=Oe(e)?1:xo(e)?128:Qc(e)?64:_e(e)?4:Q(e)?2:0;return i(e,s,r,o,c,t,u,!0)}function ju(e){return e?Zn(e)||vo(e)?Be({},e):e:null}function Os(e,s,r=!1,o=!1){const{props:c,ref:u,patchFlag:t,children:f,transition:g}=e,w=s?Uu(c||{},s):c,y={__v_isVNode:!0,__v_skip:!0,type:e.type,props:w,key:w&&ko(w),ref:s&&s.ref?r&&u?Y(u)?u.concat(Ea(s)):[u,Ea(s)]:Ea(s):u,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:f,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:s&&e.type!==X?t===-1?16:t|16:t,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:g,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Os(e.ssContent),ssFallback:e.ssFallback&&Os(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return g&&o&&tr(y,g.clone(y)),y}function pe(e=" ",s=0){return Dt(Xa,null,e,s)}function ys(e,s){const r=Dt(Na,null,e);return r.staticCount=s,r}function M(e="",s=!1){return s?(b(),Fu(ls,null,e)):Dt(ls,null,e)}function Pt(e){return e==null||typeof e=="boolean"?Dt(ls):Y(e)?Dt(X,null,e.slice()):Co(e)?jt(e):Dt(Xa,null,String(e))}function jt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Os(e)}function nr(e,s){let r=0;const{shapeFlag:o}=e;if(s==null)s=null;else if(Y(s))r=16;else if(typeof s=="object")if(o&65){const c=s.default;c&&(c._c&&(c._d=!1),nr(e,c()),c._c&&(c._d=!0));return}else{r=32;const c=s._;!c&&!vo(s)?s._ctx=ct:c===3&&ct&&(ct.slots._===1?s._=1:(s._=2,e.patchFlag|=1024))}else Q(s)?(s={default:s,_ctx:ct},r=32):(s=String(s),o&64?(r=16,s=[pe(s)]):r=8);e.children=s,e.shapeFlag|=r}function Uu(...e){const s={};for(let r=0;r<e.length;r++){const o=e[r];for(const c in o)if(c==="class")s.class!==o.class&&(s.class=ce([s.class,o.class]));else if(c==="style")s.style=oa([s.style,o.style]);else if(Ua(c)){const u=s[c],t=o[c];t&&u!==t&&!(Y(u)&&u.includes(t))&&(s[c]=u?[].concat(u,t):t)}else c!==""&&(s[c]=o[c])}return s}function St(e,s,r,o=null){It(e,s,7,[r,o])}const Bu=po();let Vu=0;function Wu(e,s,r){const o=e.type,c=(s?s.appContext:e.appContext)||Bu,u={uid:Vu++,vnode:e,type:o,parent:s,appContext:c,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new pc(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:s?s.provides:Object.create(c.provides),ids:s?s.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:So(o,c),emitsOptions:go(o,c),emit:null,emitted:null,propsDefaults:Ae,inheritAttrs:o.inheritAttrs,ctx:Ae,data:Ae,props:Ae,attrs:Ae,slots:Ae,refs:Ae,setupState:Ae,setupContext:null,suspense:r,suspenseId:r?r.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return u.ctx={_:u},u.root=s?s.root:u,u.emit=Su.bind(null,u),e.ce&&e.ce(u),u}let ze=null;const Hu=()=>ze||ct;let ja,jn;{const e=Wa(),s=(r,o)=>{let c;return(c=e[r])||(c=e[r]=[]),c.push(o),u=>{c.length>1?c.forEach(t=>t(u)):c[0](u)}};ja=s("__VUE_INSTANCE_SETTERS__",r=>ze=r),jn=s("__VUE_SSR_SETTERS__",r=>fa=r)}const ma=e=>{const s=ze;return ja(e),e.scope.on(),()=>{e.scope.off(),ja(s)}},tl=()=>{ze&&ze.scope.off(),ja(null)};function Ro(e){return e.vnode.shapeFlag&4}let fa=!1;function Ku(e,s=!1,r=!1){s&&jn(s);const{props:o,children:c}=e.vnode,u=Ro(e);Du(e,o,u,s),ku(e,c,r||s);const t=u?zu(e,s):void 0;return s&&jn(!1),t}function zu(e,s){const r=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,du);const{setup:o}=r;if(o){Wt();const c=e.setupContext=o.length>1?qu(e):null,u=ma(e),t=ha(o,e,0,[e.props,c]),f=Il(t);if(Ht(),u(),(f||e.sp)&&!na(e)&&no(e),f){if(t.then(tl,tl),s)return t.then(g=>{sl(e,g)}).catch(g=>{za(g,e,0)});e.asyncDep=t}else sl(e,t)}else No(e)}function sl(e,s,r){Q(s)?e.type.__ssrInlineRender?e.ssrRender=s:e.render=s:_e(s)&&(e.setupState=Xl(s)),No(e)}function No(e,s,r){const o=e.type;e.render||(e.render=o.render||Tt);{const c=ma(e);Wt();try{fu(e)}finally{Ht(),c()}}}const Ju={get(e,s){return je(e,"get",""),e[s]}};function qu(e){const s=r=>{e.exposed=r||{}};return{attrs:new Proxy(e.attrs,Ju),slots:e.slots,emit:e.emit,expose:s}}function Ya(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Xl(Mc(e.exposed)),{get(s,r){if(r in s)return s[r];if(r in ra)return ra[r](e)},has(s,r){return r in s||r in ra}})):e.proxy}function Xu(e){return Q(e)&&"__vccOpts"in e}const q=(e,s)=>jc(e,s,fa),Yu="3.5.30";let Un;const al=typeof window<"u"&&window.trustedTypes;if(al)try{Un=al.createPolicy("vue",{createHTML:e=>e})}catch{}const Eo=Un?e=>Un.createHTML(e):e=>e,Qu="http://www.w3.org/2000/svg",Zu="http://www.w3.org/1998/Math/MathML",Gt=typeof document<"u"?document:null,nl=Gt&&Gt.createElement("template"),ed={insert:(e,s,r)=>{s.insertBefore(e,r||null)},remove:e=>{const s=e.parentNode;s&&s.removeChild(e)},createElement:(e,s,r,o)=>{const c=s==="svg"?Gt.createElementNS(Qu,e):s==="mathml"?Gt.createElementNS(Zu,e):r?Gt.createElement(e,{is:r}):Gt.createElement(e);return e==="select"&&o&&o.multiple!=null&&c.setAttribute("multiple",o.multiple),c},createText:e=>Gt.createTextNode(e),createComment:e=>Gt.createComment(e),setText:(e,s)=>{e.nodeValue=s},setElementText:(e,s)=>{e.textContent=s},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Gt.querySelector(e),setScopeId(e,s){e.setAttribute(s,"")},insertStaticContent(e,s,r,o,c,u){const t=r?r.previousSibling:s.lastChild;if(c&&(c===u||c.nextSibling))for(;s.insertBefore(c.cloneNode(!0),r),!(c===u||!(c=c.nextSibling)););else{nl.innerHTML=Eo(o==="svg"?`<svg>${e}</svg>`:o==="mathml"?`<math>${e}</math>`:e);const f=nl.content;if(o==="svg"||o==="mathml"){const g=f.firstChild;for(;g.firstChild;)f.appendChild(g.firstChild);f.removeChild(g)}s.insertBefore(f,r)}return[t?t.nextSibling:s.firstChild,r?r.previousSibling:s.lastChild]}},td=Symbol("_vtc");function sd(e,s,r){const o=e[td];o&&(s=(s?[s,...o]:[...o]).join(" ")),s==null?e.removeAttribute("class"):r?e.setAttribute("class",s):e.className=s}const rl=Symbol("_vod"),ad=Symbol("_vsh"),nd=Symbol(""),rd=/(?:^|;)\s*display\s*:/;function ld(e,s,r){const o=e.style,c=Oe(r);let u=!1;if(r&&!c){if(s)if(Oe(s))for(const t of s.split(";")){const f=t.slice(0,t.indexOf(":")).trim();r[f]==null&&Ma(o,f,"")}else for(const t in s)r[t]==null&&Ma(o,t,"");for(const t in r)t==="display"&&(u=!0),Ma(o,t,r[t])}else if(c){if(s!==r){const t=o[nd];t&&(r+=";"+t),o.cssText=r,u=rd.test(r)}}else s&&e.removeAttribute("style");rl in e&&(e[rl]=u?o.display:"",e[ad]&&(o.display="none"))}const ll=/\s*!important$/;function Ma(e,s,r){if(Y(r))r.forEach(o=>Ma(e,s,o));else if(r==null&&(r=""),s.startsWith("--"))e.setProperty(s,r);else{const o=od(e,s);ll.test(r)?e.setProperty(os(o),r.replace(ll,""),"important"):e[o]=r}}const ol=["Webkit","Moz","ms"],In={};function od(e,s){const r=In[s];if(r)return r;let o=pt(s);if(o!=="filter"&&o in e)return In[s]=o;o=Rl(o);for(let c=0;c<ol.length;c++){const u=ol[c]+o;if(u in e)return In[s]=u}return s}const il="http://www.w3.org/1999/xlink";function cl(e,s,r,o,c,u=dc(s)){o&&s.startsWith("xlink:")?r==null?e.removeAttributeNS(il,s.slice(6,s.length)):e.setAttributeNS(il,s,r):r==null||u&&!El(r)?e.removeAttribute(s):e.setAttribute(s,u?"":xt(r)?String(r):r)}function ul(e,s,r,o,c){if(s==="innerHTML"||s==="textContent"){r!=null&&(e[s]=s==="innerHTML"?Eo(r):r);return}const u=e.tagName;if(s==="value"&&u!=="PROGRESS"&&!u.includes("-")){const f=u==="OPTION"?e.getAttribute("value")||"":e.value,g=r==null?e.type==="checkbox"?"on":"":String(r);(f!==g||!("_value"in e))&&(e.value=g),r==null&&e.removeAttribute(s),e._value=r;return}let t=!1;if(r===""||r==null){const f=typeof e[s];f==="boolean"?r=El(r):r==null&&f==="string"?(r="",t=!0):f==="number"&&(r=0,t=!0)}try{e[s]=r}catch{}t&&e.removeAttribute(c||s)}function rs(e,s,r,o){e.addEventListener(s,r,o)}function id(e,s,r,o){e.removeEventListener(s,r,o)}const dl=Symbol("_vei");function cd(e,s,r,o,c=null){const u=e[dl]||(e[dl]={}),t=u[s];if(o&&t)t.value=o;else{const[f,g]=ud(s);if(o){const w=u[s]=pd(o,c);rs(e,f,w,g)}else t&&(id(e,f,t,g),u[s]=void 0)}}const fl=/(?:Once|Passive|Capture)$/;function ud(e){let s;if(fl.test(e)){s={};let o;for(;o=e.match(fl);)e=e.slice(0,e.length-o[0].length),s[o[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):os(e.slice(2)),s]}let Cn=0;const dd=Promise.resolve(),fd=()=>Cn||(dd.then(()=>Cn=0),Cn=Date.now());function pd(e,s){const r=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=r.attached)return;It(gd(o,r.value),s,5,[o])};return r.value=e,r.attached=fd(),r}function gd(e,s){if(Y(s)){const r=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{r.call(e),e._stopped=!0},s.map(o=>c=>!c._stopped&&o&&o(c))}else return s}const pl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,hd=(e,s,r,o,c,u)=>{const t=c==="svg";s==="class"?sd(e,o,t):s==="style"?ld(e,r,o):Ua(s)?Vn(s)||cd(e,s,r,o,u):(s[0]==="."?(s=s.slice(1),!0):s[0]==="^"?(s=s.slice(1),!1):md(e,s,o,t))?(ul(e,s,o),!e.tagName.includes("-")&&(s==="value"||s==="checked"||s==="selected")&&cl(e,s,o,t,u,s!=="value")):e._isVueCE&&(bd(e,s)||e._def.__asyncLoader&&(/[A-Z]/.test(s)||!Oe(o)))?ul(e,pt(s),o,u,s):(s==="true-value"?e._trueValue=o:s==="false-value"&&(e._falseValue=o),cl(e,s,o,t))};function md(e,s,r,o){if(o)return!!(s==="innerHTML"||s==="textContent"||s in e&&pl(s)&&Q(r));if(s==="spellcheck"||s==="draggable"||s==="translate"||s==="autocorrect"||s==="sandbox"&&e.tagName==="IFRAME"||s==="form"||s==="list"&&e.tagName==="INPUT"||s==="type"&&e.tagName==="TEXTAREA")return!1;if(s==="width"||s==="height"){const c=e.tagName;if(c==="IMG"||c==="VIDEO"||c==="CANVAS"||c==="SOURCE")return!1}return pl(s)&&Oe(r)?!1:s in e}function bd(e,s){const r=e._def.props;if(!r)return!1;const o=pt(s);return Array.isArray(r)?r.some(c=>pt(c)===o):Object.keys(r).some(c=>pt(c)===o)}const $s=e=>{const s=e.props["onUpdate:modelValue"]||!1;return Y(s)?r=>ka(s,r):s};function vd(e){e.target.composing=!0}function gl(e){const s=e.target;s.composing&&(s.composing=!1,s.dispatchEvent(new Event("input")))}const Vt=Symbol("_assign");function hl(e,s,r){return s&&(e=e.trim()),r&&(e=Va(e)),e}const Ee={created(e,{modifiers:{lazy:s,trim:r,number:o}},c){e[Vt]=$s(c);const u=o||c.props&&c.props.type==="number";rs(e,s?"change":"input",t=>{t.target.composing||e[Vt](hl(e.value,r,u))}),(r||u)&&rs(e,"change",()=>{e.value=hl(e.value,r,u)}),s||(rs(e,"compositionstart",vd),rs(e,"compositionend",gl),rs(e,"change",gl))},mounted(e,{value:s}){e.value=s??""},beforeUpdate(e,{value:s,oldValue:r,modifiers:{lazy:o,trim:c,number:u}},t){if(e[Vt]=$s(t),e.composing)return;const f=(u||e.type==="number")&&!/^0\d/.test(e.value)?Va(e.value):e.value,g=s??"";f!==g&&(document.activeElement===e&&e.type!=="range"&&(o&&s===r||c&&e.value.trim()===g)||(e.value=g))}},kn={deep:!0,created(e,s,r){e[Vt]=$s(r),rs(e,"change",()=>{const o=e._modelValue,c=pa(e),u=e.checked,t=e[Vt];if(Y(o)){const f=Kn(o,c),g=f!==-1;if(u&&!g)t(o.concat(c));else if(!u&&g){const w=[...o];w.splice(f,1),t(w)}}else if(Ls(o)){const f=new Set(o);u?f.add(c):f.delete(c),t(f)}else t(Mo(e,u))})},mounted:ml,beforeUpdate(e,s,r){e[Vt]=$s(r),ml(e,s,r)}};function ml(e,{value:s,oldValue:r},o){e._modelValue=s;let c;if(Y(s))c=Kn(s,o.props.value)>-1;else if(Ls(s))c=s.has(o.props.value);else{if(s===r)return;c=Fs(s,Mo(e,!0))}e.checked!==c&&(e.checked=c)}const Ss={deep:!0,created(e,{value:s,modifiers:{number:r}},o){const c=Ls(s);rs(e,"change",()=>{const u=Array.prototype.filter.call(e.options,t=>t.selected).map(t=>r?Va(pa(t)):pa(t));e[Vt](e.multiple?c?new Set(u):u:u[0]),e._assigning=!0,sa(()=>{e._assigning=!1})}),e[Vt]=$s(o)},mounted(e,{value:s}){bl(e,s)},beforeUpdate(e,s,r){e[Vt]=$s(r)},updated(e,{value:s}){e._assigning||bl(e,s)}};function bl(e,s){const r=e.multiple,o=Y(s);if(!(r&&!o&&!Ls(s))){for(let c=0,u=e.options.length;c<u;c++){const t=e.options[c],f=pa(t);if(r)if(o){const g=typeof f;g==="string"||g==="number"?t.selected=s.some(w=>String(w)===String(f)):t.selected=Kn(s,f)>-1}else t.selected=s.has(f);else if(Fs(pa(t),s)){e.selectedIndex!==c&&(e.selectedIndex=c);return}}!r&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function pa(e){return"_value"in e?e._value:e.value}function Mo(e,s){const r=s?"_trueValue":"_falseValue";return r in e?e[r]:s}const yd=["ctrl","shift","alt","meta"],Sd={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,s)=>yd.some(r=>e[`${r}Key`]&&!s.includes(r))},Ft=(e,s)=>{if(!e)return e;const r=e._withMods||(e._withMods={}),o=s.join(".");return r[o]||(r[o]=((c,...u)=>{for(let t=0;t<s.length;t++){const f=Sd[s[t]];if(f&&f(c,s))return}return e(c,...u)}))},_d={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},wd=(e,s)=>{const r=e._withKeys||(e._withKeys={}),o=s.join(".");return r[o]||(r[o]=(c=>{if(!("key"in c))return;const u=os(c.key);if(s.some(t=>t===u||_d[t]===u))return e(c)}))},Pd=Be({patchProp:hd},ed);let vl;function Ad(){return vl||(vl=Nu(Pd))}const Td=((...e)=>{const s=Ad().createApp(...e),{mount:r}=s;return s.mount=o=>{const c=xd(o);if(!c)return;const u=s._component;!Q(u)&&!u.render&&!u.template&&(u.template=c.innerHTML),c.nodeType===1&&(c.textContent="");const t=r(c,!1,Dd(c));return c instanceof Element&&(c.removeAttribute("v-cloak"),c.setAttribute("data-v-app","")),t},s});function Dd(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function xd(e){return Oe(e)?document.querySelector(e):e}const Id="modulepreload",Cd=function(e){return"/knxUltimateAI/sidebar/page/"+e},yl={},kd=function(s,r,o){let c=Promise.resolve();if(r&&r.length>0){let g=function(w){return Promise.all(w.map(y=>Promise.resolve(y).then(A=>({status:"fulfilled",value:A}),A=>({status:"rejected",reason:A}))))};document.getElementsByTagName("link");const t=document.querySelector("meta[property=csp-nonce]"),f=t?.nonce||t?.getAttribute("nonce");c=g(r.map(w=>{if(w=Cd(w),w in yl)return;yl[w]=!0;const y=w.endsWith(".css"),A=y?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${w}"]${A}`))return;const O=document.createElement("link");if(O.rel=y?"stylesheet":Id,y||(O.as="script"),O.crossOrigin="",O.href=w,f&&O.setAttribute("nonce",f),document.head.appendChild(O),y)return new Promise((F,Z)=>{O.addEventListener("load",F),O.addEventListener("error",()=>Z(new Error(`Unable to preload CSS for ${w}`)))})}))}function u(t){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=t,window.dispatchEvent(f),!f.defaultPrevented)throw t}return c.then(t=>{for(const f of t||[])f.status==="rejected"&&u(f.reason);return s().catch(u)})},Rd=(e,s)=>{const r=e.__vccOpts||e;for(const[o,c]of s)r[o]=c;return r},Nd={class:"m-header"},Ed=["aria-expanded"],Md={class:"app-sidebar"},Od={id:"knx-ai-sidebar",class:"sidebar-brand-wrap"},$d=["aria-expanded"],Ld={class:"sidebar-collapse-icon"},Fd={class:"sidebar-nav"},Gd=["disabled"],jd={key:0,class:"sidebar-panel sidebar-actions"},Ud=["disabled"],Bd={key:1,class:"sidebar-footer"},Vd={key:0,class:"status-detail"},Wd={class:"workspace-shell"},Hd={class:"content-grid workspace-main"},Kd={key:0,class:"card card-summary"},zd={class:"card-head"},Jd={key:0,class:"meta-chip"},qd={class:"summary-pre"},Xd={class:"metric-grid"},Yd={class:"metric"},Qd={class:"metric"},Zd={class:"metric"},ef={class:"metric"},tf={key:1,class:"card card-areas"},sf={class:"card-head"},af={class:"card-head-actions"},nf={class:"meta-chip"},rf=["disabled"],lf={class:"areas-toolbar"},of={class:"pill-row"},cf={class:"pill neutral"},uf={class:"pill neutral"},df={class:"pill neutral"},ff={class:"pill neutral"},pf={key:0,class:"areas-layout"},gf={key:0,class:"area-listbox-shell"},hf={class:"flow-field"},mf={class:"area-search-select"},bf=["placeholder"],vf={key:0,class:"area-search-select-menu"},yf=["onMousedown"],Sf={class:"area-editor"},_f={key:0,class:"card-head"},wf={class:"card-head-actions action-cluster"},Pf=["disabled"],Af=["disabled"],Tf=["disabled"],Df=["disabled"],xf={key:1,class:"area-editor-grid"},If={class:"flow-field"},Cf={class:"flow-field area-editor-span"},kf={class:"flow-field area-editor-span"},Rf={key:2,class:"ai-planner-shell area-llm-shell"},Nf={key:0,class:"card-head-actions action-cluster"},Ef={class:"area-editor-grid"},Mf={class:"flow-field area-editor-span"},Of={class:"profile-runbar"},$f=["disabled"],Lf={key:0,class:"planner-error-banner"},Ff={key:1,class:"area-detail-subhead"},Gf={key:3,class:"area-ga-editor"},jf={key:0,class:"simple-list simple-list-mono area-ga-list"},Uf={class:"area-ga-main"},Bf={key:0},Vf={key:0},Wf={class:"area-ga-actions"},Hf={class:"flow-field area-ga-role-field"},Kf=["value","disabled","onChange"],zf=["value"],Jf=["onClick"],qf={key:1,class:"empty-state"},Xf={class:"card-head"},Yf={class:"meta-chip"},Qf={class:"area-ga-catalog"},Zf=["onClick"],ep={class:"area-list-title"},tp={class:"area-list-meta"},sp={class:"area-list-tags"},ap={key:0},np={key:4,class:"area-editor-note"},rp={key:1,class:"empty-state"},lp={class:"card-head"},op={class:"area-detail-subhead"},ip={key:0,class:"card-head-actions"},cp={class:"meta-chip"},up={class:"meta-chip"},dp=["disabled"],fp={key:1,class:"card-head-actions"},pp={class:"meta-chip"},gp=["disabled"],hp={class:"profile-editor-stack"},mp={key:0,class:"area-detail planner-sidecard"},bp={class:"area-listbox-shell"},vp={class:"flow-field"},yp={class:"area-search-select"},Sp=["placeholder"],_p={key:0,class:"area-search-select-menu"},wp=["onMousedown"],Pp={key:0,class:"empty-state"},Ap={key:1,class:"area-detail"},Tp={key:0,class:"card-head"},Dp={key:0,class:"area-detail-subhead"},xp={class:"card-head-actions action-cluster"},Ip={key:0,class:"meta-chip"},Cp={class:"checkbox flow-toggle compact-toggle"},kp=["disabled"],Rp=["disabled"],Np=["disabled"],Ep={key:2,class:"plan-run-actions"},Mp=["disabled"],Op=["disabled"],$p={key:1,class:"ai-planner-shell"},Lp={key:0,class:"card-head-actions action-cluster"},Fp={class:"area-editor-grid"},Gp={class:"flow-field"},jp=["value"],Up={class:"flow-field area-editor-span"},Bp=["value"],Vp={class:"preset-row compact-preset-row"},Wp=["onClick"],Hp={class:"area-detail-subhead"},Kp={class:"profile-runbar"},zp=["disabled"],Jp={key:0,class:"planner-error-banner"},qp={key:1,class:"planner-generation"},Xp={key:0,class:"area-detail-subhead"},Yp={key:1,class:"area-detail-subhead"},Qp={key:2,class:"area-detail planner-run-focus"},Zp={class:"card-head"},eg={class:"area-detail-subhead"},tg={class:"meta-chip"},sg={class:"metric-grid area-metrics"},ag={class:"metric"},ng={class:"metric"},rg={class:"metric"},lg={class:"metric"},og={key:0,class:"report-check report-pass planner-step-card planner-step-running"},ig={class:"anomaly-head"},cg={class:"area-detail-subhead"},ug={key:0,class:"planner-step-grid"},dg={key:1,class:"planner-step-grid"},fg={key:2,class:"planner-check-sections"},pg={class:"planner-check-section"},gg={class:"planner-step-grid compact-grid"},hg={class:"planner-check-section"},mg={class:"planner-step-grid compact-grid"},bg={class:"card-head"},vg={class:"area-detail-subhead"},yg={class:"card-head-actions action-cluster"},Sg={class:"meta-chip"},_g={key:0,class:"meta-chip"},wg={class:"meta-chip"},Pg={class:"metric-grid area-metrics"},Ag={class:"report-checks"},Tg={class:"anomaly-head"},Dg={class:"area-detail-subhead"},xg={key:0,class:"planner-check-sections result-check-sections"},Ig={class:"planner-step-grid compact-grid"},Cg={key:1,class:"planner-step-grid"},kg={key:0,class:"empty-state"},Rg={key:1},Ng={class:"simple-list"},Eg={key:4,class:"area-detail plan-draft-shell"},Mg={class:"card-head"},Og={class:"card-head-actions action-cluster"},$g={class:"meta-chip"},Lg={class:"area-editor-grid"},Fg={class:"flow-field"},Gg=["value","disabled"],jg=["value"],Ug={class:"flow-field"},Bg={class:"flow-field area-editor-span"},Vg={class:"report-checks plan-steps-stack"},Wg=["onDragenter","onDrop"],Hg={class:"anomaly-head"},Kg={class:"planner-step-title"},zg=["onDragstart"],Jg=["aria-expanded","title","onClick"],qg={class:"card-head-actions action-cluster compact-actions"},Xg=["onClick"],Yg=["onClick"],Qg={key:0,class:"planner-step-summary"},Zg={key:0},eh={key:1},th={key:2},sh={key:3},ah={key:4},nh={key:5},rh={key:1,class:"planner-step-editor"},lh={class:"flow-field"},oh=["onUpdate:modelValue"],ih={class:"flow-field area-editor-span"},ch=["onUpdate:modelValue"],uh={key:0,class:"flow-field"},dh=["onUpdate:modelValue"],fh={key:1,class:"planner-field-group area-editor-span"},ph={class:"planner-field-group-grid"},gh={class:"flow-field"},hh=["onUpdate:modelValue","onChange"],mh=["value"],bh={class:"flow-field"},vh=["onUpdate:modelValue","onChange"],yh={class:"flow-field group-span"},Sh=["onUpdate:modelValue"],_h=["value"],wh=["onUpdate:modelValue"],Ph={key:2,class:"planner-field-group area-editor-span"},Ah={class:"planner-field-group-grid"},Th={class:"flow-field group-span"},Dh=["onUpdate:modelValue","onChange"],xh=["value"],Ih={class:"flow-field"},Ch=["onUpdate:modelValue","onChange"],kh={class:"flow-field"},Rh=["onUpdate:modelValue"],Nh=["value"],Eh=["onUpdate:modelValue"],Mh={key:3,class:"planner-check-sections editor-check-sections area-editor-span"},Oh={class:"planner-check-section"},$h={class:"flow-field"},Lh=["onUpdate:modelValue"],Fh={class:"planner-check-section"},Gh={class:"flow-field"},jh=["onUpdate:modelValue"],Uh={class:"flow-field area-editor-span"},Bh=["onUpdate:modelValue"],Vh={key:3,class:"card card-profiles"},Wh={class:"card-head"},Hh={class:"card-head-actions"},Kh={class:"meta-chip"},zh={class:"profiles-layout results-page-layout"},Jh={class:"area-detail planner-sidecard"},qh={class:"sidebar-results-list results-page-list"},Xh=["onClick"],Yh={class:"sidebar-result-head"},Qh={class:"sidebar-result-title"},Zh={key:0,class:"running-spinner","aria-hidden":"true"},em={class:"area-list-meta"},tm={key:0},sm={class:"area-list-tags"},am={class:"area-list-tags"},nm=["disabled","onClick"],rm={key:0,class:"empty-state sidebar-empty-state"},lm={class:"card-head"},om={class:"area-detail-subhead"},im={class:"card-head-actions action-cluster"},cm={class:"meta-chip"},um={key:0,class:"meta-chip"},dm={class:"meta-chip"},fm=["disabled"],pm={class:"metric-grid area-metrics"},gm={class:"report-checks"},hm={class:"anomaly-head"},mm={class:"area-detail-subhead"},bm={key:0,class:"planner-check-sections result-check-sections"},vm={class:"planner-step-grid compact-grid"},ym={key:1,class:"planner-step-grid"},Sm={key:0,class:"empty-state"},_m={key:1},wm={class:"simple-list"},Pm={key:1,class:"area-detail"},Am={key:4,class:"card"},Tm={class:"card-head"},Dm={class:"meta-chip"},xm={key:0,class:"rank-list"},Im={class:"rank-title"},Cm={class:"rank-label"},km={key:1,class:"empty-state"},Rm={key:5,class:"card"},Nm={class:"card-head"},Em={class:"meta-chip"},Mm={key:0,class:"event-list"},Om={class:"event-name"},$m={class:"event-bar"},Lm={key:1,class:"empty-state"},Fm={key:6,class:"card card-bus"},Gm={class:"card-head"},jm={key:0,class:"meta-chip"},Um={class:"pill-row"},Bm={class:"pill success"},Vm={class:"pill danger"},Wm={class:"pill neutral"},Hm={class:"bus-track"},Km=["title"],zm={class:"bus-scale"},Jm={key:1,class:"empty-state"},qm={class:"card-head"},Xm={class:"card-head-actions"},Ym={class:"meta-chip"},Qm={class:"flow-toolbar"},Zm={class:"flow-field"},eb={class:"flow-field flow-field-search"},tb={class:"flow-field flow-field-select"},sb=["value"],ab={class:"checkbox flow-toggle flow-toggle-inline"},nb={class:"flow-frame"},rb=["viewBox"],lb=["id"],ob=["fill"],ib=["d","stroke","stroke-width","opacity","marker-end"],cb=["cx","cy"],ub=["x","y"],db=["x","y"],fb=["x","y"],pb=["x","y"],gb={key:1,class:"empty-state flow-empty"},hb={class:"flow-note"},mb={key:8,class:"card card-anomalies"},bb={class:"card-head"},vb={class:"meta-chip"},yb={key:0,class:"anomaly-list"},Sb={class:"anomaly-head"},_b={class:"anomaly-time"},wb={key:1,class:"empty-state"},Pb={key:9,class:"card card-chat"},Ab={class:"card-head"},Tb={class:"meta-chip"},Db={class:"preset-row"},xb=["disabled","onClick"],Ib={class:"ask-row"},Cb=["disabled"],kb=["disabled"],Rb={class:"chat-log"},Nb=["innerHTML"],Eb={key:1},Mb={key:0,class:"chat-message chat-pending"},Ob={key:1,class:"empty-state"},$b={key:10,class:"card card-settings"},Lb={class:"settings-tab-strip"},Fb={key:0,class:"area-detail settings-panel"},Gb={class:"settings-node-grid"},jb={class:"flow-field"},Ub=["value"],Bb={class:"checkbox settings-node-checkbox"},Vb={key:1,class:"area-detail settings-panel"},Wb={class:"card-head-actions action-cluster settings-config-actions"},Hb=["disabled"],Kb=["disabled"],zb={class:"area-detail-subhead"},Jb={class:"modal-actions"},qb=["disabled"],Xb={class:"area-detail-subhead"},Yb={class:"modal-actions"},Qb=["disabled"],Sl="knxUltimateAI:selectedNodeId",_l="knxUltimateAI:autoRefresh",wl="knxUltimateAI:activeTab",Pl="knxUltimateAI:settingsTab",Al="knxUltimateAI:flowPreview",Tl="knxUltimateAI:voiceEnabled",Dl="knxUltimateAI:sidebarExpanded",Zb="knxUltimateAI:selectedTestAreaId:",ev="https://supergiovane.github.io/node-red-contrib-knx-ultimate/wiki/knxUltimateAI-vue",tv={__name:"App",setup(e){const s=["Summarize the current KNX traffic and highlight the busiest group addresses.","Explain any anomalies you see and suggest what to check first.","Generate an SVG bar chart of Top Group Addresses with counts and title."],r=[{id:"lights_on_off",title:"Lights on, then off",prompt:"Turn the lights on, then turn them off, and verify that the related status values are coherent.",description:"Applies to all matching lighting command GA in the selected area."},{id:"area_activate",title:"Activate main actuators",prompt:"Activate the main actuators in the area and verify the status feedback to confirm that it follows the commands.",description:"Builds a deterministic active test using the supported command GA in the selected area."},{id:"shading_open_close",title:"Open and close shading",prompt:"Open and close the shading actuators in the area, then verify that the status matches the commands sent.",description:"Targets supported shading command GA in the selected area."},{id:"hvac_check",title:"HVAC active check",prompt:"Run a full test of the HVAC commands in the area and verify that setpoints and statuses are coherent.",description:"Targets supported HVAC command GA in the selected area."}],o=[{value:"command",label:"Command"},{value:"status",label:"Status"},{value:"neutral",label:"Don't use in tests"}],c={write:"#ff9800",response:"#46b86d",read:"#d99a34",repeat:"#c34747",other:"#8d8578"},u=(()=>{try{return new URLSearchParams(window.location.search).get("nodeId")||""}catch{return""}})(),t=Ka({nodes:[],selectedNodeId:"",activeTab:ge(wl,"overview"),settingsTab:ge(Pl,"config"),autoRefresh:z(_l,!0),voiceEnabled:z(Tl,!0),flowMaxNodes:Ce().maxNodes,flowSelectedGa:Ce().selectedGa,flowShowUniversalNodes:Ce().showUniversalNodes,flowSearch:"",areaSearch:"",areaSearchOpen:!1,areaSelectedId:"",testAreaSelectedId:"",areaDraftName:"",areaDraftDescription:"",areaDraftTags:"",areaDraftGaList:[],areaDraftId:"",areaDraftIsNew:!1,areaLlmPrompt:"",areaLlmBusy:!1,areaLlmError:"",areaLlmRegenerating:!1,gaCatalog:[],gaCatalogSearch:"",gaCatalogLoading:!1,areaGaRoleSavingGa:"",areaSaving:!1,profileSelectedId:"",profileDraftMode:!1,profileDraftId:"",profileDraftName:"",profileDraftDescription:"",profileDraftTargetTags:"",profileDraftMinActivityPct:20,profileDraftMaxSilentPct:60,profileDraftMaxAnomalies:2,profileSaving:!1,profileRunning:!1,actuatorPresetSelectedId:"",actuatorDraftMode:!1,actuatorDraftId:"",actuatorDraftName:"",actuatorDraftDescription:"",actuatorDraftCommandGA:"",actuatorDraftCommandDPT:"",actuatorDraftCommandPayload:"",actuatorDraftStatusGA:"",actuatorDraftStatusDPT:"",actuatorDraftStatusWriteTimeoutMs:5e3,actuatorDraftStatusResponseTimeoutMs:5e3,actuatorSaving:!1,actuatorRunning:!1,testPlanSelectedId:"",testPlanSearch:"",testPlanSearchOpen:!1,selectedTestResultId:"",liveTestResultId:"",testResultsMenuOpen:!0,testResultFocusMode:!1,deletingTestResultId:"",testPlanPrompt:"",testPlanDraft:null,testPlanCatalog:null,testPlanCatalogLoading:!1,testPlanCatalogError:"",testPlanGenerating:!1,testPlanSaving:!1,testPlanDeleting:!1,testPlanRunning:!1,testPlanGeneration:null,testPlanGenerationError:"",testPlanRunConfirmOpen:!1,testPlanRunMode:"single",testPlanRunningStepId:"",testPlanRepeatForever:!1,testPlanRepeatStopRequested:!1,testPlanDraftBaseline:"",testPlanUnsavedConfirmOpen:!1,areaUnsavedConfirmOpen:!1,testPlanPendingActionLabel:"",draggedTestPlanStepId:"",dragOverTestPlanStepId:"",showAiPlanner:!0,testTemplateBuilderFocus:!1,showAiAreaBuilder:!1,areaBuilderFocus:!1,status:"Ready",loadingNodes:!1,loadingState:!1,asking:!1,stateData:null,lastError:"",chatMessages:[],chatDraft:"",pollStateHandle:null,pollNodesHandle:null}),f=ms(null),g=ms(!1),w=ms(null),y=ms(null),A=ms(z(Dl,!0)),O=ms(!1),F=ms(!1),Z=q(()=>F.value?O.value:A.value);let K=null,xe=null,Se=null;function ae(){if(K){try{K.pause(),K.src=""}catch{}K=null}}function ge(n,a=""){try{return window.localStorage&&window.localStorage.getItem(n)||a}catch{return a}}function z(n,a){try{if(!window.localStorage)return a;const l=window.localStorage.getItem(n);return l==null||l===""?a:l==="true"}catch{return a}}function Ce(){try{if(!window.localStorage)return{maxNodes:14,selectedGa:[],showUniversalNodes:!1};const n=window.localStorage.getItem(Al);if(!n)return{maxNodes:14,selectedGa:[],showUniversalNodes:!1};const a=JSON.parse(n),l=Math.max(4,Math.min(32,Number(a&&a.maxNodes)||14)),d=Array.isArray(a&&a.selectedGa)?Array.from(new Set(a.selectedGa.map(I=>String(I||"").trim()).filter(Boolean))).slice(0,80):[],h=a&&a.showUniversalNodes===!0;return{maxNodes:l,selectedGa:d,showUniversalNodes:h}}catch{return{maxNodes:14,selectedGa:[],showUniversalNodes:!1}}}function Qe(n,a){try{window.localStorage&&window.localStorage.setItem(n,String(a??""))}catch{}}function Je(n,a){try{window.localStorage&&window.localStorage.setItem(n,a?"true":"false")}catch{}}function at(){try{F.value=window.matchMedia("(max-width: 1100px)").matches}catch{F.value=window.innerWidth<=1100}F.value||(O.value=!1)}function is(){if(F.value){O.value=O.value!==!0;return}A.value=A.value!==!0}function dt(){F.value&&(O.value=!1)}function Jt(n){!n||n.key!=="Escape"||dt()}function cs(n){const a=String(n||"").trim();return a?`${Zb}${a}`:""}function qt(n){const a=cs(n);return a?ge(a,""):""}function Gs(n,a){const l=cs(n);if(!l)return;const d=String(a||"").trim();d&&Qe(l,d)}function us(){const n=qt(t.selectedNodeId);return!n||!Pe.value.find(a=>a.id===n)?!1:(t.testAreaSelectedId===n||(t.testAreaSelectedId=n),!0)}function $e(){try{if(!window.localStorage)return;window.localStorage.setItem(Al,JSON.stringify({maxNodes:Math.max(4,Math.min(32,Number(t.flowMaxNodes)||14)),selectedGa:Array.from(new Set((t.flowSelectedGa||[]).map(n=>String(n||"").trim()).filter(Boolean))).slice(0,80),showUniversalNodes:t.flowShowUniversalNodes===!0}))}catch{}}async function De(){const n=f.value;if(!(!n||typeof n.requestFullscreen!="function"))try{document.fullscreenElement===n?await document.exitFullscreen():document.fullscreenElement||await n.requestFullscreen()}catch{}}function ve(){g.value=document.fullscreenElement===f.value}function ye(n){return new URL(n,window.location.href).toString()}function $(n){t.status=String(n||"")}async function we(n,a){const l=await fetch(n,Object.assign({credentials:"same-origin"},a||{})),d=await l.text();let h={};try{h=d?JSON.parse(d):{}}catch{h={error:d||`HTTP ${l.status}`}}if(!l.ok){const I=h&&h.error?h.error:`HTTP ${l.status}`;throw l.status===401||l.status===403?new Error(`Authentication required or insufficient permissions (${l.status}).`):new Error(I)}return h}async function Ze(n,a){const l=await fetch(n,Object.assign({credentials:"same-origin",cache:"no-store"},a||{}));if(!l.ok){const d=await l.text();let h=d||`HTTP ${l.status}`;try{const I=d?JSON.parse(d):{};h=I&&I.error?I.error:h}catch{}throw l.status===401||l.status===403?new Error(`Authentication required or insufficient permissions (${l.status}).`):new Error(h)}return await l.blob()}function js(n){if(n==null)return"";if(typeof n=="string")return n;try{return JSON.stringify(n,null,2)}catch{return String(n)}}function Us(n){return String(n||"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Qa(n){const a=String(n||"").trim();return a.includes("-")&&/^\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/.test(a)}function Ct(n){let a=String(n||"").trim();return a.startsWith("|")&&(a=a.slice(1)),a.endsWith("|")&&(a=a.slice(0,-1)),a.split("|").map(l=>String(l||"").trim())}function As(n){return Ct(n).map(a=>{const l=String(a||"").trim(),d=l.startsWith(":"),h=l.endsWith(":");return d&&h?"center":h?"right":"left"})}function Bs(n){const a=String(n||"").split(/\r?\n/);let l="",d=!1;const h=I=>{let k=String(I||"");return k=k.replace(/`([^`]+)`/g,"<code>$1</code>"),k=k.replace(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>"),k=k.replace(/\*([^*]+)\*/g,"<em>$1</em>"),k=k.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(j,G,oe)=>`<a href="${/^javascript:/i.test(String(oe||"").trim())?"#":oe}" target="_blank" rel="noopener noreferrer">${G}</a>`),k};for(let I=0;I<a.length;I++){const k=a[I];if(/^```/.test(k.trim())){d=!d,l+=d?"<pre><code>":"</code></pre>";continue}if(d){l+=`${k}
2
- `;continue}if(/^###\s+/.test(k)){l+=`<h3>${k.replace(/^###\s+/,"")}</h3>`;continue}if(/^##\s+/.test(k)){l+=`<h2>${k.replace(/^##\s+/,"")}</h2>`;continue}if(/^#\s+/.test(k)){l+=`<h1>${k.replace(/^#\s+/,"")}</h1>`;continue}if(k.includes("|")&&I+1<a.length&&Qa(a[I+1])){const oe=Ct(k),V=As(a[I+1]),de=[];for(I+=2;I<a.length&&a[I]&&a[I].includes("|")&&!/^```/.test(a[I].trim());)de.push(Ct(a[I])),I++;I-=1;const se=Math.max(oe.length,V.length,...de.map(H=>H.length),0);l+='<div class="chat-table-wrap"><table><thead><tr>';for(let H=0;H<se;H++)l+=`<th style="text-align:${V[H]||"left"};">${h(oe[H]||"")}</th>`;l+="</tr></thead><tbody>",de.forEach(H=>{l+="<tr>";for(let ie=0;ie<se;ie++)l+=`<td style="text-align:${V[ie]||"left"};">${h(H[ie]||"")}</td>`;l+="</tr>"}),l+="</tbody></table></div>";continue}const j=/^\s*[-*]\s+/.test(k),G=/^\s*\d+\.\s+/.test(k);if(j||G){const oe=G?"ol":"ul",V=G?/^\s*\d+\.\s+/:/^\s*[-*]\s+/;for(l+=`<${oe}>`;I<a.length&&V.test(a[I]);)l+=`<li>${h(a[I].replace(V,""))}</li>`,I++;I-=1,l+=`</${oe}>`;continue}if(k.trim()===""){l+="<br>";continue}l+=`<p>${h(k)}</p>`}return d&&(l+="</code></pre>"),l}function Vs(n){return String(n||"").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&quot;/gi,'"').replace(/&#39;/gi,"'").replace(/&amp;/gi,"&")}function kt(n){const a=[],l=/<svg[\s\S]*?<\/svg>/gi;let d;for(;(d=l.exec(String(n||"")))!==null;)d&&d[0]&&a.push(String(d[0]));return a}const rr=new Set(["svg","g","path","line","polyline","polygon","circle","ellipse","rect","text","tspan","title","desc","defs","marker","lineargradient","radialgradient","stop","clippath"]),p=new Set(["xmlns","xmlns:xlink","viewbox","preserveaspectratio","width","height","role","aria-label","id","class","x","y","x1","y1","x2","y2","cx","cy","r","rx","ry","d","points","transform","fill","fill-opacity","stroke","stroke-width","stroke-opacity","stroke-dasharray","stroke-linecap","stroke-linejoin","opacity","font-size","font-family","font-weight","text-anchor","dominant-baseline","offset","stop-color","stop-opacity","gradientunits","gradienttransform","fx","fy","marker-start","marker-mid","marker-end","markerwidth","markerheight","refx","refy","orient","markerunits","href","xlink:href","clip-path","clippathunits"]);function m(n){try{const l=new window.DOMParser().parseFromString(String(n||""),"image/svg+xml");if(!l||!l.documentElement||l.getElementsByTagName("parsererror").length)return"";const d=l.documentElement;if(String(d.tagName||"").toLowerCase()!=="svg")return"";const h=k=>{const j=String(k.tagName||"").toLowerCase();if(!rr.has(j)){k.remove();return}Array.from(k.attributes||[]).forEach(G=>{const oe=String(G.name||"").toLowerCase(),V=String(G.value||"");if(oe.startsWith("on")||!p.has(oe)){k.removeAttribute(G.name);return}(oe==="href"||oe==="xlink:href")&&V&&!String(V).trim().startsWith("#")&&k.removeAttribute(G.name)}),Array.from(k.childNodes||[]).forEach(G=>{G.nodeType===1?h(G):G.nodeType!==3&&G.remove()})};h(d),!d.getAttribute("viewBox")&&!d.getAttribute("viewbox")&&d.setAttribute("viewBox","0 0 920 360"),d.setAttribute("role",d.getAttribute("role")||"img");const I=new window.XMLSerializer().serializeToString(d);return I.length>12e4?"":I}catch{return""}}function P(n){return Bs(Us(n||""))}function C(n){const a=js(n),l=a.trim();if(!l)return P("(empty answer)");const d=/```(?:svg|xml|html)?\s*([\s\S]*?)```/gi;let h="",I=0,k=!1,j;for(;(j=d.exec(a))!==null;){const oe=a.slice(I,j.index);oe.trim()&&(h+=P(oe));const V=String(j[1]||""),de=Vs(V),se=kt(de);if(se.length){let H=0;se.forEach(ie=>{const he=m(ie);he&&(H++,k=!0,h+=`<div class="chat-svg-wrap">${he}</div>`)}),H||(h+=`<pre><code>${Us(V)}</code></pre>`)}else{const H=m(de);H?(k=!0,h+=`<div class="chat-svg-wrap">${H}</div>`):h+=`<pre><code>${Us(V)}</code></pre>`}I=j.index+j[0].length}const G=a.slice(I);if(G.trim()&&(h+=P(G)),!k){const oe=Vs(a),V=Array.from(new Set([...kt(a),...kt(oe)])).map(de=>m(de)).filter(Boolean);if(V.length){const de=a.replace(/<svg[\s\S]*?<\/svg>/gi,"").replace(/&lt;svg[\s\S]*?&lt;\/svg&gt;/gi,"").trim();h=de?P(de):"",V.forEach(se=>{h+=`<div class="chat-svg-wrap">${se}</div>`})}}return h||P(l)}function D(n){const a=Math.max(0,Math.round(Number(n)||0)),l=Math.floor(a/3600),d=Math.floor(a%3600/60),h=a%60;return l?`${l}h ${d}m`:d?`${d}m ${h}s`:`${h}s`}function x(n){if(!n)return"n/a";try{return new Date(n).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return"n/a"}}function N(n){if(!n)return"";try{return new Date(n).toLocaleString()}catch{return String(n)}}function E(n){return n&&n.payload&&typeof n.payload=="object"?n.payload:{}}function R(n){return n==null?"":String(n).trim()}function T(n,a=null){try{return JSON.parse(JSON.stringify(n))}catch{return a}}function W(n=[]){return Array.from(new Set((Array.isArray(n)?n:[]).map(a=>String(a||"").trim()).filter(Boolean))).sort()}function L(n=""){return W(String(n||"").split(","))}function U(n={}){return JSON.stringify({isNew:n.isNew===!0,areaId:String(n.areaId||"").trim(),name:String(n.name||"").trim(),description:String(n.description||"").trim(),tags:W(n.tags||[]),gaList:W(n.gaList||[]),llmPrompt:String(n.llmPrompt||"").trim()})}function J(n={}){return JSON.stringify({prompt:String(n.prompt||""),draft:T(n.draft,null)})}function re(){return{selectedId:String(t.testPlanSelectedId||""),prompt:String(t.testPlanPrompt||""),draft:T(t.testPlanDraft,null),generation:T(t.testPlanGeneration,null),showAiPlanner:t.showAiPlanner===!0}}function le(){xe=re(),t.testPlanDraftBaseline=J(xe)}function ue(){const n=T(xe,null);if(!n){t.testPlanSelectedId="",t.testPlanPrompt="",t.testPlanDraft=null,t.testPlanGeneration=null,t.testPlanRunConfirmOpen=!1,t.showAiPlanner=!0;return}t.testPlanSelectedId=String(n.selectedId||""),t.testPlanPrompt=String(n.prompt||""),t.testPlanDraft=T(n.draft,null),t.testPlanGeneration=T(n.generation,null),t.testPlanRunConfirmOpen=!1,t.showAiPlanner=n.showAiPlanner!==!1,n.draft&&n.draft.areaId&&Pe.value.find(a=>a.id===n.draft.areaId)&&(t.areaSelectedId=n.draft.areaId)}function Fe(n){const a=String(n||"").trim();return a.length>14?`${a.slice(0,12)}..`:a}function Ge(n){const a=String(n||"").trim();return a?a.length>28?`${a.slice(0,26)}..`:a:""}function nt(n){const a=R(n).replace(/\s+/g," ");return a?a.length>30?`${a.slice(0,28)}..`:a:""}function rt(n){const a=String(n||"").toLowerCase();return a.includes("repeat")?"repeat":a.includes("write")?"write":a.includes("response")?"response":a.includes("read")?"read":"other"}function ds(n){const a={write:0,response:0,read:0,repeat:0,other:0};return Object.keys(n||{}).forEach(l=>{const d=Number(n[l]||0);d<=0||(a[rt(l)]+=d)}),Object.keys(a).sort((l,d)=>a[d]-a[l])[0]||"other"}function Ts(n){return!!(n&&n.kind==="node"&&n.listenAllGA)}function Ve(n){const a=n&&n.summary?n.summary:{},l=Array.isArray(n&&n.anomalies)?n.anomalies:[],d=Array.isArray(a.patternTransitions)?a.patternTransitions:[],h=Array.isArray(a.patterns)?a.patterns:[],I=a&&typeof a.gaLabels=="object"?a.gaLabels:{},k=a&&typeof a.gaLastPayload=="object"?a.gaLastPayload:{},j=a&&typeof a.gaLastSeenAt=="object"?a.gaLastSeenAt:{},G=new Set((Array.isArray(a.flowKnownGAs)?a.flowKnownGAs:[]).map(_=>String(_||"").trim()).filter(Boolean)),oe={};l.forEach(_=>{const B=String(_&&_.payload&&_.payload.ga?_.payload.ga:"BUS").trim()||"BUS";oe[B]=(oe[B]||0)+1});const V=a&&a.flowMapTopology&&typeof a.flowMapTopology=="object"?a.flowMapTopology:null,de=Array.isArray(V&&V.nodes)?V.nodes:[],se=Array.isArray(V&&V.edges)?V.edges:[],H=new Map,ie=_=>{const B=String(_&&_.from?_.from:"").trim(),ee=String(_&&_.to?_.to:"").trim();if(!B||!ee||B===ee)return;const Le=`${B}->${ee}`,We={key:Le,from:B,to:ee,weight:Math.max(1,Number(_&&(_.weight??_.currentWindowCount??_.totalCount??_.count)||1)),delta:Number(_&&_.delta?_.delta:0),edgeByEvent:_&&typeof _.edgeByEvent=="object"?_.edgeByEvent:{},lastAtMs:(()=>{const tt=Number(_&&_.lastAtMs?_.lastAtMs:0);if(Number.isFinite(tt)&&tt>0)return tt;const as=new Date(String(_&&_.lastAt?_.lastAt:"")).getTime();return Number.isFinite(as)?as:0})(),linkType:String(_&&_.linkType?_.linkType:"").trim()};if(!H.has(Le)){H.set(Le,We);return}const qe=H.get(Le);qe.weight+=We.weight,qe.delta+=We.delta,qe.lastAtMs=Math.max(Number(qe.lastAtMs||0),Number(We.lastAtMs||0)),Object.keys(We.edgeByEvent||{}).forEach(tt=>{qe.edgeByEvent[tt]=Number(qe.edgeByEvent[tt]||0)+Number(We.edgeByEvent[tt]||0)})};se.length?se.forEach(ie):d.length?d.forEach(ie):h.forEach(_=>ie({from:_&&_.from,to:_&&_.to,count:_&&_.count,edgeByEvent:{}}));const he=new Map,ss=(_,B={})=>{const ee=String(_||"").trim();return ee?(he.has(ee)||he.set(ee,{id:ee,displayId:String(B.displayId||ee).trim()||ee,kind:String(B.kind||(ee.startsWith("N:")?"node":"ga")).trim()||"ga",subtitle:String(B.subtitle||"").trim(),payload:R(B.payload),anomalyCount:Number(B.anomalyCount||oe[ee]||0),inFlow:B.inFlow!==void 0?!!B.inFlow:G.size?G.has(ee)||ee==="BUS"||ee.startsWith("N:"):!0,lastSeenAtMs:Number(B.lastSeenAtMs||0),score:Number(B.score||0),listenAllGA:B.listenAllGA===!0}),he.get(ee)):null};return de.forEach(_=>{const B=String(_&&_.id?_.id:"").trim();B&&ss(B,{displayId:_&&_.displayId,kind:_&&_.kind,subtitle:_&&_.subtitle?_.subtitle:I[B],payload:_&&_.payload!==void 0?_.payload:k[B],anomalyCount:Number(_&&_.anomalyCount?_.anomalyCount:oe[B]||0),inFlow:_&&_.inFlow!==void 0?!!_.inFlow:void 0,lastSeenAtMs:Number(_&&_.lastSeenAtMs?_.lastSeenAtMs:new Date(String(_&&_.lastAt?_.lastAt:j[B]||"")).getTime()||0),score:Number(_&&_.score?_.score:0),listenAllGA:_&&_.listenAllGA===!0})}),Array.from(H.values()).forEach(_=>{ss(_.from,{subtitle:I[_.from],payload:k[_.from],lastSeenAtMs:new Date(String(j[_.from]||"")).getTime()||_.lastAtMs||0}),ss(_.to,{subtitle:I[_.to],payload:k[_.to],lastSeenAtMs:new Date(String(j[_.to]||"")).getTime()||_.lastAtMs||0});const B=he.get(_.from),ee=he.get(_.to);B&&(B.score+=Number(_.weight||0)),ee&&(ee.score+=Number(_.weight||0))}),(Array.isArray(a.topGAs)?a.topGAs:[]).slice(0,12).forEach(_=>{const B=String(_&&_.ga?_.ga:"").trim();if(!B)return;const ee=ss(B,{subtitle:_&&_.label?_.label:I[B],payload:k[B],lastSeenAtMs:new Date(String(j[B]||"")).getTime()||0});ee&&(ee.score+=Number(_&&_.count?_.count:0))}),{nodes:Array.from(he.values()),edges:Array.from(H.values()).sort((_,B)=>Number(B.weight||0)-Number(_.weight||0)).slice(0,48),telemetryWindowSec:Number(a&&a.graph&&a.graph.windowSec?a.graph.windowSec:a?.meta?.analysisWindowSec||0)}}function lt(n){let a=Array.isArray(n&&n.nodes)?n.nodes.slice():[];const l=Array.isArray(n&&n.edges)?n.edges.slice():[];t.flowShowUniversalNodes!==!0&&(a=a.filter(_=>!Ts(_)));const d=new Set(a.map(_=>_.id)),h=new Set((t.flowSelectedGa||[]).map(_=>String(_||"").trim()).filter(_=>_&&d.has(_))),I=Math.max(4,Math.min(32,Number(t.flowMaxNodes)||14));let k=a.slice().sort((_,B)=>{const ee=Number(_.anomalyCount||0)*10+Number(_.score||0),Le=Number(B.anomalyCount||0)*10+Number(B.score||0);return Le!==ee?Le-ee:String(_.id||"").localeCompare(String(B.id||""))});if(h.size){const _=new Set(h);l.forEach(B=>{h.has(B.from)&&_.add(B.to),h.has(B.to)&&_.add(B.from)}),k=k.filter(B=>_.has(B.id))}else k=k.slice(0,I);const j=new Set(k.map(_=>_.id)),G=l.filter(_=>j.has(_.from)&&j.has(_.to)),oe=Math.max(...G.map(_=>Number(_.weight||0)),1),V=Math.max(2,Math.min(6,Math.ceil(Math.sqrt(Math.max(k.length,4)*1.5)))),de=Math.max(1,Math.ceil(k.length/V)),se=1080,H=Math.max(420,140+(de-1)*150),ie=new Map;k.forEach((_,B)=>{const ee=Math.floor(B/V),Le=B%V,We=V===1?se/2:90+Le*((se-180)/Math.max(V-1,1)),qe=92+ee*148;ie.set(_.id,{x:We,y:qe,row:ee,col:Le})});const he=Date.now(),ss=G.map((_,B)=>{const ee=ie.get(_.from),Le=ie.get(_.to);if(!ee||!Le)return null;const We=Le.x-ee.x,qe=Le.y-ee.y,tt=Math.max(Math.hypot(We,qe),1),as=We/tt,xs=qe/tt,Ie=24,yt=ee.x+as*(Ie+2),Mt=ee.y+xs*(Ie+2),Ot=Le.x-as*(Ie+8),$t=Le.y-xs*(Ie+8),Aa=-xs,Ta=as,qs=28+B%3*14,Da=B%2===0?1:-1,Sn=(yt+Ot)/2+Aa*qs*Da,tc=(Mt+$t)/2+Ta*qs*Da,Lr=ds(_.edgeByEvent),Fr=Number(_.lastAtMs||0)>0&&he-Number(_.lastAtMs||0)<=5e3;return{key:_.key,from:_.from,to:_.to,d:`M ${yt} ${Mt} Q ${Sn} ${tc} ${Ot} ${$t}`,width:(.9+Number(_.weight||0)/oe*1.7).toFixed(2),color:c[Lr]||c.other,opacity:Fr?.82:.24,markerId:`flow-arrow-${Lr}`,tooltip:`${_.from} -> ${_.to} | traffic: ${Number(_.weight||0)}${_.delta?` | delta: ${_.delta>0?"+":""}${_.delta}`:""}`,active:Fr}}).filter(Boolean);return{width:se,height:H,telemetryWindowSec:Number(n&&n.telemetryWindowSec?n.telemetryWindowSec:0),nodes:k.map(_=>{const B=ie.get(_.id),ee=Number(_.lastSeenAtMs||0);return Object.assign({},_,B,{shortLabel:Fe(_.displayId||_.id),shortSubtitle:Ge(_.subtitle),shortPayload:nt(_.payload),isIdle:ee>0&&he-ee>45e3})}),edges:ss,maxNodes:I,selectedCount:h.size}}const fs=q(()=>t.nodes.find(n=>n.id===t.selectedNodeId)||null),ke=q(()=>t.stateData&&t.stateData.summary?t.stateData.summary:{}),Xt=q(()=>t.stateData&&t.stateData.node?t.stateData.node:{}),ps=q(()=>t.stateData&&t.stateData.areas?t.stateData.areas:{suggested:[],totals:{}}),Pe=q(()=>Array.isArray(ps.value&&ps.value.suggested)?ps.value.suggested:[]),Ws=q(()=>ps.value&&ps.value.totals?ps.value.totals:{}),gs=q(()=>Array.isArray(t.stateData&&t.stateData.profiles)?t.stateData.profiles:[]),Oo=q(()=>t.stateData&&t.stateData.profileReport?t.stateData.profileReport:null),hs=q(()=>Array.isArray(t.stateData&&t.stateData.actuatorTests)?t.stateData.actuatorTests:[]),$o=q(()=>t.stateData&&t.stateData.actuatorTestReport?t.stateData.actuatorTestReport:null),mt=q(()=>Array.isArray(t.stateData&&t.stateData.testPlans)?t.stateData.testPlans:[]),lr=q(()=>{const n=String(t.testPlanSearch||"").trim().toLowerCase();return mt.value.filter(a=>n?[a.name,a.description,a.areaName,a.areaId].filter(Boolean).join(" ").toLowerCase().includes(n):!0)}),ft=q(()=>t.stateData&&t.stateData.testPlanReport?t.stateData.testPlanReport:null),Hs=q(()=>Array.isArray(t.stateData&&t.stateData.testResults)?t.stateData.testResults:[]),or=q(()=>!t.liveTestResultId||!ft.value||ft.value.id!==t.liveTestResultId?null:Object.assign({},ft.value,{live:t.testPlanRunning===!0})),Yt=q(()=>{const n=[],a=new Set,l=(d,h=!1)=>{if(!d||typeof d!="object"||!d.id)return;const I=String(d.id);a.has(I)||(a.add(I),n.push(Object.assign({},d,{live:h})))};return l(or.value,!0),Hs.value.forEach(d=>l(d,!1)),n}),te=q(()=>{if(t.selectedTestResultId){const n=Yt.value.find(a=>a&&a.id===t.selectedTestResultId);if(n)return n}return or.value||Hs.value[0]||null}),bt=q(()=>t.activeTab==="tests"&&t.testResultFocusMode===!0&&!!te.value),Za=q(()=>{const n=String(t.areaSearch||"").trim().toLowerCase();return Pe.value.filter(a=>n?[a.path,a.name,a.parentName,...Array.isArray(a.tags)?a.tags:[],...Array.isArray(a.sampleLabels)?a.sampleLabels:[]].filter(Boolean).join(" ").toLowerCase().includes(n):!0)}),Me=q(()=>{if(t.areaDraftIsNew===!0&&!String(t.areaSelectedId||"").trim())return null;if(t.areaSelectedId){const n=Pe.value.find(a=>a.id===t.areaSelectedId);if(n)return n}return null}),ot=q(()=>{if(t.testAreaSelectedId){const n=Pe.value.find(a=>a.id===t.testAreaSelectedId);if(n)return n}return Pe.value[0]||null}),Rt=q(()=>{const n=String(t.testPlanDraft&&t.testPlanDraft.areaId?t.testPlanDraft.areaId:"").trim();if(n){const a=Pe.value.find(l=>l.id===n);if(a)return a}return ot.value}),ir=q(()=>{const n=String(t.gaCatalogSearch||"").trim().toLowerCase(),a=new Set((t.areaDraftGaList||[]).map(l=>String(l||"").trim()).filter(Boolean));return(Array.isArray(t.gaCatalog)?t.gaCatalog:[]).filter(l=>!l||!l.ga||a.has(l.ga)?!1:n?[l.ga,l.label,l.hierarchyPath,...Array.isArray(l.tags)?l.tags:[]].filter(Boolean).join(" ").toLowerCase().includes(n):!0).slice(0,80)}),cr=q(()=>{const n=new Map((Array.isArray(t.gaCatalog)?t.gaCatalog:[]).map(a=>[String(a&&a.ga?a.ga:"").trim(),a]));return(t.areaDraftGaList||[]).map(a=>n.get(String(a||"").trim())||{ga:String(a||"").trim(),label:"",dpt:"",hierarchyPath:"",tags:[]})}),en=q(()=>Array.isArray(t.testPlanCatalog&&t.testPlanCatalog.commandSignals)?t.testPlanCatalog.commandSignals:[]),ur=q(()=>Array.isArray(t.testPlanCatalog&&t.testPlanCatalog.statusSignals)?t.testPlanCatalog.statusSignals:[]),vt=q(()=>{if(t.profileDraftMode===!0)return null;if(t.profileSelectedId){const n=gs.value.find(a=>a.id===t.profileSelectedId);if(n)return n}return gs.value[0]||null}),it=q(()=>{if(t.actuatorDraftMode===!0)return null;if(t.actuatorPresetSelectedId){const n=hs.value.find(a=>a.id===t.actuatorPresetSelectedId);if(n)return n}return hs.value[0]||null}),Qt=q(()=>t.testPlanSelectedId&&mt.value.find(n=>n.id===t.testPlanSelectedId)||null),Ne=q(()=>!t.testPlanRunningStepId||!t.testPlanDraft||!Array.isArray(t.testPlanDraft.steps)?null:t.testPlanDraft.steps.find(n=>String(n&&n.id?n.id:"")===t.testPlanRunningStepId)||null),Lo=q(()=>!!(t.testPlanDraft&&Array.isArray(t.testPlanDraft.steps)&&t.testPlanDraft.steps.length>0)),tn=q(()=>t.showAiPlanner===!0),dr=q(()=>t.showAiAreaBuilder===!0),fr=q(()=>t.testPlanDraft?J({prompt:t.testPlanPrompt,draft:t.testPlanDraft})!==t.testPlanDraftBaseline:!1),Fo=q(()=>{if(!(t.areaDraftIsNew===!0||!!Me.value))return!1;const a=U({isNew:t.areaDraftIsNew===!0,areaId:String(t.areaDraftId||t.areaSelectedId||"").trim(),name:t.areaDraftName,description:t.areaDraftDescription,tags:L(t.areaDraftTags),gaList:t.areaDraftGaList||[],llmPrompt:t.areaLlmPrompt});if(t.areaDraftIsNew===!0){const h=U({isNew:!0,areaId:"",name:"New Area",description:"",tags:[],gaList:[],llmPrompt:""});return a!==h}const l=Me.value;if(!l)return!1;const d=U({isNew:!1,areaId:String(l.id||"").trim(),name:String(l.name||""),description:String(l.customDescription||""),tags:Array.isArray(l.tags)?l.tags:[],gaList:Array.isArray(l.gaList)?l.gaList:[],llmPrompt:""});return a!==d}),sn=q(()=>Array.isArray(t.stateData&&t.stateData.anomalies)?t.stateData.anomalies.slice().reverse():[]),an=q(()=>{const n=Array.isArray(ke.value.topGAs)?ke.value.topGAs:[],a=ke.value&&typeof ke.value.gaLabels=="object"?ke.value.gaLabels:{};return n.slice(0,10).map(l=>{const d=l&&typeof l=="object"?l:{},h=String(d.ga||"").trim(),I=String(d.label||"").trim(),k=h?String(a[h]||"").trim():"";return Object.assign({},d,{ga:h,label:I||k})})}),ba=q(()=>{const n=ke.value&&ke.value.byEvent&&typeof ke.value.byEvent=="object"?ke.value.byEvent:{};return Object.keys(n).map(a=>({name:a,count:Number(n[a]||0)})).filter(a=>a.count>0).sort((a,l)=>l.count-a.count)}),Go=q(()=>Math.max(...ba.value.map(n=>n.count),1)),nn=q(()=>Ve(t.stateData)),Zt=q(()=>lt(nn.value)),jo=q(()=>{const n=String(t.flowSearch||"").trim().toLowerCase();return nn.value.nodes.slice().filter(a=>t.flowShowUniversalNodes===!0||!Ts(a)).sort((a,l)=>String(a.id||"").localeCompare(String(l.id||""))).filter(a=>n?`${a.id} ${a.subtitle||""}`.toLowerCase().includes(n):!0).slice(0,120)}),et=q(()=>ke.value&&ke.value.busConnection&&typeof ke.value.busConnection=="object"?ke.value.busConnection:null),Uo=q(()=>{const n=ke.value||{};if(!Object.keys(n).length)return"No data available.";const a=n.counters||{},l=[];return l.push(Xt.value.name||fs.value?.name||"KNX AI"),l.push(`Analysis window: ${Number(n.meta?.analysisWindowSec||0)}s`),l.push(`Telegrams: ${Number(a.telegrams||0)} | Rate: ${Number(a.overallRatePerSec||0)}/s`),l.push(`Echoed: ${Number(a.echoed||0)} | Repeat: ${Number(a.repeated||0)} | Unknown DPT: ${Number(a.unknownDpt||0)}`),et.value&&l.push(`Bus: ${String(et.value.currentState||"unknown")} | Connected: ${Number(et.value.connectedPct||0)}% | Disconnected: ${Number(et.value.disconnectedPct||0)}%`),l.join(`
3
- `)}),Bo=q(()=>{const n=et.value;return!n||!Array.isArray(n.segments)?[]:n.segments.map((a,l)=>{const d=Math.max(0,Math.min(1,Number(a&&a.ratioStart)||0)),h=Math.max(0,Math.min(1,Number(a&&a.ratioWidth)||0));return{key:`${l}-${a?.startedAt||""}`,left:`${(d*100).toFixed(3)}%`,width:`${Math.max(h*100,.4).toFixed(3)}%`,title:`${a?.state==="connected"?"Connected":"Disconnected"} | ${x(a?.startedAt)} -> ${x(a?.endedAt)} | ${D(a?.durationSec||0)}`,className:a?.state==="connected"?"segment-connected":"segment-disconnected"}}).filter(a=>Number.parseFloat(a.width)>0)}),pr=q(()=>t.chatMessages.map((n,a)=>({key:`${a}-${n.kind}`,kind:n.kind,rawText:js(n.text),html:n.kind==="assistant"?C(n.text):""})));Re(()=>t.selectedNodeId,n=>{Qe(Sl,n||""),t.areaSelectedId="",t.testAreaSelectedId=qt(n||"")}),Re(()=>t.autoRefresh,n=>{Je(_l,n)}),Re(()=>t.voiceEnabled,n=>{Je(Tl,n),n!==!0&&ae()}),Re(A,n=>{Je(Dl,n)}),Re(()=>t.activeTab,n=>{Qe(wl,n||"overview")}),Re(()=>t.settingsTab,n=>{Qe(Pl,n||"config")}),Re(()=>t.flowMaxNodes,n=>{t.flowMaxNodes=Math.max(4,Math.min(32,Number(n)||14)),$e()}),Re(()=>(t.flowSelectedGa||[]).join("|"),()=>{$e()}),Re(()=>t.flowShowUniversalNodes,n=>{n!==!0&&(t.flowSelectedGa=(t.flowSelectedGa||[]).filter(a=>{const l=nn.value.nodes.find(d=>d.id===a);return!Ts(l)})),$e()}),Re(()=>Pe.value.map(n=>n.id).join("|"),()=>{if(!Pe.value.length){t.areaSelectedId="",t.testAreaSelectedId="",t.activeTab==="tests"&&(t.activeTab="areas");return}if(t.areaDraftIsNew===!0&&!String(t.areaSelectedId||"").trim()){const l=String(t.testAreaSelectedId||"").trim();if(us())return;(!l||!Pe.value.find(d=>d.id===l))&&(t.testAreaSelectedId=Pe.value[0].id);return}const n=String(t.areaSelectedId||"").trim();n&&!Pe.value.find(l=>l.id===n)&&(t.areaSelectedId="");const a=String(t.testAreaSelectedId||"").trim();us()||(!a||!Pe.value.find(l=>l.id===a))&&(t.testAreaSelectedId=Pe.value[0].id)}),Re(()=>t.testAreaSelectedId,n=>{t.selectedNodeId&&Gs(t.selectedNodeId,n||"")}),Re(()=>Me.value?JSON.stringify({id:Me.value.id,name:Me.value.name,customDescription:Me.value.customDescription||"",tags:Me.value.tags||[]}):"",()=>{if(t.areaDraftIsNew===!0&&!String(t.areaSelectedId||"").trim())return;const n=Me.value;if(!n){t.areaDraftId="",t.areaDraftName="",t.areaDraftDescription="",t.areaDraftTags="",t.areaDraftGaList=[],t.areaLlmPrompt="",t.areaLlmError="",t.areaDraftIsNew=!1;return}t.areaDraftId=String(n.id||""),t.areaDraftName=String(n.name||""),t.areaDraftDescription=String(n.customDescription||""),t.areaDraftTags=Array.isArray(n.tags)?n.tags.join(", "):"",t.areaDraftGaList=Array.isArray(n.gaList)?n.gaList.slice():[],t.areaLlmPrompt="",t.areaLlmError="",t.areaDraftIsNew=!1}),Re(()=>Rt.value?Rt.value.id:"",async(n,a)=>{if(!n||!t.selectedNodeId){t.testPlanCatalog=null,t.testPlanCatalogError="";return}a&&n!==a&&(t.testPlanRunConfirmOpen=!1,t.testPlanDraft&&!t.testPlanSelectedId&&(t.testPlanDraft.areaId=String(n||""),t.testPlanDraft.areaName=Rt.value?String(Rt.value.path||Rt.value.name||""):"")),await Ar()}),Re(()=>gs.value.map(n=>n.id).join("|"),()=>{if(!gs.value.length){t.profileSelectedId="";return}t.profileDraftMode!==!0&&(!t.profileSelectedId||!gs.value.find(n=>n.id===t.profileSelectedId))&&(t.profileSelectedId=gs.value[0].id)}),Re(()=>vt.value?JSON.stringify({id:vt.value.id,name:vt.value.name,description:vt.value.description,targetTags:vt.value.targetTags||[],minActivityPct:vt.value.minActivityPct,maxSilentPct:vt.value.maxSilentPct,maxAnomalies:vt.value.maxAnomalies,builtIn:vt.value.builtIn===!0}):"",()=>{const n=vt.value;if(!n){t.profileDraftId="",t.profileDraftName="",t.profileDraftDescription="",t.profileDraftTargetTags="",t.profileDraftMinActivityPct=20,t.profileDraftMaxSilentPct=60,t.profileDraftMaxAnomalies=2;return}t.profileDraftId=String(n.id||""),t.profileDraftName=String(n.name||""),t.profileDraftDescription=String(n.description||""),t.profileDraftTargetTags=Array.isArray(n.targetTags)?n.targetTags.join(", "):"",t.profileDraftMinActivityPct=Number(n.minActivityPct||20),t.profileDraftMaxSilentPct=Number(n.maxSilentPct||60),t.profileDraftMaxAnomalies=Number(n.maxAnomalies||2)}),Re(()=>hs.value.map(n=>n.id).join("|"),()=>{if(!hs.value.length){t.actuatorPresetSelectedId="";return}t.actuatorDraftMode!==!0&&(!t.actuatorPresetSelectedId||!hs.value.find(n=>n.id===t.actuatorPresetSelectedId))&&(t.actuatorPresetSelectedId=hs.value[0].id)}),Re(()=>it.value?JSON.stringify({id:it.value.id,name:it.value.name,description:it.value.description,commandGA:it.value.commandGA,commandDPT:it.value.commandDPT,commandPayload:it.value.commandPayload,statusGA:it.value.statusGA,statusDPT:it.value.statusDPT,statusWriteTimeoutMs:it.value.statusWriteTimeoutMs,statusResponseTimeoutMs:it.value.statusResponseTimeoutMs}):"",()=>{const n=it.value;if(!n){t.actuatorDraftId="",t.actuatorDraftName="",t.actuatorDraftDescription="",t.actuatorDraftCommandGA="",t.actuatorDraftCommandDPT="",t.actuatorDraftCommandPayload="",t.actuatorDraftStatusGA="",t.actuatorDraftStatusDPT="",t.actuatorDraftStatusWriteTimeoutMs=5e3,t.actuatorDraftStatusResponseTimeoutMs=5e3;return}t.actuatorDraftId=String(n.id||""),t.actuatorDraftName=String(n.name||""),t.actuatorDraftDescription=String(n.description||""),t.actuatorDraftCommandGA=String(n.commandGA||""),t.actuatorDraftCommandDPT=String(n.commandDPT||""),t.actuatorDraftCommandPayload=String(n.commandPayload||""),t.actuatorDraftStatusGA=String(n.statusGA||""),t.actuatorDraftStatusDPT=String(n.statusDPT||""),t.actuatorDraftStatusWriteTimeoutMs=Number(n.statusWriteTimeoutMs||5e3),t.actuatorDraftStatusResponseTimeoutMs=Number(n.statusResponseTimeoutMs||5e3)}),Re(()=>mt.value.map(n=>n.id).join("|"),()=>{if(!mt.value.length){t.testPlanSelectedId="";return}t.testPlanSelectedId&&!mt.value.find(n=>n.id===t.testPlanSelectedId)&&(t.testPlanSelectedId="")}),Re(()=>Yt.value.map(n=>n.id).join("|"),()=>{if(!Yt.value.length){t.selectedTestResultId="";return}(!t.selectedTestResultId||!Yt.value.find(n=>n.id===t.selectedTestResultId))&&(t.selectedTestResultId=String(Yt.value[0].id||"")),t.liveTestResultId&&Hs.value.some(n=>String(n&&n.id?n.id:"")===t.liveTestResultId)&&t.testPlanRunning!==!0&&(t.liveTestResultId="")}),Re(()=>`${t.selectedTestResultId}|${t.activeTab}`,()=>{t.activeTab!=="results"||!t.selectedTestResultId||requestAnimationFrame(()=>{const n=document.querySelector(".results-page-list .area-list-item.active");n&&typeof n.scrollIntoView=="function"&&n.scrollIntoView({block:"nearest",behavior:"smooth"})})});function rn(n,a){t.chatMessages.push({kind:n,text:a})}function Vo(){t.chatMessages=[]}function Wo(n,a=null){const l=Array.isArray(n)?n:[];return{totalSteps:Math.max(l.length,Number(a||0)),pass:l.filter(h=>h&&h.status==="pass").length,warn:l.filter(h=>h&&h.status==="warn").length,fail:l.filter(h=>h&&h.status==="fail").length}}function Ho(n){const a=[];return Number(n&&n.fail)>0&&a.push("At least one feedback object returned an incoherent value. Check the actuator/status pairing in ETS first."),Number(n&&n.warn)>0&&a.push("Some steps did not receive feedback in time. Verify the status group address and the actuator programming."),a.length||a.push("The selected active test completed with coherent feedback on all verified steps."),a}function ln({plan:n,area:a,stepResults:l,reportId:d=""}){const h=Wo(l,Array.isArray(n&&n.steps)?n.steps.length:0),I=h.fail>0?"fail":h.warn>0?"warn":"pass";return{id:String(d||`${n.id||"plan"}:${Date.now()}`),generatedAt:new Date().toISOString(),mode:"ai_test_plan",overallStatus:I,name:n.name,description:n.description,prompt:n.prompt,area:a,metrics:h,steps:l,suggestions:Ho(h)}}function va(n){return!n||typeof n!="object"?"Test result":String(n.name||n.profile?.name||"Test result")}function ya(n){return!n||typeof n!="object"?"":String(n.area?.path||n.area?.name||n.area?.id||"")}function Ks(n){const a=String(n&&n.mode?n.mode:"").trim().toLowerCase();return a==="ai_test_plan"?"Test Plan":a==="active_test"?"Actuator":a==="read_only"?"Read-only":a||"Test"}function on(n){const a=n&&n.metrics&&typeof n.metrics=="object"?n.metrics:{};return String(n&&n.mode?n.mode:"")==="read_only"?[{label:"Total GA",value:Number(a.totalGAs||0)},{label:"Active GA",value:Number(a.activeGaCount||0)},{label:"Silent GA",value:Number(a.silentGaCount||0)},{label:"Anomalies",value:Number(a.anomalyCount||0)}]:String(n&&n.mode?n.mode:"")==="active_test"?[{label:"Command GA",value:n&&n.command&&n.command.ga?n.command.ga:"n/a"},{label:"Status GA",value:n&&(n.statusResponse?.ga||n.statusWrite?.ga||n.statusRead?.ga)?n.statusResponse?.ga||n.statusWrite?.ga||n.statusRead?.ga:"n/a"},{label:"Status",value:n&&n.overallStatus?n.overallStatus:"n/a"},{label:"Generated",value:N(n&&n.generatedAt?n.generatedAt:"")||"n/a"}]:[{label:"Total Steps",value:Number(a.totalSteps||0)},{label:"Pass",value:Number(a.pass||0)},{label:"Warn",value:Number(a.warn||0)},{label:"Fail",value:Number(a.fail||0)}]}function Nt(n){if(n==null||n==="")return"n/a";if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return String(n);try{return JSON.stringify(n)}catch{return String(n)}}function cn(n,a,l="n/a"){const d=String(a||"").trim(),h=n==null?"":String(n);if(!d)return h||l;const I=hn(h,d),k=ts(d).find(j=>String(j.value)===String(I));return k&&k.label?k.label:h||l}function gr(n){if(!n||typeof n!="object")return"n/a";const a=n.ga||"n/a";if(n.ok===!0){const l=n.payloadLabel||Nt(n.payload),d=n.coherent===!1?"mismatch":"ok";return`${a} / ${l} / ${d}`}return`${a} / ${n.error||"timeout"}`}function un(n){return N(n||"")||"n/a"}function Ko(n,a="report"){return String(n||"").trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||a}function hr({command:n,statusWrite:a,statusResponse:l,statusRead:d,expectedPayloadLabel:h,expectedPayload:I}){const k=l||d;return[{title:"Command",items:[{label:"Command",value:`${n?.ga||"n/a"} / ${n?.payloadLabel||Nt(n?.payload)}`},{label:"Command Sent",value:un(n?.sentAt)}]},{title:"Spontaneous Write From Status GA",items:[{label:"Result",value:gr(a)},{label:"Expected",value:a?.expectedPayloadLabel||h||Nt(I)},{label:"Received At",value:un(a?.at)},{label:"Event",value:a?.event||"n/a"}]},{title:"Active Read Request To Status GA",items:[{label:"Result",value:gr(k)},{label:"Expected",value:k?.expectedPayloadLabel||h||Nt(I)},{label:"Received At",value:un(k?.at)},{label:"Event",value:k?.event||"n/a"}]}]}function zs(n){return!n||typeof n!="object"?[]:Array.isArray(n.steps)&&n.steps.length?n.steps.map(a=>{const l=a.kind==="wait"?[{label:"Wait",value:`${Number(a.delayMs||0)} ms`},{label:"Reason",value:a.reason||"Pause before next action"}]:[];return{id:String(a.id||`${n.id}-step`),title:a.title||a.id||"Step",status:a.status||"pass",message:a.message||a.description||"",details:l,detailGroups:a.kind==="wait"?[]:hr({command:a.command,statusWrite:a.statusWrite,statusResponse:a.statusResponse,statusRead:a.statusRead,expectedPayloadLabel:a.expectedPayloadLabel,expectedPayload:a.expectedPayload})}}):Array.isArray(n.checks)&&n.checks.length?n.checks.map(a=>({id:String(a.id||`${n.id}-check`),title:a.title||a.id||"Check",status:a.status||"pass",message:a.message||"",details:[{label:"Metrics",value:Nt(a.metrics||{})},{label:"Sample",value:Nt(a.sample||[])}]})):String(n.mode||"")==="active_test"?[{id:String(n.id||"active-test"),title:n.name||"Actuator Test",status:n.overallStatus||"pass",message:n.overallStatus==="pass"?"Both feedback checks passed.":n.overallStatus==="warn"?"One feedback check passed and one failed.":"Both feedback checks failed.",details:[],detailGroups:hr({command:n.command,statusWrite:n.statusWrite,statusResponse:n.statusResponse,statusRead:n.statusRead,expectedPayloadLabel:n.statusResponse?.expectedPayloadLabel||n.statusWrite?.expectedPayloadLabel||n.statusRead?.expectedPayloadLabel,expectedPayload:n.statusRead?.expectedPayload})}]:[]}function Js(n){return Array.isArray(n&&n.suggestions)?n.suggestions:[]}function zo(n){const a=n&&n.source&&typeof n.source=="object"?n.source:{},l=String(n&&n.mode?n.mode:"").trim().toLowerCase(),d=String(a.areaId||n?.area?.id||"").trim();return l==="ai_test_plan"?{type:"ai_test_plan",planId:String(a.planId||String(n.id||"").split(":")[0]||"").trim(),areaId:d}:l==="read_only"?{type:"profile",profileId:String(a.profileId||n?.profile?.id||"").trim(),areaId:d}:l==="active_test"?{type:"actuator_test",presetId:String(a.presetId||String(n.id||"").split(":")[0]||"").trim(),areaId:d}:{type:"",areaId:d}}async function mr(){const n=te.value;if(!n||typeof n!="object"){$("No test result selected to export");return}try{const{jsPDF:a}=await kd(async()=>{const{jsPDF:Ie}=await import("./chunk-jspdf.es.min.js").then(yt=>yt.j);return{jsPDF:Ie}},[]),l=new a({orientation:"portrait",unit:"pt",format:"a4"}),d=l.internal.pageSize.getWidth(),h=l.internal.pageSize.getHeight(),I=42,k=42,j=44,G=42,oe=d-I-k;let V=j;const de=(Ie=14)=>{V+Ie<=h-G||(l.addPage(),V=j)},se=(Ie,{size:yt=11,bold:Mt=!1,indent:Ot=0,color:$t=[35,41,52],lineHeight:Aa=14,gapAfter:Ta=0}={})=>{const qs=String(Ie||"").trim();if(!qs)return;l.setFont("helvetica",Mt?"bold":"normal"),l.setFontSize(yt),l.setTextColor($t[0],$t[1],$t[2]);const Da=l.splitTextToSize(qs,Math.max(80,oe-Ot));for(const Sn of Da)de(Aa),l.text(String(Sn),I+Ot,V),V+=Aa;Ta>0&&(V+=Ta)},H=()=>{de(12),l.setDrawColor(210,214,222),l.line(I,V,d-k,V),V+=12},ie=va(n),he=N(new Date().toISOString())||new Date().toISOString(),ss=N(n.generatedAt||"")||String(n.generatedAt||"n/a"),_=ya(n)||"n/a",B=Ks(n),ee=String(n.overallStatus||"n/a"),Le=on(n),We=zs(n),qe=Js(n);se("KNX AI Test Result",{size:17,bold:!0,color:[20,28,39],lineHeight:20}),se(ie,{size:14,bold:!0,color:[20,28,39],lineHeight:17,gapAfter:4}),se(`Exported: ${he}`,{size:10,color:[88,96,113]}),se(`Generated: ${ss}`,{size:10,color:[88,96,113]}),se(`Mode: ${B}`,{size:10,color:[88,96,113]}),se(`Status: ${ee}`,{size:10,color:[88,96,113]}),se(`Area: ${_}`,{size:10,color:[88,96,113]}),se(`Report ID: ${String(n.id||"n/a")}`,{size:10,color:[88,96,113],gapAfter:2}),H(),Le.length&&(se("Metrics",{size:12,bold:!0,color:[20,28,39],gapAfter:2}),Le.forEach(Ie=>{se(`${Ie.label}: ${Nt(Ie.value)}`,{size:10,color:[35,41,52]})}),V+=4,H()),se(`Checks (${We.length})`,{size:12,bold:!0,color:[20,28,39],gapAfter:2}),We.length?We.forEach((Ie,yt)=>{se(`${yt+1}. ${Ie.title||"Check"} [${String(Ie.status||"n/a").toUpperCase()}]`,{size:11,bold:!0,color:[31,41,55]}),se(Ie.message||"No additional details available.",{size:10,color:[70,78,94]}),Array.isArray(Ie.detailGroups)&&Ie.detailGroups.length?Ie.detailGroups.forEach(Mt=>{se(Mt.title||"Details",{size:10,bold:!0,indent:12,color:[35,41,52]}),(Array.isArray(Mt.items)?Mt.items:[]).forEach($t=>{se(`${$t.label}: ${Nt($t.value)}`,{size:10,indent:24,color:[70,78,94]})})}):(Array.isArray(Ie.details)?Ie.details:[]).forEach(Ot=>{se(`${Ot.label}: ${Nt(Ot.value)}`,{size:10,indent:12,color:[70,78,94]})}),V+=2}):se("No detailed entries stored for this report yet.",{size:10,color:[88,96,113]}),qe.length&&(V+=4,H(),se("Suggestions",{size:12,bold:!0,color:[20,28,39],gapAfter:2}),qe.forEach((Ie,yt)=>{se(`${yt+1}. ${String(Ie||"")}`,{size:10,color:[35,41,52]})}));const tt=new Date(n.generatedAt||Date.now()),as=Number.isFinite(tt.getTime())?tt.toISOString().replace(/[:.]/g,"-"):String(Date.now()),xs=`knx-ai-test-result-${Ko(ie,"report")}-${as}.pdf`;l.save(xs),$(`PDF exported (${xs})`)}catch(a){t.lastError=a&&a.message?a.message:"Failed to export PDF",$(t.lastError)}}function br(n,a,l=new Date().toISOString()){const d=n&&n.kind==="wait";return{id:n&&n.id?n.id:`step-${Date.now()}`,title:n&&n.title?n.title:"Test Step",description:n&&n.description?n.description:"",reason:n&&n.reason?n.reason:"",kind:n&&n.kind?n.kind:"write_and_verify",status:"warn",command:d?null:{ga:n&&n.commandGA?n.commandGA:"",dpt:n&&n.commandDPT?n.commandDPT:"",payload:n?n.commandPayload:void 0,sentAt:l},statusWrite:null,statusResponse:null,statusRead:null,expectedPayload:d?void 0:n?n.expectedPayload:void 0,delayMs:Number(n&&n.delayMs?n.delayMs:0),statusWriteTimeoutMs:d?0:Number(n&&n.statusWriteTimeoutMs?n.statusWriteTimeoutMs:0),statusResponseTimeoutMs:d?0:Number(n&&n.statusResponseTimeoutMs?n.statusResponseTimeoutMs:0),message:a&&a.message?a.message:"Failed to run step"}}async function vr(n){return ae(),await new Promise((a,l)=>{const d=URL.createObjectURL(n),h=new Audio(d);K=h;const I=()=>{K===h&&(K=null),h.onended=null,h.onerror=null,URL.revokeObjectURL(d)};h.onended=()=>{I(),a()},h.onerror=()=>{I(),l(new Error("Audio playback failed"))};const k=h.play();k&&typeof k.then=="function"&&k.catch(j=>{I(),l(j instanceof Error?j:new Error(String(j)))})})}function Jo(n,a=null){const l=String(n||"").trim();return!l||!t.testPlanDraft||!Array.isArray(t.testPlanDraft.steps)?a:t.testPlanDraft.steps.find(d=>String(d&&d.id?d.id:"")===l)||a}function yr(n,a=""){const l=`${String(n||"")} ${String(a||"")}`.trim().toLowerCase(),d=` ${l} `;if(!l)return String((navigator.language||"it").split("-")[0]||"it").trim().toLowerCase()||"it";const h=j=>j.some(G=>d.includes(G)),I=[{voice:"it",score:[h([" accendi "," spegni "," stato "," verifica "," coerente "," leggi "," apri "," chiudi "," attiva "," controlla "," area "," luce "," luci "," tapparella "," tapparelle "," clima "])?3:0,/[àèéìíîòóù]/.test(l)?2:0].reduce((j,G)=>j+G,0)},{voice:"en",score:[h([" turn on "," turn off "," verify "," feedback "," status "," check "," read "," open "," close "," command "," area "," light "," lights "])?3:0].reduce((j,G)=>j+G,0)},{voice:"fr",score:[h([" allume "," éteins "," etat "," état "," vérifier "," ouvre "," ferme "," lumière "," lumières "," zone "])?3:0,/[àâçéèêëîïôûùüÿœ]/.test(l)?2:0].reduce((j,G)=>j+G,0)},{voice:"de",score:[h([" einschalten "," ausschalten "," status "," prüfen "," öffne "," schließe "," licht "," bereich "])?3:0,/[äöüß]/.test(l)?2:0].reduce((j,G)=>j+G,0)},{voice:"es",score:[h([" enciende "," apaga "," estado "," verifica "," abre "," cierra "," luz "," luces "," zona "])?3:0,/[áéíóúñü]/.test(l)?2:0].reduce((j,G)=>j+G,0)},{voice:"pt",score:[h([" liga "," desliga "," estado "," verificar "," abre "," fecha "," luz "," luzes "," área "])?3:0,/[ãõâêôçáéíóú]/.test(l)?2:0].reduce((j,G)=>j+G,0)}];return I.sort((j,G)=>G.score-j.score),I[0]&&I[0].score>0?I[0].voice:String((navigator.language||"it").split("-")[0]||"it").trim().toLowerCase()||"it"}function qo(n={},a=null){const l=Jo(n&&n.id?n.id:"",n),d=String(l&&l.title?l.title:"").trim(),h=String(l&&l.description?l.description:"").trim();return{text:`${Number.isInteger(a)&&a>0?`${a}. `:""}${d}`.trim(),voice:yr(d,h)}}async function Xo(n={},a=null){if(t.voiceEnabled!==!0)return;const l=qo(n,a),d=String(l.text||"").trim();if(!d||!t.selectedNodeId)return;const h=await Ze(`${ye("tts/googletranslate")}?ts=${Date.now()}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,text:d,voice:l.voice,slow:!1})});await vr(h)}async function Yo(n,a=""){if(t.voiceEnabled!==!0||!t.selectedNodeId)return;const l=String(n).trim();if(!l)return;const d=yr(l,a),h=await Ze(`${ye("tts/googletranslate")}?ts=${Date.now()}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,text:l,voice:d,slow:!1})});await vr(h)}function Qo(n){const a=u&&n.find(h=>h.id===u)?u:"",l=ge(Sl,""),d=l&&n.find(h=>h.id===l)?l:"";return a||d||(n[0]?n[0].id:"")}async function dn({preserveSelection:n=!0}={}){t.loadingNodes=!0,$("Loading nodes...");try{const a=await we(ye("nodes")),l=Array.isArray(a&&a.nodes)?a.nodes:[];if(t.nodes=l,!l.length){t.selectedNodeId="",t.stateData=null,t.lastError="No KNX AI nodes found.",$(t.lastError);return}const d=n&&t.selectedNodeId&&l.find(h=>h.id===t.selectedNodeId)?t.selectedNodeId:Qo(l);t.selectedNodeId=d,t.lastError="",$("Ready")}catch(a){t.lastError=a.message||"Failed to load nodes",$(t.lastError)}finally{t.loadingNodes=!1}}async function es({fresh:n=!1}={}){if(!(!t.selectedNodeId||t.loadingState)){t.loadingState=!0,n&&$("Loading...");try{const a=t.testPlanRunning===!0&&t.liveTestResultId?T(t.stateData&&t.stateData.testPlanReport?t.stateData.testPlanReport:null,null):null,l=await we(ye(`state?nodeId=${encodeURIComponent(t.selectedNodeId)}&fresh=${n?1:0}`));a&&a.id===t.liveTestResultId&&(l.testPlanReport=a),t.stateData=l,sa(()=>{t.areaDraftIsNew!==!0&&t.areaSelectedId&&!Pe.value.find(d=>d.id===t.areaSelectedId)&&(t.areaSelectedId=""),!us()&&!t.testAreaSelectedId&&Pe.value[0]&&(t.testAreaSelectedId=Pe.value[0].id)}),t.lastError="",$("Ready")}catch(a){t.lastError=a.message||"Failed to load state",$(t.lastError)}finally{t.loadingState=!1}}}async function Zo(){await dn({preserveSelection:!0}),await es({fresh:!0}),await _a()}async function ei(){Vo(),t.selectedTestResultId="",t.liveTestResultId="",t.testResultFocusMode=!1,t.testAreaSelectedId=qt(t.selectedNodeId),await es({fresh:!0}),await _a()}function Sr(){t.selectedTestResultId="",t.testResultFocusMode=!1,t.testPlanSelectedId="",t.testPlanDraft=null,t.testPlanPrompt="",t.testPlanGeneration=null,t.testPlanRunConfirmOpen=!1,t.testPlanUnsavedConfirmOpen=!1,t.showAiPlanner=!0,t.testTemplateBuilderFocus=!1,!us()&&!t.testAreaSelectedId&&Pe.value[0]&&(t.testAreaSelectedId=Pe.value[0].id),vn(),bn()}function ti(){t.showAiPlanner=!0,t.testTemplateBuilderFocus=!0}function si(){t.testTemplateBuilderFocus=!1,t.showAiPlanner=!1}function ai(){t.showAiAreaBuilder=!0,t.areaBuilderFocus=!0}function ni(){t.areaBuilderFocus=!1,t.showAiAreaBuilder=!1}function fn(){t.areaSelectedId="",t.areaDraftIsNew=!1,t.areaDraftId="",t.areaDraftName="",t.areaDraftDescription="",t.areaDraftTags="",t.areaDraftGaList=[],t.areaLlmPrompt="",t.areaLlmError="",t.areaSearch="",t.areaSearchOpen=!1,t.showAiAreaBuilder=!1,t.areaBuilderFocus=!1,t.areaUnsavedConfirmOpen=!1}function ri(){if(Fo.value){t.areaUnsavedConfirmOpen=!0;return}fn(),$("Area editor closed")}function _r(){t.areaUnsavedConfirmOpen=!1}function li(){t.areaUnsavedConfirmOpen=!1,fn(),$("Area editor closed")}function oi(){t.testPlanRunning||yn(()=>{Sr(),t.testPlanSearchOpen=!1,$("Test editor closed")},"close the current test editor")}function wr(n){const a=String(n||"").trim();a!=="node"&&a!=="config"||(t.settingsTab=a)}function Ds(n){const a=String(n||"").trim();if(a){if(a==="tests"&&Pe.value.length===0){$("Define at least one area before using Tests");return}if(a==="areas"){const l=!!String(t.areaSelectedId||"").trim(),d=t.areaDraftIsNew===!0;!l&&!d&&fn()}if(a==="tests"){const l=!!String(t.testPlanSelectedId||"").trim(),d=!!String(t.selectedTestResultId||"").trim(),h=!!t.testPlanDraft;!l&&!d&&!h&&Sr()}t.activeTab!==a?t.activeTab=a:(t.activeTab="",sa(()=>{t.activeTab=a})),dt()}}async function pn(n){const a=String(n||"").trim();if(!(!a||!t.selectedNodeId||t.deletingTestResultId)){t.deletingTestResultId=a;try{const l=await we(ye("test-results/delete"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,reportId:a})}),d=Array.isArray(l&&l.testResults)?l.testResults:[];t.stateData=Object.assign({},t.stateData||{},{testResults:d}),t.selectedTestResultId===a&&(t.selectedTestResultId=d[0]&&d[0].id?String(d[0].id):"",d.length||(t.testResultFocusMode=!1)),t.liveTestResultId===a&&(t.liveTestResultId=""),$("Test result deleted")}catch(l){t.lastError=l.message||"Failed to delete test result",$(t.lastError)}finally{t.deletingTestResultId=""}}}function Sa(n,{openMenu:a=!0,activateTestsTab:l=!1,activateResultsTab:d=!1,resultOnly:h=!0}={}){const I=String(n||"").trim();if(!I)return;a&&(t.testResultsMenuOpen=!0);const k=d?"results":l?"tests":"",j=()=>{k&&(t.activeTab=k),t.selectedTestResultId=I,t.testResultFocusMode=h===!0,sa(()=>{const G=document.querySelector(".results-page-list .area-list-item.active");G&&typeof G.scrollIntoView=="function"&&G.scrollIntoView({block:"nearest",behavior:"smooth"})})};t.selectedTestResultId===I&&(!k||t.activeTab===k)||j()}function Pr(){const n=te.value;if(!n)return;if(!Pe.value.length){$("Define at least one area before using Tests");return}const a=zo(n);if(t.activeTab="tests",t.testResultFocusMode=!1,a.type==="ai_test_plan"&&a.planId){const l=mt.value.find(d=>d&&d.id===a.planId);if(l){Nr(l),$(`Opened source plan "${l.name||l.id}"`);return}}if(a.type==="profile"){$("Returned to the Tests page for the source read-only profile.");return}if(a.type==="actuator_test"){$("Returned to the Tests page for the source actuator test.");return}$("Returned to the Tests page.")}async function ii(n){if(!t.selectedNodeId||!n||typeof n!="object")return null;const a=await we(ye("test-results/save"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,report:n})});return t.stateData=Object.assign({},t.stateData||{},{testResults:a.testResults||Hs.value,testPlanReport:a.report&&a.report.mode==="ai_test_plan"?a.report:ft.value,actuatorTestReport:a.report&&a.report.mode==="active_test"?a.report:$o.value,profileReport:a.report&&a.report.mode==="read_only"?a.report:Oo.value}),a&&a.report&&a.report.id&&(t.liveTestResultId="",Sa(a.report.id,{openMenu:!0,activateResultsTab:!0,resultOnly:!0})),a}async function gn(n=""){const a=String(n||"").trim(),l=a||String(t.chatDraft||"").trim();if(!(!l||!t.selectedNodeId)){rn("user",l),a||(t.chatDraft=""),t.asking=!0,$("Asking...");try{const d=await we(ye("ask"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,question:l})});rn("assistant",d&&d.answer!==void 0?d.answer:""),$("Ready")}catch(d){rn("error",d.message||"Ask failed"),$(d.message||"Ask failed")}finally{t.asking=!1}}}async function ci(){const n=Me.value;if(!t.selectedNodeId||t.areaSaving||!t.areaDraftIsNew&&!n)return;const a=t.areaDraftIsNew===!0;t.areaSaving=!0,$(a?"Creating area...":"Saving area...");try{const d=await we(ye(a?"areas/create":"areas/save"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:t.areaDraftIsNew?void 0:n.id,name:t.areaDraftName,description:t.areaDraftDescription,tags:String(t.areaDraftTags||"").split(",").map(h=>String(h||"").trim()).filter(Boolean),gaList:t.areaDraftGaList||[]})});d&&d.areas?(t.stateData=Object.assign({},t.stateData||{},{areas:d.areas}),d.areaId&&(t.areaSelectedId=d.areaId),t.areaLlmPrompt="",t.areaLlmError="",t.areaDraftIsNew=!1):await es({fresh:!0}),$(a?"Area created":"Area saved")}catch(l){t.lastError=l.message||"Failed to save area",$(t.lastError)}finally{t.areaSaving=!1}}async function ui(){const n=Me.value;if(!(!n||!t.selectedNodeId||t.areaSaving)){t.areaSaving=!0,$("Resetting area...");try{const a=await we(ye("areas/reset"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:n.id})});a&&a.areas?t.stateData=Object.assign({},t.stateData||{},{areas:a.areas}):await es({fresh:!0}),$("Area reset")}catch(a){t.lastError=a.message||"Failed to reset area",$(t.lastError)}finally{t.areaSaving=!1}}}async function di(){const n=Me.value;if(!(!n||!t.selectedNodeId||t.areaSaving)){t.areaSaving=!0,$("Deleting area...");try{const a=await we(ye("areas/delete"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:n.id})});if(a&&a.areas){t.stateData=Object.assign({},t.stateData||{},{areas:a.areas});const l=Array.isArray(a.areas&&a.areas.suggested)?a.areas.suggested:[];t.areaDraftIsNew=!1,t.areaSelectedId=l[0]&&l[0].id?l[0].id:""}else await es({fresh:!0});$("Area deleted")}catch(a){t.lastError=a.message||"Failed to delete area",$(t.lastError)}finally{t.areaSaving=!1}}}async function Ar(){const n=Rt.value;if(!n||!t.selectedNodeId){t.testPlanCatalog=null,t.testPlanCatalogError="";return}t.testPlanCatalogLoading=!0,t.testPlanCatalogError="";try{const a=await we(ye("test-plans/catalog"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:n.id})});t.testPlanCatalog=a&&a.catalog?a.catalog:null,a&&a.testPlans&&(t.stateData=Object.assign({},t.stateData||{},{testPlans:a.testPlans}))}catch(a){t.testPlanCatalog=null,t.testPlanCatalogError=a.message||"Failed to load area command/status catalog"}finally{t.testPlanCatalogLoading=!1}}async function _a(){if(!(!t.selectedNodeId||t.gaCatalogLoading)){t.gaCatalogLoading=!0;try{const n=await we(ye("areas/catalog"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId})});t.gaCatalog=Array.isArray(n&&n.gaCatalog)?n.gaCatalog:[]}catch(n){t.lastError=n.message||"Failed to load GA catalog",$(t.lastError)}finally{t.gaCatalogLoading=!1}}}function fi(n){const a=String(n||"").trim();a&&((t.areaDraftGaList||[]).includes(a)||(t.areaDraftGaList=[...t.areaDraftGaList||[],a]))}function Tr(n){const a=String(n||"").trim().toLowerCase(),l=o.find(d=>d.value===a);return l?l.label:a==="auto"?"Auto":"Command"}function Dr(n){const a=n&&typeof n=="object"?n:{},l=String(a.path||a.name||"Area").trim(),d=String(a.kind||"").trim(),h=Number(a.gaCount||0),I=Number(a.activeGaCount||0),k=[d,`${h} GA`,`active ${I}`].filter(Boolean).join(" | ");return k?`${l} ${k}`:l}function pi(n){const a=n&&typeof n=="object"?n:null;!a||!a.id||(t.areaDraftIsNew=!1,t.showAiAreaBuilder=!1,t.areaBuilderFocus=!1,t.areaSelectedId=a.id,t.areaSearch="",t.areaSearchOpen=!1)}function gi(){setTimeout(()=>{t.areaSearchOpen=!1},150)}function xr(n){const a=n&&typeof n=="object"?n:{},l=String(a.name||"Plan").trim(),d=String(a.areaName||a.areaId||"").trim(),h=Number(a.steps&&a.steps.length?a.steps.length:0),I=[d,`${h} steps`].filter(Boolean).join(" | ");return I?`${l} ${I}`:l}function hi(n){const a=n&&typeof n=="object"?n:null;!a||!a.id||(Bi(a),t.testPlanSearch="",t.testPlanSearchOpen=!1)}function mi(){setTimeout(()=>{t.testPlanSearchOpen=!1},150)}function bi(){const n=String(document&&document.documentElement&&document.documentElement.lang?document.documentElement.lang:"").trim().toLowerCase();return n?n.split("-")[0]||"en":String(navigator.language||"en").trim().toLowerCase().split("-")[0]||"en"}function vi(n){const a=String(n||"").trim();a&&(t.areaDraftGaList=(t.areaDraftGaList||[]).filter(l=>l!==a))}async function yi(n,a){const l=String(n||"").trim();if(!(!t.selectedNodeId||!l||t.areaGaRoleSavingGa===l)){t.areaGaRoleSavingGa=l,$(`Saving role for ${l}...`);try{const d=await we(ye("areas/ga-role/save"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,ga:l,role:a})});Array.isArray(d&&d.gaCatalog)&&(t.gaCatalog=d.gaCatalog),d&&d.areas&&(t.stateData=Object.assign({},t.stateData||{},{areas:d.areas})),Rt.value&&Array.isArray(Rt.value.gaList)&&Rt.value.gaList.includes(l)&&await Ar(),$(`Role saved for ${l}`)}catch(d){t.lastError=d.message||"Failed to save GA role",$(t.lastError)}finally{t.areaGaRoleSavingGa=""}}}function Si(){t.activeTab="areas",t.areaDraftIsNew=!0,t.areaSelectedId="",t.areaDraftId="",t.areaDraftName="New Area",t.areaDraftDescription="",t.areaDraftTags="",t.areaDraftGaList=[],t.areaLlmPrompt="",t.areaLlmError="",t.showAiAreaBuilder=!1,t.areaBuilderFocus=!1}async function _i(){if(!(!t.selectedNodeId||t.areaLlmRegenerating)){t.areaLlmRegenerating=!0,t.areaLlmError="",$("Regenerating AI areas...");try{const n=await we(ye("areas/regenerate-llm"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId})});Array.isArray(n&&n.gaCatalog)&&(t.gaCatalog=n.gaCatalog),n&&n.areas?t.stateData=Object.assign({},t.stateData||{},{areas:n.areas}):await es({fresh:!0}),$(`AI areas regenerated (${Number(n&&n.generatedCount?n.generatedCount:0)})`)}catch(n){t.areaLlmError=n.message||"Failed to regenerate AI areas",$(t.areaLlmError)}finally{t.areaLlmRegenerating=!1}}}async function wi(){if(!t.selectedNodeId||t.areaLlmBusy)return;const n=String(t.areaLlmPrompt||"").trim();if(n){t.areaLlmBusy=!0,t.areaLlmError="",$("AI is selecting area GA...");try{const a=await we(ye("areas/suggest-llm"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,prompt:n,name:t.areaDraftName,description:t.areaDraftDescription,gaList:t.areaDraftGaList||[]})}),l=a&&a.suggestion?a.suggestion:null;if(Array.isArray(a&&a.gaCatalog)&&(t.gaCatalog=a.gaCatalog),!l||!Array.isArray(l.gaList)||!l.gaList.length)throw new Error("The AI did not return any group addresses");!String(t.areaDraftName||"").trim()&&l.name&&(t.areaDraftName=String(l.name)),!String(t.areaDraftDescription||"").trim()&&l.description&&(t.areaDraftDescription=String(l.description)),(!t.areaDraftTags||!String(t.areaDraftTags).trim())&&Array.isArray(l.tags)&&l.tags.length&&(t.areaDraftTags=l.tags.join(", ")),t.areaDraftGaList=Array.from(new Set([...t.areaDraftGaList||[],...l.gaList.map(d=>String(d||"").trim()).filter(Boolean)])),t.showAiAreaBuilder=!1,t.areaBuilderFocus=!1,$(`AI added ${Number(l.gaList.length||0)} GA to the draft`)}catch(a){t.areaLlmError=a.message||"Failed to suggest area GA",$(t.areaLlmError)}finally{t.areaLlmBusy=!1}}}function Pi(n){if(n&&typeof n=="object"){t.testPlanPrompt=String(n.prompt||"").trim();return}t.testPlanPrompt=String(n||"").trim()}function Ir(n){const a=String(n||"").trim();return a&&(Array.isArray(t.testPlanCatalog&&t.testPlanCatalog.pairs)?t.testPlanCatalog.pairs:[]).find(d=>d&&d.command&&d.command.ga===a)||null}function Cr(n){const a=String(n||"").trim();return en.value.find(l=>l&&l.ga===a)||null}function Ai(n){const a=String(n||"").trim();return ur.value.find(l=>l&&l.ga===a)||null}function ts(n){const a=String(n||"").trim();if(!a)return[];const l=t.testPlanCatalog&&t.testPlanCatalog.dptOptionsById&&typeof t.testPlanCatalog.dptOptionsById=="object"?t.testPlanCatalog.dptOptionsById:{};return Array.isArray(l[a])?l[a]:[]}function Et(n){return String(n||"").trim().normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()}const Ti=[{type:"on",patterns:[/\bturn on\b/g,/\bturn(?:\s+\w+){1,4}\s+on\b/g,/\bswitch on\b/g,/\bswitch(?:\s+\w+){1,4}\s+on\b/g,/\bpower on\b/g,/\bpower(?:\s+\w+){1,4}\s+on\b/g,/\bstart\b/g,/\benable\b/g,/\bactivate\b/g,/\baccendi\b/g,/\battiva\b/g,/\ballume\b/g,/\bactive\b/g,/\beinschalten\b/g,/\baktivieren\b/g,/\benciende\b/g,/\bactivar\b/g,/\bliga\b/g,/\bativa\b/g,/\baan\b/g,/\binschakelen\b/g]},{type:"off",patterns:[/\bturn off\b/g,/\bturn(?:\s+\w+){1,4}\s+off\b/g,/\bswitch off\b/g,/\bswitch(?:\s+\w+){1,4}\s+off\b/g,/\bpower off\b/g,/\bpower(?:\s+\w+){1,4}\s+off\b/g,/\bdisable\b/g,/\bdeactivate\b/g,/\bshutdown\b/g,/\bspegni\b/g,/\bdisattiva\b/g,/\beteins\b/g,/\bdesactive\b/g,/\bausschalten\b/g,/\bdeaktivieren\b/g,/\bapaga\b/g,/\bdesactiva\b/g,/\bdesliga\b/g,/\bdesativa\b/g,/\buit\b/g,/\buitschakelen\b/g]},{type:"open",patterns:[/\bopen\b/g,/\braise\b/g,/\blift\b/g,/\bmove up\b/g,/\bapri\b/g,/\balza\b/g,/\bsolleva\b/g,/\bouvre\b/g,/\bmonte\b/g,/\boffnen\b/g,/\bhoch\b/g,/\bauf\b/g,/\babre\b/g,/\bsube\b/g,/\babrir\b/g,/\bsobe\b/g,/\bopenen\b/g,/\bomhoog\b/g]},{type:"close",patterns:[/\bclose\b/g,/\blower\b/g,/\bmove down\b/g,/\bchiudi\b/g,/\babbassa\b/g,/\bferme\b/g,/\bdescends?\b/g,/\bschliessen\b/g,/\brunter\b/g,/\bzu\b/g,/\bcierra\b/g,/\bbaja\b/g,/\bfechar\b/g,/\bdesce\b/g,/\bsluiten\b/g,/\bomlaag\b/g]},{type:"stop",patterns:[/\bstop\b/g,/\bhalt\b/g,/\bpause\b/g,/\bferma\b/g,/\barresta\b/g,/\barrete\b/g,/\bstoppe\b/g,/\banhalten\b/g,/\bstopp\b/g,/\bdeten\b/g,/\bparar\b/g,/\bpare\b/g,/\bstoppen\b/g]}];function Di(n){const a=Et(n);if(!a)return"";const l=[];return Ti.forEach(d=>{d.patterns.forEach(h=>{h.lastIndex=0;let I;for(;(I=h.exec(a))!==null;)l.push({type:d.type,index:I.index})})}),l.sort((d,h)=>d.index-h.index),l[0]?l[0].type:""}function xi(n){return["on","open"].includes(String(n||"").trim().toLowerCase())}function Ii(n){return["off","close","stop"].includes(String(n||"").trim().toLowerCase())}function hn(n,a,l=""){const d=ts(a);if(!d.length)return String(n??"");const h=String(n??"").trim(),I=Et(h),k=Et(l),j=`${I} ${k}`.trim(),G=Di(l||j);if(G){if(xi(G)){const H=d.find(he=>["true","1","100"].includes(String(he.value)));if(H)return String(H.value);const ie=d.find(he=>/\b(on|open|up|start|enable|enabled|active|acceso|accesa|aperto|aperta|su|einschalten|allume|enciende|liga|aan)\b/.test(Et(he.label)));if(ie)return String(ie.value)}if(Ii(G)){const H=d.find(he=>["false","0"].includes(String(he.value)));if(H)return String(H.value);const ie=d.find(he=>/\b(off|close|down|stop|disable|disabled|inactive|chiuso|spento|giu|ausschalten|eteins|apaga|desliga|uit)\b/.test(Et(he.label)));if(ie)return String(ie.value)}}if(d.some(H=>String(H.value)===h))return h;const oe=d.find(H=>Et(H.label)===I);if(oe)return String(oe.value);const V=d.find(H=>{const ie=Et(H.label);return I&&(ie.includes(I)||I.includes(ie))});if(V)return String(V.value);const de=/\b(on|open|up|true|1|accendi|attiva|apri|su|acceso|accesa|accesi|accese|aperto|aperta|enabled|enable|start|allume|einschalten|enciende|liga|aan)\b/,se=/\b(off|close|down|false|0|spegni|disattiva|chiudi|giu|spento|spenta|spenti|spente|chiuso|chiusa|disabled|disable|stop|ferma|eteins|ausschalten|apaga|desliga|uit)\b/;if(de.test(j)){const H=d.find(he=>["true","1","100"].includes(String(he.value)));if(H)return String(H.value);const ie=d.find(he=>/\b(on|open|up|start|enable|enabled|active|acceso|accesa|aperto|aperta|su)\b/.test(Et(he.label)));if(ie)return String(ie.value)}if(se.test(j)){const H=d.find(he=>["false","0"].includes(String(he.value)));if(H)return String(H.value);const ie=d.find(he=>/\b(off|close|down|stop|disable|disabled|inactive|spento|spenta|chiuso|chiusa|giu)\b/.test(Et(he.label)));if(ie)return String(ie.value)}return String(d[0].value)}function wa(n){if(!n)return;const a=ts(n.commandDPT),l=ts(n.statusDPT||n.commandDPT),d=String(n.action||"").trim().toLowerCase();a.length&&(n.commandPayload=hn(n.commandPayload,n.commandDPT,d||`${n.title||""} ${n.description||""} ${n.reason||""}`)),l.length&&(n.expectedPayload=hn(n.expectedPayload,n.statusDPT||n.commandDPT,d||`${n.title||""} ${n.description||""} ${n.reason||""}`))}function mn(n={}){if(String(n.kind||"").trim().toLowerCase()==="wait")return{id:String(n.id||`step-${Date.now()}-${Math.round(Math.random()*1e3)}`),kind:"wait",action:"",collapsed:n.collapsed!==!1,title:String(n.title||"Wait"),description:String(n.description||""),reason:String(n.reason||""),delayMs:Number(n.delayMs||n.readDelayMs||1200),commandGA:"",commandDPT:"",commandPayload:"",statusGA:"",statusDPT:"",expectedPayload:"",statusWriteTimeoutMs:0,statusResponseTimeoutMs:0};const l=String(n.commandGA||"").trim()||String(en.value[0]?.ga||""),d=Ir(l),h=Cr(l),I=d&&d.status?d.status:null,k={id:String(n.id||`step-${Date.now()}-${Math.round(Math.random()*1e3)}`),kind:String(n.kind||(I?"write_and_verify":"write_only")),action:String(n.action||"").trim().toLowerCase(),collapsed:n.collapsed!==!1,title:String(n.title||(h?`Step ${h.label}`:"Manual Step")),description:String(n.description||""),reason:String(n.reason||""),commandGA:l,commandDPT:String(n.commandDPT||h?.dpt||""),commandPayload:String(n.commandPayload??""),statusGA:String(n.statusGA||I?.ga||""),statusDPT:String(n.statusDPT||I?.dpt||""),expectedPayload:String(n.expectedPayload??n.commandPayload??""),statusWriteTimeoutMs:Number(n.statusWriteTimeoutMs||n.timeoutMs||5e3),statusResponseTimeoutMs:Number(n.statusResponseTimeoutMs||n.timeoutMs||5e3)};return wa(k),k}function Pa(n){const a=T(n,null);return a?(a.steps=(Array.isArray(a.steps)?a.steps:[]).map(l=>mn(l)),a):null}function Ci(){return Pa({id:"",name:"",description:"",areaId:ot.value?String(ot.value.id||""):"",areaName:ot.value?String(ot.value.path||ot.value.name||""):"",prompt:"",source:"manual",generatedAt:new Date().toISOString(),steps:[]})}function kr(n){if(!n||n.kind==="wait")return;const a=Cr(n.commandGA),l=Ai(n.statusGA),d=Ir(n.commandGA);a&&(n.commandDPT=String(a.dpt||"")),l&&(n.statusDPT=String(l.dpt||"")),d&&d.status&&(!n.statusGA||n.statusGA==="")&&(n.statusGA=String(d.status.ga||""),n.statusDPT=String(d.status.dpt||""),n.kind="write_and_verify"),n.statusGA&&(n.kind="write_and_verify"),n.expectedPayload||(n.expectedPayload=String(n.commandPayload??"")),n.statusGA||(n.statusDPT="",n.kind="write_only"),wa(n)}function ki(){if(!t.testPlanDraft)return;const n={id:`step-${Date.now()}-${Math.round(Math.random()*1e3)}`,kind:"write_only",action:"",collapsed:!0,title:"Manual Step",description:"",reason:"",commandGA:"",commandDPT:"",commandPayload:"",statusGA:"",statusDPT:"",expectedPayload:"",statusWriteTimeoutMs:5e3,statusResponseTimeoutMs:5e3};t.testPlanDraft.steps=[...t.testPlanDraft.steps||[],n]}function Ri(){if(!t.testPlanDraft)return;const n=mn({id:`wait-${(t.testPlanDraft.steps?.length||0)+1}`,kind:"wait",title:"Wait",description:"Pause the test before the next action.",delayMs:1200});t.testPlanDraft.steps=[...t.testPlanDraft.steps||[],n]}function Ni(n){if(!t.testPlanDraft||!Array.isArray(t.testPlanDraft.steps))return;const a=t.testPlanDraft.steps[n];if(!a)return;const l=mn(Object.assign({},a,{id:`${a.id||"step"}-copy`}));t.testPlanDraft.steps.splice(n+1,0,l)}function Ei(n){!t.testPlanDraft||!Array.isArray(t.testPlanDraft.steps)||t.testPlanDraft.steps.splice(n,1)}function Mi(n){n&&(n.collapsed=n.collapsed!==!0)}function bn(){t.draggedTestPlanStepId="",t.dragOverTestPlanStepId=""}function Oi(n,a){const l=String(n||"").trim();l&&(t.draggedTestPlanStepId=l,t.dragOverTestPlanStepId="",a&&a.dataTransfer&&(a.dataTransfer.effectAllowed="move",a.dataTransfer.setData("text/plain",l)))}function $i(n){const a=String(n||"").trim();!a||!t.draggedTestPlanStepId||a===t.draggedTestPlanStepId||(t.dragOverTestPlanStepId=a)}function Li(n,a){if(!t.testPlanDraft||!Array.isArray(t.testPlanDraft.steps))return;const l=String(n||"").trim(),d=String(a||"").trim();if(!l||!d||l===d)return;const h=t.testPlanDraft.steps.slice(),I=h.findIndex(G=>String(G&&G.id?G.id:"")===l),k=h.findIndex(G=>String(G&&G.id?G.id:"")===d);if(I===-1||k===-1)return;const[j]=h.splice(I,1);h.splice(k,0,j),t.testPlanDraft.steps=h}function Fi(n,a){a&&a.preventDefault();const l=String(t.draggedTestPlanStepId||"").trim(),d=String(n||"").trim();l&&d&&l!==d&&Li(l,d),bn()}function Gi(){!t.testPlanDraft||t.testPlanRunning||(t.testPlanRunMode="single",t.testPlanRepeatStopRequested=!1,t.testPlanRunConfirmOpen=!0)}function ji(){!t.testPlanDraft||t.testPlanRunning||(t.testPlanRunMode="repeat",t.testPlanRepeatStopRequested=!1,t.testPlanRunConfirmOpen=!0)}function Rr(){t.testPlanRunConfirmOpen=!1,t.testPlanRunMode="single"}function Ui(){t.testPlanRepeatForever===!0&&(t.testPlanRepeatStopRequested=!0,$("Stopping repeat mode after the current cycle..."))}function Nr(n=null){const a=n||Qt.value;a&&(t.testResultFocusMode=!1,t.testPlanSelectedId=String(a.id||""),t.testPlanDraft=Pa(a),t.testPlanPrompt=String(a.prompt||""),t.testPlanGeneration={provider:String(a.source||"saved"),model:"",fallback:!1,error:""},t.testPlanRunConfirmOpen=!1,t.showAiPlanner=!1,t.testTemplateBuilderFocus=!1,le())}function vn(){Se=null,t.testPlanPendingActionLabel=""}function Er(){t.testPlanUnsavedConfirmOpen=!1,vn()}function Mr(){const n=Se;t.testPlanUnsavedConfirmOpen=!1,vn(),typeof n=="function"&&n()}function yn(n,a="another plan"){if(!fr.value){n();return}Se=n,t.testPlanPendingActionLabel=String(a||"another plan"),t.testPlanUnsavedConfirmOpen=!0}function Bi(n){if(!n||!n.id)return;const a=String(n.id);t.testPlanSelectedId!==a&&yn(()=>Nr(n),`plan "${n.name||a}"`)}function Vi(){ue(),$("Plan changes discarded")}async function Wi(){await $r()&&Mr()}function Or(){if(!Pe.value.length){$("Define at least one area before creating a test plan");return}yn(()=>{t.activeTab="tests",t.testResultFocusMode=!1,t.testPlanSelectedId="",t.testPlanDraft=Ci(),t.testPlanGeneration=null,t.testPlanRunConfirmOpen=!1,t.testPlanPrompt="",t.showAiPlanner=!1,t.testTemplateBuilderFocus=!1,le()},"a new plan")}function Hi(n){const a=String(n||"").trim();if(!a)return;const l=Pe.value.find(d=>d&&d.id===a);l&&(t.testAreaSelectedId=a,t.testPlanDraft&&(t.testPlanDraft.areaId=a,t.testPlanDraft.areaName=String(l.path||l.name||"")))}function Ki(){const n=T(t.testPlanDraft||Qt.value,null);n&&(t.activeTab="tests",t.testResultFocusMode=!1,t.testPlanSelectedId="",t.testPlanRunConfirmOpen=!1,t.testPlanGeneration={provider:"duplicated",model:"",fallback:!1,error:""},n.id="",n.name=String(n.name||"Plan Draft").trim()?`${String(n.name||"Plan Draft").trim()} Copy`:"Plan Copy",t.testPlanPrompt=String(n.prompt||t.testPlanPrompt||""),t.testPlanDraft=Pa(n),t.showAiPlanner=!0,t.testTemplateBuilderFocus=!1,le(),$("Plan duplicated"))}async function zi(){const n=ot.value,a=String(t.testPlanPrompt||"").trim(),l=bi();if(!(!t.selectedNodeId||!n||!a||t.testPlanGenerating)){t.testPlanGenerating=!0,t.testTemplateBuilderFocus=!1,t.showAiPlanner=!1,t.testResultFocusMode=!1,t.testPlanGenerationError="",$("Building test plan...");try{const d=await we(ye("test-plans/generate"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:n.id,prompt:a,language:l})});t.testPlanDraft=d&&d.plan?Pa(d.plan):null,t.testPlanCatalog=d&&d.catalog?d.catalog:t.testPlanCatalog,t.testPlanGeneration=d&&d.generation?d.generation:null,t.testPlanGenerationError="",t.testPlanSelectedId="",t.testPlanRunConfirmOpen=!1,t.showAiPlanner=!1,d&&d.testPlans&&(t.stateData=Object.assign({},t.stateData||{},{testPlans:d.testPlans})),le(),$("Test plan ready")}catch(d){const h=d.message||"Failed to build the test plan";t.lastError=h,t.testPlanGenerationError=h,t.testPlanGeneration={provider:"",model:"",fallback:!1,error:h},$(h)}finally{t.testPlanGenerating=!1}}}async function $r(){if(!t.selectedNodeId||!t.testPlanDraft||t.testPlanSaving)return!1;t.testPlanSaving=!0,$("Saving test plan...");try{const n=await we(ye("test-plans/save"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,plan:Object.assign({},t.testPlanDraft,{prompt:t.testPlanPrompt})})});return n&&n.testPlans&&(t.stateData=Object.assign({},t.stateData||{},{testPlans:n.testPlans})),n&&n.planId&&(t.testPlanSelectedId=n.planId),n&&n.planId&&t.testPlanDraft&&(t.testPlanDraft.id=n.planId),t.testPlanRunConfirmOpen=!1,le(),$("Test plan saved"),!0}catch(n){return t.lastError=n.message||"Failed to save test plan",$(t.lastError),!1}finally{t.testPlanSaving=!1}}async function Ji(){const n=Qt.value;if(!(!n||!t.selectedNodeId||t.testPlanDeleting)){t.testPlanDeleting=!0,$("Deleting test plan...");try{const a=await we(ye("test-plans/delete"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,planId:n.id})});a&&a.testPlans&&(t.stateData=Object.assign({},t.stateData||{},{testPlans:a.testPlans})),t.testPlanDraft=null,t.testPlanGeneration=null,t.testPlanRunConfirmOpen=!1,t.showAiPlanner=!0,t.testTemplateBuilderFocus=!1,le(),$("Test plan deleted")}catch(a){t.lastError=a.message||"Failed to delete test plan",$(t.lastError)}finally{t.testPlanDeleting=!1}}}async function qi(n="single"){if(!t.selectedNodeId||!t.testPlanDraft||t.testPlanRunning)return;const l=String(n||t.testPlanRunMode||"single").trim().toLowerCase()==="repeat";t.testPlanRunning=!0,t.showAiPlanner=!1,t.testTemplateBuilderFocus=!1,t.testPlanRepeatForever=l,t.testPlanRepeatStopRequested=!1,t.testPlanRunningStepId="",t.testPlanRunConfirmOpen=!1,t.lastError="",$(l?"Running test plan in repeat mode...":"Running test plan...");try{const d=JSON.parse(JSON.stringify(Object.assign({},t.testPlanDraft,{prompt:t.testPlanPrompt}))),h=Array.isArray(d.steps)?d.steps:[];if(!d.areaId)throw new Error("Missing areaId in test plan");if(!h.length)throw new Error("The test plan has no executable steps");let I=ot.value,k=0;do{k+=1;const j=`${d.id||"plan"}:${Date.now()}`,G=[];t.liveTestResultId=j,t.testResultsMenuOpen=!0,Sa(j,{openMenu:!0,activateResultsTab:!0,resultOnly:!0}),t.stateData=Object.assign({},t.stateData||{},{testPlanReport:ln({plan:d,area:I,stepResults:[],reportId:j})});try{await Yo(d.name||"Test plan",d.description||"")}catch{}for(let V=0;V<h.length;V+=1){const de=h[V];t.testPlanRunningStepId=de&&de.id?de.id:"";const se=l?`Cycle ${k} · `:"";$(`${se}Step ${V+1}/${h.length}: ${de&&de.title?de.title:"Running..."}`);try{await Xo(de||{title:`Step ${V+1}`},V+1)}catch{$(`Voice unavailable for step ${V+1}. Continuing test...`)}try{const H=await we(ye("test-plans/run-step"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:d.areaId,step:de})});H&&H.area&&(I=H.area),G.push(H&&H.stepResult?H.stepResult:br(de,new Error("Step returned no result")))}catch(H){G.push(br(de,H))}t.stateData=Object.assign({},t.stateData||{},{testPlanReport:ln({plan:d,area:I,stepResults:G.slice(),reportId:j})})}const oe=ln({plan:d,area:I,stepResults:G,reportId:j});t.stateData=Object.assign({},t.stateData||{},{testPlans:mt.value,testPlanReport:oe}),Sa(j,{openMenu:!0,activateResultsTab:!0,resultOnly:!0});try{await ii(oe)}catch(V){t.lastError=V.message||"Failed to save test result",$(`Test completed, but the result was not saved: ${t.lastError}`)}l&&t.testPlanRepeatStopRequested!==!0&&(t.testResultFocusMode=!1,$(`Cycle ${k} completed. Starting the next cycle...`))}while(l&&t.testPlanRepeatStopRequested!==!0);t.testPlanRunConfirmOpen=!1,t.lastError||$(l?"Repeat mode stopped":"Test completed"),requestAnimationFrame(()=>{try{y.value&&typeof y.value.scrollIntoView=="function"&&y.value.scrollIntoView({behavior:"smooth",block:"start"})}catch{}})}catch(d){t.lastError=d.message||"Failed to run test plan",$(t.lastError)}finally{t.testPlanRunningStepId="",ae(),t.testPlanRunning=!1,t.testPlanRepeatForever=!1,t.testPlanRepeatStopRequested=!1,t.testPlanRunMode="single"}}async function Xi(){if(t.selectedNodeId){$("Exporting config...");try{const n=await we(ye("config/export"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId})}),a=new Blob([JSON.stringify(n,null,2)],{type:"application/json"}),l=window.URL.createObjectURL(a),d=document.createElement("a");d.href=l,d.download=`knx-ai-config-${t.selectedNodeId}.json`,document.body.appendChild(d),d.click(),document.body.removeChild(d),window.URL.revokeObjectURL(l),$("Config exported")}catch(n){t.lastError=n.message||"Failed to export config",$(t.lastError)}}}function Yi(){w.value&&w.value.click()}async function Qi(n){const a=n&&n.target&&n.target.files&&n.target.files[0]?n.target.files[0]:null;if(!(!a||!t.selectedNodeId)){$("Importing config...");try{const l=await a.text(),d=JSON.parse(l),h=await we(ye("config/import"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,config:d})});t.stateData=Object.assign({},t.stateData||{},{areas:h.areas||ps.value,profiles:h.profiles||gs.value,actuatorTests:h.actuatorTests||hs.value,testPlans:h.testPlans||mt.value,testResults:h.testResults||Hs.value}),await _a(),$("Config imported")}catch(l){t.lastError=l.message||"Failed to import config",$(t.lastError)}finally{n&&n.target&&(n.target.value="")}}}function Zi(){t.pollStateHandle||(t.pollStateHandle=window.setInterval(()=>{t.autoRefresh&&es({fresh:!1})},1500)),t.pollNodesHandle||(t.pollNodesHandle=window.setInterval(()=>{dn({preserveSelection:!0})},15e3))}function ec(){t.pollStateHandle&&(window.clearInterval(t.pollStateHandle),t.pollStateHandle=null),t.pollNodesHandle&&(window.clearInterval(t.pollNodesHandle),t.pollNodesHandle=null)}return oo(async()=>{at(),window.addEventListener("resize",at),document.addEventListener("keydown",Jt),document.addEventListener("fullscreenchange",ve),await dn({preserveSelection:!1}),await es({fresh:!0}),await _a(),Zi()}),io(()=>{window.removeEventListener("resize",at),document.removeEventListener("keydown",Jt),document.removeEventListener("fullscreenchange",ve),ec(),ae()}),(n,a)=>(b(),v(X,null,[i("header",Nd,[a[42]||(a[42]=i("div",{class:"m-header-brand"},[i("span",{class:"m-logo-mark"},"K"),i("span",{class:"hb-logo-text-mobile"},"KNX AI")],-1)),i("button",{class:ce(["hamburger-icon",{"hamburger-icon-cross":Z.value}]),type:"button","aria-expanded":Z.value?"true":"false","aria-controls":"knx-ai-sidebar","aria-label":"Toggle menu",onClick:is},[...a[41]||(a[41]=[i("span",null,null,-1),i("span",null,null,-1),i("span",null,null,-1),i("span",null,null,-1)])],10,Ed)]),F.value&&Z.value?(b(),v("button",{key:0,class:"sidebar-overlay",type:"button","aria-label":"Close menu",onClick:dt})):M("",!0),i("div",{class:ce(["page-shell",{"sidebar-collapsed":!Z.value,"sidebar-mobile-open":F.value&&Z.value}])},[i("aside",Md,[i("div",Od,[a[43]||(a[43]=i("div",{class:"sidebar-brand-mark","aria-hidden":"true"},"K",-1)),a[44]||(a[44]=i("div",{class:"sidebar-brand"},[i("p",{class:"eyebrow"},"KNX Ultimate")],-1)),i("button",{class:"sidebar-collapse-toggle",type:"button","aria-expanded":Z.value?"true":"false","aria-controls":"knx-ai-sidebar","aria-label":"Toggle sidebar",onClick:is},[i("span",Ld,S(Z.value?F.value?"×":"‹":"›"),1)],8,$d)]),i("nav",Fd,[i("button",{class:ce(["tab-button",{active:t.activeTab==="overview"}]),type:"button",onClick:a[0]||(a[0]=l=>Ds("overview"))},[...a[45]||(a[45]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-a7040fdd><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-a7040fdd><path d="M3 10.8 12 3l9 7.8v9.2a1 1 0 0 1-1 1h-5v-6h-6v6H4a1 1 0 0 1-1-1z" data-v-a7040fdd></path></svg></span><span class="sidebar-nav-copy" data-v-a7040fdd><span class="sidebar-nav-title" data-v-a7040fdd>Overview</span><span class="sidebar-nav-meta" data-v-a7040fdd>Traffic and diagnostics</span></span>',2)])],2),i("button",{class:ce(["tab-button",{active:t.activeTab==="areas"}]),type:"button",onClick:a[1]||(a[1]=l=>Ds("areas"))},[...a[46]||(a[46]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-a7040fdd><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-a7040fdd><path d="M3 3h8v8H3zm10 0h8v8h-8zM3 13h8v8H3zm10 0h8v8h-8z" data-v-a7040fdd></path></svg></span><span class="sidebar-nav-copy" data-v-a7040fdd><span class="sidebar-nav-title" data-v-a7040fdd>Areas</span><span class="sidebar-nav-meta" data-v-a7040fdd>ETS grouping and editing</span></span>',2)])],2),i("button",{class:ce(["tab-button sidebar-nav-child",{active:t.activeTab==="tests"}]),type:"button",disabled:!Pe.value.length,onClick:a[2]||(a[2]=l=>Ds("tests"))},[...a[47]||(a[47]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-a7040fdd><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-a7040fdd><path d="M9 3h6v2h-1v4.3l5.5 8.8A2 2 0 0 1 17.8 21H6.2a2 2 0 0 1-1.7-2.9L10 9.3V5H9zm1.9 8.2L6.9 18h10.2l-4-6.8z" data-v-a7040fdd></path></svg></span><span class="sidebar-nav-copy" data-v-a7040fdd><span class="sidebar-nav-title" data-v-a7040fdd>Tests</span><span class="sidebar-nav-meta" data-v-a7040fdd>Templates and active checks</span></span>',2)])],10,Gd),i("button",{class:ce(["tab-button sidebar-nav-child",{active:t.activeTab==="results"}]),type:"button",onClick:a[3]||(a[3]=l=>Ds("results"))},[...a[48]||(a[48]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-a7040fdd><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-a7040fdd><path d="M4 4h16v4H4zm0 6h16v4H4zm0 6h16v4H4z" data-v-a7040fdd></path></svg></span><span class="sidebar-nav-copy" data-v-a7040fdd><span class="sidebar-nav-title" data-v-a7040fdd>Test Results</span><span class="sidebar-nav-meta" data-v-a7040fdd>Saved and live reports</span></span>',2)])],2),i("button",{class:ce(["tab-button",{active:t.activeTab==="assistant"}]),type:"button",onClick:a[4]||(a[4]=l=>Ds("assistant"))},[...a[49]||(a[49]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-a7040fdd><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-a7040fdd><path d="M4 5h16a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H9l-5 4v-4H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2z" data-v-a7040fdd></path></svg></span><span class="sidebar-nav-copy" data-v-a7040fdd><span class="sidebar-nav-title" data-v-a7040fdd>Assistant</span><span class="sidebar-nav-meta" data-v-a7040fdd>Ask the KNX analyzer</span></span>',2)])],2),i("button",{class:ce(["tab-button",{active:t.activeTab==="settings"}]),type:"button",onClick:a[5]||(a[5]=l=>Ds("settings"))},[...a[50]||(a[50]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-a7040fdd><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-a7040fdd><path d="M19.14 12.94a7.43 7.43 0 0 0 .05-.94 7.43 7.43 0 0 0-.05-.94l2.03-1.58a.5.5 0 0 0 .12-.64l-1.92-3.32a.5.5 0 0 0-.6-.22l-2.39.96a7.18 7.18 0 0 0-1.63-.94l-.36-2.54A.5.5 0 0 0 13.9 2h-3.8a.5.5 0 0 0-.49.42l-.36 2.54a7.18 7.18 0 0 0-1.63.94l-2.39-.96a.5.5 0 0 0-.6.22L2.71 8.48a.5.5 0 0 0 .12.64l2.03 1.58a7.43 7.43 0 0 0-.05.94 7.43 7.43 0 0 0 .05.94l-2.03 1.58a.5.5 0 0 0-.12.64l1.92 3.32a.5.5 0 0 0 .6.22l2.39-.96c.5.39 1.04.71 1.63.94l.36 2.54a.5.5 0 0 0 .49.42h3.8a.5.5 0 0 0 .49-.42l.36-2.54c.59-.23 1.13-.55 1.63-.94l2.39.96a.5.5 0 0 0 .6-.22l1.92-3.32a.5.5 0 0 0-.12-.64zM12 15.2A3.2 3.2 0 1 1 12 8.8a3.2 3.2 0 0 1 0 6.4z" data-v-a7040fdd></path></svg></span><span class="sidebar-nav-copy" data-v-a7040fdd><span class="sidebar-nav-title" data-v-a7040fdd>Settings</span><span class="sidebar-nav-meta" data-v-a7040fdd>Node and configuration settings</span></span>',2)])],2)]),Z.value?(b(),v("div",jd,[i("button",{class:"primary-button sidebar-action-button",type:"button",disabled:t.loadingNodes||t.loadingState,onClick:Zo}," Refresh ",8,Ud)])):M("",!0),Z.value?(b(),v("div",Bd,[i("span",{class:ce(["status-pill",{error:!!t.lastError}])},S(t.status),3),fs.value?(b(),v("span",Vd,"Provider: "+S(fs.value.llmProvider||"n/a")+" | Model: "+S(fs.value.llmModel||"n/a"),1)):M("",!0),i("a",{class:"sidebar-doc-link",href:ev,target:"_blank",rel:"noopener noreferrer"}," Documentation: KNX AI Vue ")])):M("",!0)]),i("section",Wd,[i("main",Hd,[t.activeTab==="overview"?(b(),v("section",Kd,[i("div",zd,[a[51]||(a[51]=i("h2",null,"Summary",-1)),ke.value.meta?.generatedAt?(b(),v("span",Jd,S(N(ke.value.meta.generatedAt)),1)):M("",!0)]),i("pre",qd,S(Uo.value),1),i("div",Xd,[i("article",Yd,[a[52]||(a[52]=i("span",null,"Telegrams",-1)),i("strong",null,S(Number(ke.value.counters?.telegrams||0)),1)]),i("article",Qd,[a[53]||(a[53]=i("span",null,"Rate",-1)),i("strong",null,S(Number(ke.value.counters?.overallRatePerSec||0))+"/s",1)]),i("article",Zd,[a[54]||(a[54]=i("span",null,"Repeat",-1)),i("strong",null,S(Number(ke.value.counters?.repeated||0)),1)]),i("article",ef,[a[55]||(a[55]=i("span",null,"Unknown DPT",-1)),i("strong",null,S(Number(ke.value.counters?.unknownDpt||0)),1)])])])):M("",!0),t.activeTab==="areas"?(b(),v("section",tf,[i("div",sf,[a[56]||(a[56]=i("h2",null,"Select an Area",-1)),i("div",af,[i("span",nf,S(Number(Ws.value.suggestedAreaCount||0))+" areas",1),i("button",{class:"secondary-button",type:"button",disabled:t.areaLlmRegenerating||!Xt.value.llmEnabled,onClick:_i},S(t.areaLlmRegenerating?"Regenerating...":"Regenerate AI Areas"),9,rf),i("button",{class:"secondary-button new-button",type:"button",onClick:Si}," New Area ")])]),i("div",lf,[i("div",of,[i("span",cf,"GA "+S(Number(Ws.value.gaCount||0)),1),i("span",uf,"Hierarchical "+S(Number(Ws.value.hierarchicalGaCount||0)),1),i("span",df,"Secondary "+S(Number(Ws.value.secondaryGroupCount||0)),1),i("span",ff,"Active "+S(Number(Ws.value.activeAreaCount||0)),1)])]),Za.value.length||t.areaDraftIsNew?(b(),v("div",pf,[!Me.value&&!t.areaDraftIsNew?(b(),v("div",gf,[i("label",hf,[a[57]||(a[57]=i("span",null,"Areas",-1)),i("div",mf,[fe(i("input",{"onUpdate:modelValue":a[6]||(a[6]=l=>t.areaSearch=l),class:"area-search-select-input",type:"text",placeholder:Me.value?Dr(Me.value):"Search area...",onFocus:a[7]||(a[7]=l=>t.areaSearchOpen=!0),onInput:a[8]||(a[8]=l=>t.areaSearchOpen=!0),onBlur:gi},null,40,bf),[[Ee,t.areaSearch]]),t.areaSearchOpen&&Za.value.length?(b(),v("div",vf,[(b(!0),v(X,null,ne(Za.value.slice(0,80),l=>(b(),v("button",{key:l.id,type:"button",class:ce(["area-search-select-option",{active:Me.value&&Me.value.id===l.id}]),onMousedown:Ft(d=>pi(l),["prevent"])},S(Dr(l)),43,yf))),128))])):M("",!0)])])])):M("",!0),Me.value||t.areaDraftIsNew?(b(),v("article",{key:1,class:ce(["area-detail",{"area-detail-wide":t.areaDraftIsNew}])},[i("div",Sf,[t.areaBuilderFocus!==!0?(b(),v("div",_f,[a[58]||(a[58]=i("div",null,[i("h4",null,"Edit Area"),i("p",{class:"area-detail-subhead"},"The installer can rename the area and decide exactly which group addresses belong to it. Everything is persisted per KNX AI node.")],-1)),i("div",wf,[t.areaDraftIsNew&&!dr.value?(b(),v("button",{key:0,class:"secondary-button",type:"button",onClick:ai}," Show AI Area Builder ")):M("",!0),t.areaDraftIsNew?M("",!0):(b(),v("button",{key:1,class:"danger-button",type:"button",disabled:t.areaSaving,onClick:di}," Delete Area ",8,Pf)),i("button",{class:"secondary-button",type:"button",disabled:t.areaSaving,onClick:ui}," Reset ",8,Af),i("button",{class:"primary-button",type:"button",disabled:t.areaSaving,onClick:ci},S(t.areaSaving?"Saving...":"Save Area"),9,Tf),i("button",{class:"secondary-button",type:"button",disabled:t.areaSaving,onClick:ri}," Close ",8,Df)])])):M("",!0),t.areaBuilderFocus!==!0?(b(),v("div",xf,[i("label",If,[a[59]||(a[59]=i("span",null,"Area name",-1)),fe(i("input",{"onUpdate:modelValue":a[9]||(a[9]=l=>t.areaDraftName=l),type:"text",placeholder:"Installer alias"},null,512),[[Ee,t.areaDraftName]])]),i("label",Cf,[a[60]||(a[60]=i("span",null,"Description",-1)),fe(i("textarea",{"onUpdate:modelValue":a[10]||(a[10]=l=>t.areaDraftDescription=l),rows:"3",placeholder:"Optional note for diagnostics and reports"},null,512),[[Ee,t.areaDraftDescription]])]),i("label",kf,[a[61]||(a[61]=i("span",null,"Add group addresses to this area",-1)),fe(i("input",{"onUpdate:modelValue":a[11]||(a[11]=l=>t.gaCatalogSearch=l),type:"text",placeholder:"Search GA, label or ETS path"},null,512),[[Ee,t.gaCatalogSearch]])])])):M("",!0),t.areaDraftIsNew&&dr.value?(b(),v("div",Rf,[i("div",{class:ce(["ai-planner-shell-head",{"template-builder-focus-head":t.areaBuilderFocus===!0}])},[a[62]||(a[62]=i("div",null,[i("h4",null,"AI Area Builder"),i("p",{class:"area-detail-subhead"},"Describe the room, zone or function you want. The AI will suggest the most relevant group addresses for this draft.")],-1)),t.areaBuilderFocus===!0?(b(),v("div",Nf,[i("button",{class:"secondary-button",type:"button",onClick:ni}," Close ")])):M("",!0)],2),i("div",Ef,[i("label",Mf,[a[63]||(a[63]=i("span",null,"Assistant prompt",-1)),fe(i("textarea",{"onUpdate:modelValue":a[12]||(a[12]=l=>t.areaLlmPrompt=l),rows:"3",placeholder:"Example: Add all technical room lighting command and status GA."},null,512),[[Ee,t.areaLlmPrompt]])])]),i("div",Of,[i("button",{class:"primary-button",type:"button",disabled:t.areaLlmBusy||!t.areaLlmPrompt.trim()||!Xt.value.llmEnabled,onClick:wi},S(t.areaLlmBusy?"Suggesting...":"Suggest GA with AI"),9,$f)]),t.areaLlmError?(b(),v("p",Lf,S(t.areaLlmError),1)):M("",!0),Xt.value.llmEnabled?M("",!0):(b(),v("p",Ff," Enable the AI in the KNX AI node to regenerate areas or suggest GA for a new draft. "))])):M("",!0),t.areaBuilderFocus!==!0?(b(),v("div",Gf,[i("div",null,[a[65]||(a[65]=i("h4",null,"Area GA membership",-1)),cr.value.length?(b(),v("ul",jf,[(b(!0),v(X,null,ne(cr.value,l=>(b(),v("li",{key:l.ga,class:"area-ga-item"},[i("div",Uf,[i("strong",null,S(l.ga),1),i("span",null,[pe(S(l.label||"Unlabeled GA"),1),l.dpt?(b(),v("span",Bf," | DPT "+S(l.dpt),1)):M("",!0)]),i("span",null,[pe("Role "+S(Tr(l.role)),1),l.roleSource?(b(),v("span",Vf," | source "+S(l.roleSource),1)):M("",!0)])]),i("div",Wf,[i("label",Hf,[a[64]||(a[64]=i("span",null,"Role",-1)),i("select",{value:l.roleOverride&&l.roleOverride!=="auto"?l.roleOverride:l.role||"neutral",disabled:t.areaGaRoleSavingGa===l.ga,onChange:d=>yi(l.ga,d.target.value)},[(b(),v(X,null,ne(o,d=>i("option",{key:d.value,value:d.value},S(d.label),9,zf)),64))],40,Kf)]),i("button",{class:"secondary-button",type:"button",onClick:d=>vi(l.ga)}," Remove ",8,Jf)])]))),128))])):(b(),v("p",qf,"No GA selected for this area yet."))]),i("div",null,[i("div",Xf,[a[66]||(a[66]=i("div",null,[i("h4",null,"Available GA"),i("p",{class:"area-detail-subhead"},"Pick from the ETS catalog. Already selected GA are hidden from this list.")],-1)),i("span",Yf,S(t.gaCatalogLoading?"Loading...":`${ir.value.length} visible`),1)]),i("div",Qf,[(b(!0),v(X,null,ne(ir.value,l=>(b(),v("button",{key:l.ga,type:"button",class:"area-list-item",onClick:d=>fi(l.ga)},[i("span",ep,S(l.ga),1),i("span",tp,S(l.label||"Unlabeled GA"),1),i("span",sp,[pe(S(l.hierarchyPath||l.dpt||""),1),l.role?(b(),v("span",ap," | "+S(Tr(l.role)),1)):M("",!0)])],8,Zf))),128))])])])):M("",!0),t.areaBuilderFocus!==!0?(b(),v("p",np,[a[67]||(a[67]=pe(" Original ETS path: ",-1)),i("strong",null,S(t.areaDraftIsNew?"Manual area":Me.value.basePath||Me.value.path||Me.value.name),1)])):M("",!0)])],2)):M("",!0)])):(b(),v("p",rp,"No areas matched the current search or the ETS file does not expose a usable hierarchy yet."))])):M("",!0),t.activeTab==="tests"?(b(),v("section",{key:2,class:ce(["card card-profiles",{"card-results-focus":bt.value}])},[i("div",lp,[i("div",null,[i("h2",null,S(bt.value?"Test Result":"Test Planner"),1),i("p",op,S(bt.value?"Showing only the selected test report.":"Select an area, choose a standard test template, review the generated plan, then save or run it."),1)]),bt.value?(b(),v("div",fp,[i("span",pp,S(Ks(te.value)),1),i("button",{class:"danger-button",type:"button",disabled:!te.value||t.deletingTestResultId===te.value.id,onClick:a[13]||(a[13]=l=>pn(te.value?.id))},S(t.deletingTestResultId===te.value?.id?"Deleting...":"Delete"),9,gp),i("button",{class:"secondary-button",type:"button",onClick:Pr}," Open Source Test ")])):(b(),v("div",ip,[i("span",cp,"Area "+S(ot.value?ot.value.path||ot.value.name:"n/a"),1),i("span",up,S(mt.value.length)+" saved plans",1),i("button",{class:"secondary-button",type:"button",disabled:!t.testPlanDraft,onClick:Ki}," Duplicate Plan ",8,dp),i("button",{class:"secondary-button new-button",type:"button",onClick:Or}," New Plan ")]))]),i("div",{class:ce(["profiles-layout test-planner-layout",{"result-only-layout":bt.value}])},[i("div",hp,[!bt.value&&!t.testPlanDraft&&!t.testPlanRunning?(b(),v("article",mp,[a[69]||(a[69]=i("div",{class:"card-head"},[i("div",null,[i("h3",null,"Select test plan"),i("p",{class:"area-detail-subhead"},"Reusable deterministic active tests saved by the installer.")])],-1)),i("div",bp,[i("label",vp,[a[68]||(a[68]=i("span",null,"Plans",-1)),i("div",yp,[fe(i("input",{"onUpdate:modelValue":a[14]||(a[14]=l=>t.testPlanSearch=l),class:"area-search-select-input",type:"text",placeholder:Qt.value?xr(Qt.value):"Search saved plan...",onFocus:a[15]||(a[15]=l=>t.testPlanSearchOpen=!0),onInput:a[16]||(a[16]=l=>t.testPlanSearchOpen=!0),onBlur:mi},null,40,Sp),[[Ee,t.testPlanSearch]]),t.testPlanSearchOpen&&lr.value.length?(b(),v("div",_p,[(b(!0),v(X,null,ne(lr.value.slice(0,80),l=>(b(),v("button",{key:l.id,type:"button",class:ce(["area-search-select-option",{active:Qt.value&&Qt.value.id===l.id}]),onMousedown:Ft(d=>hi(l),["prevent"])},S(xr(l)),43,wp))),128))])):M("",!0)])])]),mt.value.length?M("",!0):(b(),v("p",Pp,"No saved plans yet."))])):M("",!0),!bt.value&&t.testPlanDraft?(b(),v("article",Ap,[t.testTemplateBuilderFocus!==!0?(b(),v("div",Tp,[i("div",null,[i("h3",null,S(t.testPlanDraft?.name||"Plan Draft"),1),tn.value?(b(),v("p",Dp,"Choose a standard test template for the selected area, then build the plan deterministically from the ETS catalog.")):M("",!0)]),i("div",xp,[fr.value?(b(),v("span",Ip,"Unsaved changes")):M("",!0),i("button",{class:"secondary-button new-button",type:"button",onClick:Or}," New Plan "),tn.value?M("",!0):(b(),v("button",{key:1,class:"secondary-button",type:"button",onClick:ti}," Show Template Builder ")),i("label",Cp,[fe(i("input",{"onUpdate:modelValue":a[17]||(a[17]=l=>t.voiceEnabled=l),type:"checkbox"},null,512),[[kn,t.voiceEnabled]]),a[70]||(a[70]=i("span",null,"Voice",-1))]),i("button",{class:"danger-button",type:"button",disabled:t.testPlanDeleting||!Qt.value,onClick:Ji},S(t.testPlanDeleting?"Deleting...":"Delete"),9,kp),i("button",{class:"secondary-button",type:"button",disabled:t.testPlanSaving||t.testPlanRunning,onClick:oi}," Close ",8,Rp),i("button",{class:"secondary-button",type:"button",disabled:t.testPlanSaving||!t.testPlanDraft,onClick:$r},S(t.testPlanSaving?"Saving...":"Save Plan"),9,Np),Lo.value?(b(),v("div",Ep,[i("button",{class:"secondary-button",type:"button",disabled:!t.testPlanDraft&&t.testPlanRepeatForever!==!0||t.testPlanRunning&&t.testPlanRepeatForever!==!0||t.testPlanRepeatStopRequested===!0,onClick:a[18]||(a[18]=l=>t.testPlanRepeatForever===!0?Ui():ji())},S(t.testPlanRepeatForever===!0?t.testPlanRepeatStopRequested===!0?"Stopping...":"Stop Repeat":"Repeat Forever"),9,Mp),i("button",{class:"primary-button",type:"button",disabled:t.testPlanRunning||!t.testPlanDraft,onClick:Gi},S(t.testPlanRunning?"Running...":"Run Plan"),9,Op)])):M("",!0)])])):M("",!0),tn.value?(b(),v("div",$p,[i("div",{class:ce(["ai-planner-shell-head",{"template-builder-focus-head":t.testTemplateBuilderFocus===!0}])},[a[71]||(a[71]=i("div",null,[i("h4",null,"Template Builder"),i("p",{class:"area-detail-subhead"},"Select one of the standard templates. The plan is built only from the command GA available in the selected area.")],-1)),t.testTemplateBuilderFocus===!0?(b(),v("div",Lp,[i("button",{class:"secondary-button",type:"button",onClick:si}," Close ")])):M("",!0)],2),i("div",Fp,[i("label",Gp,[a[72]||(a[72]=i("span",null,"Area to test",-1)),fe(i("select",{"onUpdate:modelValue":a[19]||(a[19]=l=>t.testAreaSelectedId=l)},[(b(!0),v(X,null,ne(Pe.value,l=>(b(),v("option",{key:l.id,value:l.id},S(l.path||l.name),9,jp))),128))],512),[[Ss,t.testAreaSelectedId]])]),i("label",Up,[a[73]||(a[73]=i("span",null,"Selected template",-1)),i("textarea",{value:t.testPlanPrompt||"Select one of the templates below.",rows:"4",readonly:""},null,8,Bp)])]),i("div",Vp,[(b(),v(X,null,ne(r,l=>i("button",{key:l.id,class:ce(["preset-button",{active:t.testPlanPrompt===l.prompt}]),type:"button",onClick:d=>Pi(l)},S(l.title),11,Wp)),64))]),i("p",Hp,S((r.find(l=>l.prompt===t.testPlanPrompt)||{}).description||"Choose a template to see what the deterministic builder will do in the selected area."),1),i("div",Kp,[i("button",{class:"primary-button",type:"button",disabled:t.testPlanGenerating||!ot.value||!t.testPlanPrompt.trim(),onClick:zi},S(t.testPlanGenerating?"Building...":"Build Test Plan"),9,zp)]),t.testPlanGenerationError?(b(),v("p",Jp,S(t.testPlanGenerationError),1)):M("",!0),t.testPlanGeneration?(b(),v("div",qp,[t.testPlanGeneration.error?M("",!0):(b(),v("p",Xp," Built with "+S(t.testPlanGeneration.provider||"deterministic builder")+". ",1)),t.testPlanGeneration.error?(b(),v("p",Yp,S(t.testPlanGeneration.error),1)):M("",!0)])):M("",!0)])):M("",!0)])):M("",!0),t.testPlanRunning&&!bt.value?(b(),v("article",Qp,[i("div",Zp,[i("div",null,[a[74]||(a[74]=i("h3",{class:"running-headline"},[i("span",{class:"running-spinner","aria-hidden":"true"}),i("span",null,"Test Running")],-1)),i("p",eg,S(Ne.value?.title||"Executing current step..."),1)]),i("span",tg,S(ft.value?.metrics?.totalSteps?`${Number(ft.value.steps?.length||0)}/${Number(ft.value.metrics.totalSteps||0)}`:"in progress"),1)]),i("div",sg,[i("article",ag,[a[75]||(a[75]=i("span",null,"Completed",-1)),i("strong",null,S(Number(ft.value?.steps?.length||0)),1)]),i("article",ng,[a[76]||(a[76]=i("span",null,"Pass",-1)),i("strong",null,S(Number(ft.value?.metrics?.pass||0)),1)]),i("article",rg,[a[77]||(a[77]=i("span",null,"Warn",-1)),i("strong",null,S(Number(ft.value?.metrics?.warn||0)),1)]),i("article",lg,[a[78]||(a[78]=i("span",null,"Fail",-1)),i("strong",null,S(Number(ft.value?.metrics?.fail||0)),1)])]),Ne.value?(b(),v("div",og,[i("div",ig,[i("strong",null,S(Ne.value.title||Ne.value.id),1),i("span",null,S(Ne.value.kind),1)]),i("p",cg,S(Ne.value.description||"Current step in execution."),1),Ne.value.kind==="wait"?(b(),v("div",ug,[i("span",null,[a[79]||(a[79]=i("strong",null,"Wait",-1)),pe(" "+S(Number(Ne.value.delayMs||0))+" ms",1)]),i("span",null,[a[80]||(a[80]=i("strong",null,"Reason",-1)),pe(" "+S(Ne.value.reason||"Pause before next action"),1)])])):(b(),v("div",dg,[i("span",null,[a[81]||(a[81]=i("strong",null,"Command",-1)),pe(" "+S(Ne.value.commandGA||"n/a"),1)]),i("span",null,[a[82]||(a[82]=i("strong",null,"Status GA",-1)),pe(" "+S(Ne.value.statusGA||"n/a"),1)]),i("span",null,[a[83]||(a[83]=i("strong",null,"Payload",-1)),pe(" "+S(cn(Ne.value.commandPayload,Ne.value.commandDPT)),1)]),i("span",null,[a[84]||(a[84]=i("strong",null,"Expected",-1)),pe(" "+S(cn(Ne.value.expectedPayload,Ne.value.statusDPT||Ne.value.commandDPT)),1)])])),Ne.value.kind!=="wait"&&Ne.value.statusGA?(b(),v("div",fg,[i("section",pg,[a[87]||(a[87]=i("h4",null,"Spontaneous Write From Status GA",-1)),i("div",gg,[i("span",null,[a[85]||(a[85]=i("strong",null,"Status GA",-1)),pe(" "+S(Ne.value.statusGA||"n/a"),1)]),i("span",null,[a[86]||(a[86]=i("strong",null,"Timeout",-1)),pe(" "+S(Number(Ne.value.statusWriteTimeoutMs||0))+" ms",1)])])]),i("section",hg,[a[90]||(a[90]=i("h4",null,"Active Read Request To Status GA",-1)),i("div",mg,[i("span",null,[a[88]||(a[88]=i("strong",null,"Status GA",-1)),pe(" "+S(Ne.value.statusGA||"n/a"),1)]),i("span",null,[a[89]||(a[89]=i("strong",null,"Timeout",-1)),pe(" "+S(Number(Ne.value.statusResponseTimeoutMs||0))+" ms",1)])])])])):M("",!0)])):M("",!0)])):M("",!0),te.value&&bt.value?(b(),v("article",{key:3,ref_key:"testPlanReportRef",ref:y,class:"area-detail"},[i("div",bg,[i("div",null,[i("h3",null,S(va(te.value)),1),i("p",vg,S(ya(te.value)||N(te.value.generatedAt)),1)]),i("div",yg,[i("span",Sg,S(Ks(te.value)),1),te.value.live===!0?(b(),v("span",_g,"Running")):M("",!0),i("span",wg,S(te.value.overallStatus),1),i("button",{class:"secondary-button",type:"button",onClick:mr}," Export PDF ")])]),i("div",Pg,[(b(!0),v(X,null,ne(on(te.value),l=>(b(),v("article",{key:l.label,class:"metric"},[i("span",null,S(l.label),1),i("strong",null,S(l.value),1)]))),128))]),i("div",Ag,[(b(!0),v(X,null,ne(zs(te.value),l=>(b(),v("article",{key:l.id,class:ce(["report-check",`report-${l.status}`])},[i("div",Tg,[i("strong",null,S(l.title),1),i("span",null,S(l.status),1)]),i("p",Dg,S(l.message||"No additional details available."),1),l.detailGroups?.length?(b(),v("div",xg,[(b(!0),v(X,null,ne(l.detailGroups,d=>(b(),v("section",{key:`${l.id}-${d.title}`,class:"planner-check-section"},[i("h4",null,S(d.title),1),i("div",Ig,[(b(!0),v(X,null,ne(d.items,h=>(b(),v("span",{key:`${l.id}-${d.title}-${h.label}`},[i("strong",null,S(h.label),1),pe(" "+S(h.value),1)]))),128))])]))),128))])):(b(),v("div",Cg,[(b(!0),v(X,null,ne(l.details,d=>(b(),v("span",{key:`${l.id}-${d.label}`},[i("strong",null,S(d.label),1),pe(" "+S(d.value),1)]))),128))]))],2))),128))]),zs(te.value).length?M("",!0):(b(),v("p",kg,"No detailed entries stored for this report yet.")),Js(te.value).length?(b(),v("div",Rg,[a[91]||(a[91]=i("h4",null,"Suggestions",-1)),i("ul",Ng,[(b(!0),v(X,null,ne(Js(te.value),l=>(b(),v("li",{key:l},S(l),1))),128))])])):M("",!0)],512)):M("",!0),t.testPlanDraft&&!t.testPlanRunning&&!bt.value&&t.testTemplateBuilderFocus!==!0?(b(),v("article",Eg,[i("div",Mg,[a[92]||(a[92]=i("div",null,[i("h3",null,"Edit Plan")],-1)),i("div",Og,[i("span",$g,S(Number(t.testPlanDraft.steps?.length||0))+" steps",1),i("button",{class:"secondary-button",type:"button",onClick:ki}," Add Step "),i("button",{class:"secondary-button",type:"button",onClick:Ri}," Add Wait ")])]),i("div",Lg,[i("label",Fg,[a[94]||(a[94]=i("span",null,"Area",-1)),i("select",{value:t.testPlanDraft.areaId||t.testAreaSelectedId||"",disabled:!Pe.value.length,onChange:a[20]||(a[20]=l=>Hi(l.target.value))},[a[93]||(a[93]=i("option",{value:"",disabled:""},"Select area",-1)),(b(!0),v(X,null,ne(Pe.value,l=>(b(),v("option",{key:l.id,value:l.id},S(l.path||l.name),9,jg))),128))],40,Gg)]),i("label",Ug,[a[95]||(a[95]=i("span",null,"Plan name",-1)),fe(i("input",{"onUpdate:modelValue":a[21]||(a[21]=l=>t.testPlanDraft.name=l),type:"text",placeholder:"KNX active test name"},null,512),[[Ee,t.testPlanDraft.name]])]),i("label",Bg,[a[96]||(a[96]=i("span",null,"Description",-1)),fe(i("textarea",{"onUpdate:modelValue":a[22]||(a[22]=l=>t.testPlanDraft.description=l),rows:"2",placeholder:"Short operator-facing description"},null,512),[[Ee,t.testPlanDraft.description]])])]),i("div",Vg,[(b(!0),v(X,null,ne(t.testPlanDraft.steps||[],(l,d)=>(b(),v("article",{key:l.id,class:ce(["report-check report-pass planner-step-card",{"planner-step-running":t.testPlanRunning&&t.testPlanRunningStepId===l.id,"planner-step-dragging":t.draggedTestPlanStepId===l.id,"planner-step-drop-target":t.dragOverTestPlanStepId===l.id}]),onDragenter:Ft(h=>$i(l.id),["prevent"]),onDragover:a[23]||(a[23]=Ft(()=>{},["prevent"])),onDrop:h=>Fi(l.id,h)},[i("div",Hg,[i("div",Kg,[i("button",{class:"drag-handle",type:"button",draggable:"true",tabindex:"-1","aria-label":"Drag step",title:"Drag step",onDragstart:h=>Oi(l.id,h),onDragend:bn}," ⋮⋮ ",40,zg),i("button",{class:"collapse-toggle",type:"button","aria-expanded":l.collapsed!==!0,title:l.collapsed===!0?"Expand step":"Collapse step",onClick:h=>Mi(l)},[i("span",{class:ce(["collapse-icon",{collapsed:l.collapsed===!0}])},"▾",2)],8,Jg),i("strong",null,S(l.title||l.id),1)]),i("div",qg,[i("span",null,S(l.kind),1),i("button",{class:"secondary-button",type:"button",onClick:h=>Ni(d)}," Duplicate ",8,Xg),i("button",{class:"secondary-button",type:"button",onClick:h=>Ei(d)}," Remove ",8,Yg)])]),l.collapsed===!0?(b(),v("div",Qg,[l.kind==="wait"?(b(),v("span",Zg,[a[97]||(a[97]=i("strong",null,"Wait",-1)),pe(" "+S(Number(l.delayMs||0))+" ms",1)])):(b(),v("span",eh,[a[98]||(a[98]=i("strong",null,"Command",-1)),pe(" "+S(l.commandGA||"n/a"),1)])),l.kind!=="wait"?(b(),v("span",th,[a[99]||(a[99]=i("strong",null,"Status GA",-1)),pe(" "+S(l.statusGA||"n/a"),1)])):M("",!0),l.kind!=="wait"?(b(),v("span",sh,[a[100]||(a[100]=i("strong",null,"Payload",-1)),pe(" "+S(cn(l.commandPayload,l.commandDPT)),1)])):M("",!0),l.kind!=="wait"&&l.statusGA?(b(),v("span",ah,[a[101]||(a[101]=i("strong",null,"Write timeout",-1)),pe(" "+S(Number(l.statusWriteTimeoutMs||0))+" ms",1)])):M("",!0),l.kind!=="wait"&&l.statusGA?(b(),v("span",nh,[a[102]||(a[102]=i("strong",null,"Response timeout",-1)),pe(" "+S(Number(l.statusResponseTimeoutMs||0))+" ms",1)])):M("",!0)])):(b(),v("div",rh,[i("label",lh,[a[103]||(a[103]=i("span",null,"Title",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.title=h,type:"text",placeholder:"Step title"},null,8,oh),[[Ee,l.title]])]),i("label",ih,[a[104]||(a[104]=i("span",null,"Description",-1)),fe(i("textarea",{"onUpdate:modelValue":h=>l.description=h,rows:"2",placeholder:"What this step checks"},null,8,ch),[[Ee,l.description]])]),l.kind==="wait"?(b(),v("label",uh,[a[105]||(a[105]=i("span",null,"Wait ms",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.delayMs=h,type:"number",min:"0",max:"30000",step:"100"},null,8,dh),[[Ee,l.delayMs,void 0,{number:!0}]])])):M("",!0),l.kind!=="wait"?(b(),v("section",fh,[a[110]||(a[110]=i("h4",null,"Command",-1)),i("div",ph,[i("label",gh,[a[107]||(a[107]=i("span",null,"Command GA",-1)),fe(i("select",{"onUpdate:modelValue":h=>l.commandGA=h,onChange:h=>kr(l)},[a[106]||(a[106]=i("option",{value:""},"Select command GA",-1)),(b(!0),v(X,null,ne(en.value,h=>(b(),v("option",{key:h.ga,value:h.ga},S(`${h.ga} | ${h.label}`),9,mh))),128))],40,hh),[[Ss,l.commandGA]])]),i("label",bh,[a[108]||(a[108]=i("span",null,"Command DPT",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.commandDPT=h,type:"text",placeholder:"1.001",onChange:h=>wa(l)},null,40,vh),[[Ee,l.commandDPT]])]),i("label",yh,[a[109]||(a[109]=i("span",null,"Command payload",-1)),ts(l.commandDPT).length?fe((b(),v("select",{key:0,"onUpdate:modelValue":h=>l.commandPayload=h},[(b(!0),v(X,null,ne(ts(l.commandDPT),h=>(b(),v("option",{key:`${l.id}-command-${h.value}`,value:String(h.value)},S(h.label),9,_h))),128))],8,Sh)),[[Ss,l.commandPayload]]):fe((b(),v("input",{key:1,"onUpdate:modelValue":h=>l.commandPayload=h,type:"text",placeholder:"true, false, 50"},null,8,wh)),[[Ee,l.commandPayload]])])])])):M("",!0),l.kind!=="wait"?(b(),v("section",Ph,[a[115]||(a[115]=i("h4",null,"Status",-1)),i("div",Ah,[i("label",Th,[a[112]||(a[112]=i("span",null,"Status GA",-1)),fe(i("select",{"onUpdate:modelValue":h=>l.statusGA=h,onChange:h=>kr(l)},[a[111]||(a[111]=i("option",{value:""},"No feedback",-1)),(b(!0),v(X,null,ne(ur.value,h=>(b(),v("option",{key:h.ga,value:h.ga},S(`${h.ga} | ${h.label}`),9,xh))),128))],40,Dh),[[Ss,l.statusGA]])]),i("label",Ih,[a[113]||(a[113]=i("span",null,"Status DPT",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.statusDPT=h,type:"text",placeholder:"1.001",onChange:h=>wa(l)},null,40,Ch),[[Ee,l.statusDPT]])]),i("label",kh,[a[114]||(a[114]=i("span",null,"Expected payload",-1)),ts(l.statusDPT||l.commandDPT).length?fe((b(),v("select",{key:0,"onUpdate:modelValue":h=>l.expectedPayload=h},[(b(!0),v(X,null,ne(ts(l.statusDPT||l.commandDPT),h=>(b(),v("option",{key:`${l.id}-expected-${h.value}`,value:String(h.value)},S(h.label),9,Nh))),128))],8,Rh)),[[Ss,l.expectedPayload]]):fe((b(),v("input",{key:1,"onUpdate:modelValue":h=>l.expectedPayload=h,type:"text",placeholder:"Expected feedback value"},null,8,Eh)),[[Ee,l.expectedPayload]])])])])):M("",!0),l.kind!=="wait"&&l.statusGA?(b(),v("div",Mh,[i("section",Oh,[a[117]||(a[117]=i("h4",null,"Spontaneous Write From Status GA",-1)),a[118]||(a[118]=i("p",{class:"area-detail-subhead"},[pe("Wait for a spontaneous "),i("code",null,"GroupValue_Write"),pe(" telegram from the status GA.")],-1)),i("label",$h,[a[116]||(a[116]=i("span",null,"Status write timeout ms",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.statusWriteTimeoutMs=h,type:"number",min:"500",max:"60000",step:"100"},null,8,Lh),[[Ee,l.statusWriteTimeoutMs,void 0,{number:!0}]])])]),i("section",Fh,[a[120]||(a[120]=i("h4",null,"Active Read Request To Status GA",-1)),a[121]||(a[121]=i("p",{class:"area-detail-subhead"},[pe("Send a "),i("code",null,"read"),pe(" telegram to the status GA and wait for a "),i("code",null,"GroupValue_Response"),pe(".")],-1)),i("label",Gh,[a[119]||(a[119]=i("span",null,"Read response timeout ms",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.statusResponseTimeoutMs=h,type:"number",min:"500",max:"60000",step:"100"},null,8,jh),[[Ee,l.statusResponseTimeoutMs,void 0,{number:!0}]])])])])):M("",!0),i("label",Uh,[a[122]||(a[122]=i("span",null,"Reason",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.reason=h,type:"text",placeholder:"Why this step exists"},null,8,Bh),[[Ee,l.reason]])])]))],42,Wg))),128))])])):M("",!0)])],2)],2)):M("",!0),t.activeTab==="results"?(b(),v("section",Vh,[i("div",Wh,[a[123]||(a[123]=i("div",null,[i("h2",null,"Test Results"),i("p",{class:"area-detail-subhead"},"Live and saved reports generated by KNX active and read-only tests.")],-1)),i("div",Hh,[i("span",Kh,S(Yt.value.length)+" available",1)])]),i("div",zh,[i("article",Jh,[a[124]||(a[124]=i("div",{class:"card-head"},[i("div",null,[i("h3",null,"Select Test Result"),i("p",{class:"area-detail-subhead"},"Choose a report to inspect metrics, detailed checks, and suggestions.")])],-1)),i("div",qh,[(b(!0),v(X,null,ne(Yt.value,l=>(b(),v("div",{key:l.id,class:"sidebar-result-row"},[i("button",{type:"button",class:ce(["area-list-item sidebar-result-item",{active:te.value&&te.value.id===l.id,running:l.live===!0}]),onClick:d=>Sa(l.id,{openMenu:!1,activateResultsTab:!0,resultOnly:!0})},[i("span",Yh,[i("strong",Qh,[l.live===!0?(b(),v("span",Zh)):M("",!0),i("span",null,S(va(l)),1)]),i("span",{class:ce(["sidebar-result-status",`status-${l.overallStatus||"pass"}`])},S(l.overallStatus||"n/a"),3)]),i("span",em,[pe(S(Ks(l)),1),l.live===!0?(b(),v("span",tm," | running")):M("",!0)]),i("span",sm,S(ya(l)||N(l.generatedAt)),1),i("span",am,S(N(l.generatedAt)),1)],10,Xh),i("button",{class:"sidebar-result-delete-button",type:"button",disabled:t.deletingTestResultId===l.id,onClick:Ft(d=>pn(l.id),["stop"])},S(t.deletingTestResultId===l.id?"Deleting...":"Delete"),9,nm)]))),128)),Yt.value.length?M("",!0):(b(),v("p",rm,"No saved test results yet."))])]),te.value?(b(),v("article",{key:0,ref_key:"testPlanReportRef",ref:y,class:"area-detail"},[i("div",lm,[i("div",null,[i("h3",null,S(va(te.value)),1),i("p",om,S(ya(te.value)||N(te.value.generatedAt)),1)]),i("div",im,[i("span",cm,S(Ks(te.value)),1),te.value.live===!0?(b(),v("span",um,"Running")):M("",!0),i("span",dm,S(te.value.overallStatus),1),i("button",{class:"secondary-button",type:"button",onClick:mr}," Export PDF "),i("button",{class:"danger-button",type:"button",disabled:!te.value||t.deletingTestResultId===te.value.id,onClick:a[24]||(a[24]=l=>pn(te.value?.id))},S(t.deletingTestResultId===te.value?.id?"Deleting...":"Delete"),9,fm),i("button",{class:"secondary-button",type:"button",onClick:Pr}," Open Source Test ")])]),i("div",pm,[(b(!0),v(X,null,ne(on(te.value),l=>(b(),v("article",{key:l.label,class:"metric"},[i("span",null,S(l.label),1),i("strong",null,S(l.value),1)]))),128))]),i("div",gm,[(b(!0),v(X,null,ne(zs(te.value),l=>(b(),v("article",{key:l.id,class:ce(["report-check",`report-${l.status}`])},[i("div",hm,[i("strong",null,S(l.title),1),i("span",null,S(l.status),1)]),i("p",mm,S(l.message||"No additional details available."),1),l.detailGroups?.length?(b(),v("div",bm,[(b(!0),v(X,null,ne(l.detailGroups,d=>(b(),v("section",{key:`${l.id}-${d.title}`,class:"planner-check-section"},[i("h4",null,S(d.title),1),i("div",vm,[(b(!0),v(X,null,ne(d.items,h=>(b(),v("span",{key:`${l.id}-${d.title}-${h.label}`},[i("strong",null,S(h.label),1),pe(" "+S(h.value),1)]))),128))])]))),128))])):(b(),v("div",ym,[(b(!0),v(X,null,ne(l.details,d=>(b(),v("span",{key:`${l.id}-${d.label}`},[i("strong",null,S(d.label),1),pe(" "+S(d.value),1)]))),128))]))],2))),128))]),zs(te.value).length?M("",!0):(b(),v("p",Sm,"No detailed entries stored for this report yet.")),Js(te.value).length?(b(),v("div",_m,[a[125]||(a[125]=i("h4",null,"Suggestions",-1)),i("ul",wm,[(b(!0),v(X,null,ne(Js(te.value),l=>(b(),v("li",{key:l},S(l),1))),128))])])):M("",!0)],512)):(b(),v("article",Pm,[...a[126]||(a[126]=[i("p",{class:"empty-state"},"No test result selected.",-1)])]))])])):M("",!0),t.activeTab==="overview"?(b(),v("section",Am,[i("div",Tm,[a[127]||(a[127]=i("h2",null,"Top Group Addresses",-1)),i("span",Dm,S(an.value.length)+" visible",1)]),an.value.length?(b(),v("ul",xm,[(b(!0),v(X,null,ne(an.value,l=>(b(),v("li",{key:l.ga,class:"rank-row"},[i("span",Im,S(l.ga),1),i("span",Cm,S(l.label||"Unlabeled"),1),i("strong",null,S(Number(l.count||0)),1)]))),128))])):(b(),v("p",km,"No top group address data available yet."))])):M("",!0),t.activeTab==="overview"?(b(),v("section",Rm,[i("div",Nm,[a[128]||(a[128]=i("h2",null,"Event Mix",-1)),i("span",Em,S(ba.value.length)+" event types",1)]),ba.value.length?(b(),v("ul",Mm,[(b(!0),v(X,null,ne(ba.value,l=>(b(),v("li",{key:l.name,class:"event-row"},[i("span",Om,S(l.name),1),i("div",$m,[i("span",{class:"event-bar-fill",style:oa({width:`${Math.max(l.count/Go.value*100,6)}%`})},null,4)]),i("strong",null,S(l.count),1)]))),128))])):(b(),v("p",Lm,"Event distribution will appear after the first samples."))])):M("",!0),t.activeTab==="overview"?(b(),v("section",Fm,[i("div",Gm,[a[129]||(a[129]=i("h2",null,"Bus Connection Persistence",-1)),et.value?(b(),v("span",jm,S(String(et.value.currentState||"unknown")),1)):M("",!0)]),et.value?(b(),v(X,{key:0},[i("div",Um,[i("span",Bm,"Connected "+S(D(et.value.connectedSec||0)),1),i("span",Vm,"Disconnected "+S(D(et.value.disconnectedSec||0)),1),i("span",Wm,"Coverage "+S(Number(et.value.knownCoveragePct||0))+"%",1)]),i("div",Hm,[(b(!0),v(X,null,ne(Bo.value,l=>(b(),v("span",{key:l.key,class:ce(["bus-segment",l.className]),style:oa({left:l.left,width:l.width}),title:l.title},null,14,Km))),128))]),i("div",zm,[i("span",null,S(x(et.value.windowStartAt)),1),i("span",null,S(x(et.value.windowEndAt)),1),a[130]||(a[130]=i("span",null,"Now",-1))]),a[131]||(a[131]=i("p",{class:"bus-note"},"Green shows time connected to the KNX bus. Red shows downtime inside the selected history window.",-1))],64)):(b(),v("p",Jm,"Waiting for connection persistence data..."))])):M("",!0),t.activeTab==="overview"?(b(),v("section",{key:7,ref_key:"flowCardRef",ref:f,class:ce(["card card-flow",{"is-fullscreen":g.value}])},[i("div",qm,[a[132]||(a[132]=i("h2",null,"Flow Map",-1)),i("div",Xm,[i("span",Ym," Nodes "+S(Zt.value.nodes.length)+" | Links "+S(Zt.value.edges.length),1),i("button",{class:"secondary-button",type:"button",onClick:De},S(g.value?"Exit Fullscreen":"Fullscreen"),1)])]),i("div",Qm,[i("label",Zm,[a[133]||(a[133]=i("span",null,"Max nodes",-1)),fe(i("input",{"onUpdate:modelValue":a[25]||(a[25]=l=>t.flowMaxNodes=l),type:"number",min:"4",max:"32",step:"1"},null,512),[[Ee,t.flowMaxNodes,void 0,{number:!0}]])]),i("label",eb,[a[134]||(a[134]=i("span",null,"Find GA",-1)),fe(i("input",{"onUpdate:modelValue":a[26]||(a[26]=l=>t.flowSearch=l),type:"text",placeholder:"Search GA or label"},null,512),[[Ee,t.flowSearch]])]),i("div",tb,[a[136]||(a[136]=i("span",null,"Select Nodes to Filter by",-1)),fe(i("select",{"onUpdate:modelValue":a[27]||(a[27]=l=>t.flowSelectedGa=l),multiple:"",size:"5"},[(b(!0),v(X,null,ne(jo.value,l=>(b(),v("option",{key:l.id,value:l.id},S(`${l.id}${l.subtitle?` | ${l.subtitle}`:""}`),9,sb))),128))],512),[[Ss,t.flowSelectedGa]]),i("label",ab,[fe(i("input",{"onUpdate:modelValue":a[28]||(a[28]=l=>t.flowShowUniversalNodes=l),type:"checkbox"},null,512),[[kn,t.flowShowUniversalNodes]]),a[135]||(a[135]=i("span",null,"Show Universal Mode nodes",-1))])]),a[137]||(a[137]=ys('<div class="flow-legend" data-v-a7040fdd><span data-v-a7040fdd><i class="legend-line legend-write" data-v-a7040fdd></i>Write</span><span data-v-a7040fdd><i class="legend-line legend-response" data-v-a7040fdd></i>Response</span><span data-v-a7040fdd><i class="legend-line legend-read" data-v-a7040fdd></i>Read</span><span data-v-a7040fdd><i class="legend-line legend-repeat" data-v-a7040fdd></i>Repeat</span><span data-v-a7040fdd><i class="legend-dot legend-anomaly" data-v-a7040fdd></i>Anomaly</span><span data-v-a7040fdd><i class="legend-dot legend-external" data-v-a7040fdd></i>External</span></div>',1))]),i("div",nb,[Zt.value.nodes.length?(b(),v("svg",{key:0,class:"flow-svg",viewBox:`0 0 ${Zt.value.width} ${Zt.value.height}`,preserveAspectRatio:"xMidYMid meet"},[i("defs",null,[(b(),v(X,null,ne(c,(l,d)=>i("marker",{id:`flow-arrow-${d}`,key:d,viewBox:"0 0 10 8",markerWidth:"10",markerHeight:"8",refX:"8.8",refY:"4",orient:"auto",markerUnits:"userSpaceOnUse"},[i("path",{d:"M0,0 L10,4 L0,8 z",fill:l},null,8,ob)],8,lb)),64))]),(b(!0),v(X,null,ne(Zt.value.edges,l=>(b(),v("path",{key:l.key,class:ce(["flow-edge",{"flow-edge-active":l.active,"flow-edge-idle":!l.active}]),d:l.d,stroke:l.color,"stroke-width":l.width,opacity:l.opacity,"marker-end":`url(#${l.markerId})`},[i("title",null,S(l.tooltip),1)],10,ib))),128)),(b(!0),v(X,null,ne(Zt.value.nodes,l=>(b(),v("g",{key:l.id,class:ce(["flow-node",{"is-anomaly":l.anomalyCount>0,"is-external":!l.inFlow,"is-idle":l.isIdle}])},[i("circle",{cx:l.x,cy:l.y,r:"24"},null,8,cb),i("text",{class:"node-label",x:l.x,y:l.y+1},S(l.shortLabel),9,ub),l.shortSubtitle?(b(),v("text",{key:0,class:"node-subtitle",x:l.x,y:l.y+38},S(l.shortSubtitle),9,db)):M("",!0),l.shortPayload?(b(),v("text",{key:1,class:"node-payload",x:l.x,y:l.y+52},S(l.shortPayload),9,fb)):M("",!0),l.anomalyCount>0?(b(),v("text",{key:2,class:"node-badge",x:l.x,y:l.y-30},"anomaly x"+S(l.anomalyCount),9,pb)):M("",!0),i("title",null,S(`${l.id}${l.subtitle?` | ${l.subtitle}`:""}${l.payload?` | payload: ${l.payload}`:""}`),1)],2))),128))],8,rb)):(b(),v("p",gb,"No topology data available yet."))]),i("p",hb,"Window "+S(Zt.value.telemetryWindowSec||0)+"s.",1)],2)):M("",!0),t.activeTab==="overview"?(b(),v("section",mb,[i("div",bb,[a[138]||(a[138]=i("h2",null,"Anomalies",-1)),i("span",vb,S(sn.value.length)+" recent",1)]),sn.value.length?(b(),v("div",yb,[(b(!0),v(X,null,ne(sn.value.slice(0,20),l=>(b(),v("article",{key:`${l.at}-${E(l).ga||""}`,class:"anomaly-card"},[i("div",Sb,[i("strong",null,S(E(l).type||"anomaly"),1),i("span",null,S(E(l).ga||"no GA"),1)]),i("p",_b,S(l.at||""),1),i("pre",null,S(JSON.stringify(E(l),null,2)),1)]))),128))])):(b(),v("p",wb,"No anomalies detected right now."))])):M("",!0),t.activeTab==="assistant"?(b(),v("section",Pb,[i("div",Ab,[a[139]||(a[139]=i("h2",null,"Ask",-1)),i("span",Tb,S(Xt.value.llmEnabled?"AI enabled":"AI disabled"),1)]),i("div",Db,[(b(),v(X,null,ne(s,l=>i("button",{key:l,class:"preset-button",type:"button",disabled:t.asking||!Xt.value.llmEnabled,onClick:d=>gn(l)},S(l),9,xb)),64))]),i("div",Ib,[fe(i("input",{"onUpdate:modelValue":a[29]||(a[29]=l=>t.chatDraft=l),class:"ask-input",type:"text",disabled:t.asking||!Xt.value.llmEnabled,placeholder:"Ask a question about KNX traffic...",onKeydown:a[30]||(a[30]=wd(Ft(l=>gn(),["prevent"]),["enter"]))},null,40,Cb),[[Ee,t.chatDraft]]),i("button",{class:"primary-button",type:"button",disabled:t.asking||!Xt.value.llmEnabled,onClick:a[31]||(a[31]=l=>gn())}," Send ",8,kb)]),i("div",Rb,[(b(!0),v(X,null,ne(pr.value,l=>(b(),v("article",{key:l.key,class:ce(["chat-message",`chat-${l.kind}`])},[l.kind==="assistant"?(b(),v("div",{key:0,innerHTML:l.html},null,8,Nb)):(b(),v("pre",Eb,S(l.rawText),1))],2))),128)),t.asking?(b(),v("article",Mb,"Thinking...")):M("",!0),!pr.value.length&&!t.asking?(b(),v("p",Ob,"Ask a question about KNX traffic. SVG responses are supported here as well.")):M("",!0)])])):M("",!0),t.activeTab==="settings"?(b(),v("section",$b,[a[146]||(a[146]=i("div",{class:"card-head"},[i("div",null,[i("h2",null,"Settings"),i("p",{class:"area-detail-subhead"},"Manage node options and full configuration import/export.")])],-1)),i("div",Lb,[i("button",{class:ce(["settings-tab-button",{active:t.settingsTab==="node"}]),type:"button",onClick:a[32]||(a[32]=l=>wr("node"))}," KNX AI Node ",2),i("button",{class:ce(["settings-tab-button",{active:t.settingsTab==="config"}]),type:"button",onClick:a[33]||(a[33]=l=>wr("config"))}," Import / Export ",2)]),t.settingsTab==="node"?(b(),v("article",Fb,[a[142]||(a[142]=i("div",{class:"card-head settings-panel-head"},[i("h3",null,"KNX AI Node"),i("span",{class:"meta-chip"},"Runtime preferences")],-1)),a[143]||(a[143]=i("p",{class:"area-detail-subhead"},"Select the node used by this UI and control refresh behavior.",-1)),i("div",Gb,[i("label",jb,[a[140]||(a[140]=i("span",null,"Node",-1)),fe(i("select",{"onUpdate:modelValue":a[34]||(a[34]=l=>t.selectedNodeId=l),class:"node-select",onChange:ei},[(b(!0),v(X,null,ne(t.nodes,l=>(b(),v("option",{key:l.id,value:l.id},S(`${l.name||"KNX AI"}${l.gatewayName?` | ${l.gatewayName}`:""}`),9,Ub))),128))],544),[[Ss,t.selectedNodeId]])]),i("label",Bb,[fe(i("input",{"onUpdate:modelValue":a[35]||(a[35]=l=>t.autoRefresh=l),type:"checkbox"},null,512),[[kn,t.autoRefresh]]),a[141]||(a[141]=i("span",null,"Auto refresh",-1))])])])):(b(),v("article",Vb,[a[144]||(a[144]=i("div",{class:"card-head settings-panel-head"},[i("h3",null,"Import / Export"),i("span",{class:"meta-chip"},"Full configuration")],-1)),a[145]||(a[145]=i("p",{class:"area-detail-subhead"},"Export or import the full KNX AI configuration for the selected node.",-1)),i("div",Wb,[i("button",{class:"secondary-button",type:"button",disabled:!t.selectedNodeId,onClick:Xi}," Export Configuration ",8,Hb),i("button",{class:"secondary-button",type:"button",disabled:!t.selectedNodeId,onClick:Yi}," Import Configuration ",8,Kb)])])),i("input",{ref_key:"configImportRef",ref:w,type:"file",accept:"application/json,.json",class:"hidden-file-input",onChange:Qi},null,544)])):M("",!0)])]),t.testPlanRunConfirmOpen?(b(),v("div",{key:0,class:"modal-backdrop",onClick:Rr},[i("div",{class:"modal-card",role:"dialog","aria-modal":"true","aria-labelledby":"run-test-title",onClick:a[37]||(a[37]=Ft(()=>{},["stop"]))},[a[147]||(a[147]=i("h3",{id:"run-test-title"},"Start test?",-1)),i("p",zb,S(t.testPlanRunMode==="repeat"?"This will send real telegrams on the KNX bus and repeat the selected test plan until you press Stop Repeat.":"This will send real telegrams on the KNX bus for the selected test plan."),1),i("div",Jb,[i("button",{class:"secondary-button",type:"button",autofocus:"",onClick:Rr}," Cancel "),i("button",{class:"primary-button",type:"button",disabled:t.testPlanRunning,onClick:a[36]||(a[36]=l=>qi(t.testPlanRunMode))}," Start Test ",8,qb)])])])):M("",!0),t.testPlanUnsavedConfirmOpen?(b(),v("div",{key:1,class:"modal-backdrop",onClick:Er},[i("div",{class:"modal-card",role:"dialog","aria-modal":"true","aria-labelledby":"unsaved-plan-title",onClick:a[39]||(a[39]=Ft(()=>{},["stop"]))},[a[148]||(a[148]=i("h3",{id:"unsaved-plan-title"},"Unsaved changes",-1)),i("p",Xb,"Save or discard the current plan changes before opening "+S(t.testPlanPendingActionLabel||"another plan")+".",1),i("div",Yb,[i("button",{class:"secondary-button",type:"button",autofocus:"",onClick:Er}," Stay Here "),i("button",{class:"secondary-button",type:"button",onClick:a[38]||(a[38]=l=>{Vi(),Mr()})}," Discard Changes "),i("button",{class:"primary-button",type:"button",disabled:t.testPlanSaving||!t.testPlanDraft,onClick:Wi},S(t.testPlanSaving?"Saving...":"Save and Continue"),9,Qb)])])])):M("",!0),t.areaUnsavedConfirmOpen?(b(),v("div",{key:2,class:"modal-backdrop",onClick:_r},[i("div",{class:"modal-card",role:"dialog","aria-modal":"true","aria-labelledby":"unsaved-area-title",onClick:a[40]||(a[40]=Ft(()=>{},["stop"]))},[a[149]||(a[149]=i("h3",{id:"unsaved-area-title"},"Unsaved changes",-1)),a[150]||(a[150]=i("p",{class:"area-detail-subhead"},"Discard the current area changes and close the editor?",-1)),i("div",{class:"modal-actions"},[i("button",{class:"secondary-button",type:"button",autofocus:"",onClick:_r}," Stay Here "),i("button",{class:"primary-button",type:"button",onClick:li}," Discard and Close ")])])])):M("",!0)],2)],64))}},sv=Rd(tv,[["__scopeId","data-v-a7040fdd"]]);Td(sv).mount("#app");export{kd as _};
1
+ (function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))o(c);new MutationObserver(c=>{for(const u of c)if(u.type==="childList")for(const t of u.addedNodes)t.tagName==="LINK"&&t.rel==="modulepreload"&&o(t)}).observe(document,{childList:!0,subtree:!0});function r(c){const u={};return c.integrity&&(u.integrity=c.integrity),c.referrerPolicy&&(u.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?u.credentials="include":c.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function o(c){if(c.ep)return;c.ep=!0;const u=r(c);fetch(c.href,u)}})();function Ba(e){const s=Object.create(null);for(const r of e.split(","))s[r]=1;return r=>r in s}const Ae={},ks=[],Tt=()=>{},xl=()=>!1,Bn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Va=e=>e.startsWith("onUpdate:"),Be=Object.assign,Wa=(e,s)=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)},sc=Object.prototype.hasOwnProperty,be=(e,s)=>sc.call(e,s),Y=Array.isArray,Rs=e=>hn(e)==="[object Map]",Ls=e=>hn(e)==="[object Set]",Gr=e=>hn(e)==="[object Date]",Q=e=>typeof e=="function",Oe=e=>typeof e=="string",xt=e=>typeof e=="symbol",_e=e=>e!==null&&typeof e=="object",Il=e=>(_e(e)||Q(e))&&Q(e.then)&&Q(e.catch),Cl=Object.prototype.toString,hn=e=>Cl.call(e),nc=e=>hn(e).slice(8,-1),kl=e=>hn(e)==="[object Object]",Ha=e=>Oe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Zs=Ba(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Vn=e=>{const s=Object.create(null);return(r=>s[r]||(s[r]=e(r)))},ac=/-\w/g,pt=Vn(e=>e.replace(ac,s=>s.slice(1).toUpperCase())),rc=/\B([A-Z])/g,os=Vn(e=>e.replace(rc,"-$1").toLowerCase()),Rl=Vn(e=>e.charAt(0).toUpperCase()+e.slice(1)),_a=Vn(e=>e?`on${Rl(e)}`:""),At=(e,s)=>!Object.is(e,s),Rn=(e,...s)=>{for(let r=0;r<e.length;r++)e[r](...s)},Nl=(e,s,r,o=!1)=>{Object.defineProperty(e,s,{configurable:!0,enumerable:!1,writable:o,value:r})},Wn=e=>{const s=parseFloat(e);return isNaN(s)?e:s};let jr;const Hn=()=>jr||(jr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function on(e){if(Y(e)){const s={};for(let r=0;r<e.length;r++){const o=e[r],c=Oe(o)?cc(o):on(o);if(c)for(const u in c)s[u]=c[u]}return s}else if(Oe(e)||_e(e))return e}const lc=/;(?![^(]*\))/g,oc=/:([^]+)/,ic=/\/\*[^]*?\*\//g;function cc(e){const s={};return e.replace(ic,"").split(lc).forEach(r=>{if(r){const o=r.split(oc);o.length>1&&(s[o[0].trim()]=o[1].trim())}}),s}function ce(e){let s="";if(Oe(e))s=e;else if(Y(e))for(let r=0;r<e.length;r++){const o=ce(e[r]);o&&(s+=o+" ")}else if(_e(e))for(const r in e)e[r]&&(s+=r+" ");return s.trim()}const uc="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",dc=Ba(uc);function El(e){return!!e||e===""}function fc(e,s){if(e.length!==s.length)return!1;let r=!0;for(let o=0;r&&o<e.length;o++)r=Fs(e[o],s[o]);return r}function Fs(e,s){if(e===s)return!0;let r=Gr(e),o=Gr(s);if(r||o)return r&&o?e.getTime()===s.getTime():!1;if(r=xt(e),o=xt(s),r||o)return e===s;if(r=Y(e),o=Y(s),r||o)return r&&o?fc(e,s):!1;if(r=_e(e),o=_e(s),r||o){if(!r||!o)return!1;const c=Object.keys(e).length,u=Object.keys(s).length;if(c!==u)return!1;for(const t in e){const f=e.hasOwnProperty(t),g=s.hasOwnProperty(t);if(f&&!g||!f&&g||!Fs(e[t],s[t]))return!1}}return String(e)===String(s)}function Ka(e,s){return e.findIndex(r=>Fs(r,s))}const Ml=e=>!!(e&&e.__v_isRef===!0),S=e=>Oe(e)?e:e==null?"":Y(e)||_e(e)&&(e.toString===Cl||!Q(e.toString))?Ml(e)?S(e.value):JSON.stringify(e,Ol,2):String(e),Ol=(e,s)=>Ml(s)?Ol(e,s.value):Rs(s)?{[`Map(${s.size})`]:[...s.entries()].reduce((r,[o,c],u)=>(r[wa(o,u)+" =>"]=c,r),{})}:Ls(s)?{[`Set(${s.size})`]:[...s.values()].map(r=>wa(r))}:xt(s)?wa(s):_e(s)&&!Y(s)&&!kl(s)?String(s):s,wa=(e,s="")=>{var r;return xt(e)?`Symbol(${(r=e.description)!=null?r:s})`:e};let Ye;class pc{constructor(s=!1){this.detached=s,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Ye,!s&&Ye&&(this.index=(Ye.scopes||(Ye.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let s,r;if(this.scopes)for(s=0,r=this.scopes.length;s<r;s++)this.scopes[s].pause();for(s=0,r=this.effects.length;s<r;s++)this.effects[s].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let s,r;if(this.scopes)for(s=0,r=this.scopes.length;s<r;s++)this.scopes[s].resume();for(s=0,r=this.effects.length;s<r;s++)this.effects[s].resume()}}run(s){if(this._active){const r=Ye;try{return Ye=this,s()}finally{Ye=r}}}on(){++this._on===1&&(this.prevScope=Ye,Ye=this)}off(){this._on>0&&--this._on===0&&(Ye=this.prevScope,this.prevScope=void 0)}stop(s){if(this._active){this._active=!1;let r,o;for(r=0,o=this.effects.length;r<o;r++)this.effects[r].stop();for(this.effects.length=0,r=0,o=this.cleanups.length;r<o;r++)this.cleanups[r]();if(this.cleanups.length=0,this.scopes){for(r=0,o=this.scopes.length;r<o;r++)this.scopes[r].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!s){const c=this.parent.scopes.pop();c&&c!==this&&(this.parent.scopes[this.index]=c,c.index=this.index)}this.parent=void 0}}}function gc(){return Ye}let Te;const Pa=new WeakSet;class $l{constructor(s){this.fn=s,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,Ye&&Ye.active&&Ye.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,Pa.has(this)&&(Pa.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Fl(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Ur(this),Gl(this);const s=Te,r=gt;Te=this,gt=!0;try{return this.fn()}finally{jl(this),Te=s,gt=r,this.flags&=-3}}stop(){if(this.flags&1){for(let s=this.deps;s;s=s.nextDep)qa(s);this.deps=this.depsTail=void 0,Ur(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?Pa.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Ra(this)&&this.run()}get dirty(){return Ra(this)}}let Ll=0,en,tn;function Fl(e,s=!1){if(e.flags|=8,s){e.next=tn,tn=e;return}e.next=en,en=e}function za(){Ll++}function Ja(){if(--Ll>0)return;if(tn){let s=tn;for(tn=void 0;s;){const r=s.next;s.next=void 0,s.flags&=-9,s=r}}let e;for(;en;){let s=en;for(en=void 0;s;){const r=s.next;if(s.next=void 0,s.flags&=-9,s.flags&1)try{s.trigger()}catch(o){e||(e=o)}s=r}}if(e)throw e}function Gl(e){for(let s=e.deps;s;s=s.nextDep)s.version=-1,s.prevActiveLink=s.dep.activeLink,s.dep.activeLink=s}function jl(e){let s,r=e.depsTail,o=r;for(;o;){const c=o.prevDep;o.version===-1?(o===r&&(r=c),qa(o),hc(o)):s=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=c}e.deps=s,e.depsTail=r}function Ra(e){for(let s=e.deps;s;s=s.nextDep)if(s.dep.version!==s.version||s.dep.computed&&(Ul(s.dep.computed)||s.dep.version!==s.version))return!0;return!!e._dirty}function Ul(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===cn)||(e.globalVersion=cn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ra(e))))return;e.flags|=2;const s=e.dep,r=Te,o=gt;Te=e,gt=!0;try{Gl(e);const c=e.fn(e._value);(s.version===0||At(c,e._value))&&(e.flags|=128,e._value=c,s.version++)}catch(c){throw s.version++,c}finally{Te=r,gt=o,jl(e),e.flags&=-3}}function qa(e,s=!1){const{dep:r,prevSub:o,nextSub:c}=e;if(o&&(o.nextSub=c,e.prevSub=void 0),c&&(c.prevSub=o,e.nextSub=void 0),r.subs===e&&(r.subs=o,!o&&r.computed)){r.computed.flags&=-5;for(let u=r.computed.deps;u;u=u.nextDep)qa(u,!0)}!s&&!--r.sc&&r.map&&r.map.delete(r.key)}function hc(e){const{prevDep:s,nextDep:r}=e;s&&(s.nextDep=r,e.prevDep=void 0),r&&(r.prevDep=s,e.nextDep=void 0)}let gt=!0;const Bl=[];function Wt(){Bl.push(gt),gt=!1}function Ht(){const e=Bl.pop();gt=e===void 0?!0:e}function Ur(e){const{cleanup:s}=e;if(e.cleanup=void 0,s){const r=Te;Te=void 0;try{s()}finally{Te=r}}}let cn=0;class mc{constructor(s,r){this.sub=s,this.dep=r,this.version=r.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Xa{constructor(s){this.computed=s,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(s){if(!Te||!gt||Te===this.computed)return;let r=this.activeLink;if(r===void 0||r.sub!==Te)r=this.activeLink=new mc(Te,this),Te.deps?(r.prevDep=Te.depsTail,Te.depsTail.nextDep=r,Te.depsTail=r):Te.deps=Te.depsTail=r,Vl(r);else if(r.version===-1&&(r.version=this.version,r.nextDep)){const o=r.nextDep;o.prevDep=r.prevDep,r.prevDep&&(r.prevDep.nextDep=o),r.prevDep=Te.depsTail,r.nextDep=void 0,Te.depsTail.nextDep=r,Te.depsTail=r,Te.deps===r&&(Te.deps=o)}return r}trigger(s){this.version++,cn++,this.notify(s)}notify(s){za();try{for(let r=this.subs;r;r=r.prevSub)r.sub.notify()&&r.sub.dep.notify()}finally{Ja()}}}function Vl(e){if(e.dep.sc++,e.sub.flags&4){const s=e.dep.computed;if(s&&!e.dep.subs){s.flags|=20;for(let o=s.deps;o;o=o.nextDep)Vl(o)}const r=e.dep.subs;r!==e&&(e.prevSub=r,r&&(r.nextSub=e)),e.dep.subs=e}}const Na=new WeakMap,ws=Symbol(""),Ea=Symbol(""),un=Symbol("");function je(e,s,r){if(gt&&Te){let o=Na.get(e);o||Na.set(e,o=new Map);let c=o.get(r);c||(o.set(r,c=new Xa),c.map=o,c.key=r),c.track()}}function Ut(e,s,r,o,c,u){const t=Na.get(e);if(!t){cn++;return}const f=g=>{g&&g.trigger()};if(za(),s==="clear")t.forEach(f);else{const g=Y(e),w=g&&Ha(r);if(g&&r==="length"){const y=Number(o);t.forEach((A,O)=>{(O==="length"||O===un||!xt(O)&&O>=y)&&f(A)})}else switch((r!==void 0||t.has(void 0))&&f(t.get(r)),w&&f(t.get(un)),s){case"add":g?w&&f(t.get("length")):(f(t.get(ws)),Rs(e)&&f(t.get(Ea)));break;case"delete":g||(f(t.get(ws)),Rs(e)&&f(t.get(Ea)));break;case"set":Rs(e)&&f(t.get(ws));break}}Ja()}function Is(e){const s=me(e);return s===e?s:(je(s,"iterate",un),ut(e)?s:s.map(ht))}function Kn(e){return je(e=me(e),"iterate",un),e}function wt(e,s){return Kt(e)?Ms(Ps(e)?ht(s):s):ht(s)}const bc={__proto__:null,[Symbol.iterator](){return Aa(this,Symbol.iterator,e=>wt(this,e))},concat(...e){return Is(this).concat(...e.map(s=>Y(s)?Is(s):s))},entries(){return Aa(this,"entries",e=>(e[1]=wt(this,e[1]),e))},every(e,s){return Lt(this,"every",e,s,void 0,arguments)},filter(e,s){return Lt(this,"filter",e,s,r=>r.map(o=>wt(this,o)),arguments)},find(e,s){return Lt(this,"find",e,s,r=>wt(this,r),arguments)},findIndex(e,s){return Lt(this,"findIndex",e,s,void 0,arguments)},findLast(e,s){return Lt(this,"findLast",e,s,r=>wt(this,r),arguments)},findLastIndex(e,s){return Lt(this,"findLastIndex",e,s,void 0,arguments)},forEach(e,s){return Lt(this,"forEach",e,s,void 0,arguments)},includes(...e){return Ta(this,"includes",e)},indexOf(...e){return Ta(this,"indexOf",e)},join(e){return Is(this).join(e)},lastIndexOf(...e){return Ta(this,"lastIndexOf",e)},map(e,s){return Lt(this,"map",e,s,void 0,arguments)},pop(){return Xs(this,"pop")},push(...e){return Xs(this,"push",e)},reduce(e,...s){return Br(this,"reduce",e,s)},reduceRight(e,...s){return Br(this,"reduceRight",e,s)},shift(){return Xs(this,"shift")},some(e,s){return Lt(this,"some",e,s,void 0,arguments)},splice(...e){return Xs(this,"splice",e)},toReversed(){return Is(this).toReversed()},toSorted(e){return Is(this).toSorted(e)},toSpliced(...e){return Is(this).toSpliced(...e)},unshift(...e){return Xs(this,"unshift",e)},values(){return Aa(this,"values",e=>wt(this,e))}};function Aa(e,s,r){const o=Kn(e),c=o[s]();return o!==e&&!ut(e)&&(c._next=c.next,c.next=()=>{const u=c._next();return u.done||(u.value=r(u.value)),u}),c}const vc=Array.prototype;function Lt(e,s,r,o,c,u){const t=Kn(e),f=t!==e&&!ut(e),g=t[s];if(g!==vc[s]){const A=g.apply(e,u);return f?ht(A):A}let w=r;t!==e&&(f?w=function(A,O){return r.call(this,wt(e,A),O,e)}:r.length>2&&(w=function(A,O){return r.call(this,A,O,e)}));const y=g.call(t,w,o);return f&&c?c(y):y}function Br(e,s,r,o){const c=Kn(e),u=c!==e&&!ut(e);let t=r,f=!1;c!==e&&(u?(f=o.length===0,t=function(w,y,A){return f&&(f=!1,w=wt(e,w)),r.call(this,w,wt(e,y),A,e)}):r.length>3&&(t=function(w,y,A){return r.call(this,w,y,A,e)}));const g=c[s](t,...o);return f?wt(e,g):g}function Ta(e,s,r){const o=me(e);je(o,"iterate",un);const c=o[s](...r);return(c===-1||c===!1)&&Za(r[0])?(r[0]=me(r[0]),o[s](...r)):c}function Xs(e,s,r=[]){Wt(),za();const o=me(e)[s].apply(e,r);return Ja(),Ht(),o}const yc=Ba("__proto__,__v_isRef,__isVue"),Wl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(xt));function Sc(e){xt(e)||(e=String(e));const s=me(this);return je(s,"has",e),s.hasOwnProperty(e)}class Hl{constructor(s=!1,r=!1){this._isReadonly=s,this._isShallow=r}get(s,r,o){if(r==="__v_skip")return s.__v_skip;const c=this._isReadonly,u=this._isShallow;if(r==="__v_isReactive")return!c;if(r==="__v_isReadonly")return c;if(r==="__v_isShallow")return u;if(r==="__v_raw")return o===(c?u?kc:ql:u?Jl:zl).get(s)||Object.getPrototypeOf(s)===Object.getPrototypeOf(o)?s:void 0;const t=Y(s);if(!c){let g;if(t&&(g=bc[r]))return g;if(r==="hasOwnProperty")return Sc}const f=Reflect.get(s,r,Ue(s)?s:o);if((xt(r)?Wl.has(r):yc(r))||(c||je(s,"get",r),u))return f;if(Ue(f)){const g=t&&Ha(r)?f:f.value;return c&&_e(g)?Oa(g):g}return _e(f)?c?Oa(f):zn(f):f}}class Kl extends Hl{constructor(s=!1){super(!1,s)}set(s,r,o,c){let u=s[r];const t=Y(s)&&Ha(r);if(!this._isShallow){const w=Kt(u);if(!ut(o)&&!Kt(o)&&(u=me(u),o=me(o)),!t&&Ue(u)&&!Ue(o))return w||(u.value=o),!0}const f=t?Number(r)<s.length:be(s,r),g=Reflect.set(s,r,o,Ue(s)?s:c);return s===me(c)&&(f?At(o,u)&&Ut(s,"set",r,o):Ut(s,"add",r,o)),g}deleteProperty(s,r){const o=be(s,r);s[r];const c=Reflect.deleteProperty(s,r);return c&&o&&Ut(s,"delete",r,void 0),c}has(s,r){const o=Reflect.has(s,r);return(!xt(r)||!Wl.has(r))&&je(s,"has",r),o}ownKeys(s){return je(s,"iterate",Y(s)?"length":ws),Reflect.ownKeys(s)}}class _c extends Hl{constructor(s=!1){super(!0,s)}set(s,r){return!0}deleteProperty(s,r){return!0}}const wc=new Kl,Pc=new _c,Ac=new Kl(!0);const Ma=e=>e,In=e=>Reflect.getPrototypeOf(e);function Tc(e,s,r){return function(...o){const c=this.__v_raw,u=me(c),t=Rs(u),f=e==="entries"||e===Symbol.iterator&&t,g=e==="keys"&&t,w=c[e](...o),y=r?Ma:s?Ms:ht;return!s&&je(u,"iterate",g?Ea:ws),Be(Object.create(w),{next(){const{value:A,done:O}=w.next();return O?{value:A,done:O}:{value:f?[y(A[0]),y(A[1])]:y(A),done:O}}})}}function Cn(e){return function(...s){return e==="delete"?!1:e==="clear"?void 0:this}}function Dc(e,s){const r={get(c){const u=this.__v_raw,t=me(u),f=me(c);e||(At(c,f)&&je(t,"get",c),je(t,"get",f));const{has:g}=In(t),w=s?Ma:e?Ms:ht;if(g.call(t,c))return w(u.get(c));if(g.call(t,f))return w(u.get(f));u!==t&&u.get(c)},get size(){const c=this.__v_raw;return!e&&je(me(c),"iterate",ws),c.size},has(c){const u=this.__v_raw,t=me(u),f=me(c);return e||(At(c,f)&&je(t,"has",c),je(t,"has",f)),c===f?u.has(c):u.has(c)||u.has(f)},forEach(c,u){const t=this,f=t.__v_raw,g=me(f),w=s?Ma:e?Ms:ht;return!e&&je(g,"iterate",ws),f.forEach((y,A)=>c.call(u,w(y),w(A),t))}};return Be(r,e?{add:Cn("add"),set:Cn("set"),delete:Cn("delete"),clear:Cn("clear")}:{add(c){const u=me(this),t=In(u),f=me(c),g=!s&&!ut(c)&&!Kt(c)?f:c;return t.has.call(u,g)||At(c,g)&&t.has.call(u,c)||At(f,g)&&t.has.call(u,f)||(u.add(g),Ut(u,"add",g,g)),this},set(c,u){!s&&!ut(u)&&!Kt(u)&&(u=me(u));const t=me(this),{has:f,get:g}=In(t);let w=f.call(t,c);w||(c=me(c),w=f.call(t,c));const y=g.call(t,c);return t.set(c,u),w?At(u,y)&&Ut(t,"set",c,u):Ut(t,"add",c,u),this},delete(c){const u=me(this),{has:t,get:f}=In(u);let g=t.call(u,c);g||(c=me(c),g=t.call(u,c)),f&&f.call(u,c);const w=u.delete(c);return g&&Ut(u,"delete",c,void 0),w},clear(){const c=me(this),u=c.size!==0,t=c.clear();return u&&Ut(c,"clear",void 0,void 0),t}}),["keys","values","entries",Symbol.iterator].forEach(c=>{r[c]=Tc(c,e,s)}),r}function Ya(e,s){const r=Dc(e,s);return(o,c,u)=>c==="__v_isReactive"?!e:c==="__v_isReadonly"?e:c==="__v_raw"?o:Reflect.get(be(r,c)&&c in o?r:o,c,u)}const xc={get:Ya(!1,!1)},Ic={get:Ya(!1,!0)},Cc={get:Ya(!0,!1)};const zl=new WeakMap,Jl=new WeakMap,ql=new WeakMap,kc=new WeakMap;function Rc(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Nc(e){return e.__v_skip||!Object.isExtensible(e)?0:Rc(nc(e))}function zn(e){return Kt(e)?e:Qa(e,!1,wc,xc,zl)}function Ec(e){return Qa(e,!1,Ac,Ic,Jl)}function Oa(e){return Qa(e,!0,Pc,Cc,ql)}function Qa(e,s,r,o,c){if(!_e(e)||e.__v_raw&&!(s&&e.__v_isReactive))return e;const u=Nc(e);if(u===0)return e;const t=c.get(e);if(t)return t;const f=new Proxy(e,u===2?o:r);return c.set(e,f),f}function Ps(e){return Kt(e)?Ps(e.__v_raw):!!(e&&e.__v_isReactive)}function Kt(e){return!!(e&&e.__v_isReadonly)}function ut(e){return!!(e&&e.__v_isShallow)}function Za(e){return e?!!e.__v_raw:!1}function me(e){const s=e&&e.__v_raw;return s?me(s):e}function Mc(e){return!be(e,"__v_skip")&&Object.isExtensible(e)&&Nl(e,"__v_skip",!0),e}const ht=e=>_e(e)?zn(e):e,Ms=e=>_e(e)?Oa(e):e;function Ue(e){return e?e.__v_isRef===!0:!1}function ms(e){return Oc(e,!1)}function Oc(e,s){return Ue(e)?e:new $c(e,s)}class $c{constructor(s,r){this.dep=new Xa,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=r?s:me(s),this._value=r?s:ht(s),this.__v_isShallow=r}get value(){return this.dep.track(),this._value}set value(s){const r=this._rawValue,o=this.__v_isShallow||ut(s)||Kt(s);s=o?s:me(s),At(s,r)&&(this._rawValue=s,this._value=o?s:ht(s),this.dep.trigger())}}function Lc(e){return Ue(e)?e.value:e}const Fc={get:(e,s,r)=>s==="__v_raw"?e:Lc(Reflect.get(e,s,r)),set:(e,s,r,o)=>{const c=e[s];return Ue(c)&&!Ue(r)?(c.value=r,!0):Reflect.set(e,s,r,o)}};function Xl(e){return Ps(e)?e:new Proxy(e,Fc)}class Gc{constructor(s,r,o){this.fn=s,this.setter=r,this._value=void 0,this.dep=new Xa(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=cn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!r,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&Te!==this)return Fl(this,!0),!0}get value(){const s=this.dep.track();return Ul(this),s&&(s.version=this.dep.version),this._value}set value(s){this.setter&&this.setter(s)}}function jc(e,s,r=!1){let o,c;return Q(e)?o=e:(o=e.get,c=e.set),new Gc(o,c,r)}const kn={},$n=new WeakMap;let _s;function Uc(e,s=!1,r=_s){if(r){let o=$n.get(r);o||$n.set(r,o=[]),o.push(e)}}function Bc(e,s,r=Ae){const{immediate:o,deep:c,once:u,scheduler:t,augmentJob:f,call:g}=r,w=z=>c?z:ut(z)||c===!1||c===0?Bt(z,1):Bt(z);let y,A,O,F,Z=!1,K=!1;if(Ue(e)?(A=()=>e.value,Z=ut(e)):Ps(e)?(A=()=>w(e),Z=!0):Y(e)?(K=!0,Z=e.some(z=>Ps(z)||ut(z)),A=()=>e.map(z=>{if(Ue(z))return z.value;if(Ps(z))return w(z);if(Q(z))return g?g(z,2):z()})):Q(e)?s?A=g?()=>g(e,2):e:A=()=>{if(O){Wt();try{O()}finally{Ht()}}const z=_s;_s=y;try{return g?g(e,3,[F]):e(F)}finally{_s=z}}:A=Tt,s&&c){const z=A,Ce=c===!0?1/0:c;A=()=>Bt(z(),Ce)}const xe=gc(),Se=()=>{y.stop(),xe&&xe.active&&Wa(xe.effects,y)};if(u&&s){const z=s;s=(...Ce)=>{z(...Ce),Se()}}let ne=K?new Array(e.length).fill(kn):kn;const ge=z=>{if(!(!(y.flags&1)||!y.dirty&&!z))if(s){const Ce=y.run();if(c||Z||(K?Ce.some((Qe,Je)=>At(Qe,ne[Je])):At(Ce,ne))){O&&O();const Qe=_s;_s=y;try{const Je=[Ce,ne===kn?void 0:K&&ne[0]===kn?[]:ne,F];ne=Ce,g?g(s,3,Je):s(...Je)}finally{_s=Qe}}}else y.run()};return f&&f(ge),y=new $l(A),y.scheduler=t?()=>t(ge,!1):ge,F=z=>Uc(z,!1,y),O=y.onStop=()=>{const z=$n.get(y);if(z){if(g)g(z,4);else for(const Ce of z)Ce();$n.delete(y)}},s?o?ge(!0):ne=y.run():t?t(ge.bind(null,!0),!0):y.run(),Se.pause=y.pause.bind(y),Se.resume=y.resume.bind(y),Se.stop=Se,Se}function Bt(e,s=1/0,r){if(s<=0||!_e(e)||e.__v_skip||(r=r||new Map,(r.get(e)||0)>=s))return e;if(r.set(e,s),s--,Ue(e))Bt(e.value,s,r);else if(Y(e))for(let o=0;o<e.length;o++)Bt(e[o],s,r);else if(Ls(e)||Rs(e))e.forEach(o=>{Bt(o,s,r)});else if(kl(e)){for(const o in e)Bt(e[o],s,r);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&&Bt(e[o],s,r)}return e}function mn(e,s,r,o){try{return o?e(...o):e()}catch(c){Jn(c,s,r)}}function It(e,s,r,o){if(Q(e)){const c=mn(e,s,r,o);return c&&Il(c)&&c.catch(u=>{Jn(u,s,r)}),c}if(Y(e)){const c=[];for(let u=0;u<e.length;u++)c.push(It(e[u],s,r,o));return c}}function Jn(e,s,r,o=!0){const c=s?s.vnode:null,{errorHandler:u,throwUnhandledErrorInProduction:t}=s&&s.appContext.config||Ae;if(s){let f=s.parent;const g=s.proxy,w=`https://vuejs.org/error-reference/#runtime-${r}`;for(;f;){const y=f.ec;if(y){for(let A=0;A<y.length;A++)if(y[A](e,g,w)===!1)return}f=f.parent}if(u){Wt(),mn(u,null,10,[e,g,w]),Ht();return}}Vc(e,r,c,o,t)}function Vc(e,s,r,o=!0,c=!1){if(c)throw e;console.error(e)}const Ke=[];let _t=-1;const Ns=[];let as=null,Cs=0;const Yl=Promise.resolve();let Ln=null;function sn(e){const s=Ln||Yl;return e?s.then(this?e.bind(this):e):s}function Wc(e){let s=_t+1,r=Ke.length;for(;s<r;){const o=s+r>>>1,c=Ke[o],u=dn(c);u<e||u===e&&c.flags&2?s=o+1:r=o}return s}function er(e){if(!(e.flags&1)){const s=dn(e),r=Ke[Ke.length-1];!r||!(e.flags&2)&&s>=dn(r)?Ke.push(e):Ke.splice(Wc(s),0,e),e.flags|=1,Ql()}}function Ql(){Ln||(Ln=Yl.then(eo))}function Hc(e){Y(e)?Ns.push(...e):as&&e.id===-1?as.splice(Cs+1,0,e):e.flags&1||(Ns.push(e),e.flags|=1),Ql()}function Vr(e,s,r=_t+1){for(;r<Ke.length;r++){const o=Ke[r];if(o&&o.flags&2){if(e&&o.id!==e.uid)continue;Ke.splice(r,1),r--,o.flags&4&&(o.flags&=-2),o(),o.flags&4||(o.flags&=-2)}}}function Zl(e){if(Ns.length){const s=[...new Set(Ns)].sort((r,o)=>dn(r)-dn(o));if(Ns.length=0,as){as.push(...s);return}for(as=s,Cs=0;Cs<as.length;Cs++){const r=as[Cs];r.flags&4&&(r.flags&=-2),r.flags&8||r(),r.flags&=-2}as=null,Cs=0}}const dn=e=>e.id==null?e.flags&2?-1:1/0:e.id;function eo(e){try{for(_t=0;_t<Ke.length;_t++){const s=Ke[_t];s&&!(s.flags&8)&&(s.flags&4&&(s.flags&=-2),mn(s,s.i,s.i?15:14),s.flags&4||(s.flags&=-2))}}finally{for(;_t<Ke.length;_t++){const s=Ke[_t];s&&(s.flags&=-2)}_t=-1,Ke.length=0,Zl(),Ln=null,(Ke.length||Ns.length)&&eo()}}let ct=null,to=null;function Fn(e){const s=ct;return ct=e,to=e&&e.type.__scopeId||null,s}function Kc(e,s=ct,r){if(!s||e._n)return e;const o=(...c)=>{o._d&&el(-1);const u=Fn(s);let t;try{t=e(...c)}finally{Fn(u),o._d&&el(1)}return t};return o._n=!0,o._c=!0,o._d=!0,o}function fe(e,s){if(ct===null)return e;const r=Qn(ct),o=e.dirs||(e.dirs=[]);for(let c=0;c<s.length;c++){let[u,t,f,g=Ae]=s[c];u&&(Q(u)&&(u={mounted:u,updated:u}),u.deep&&Bt(t),o.push({dir:u,instance:r,value:t,oldValue:void 0,arg:f,modifiers:g}))}return e}function bs(e,s,r,o){const c=e.dirs,u=s&&s.dirs;for(let t=0;t<c.length;t++){const f=c[t];u&&(f.oldValue=u[t].value);let g=f.dir[o];g&&(Wt(),It(g,r,8,[e.el,f,e,s]),Ht())}}function zc(e,s){if(ze){let r=ze.provides;const o=ze.parent&&ze.parent.provides;o===r&&(r=ze.provides=Object.create(o)),r[e]=s}}function Nn(e,s,r=!1){const o=Hu();if(o||Es){let c=Es?Es._context.provides:o?o.parent==null||o.ce?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:void 0;if(c&&e in c)return c[e];if(arguments.length>1)return r&&Q(s)?s.call(o&&o.proxy):s}}const Jc=Symbol.for("v-scx"),qc=()=>Nn(Jc);function Re(e,s,r){return so(e,s,r)}function so(e,s,r=Ae){const{immediate:o,deep:c,flush:u,once:t}=r,f=Be({},r),g=s&&o||!s&&u!=="post";let w;if(pn){if(u==="sync"){const F=qc();w=F.__watcherHandles||(F.__watcherHandles=[])}else if(!g){const F=()=>{};return F.stop=Tt,F.resume=Tt,F.pause=Tt,F}}const y=ze;f.call=(F,Z,K)=>It(F,y,Z,K);let A=!1;u==="post"?f.scheduler=F=>{Xe(F,y&&y.suspense)}:u!=="sync"&&(A=!0,f.scheduler=(F,Z)=>{Z?F():er(F)}),f.augmentJob=F=>{s&&(F.flags|=4),A&&(F.flags|=2,y&&(F.id=y.uid,F.i=y))};const O=Bc(e,s,f);return pn&&(w?w.push(O):g&&O()),O}function Xc(e,s,r){const o=this.proxy,c=Oe(e)?e.includes(".")?no(o,e):()=>o[e]:e.bind(o,o);let u;Q(s)?u=s:(u=s.handler,r=s);const t=bn(this),f=so(c,u.bind(o),r);return t(),f}function no(e,s){const r=s.split(".");return()=>{let o=e;for(let c=0;c<r.length&&o;c++)o=o[r[c]];return o}}const Yc=Symbol("_vte"),Qc=e=>e.__isTeleport,Zc=Symbol("_leaveCb");function tr(e,s){e.shapeFlag&6&&e.component?(e.transition=s,tr(e.component.subTree,s)):e.shapeFlag&128?(e.ssContent.transition=s.clone(e.ssContent),e.ssFallback.transition=s.clone(e.ssFallback)):e.transition=s}function ao(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Wr(e,s){let r;return!!((r=Object.getOwnPropertyDescriptor(e,s))&&!r.configurable)}const Gn=new WeakMap;function nn(e,s,r,o,c=!1){if(Y(e)){e.forEach((K,xe)=>nn(K,s&&(Y(s)?s[xe]:s),r,o,c));return}if(an(o)&&!c){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&nn(e,s,r,o.component.subTree);return}const u=o.shapeFlag&4?Qn(o.component):o.el,t=c?null:u,{i:f,r:g}=e,w=s&&s.r,y=f.refs===Ae?f.refs={}:f.refs,A=f.setupState,O=me(A),F=A===Ae?xl:K=>Wr(y,K)?!1:be(O,K),Z=(K,xe)=>!(xe&&Wr(y,xe));if(w!=null&&w!==g){if(Hr(s),Oe(w))y[w]=null,F(w)&&(A[w]=null);else if(Ue(w)){const K=s;Z(w,K.k)&&(w.value=null),K.k&&(y[K.k]=null)}}if(Q(g))mn(g,f,12,[t,y]);else{const K=Oe(g),xe=Ue(g);if(K||xe){const Se=()=>{if(e.f){const ne=K?F(g)?A[g]:y[g]:Z()||!e.k?g.value:y[e.k];if(c)Y(ne)&&Wa(ne,u);else if(Y(ne))ne.includes(u)||ne.push(u);else if(K)y[g]=[u],F(g)&&(A[g]=y[g]);else{const ge=[u];Z(g,e.k)&&(g.value=ge),e.k&&(y[e.k]=ge)}}else K?(y[g]=t,F(g)&&(A[g]=t)):xe&&(Z(g,e.k)&&(g.value=t),e.k&&(y[e.k]=t))};if(t){const ne=()=>{Se(),Gn.delete(e)};ne.id=-1,Gn.set(e,ne),Xe(ne,r)}else Hr(e),Se()}}}function Hr(e){const s=Gn.get(e);s&&(s.flags|=8,Gn.delete(e))}Hn().requestIdleCallback;Hn().cancelIdleCallback;const an=e=>!!e.type.__asyncLoader,ro=e=>e.type.__isKeepAlive;function eu(e,s){lo(e,"a",s)}function tu(e,s){lo(e,"da",s)}function lo(e,s,r=ze){const o=e.__wdc||(e.__wdc=()=>{let c=r;for(;c;){if(c.isDeactivated)return;c=c.parent}return e()});if(qn(s,o,r),r){let c=r.parent;for(;c&&c.parent;)ro(c.parent.vnode)&&su(o,s,r,c),c=c.parent}}function su(e,s,r,o){const c=qn(s,e,o,!0);co(()=>{Wa(o[s],c)},r)}function qn(e,s,r=ze,o=!1){if(r){const c=r[e]||(r[e]=[]),u=s.__weh||(s.__weh=(...t)=>{Wt();const f=bn(r),g=It(s,r,e,t);return f(),Ht(),g});return o?c.unshift(u):c.push(u),u}}const zt=e=>(s,r=ze)=>{(!pn||e==="sp")&&qn(e,(...o)=>s(...o),r)},nu=zt("bm"),oo=zt("m"),au=zt("bu"),ru=zt("u"),io=zt("bum"),co=zt("um"),lu=zt("sp"),ou=zt("rtg"),iu=zt("rtc");function cu(e,s=ze){qn("ec",e,s)}const uu=Symbol.for("v-ndc");function ae(e,s,r,o){let c;const u=r,t=Y(e);if(t||Oe(e)){const f=t&&Ps(e);let g=!1,w=!1;f&&(g=!ut(e),w=Kt(e),e=Kn(e)),c=new Array(e.length);for(let y=0,A=e.length;y<A;y++)c[y]=s(g?w?Ms(ht(e[y])):ht(e[y]):e[y],y,void 0,u)}else if(typeof e=="number"){c=new Array(e);for(let f=0;f<e;f++)c[f]=s(f+1,f,void 0,u)}else if(_e(e))if(e[Symbol.iterator])c=Array.from(e,(f,g)=>s(f,g,void 0,u));else{const f=Object.keys(e);c=new Array(f.length);for(let g=0,w=f.length;g<w;g++){const y=f[g];c[g]=s(e[y],y,g,u)}}else c=[];return c}const $a=e=>e?Ro(e)?Qn(e):$a(e.parent):null,rn=Be(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=>$a(e.parent),$root:e=>$a(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>fo(e),$forceUpdate:e=>e.f||(e.f=()=>{er(e.update)}),$nextTick:e=>e.n||(e.n=sn.bind(e.proxy)),$watch:e=>Xc.bind(e)}),Da=(e,s)=>e!==Ae&&!e.__isScriptSetup&&be(e,s),du={get({_:e},s){if(s==="__v_skip")return!0;const{ctx:r,setupState:o,data:c,props:u,accessCache:t,type:f,appContext:g}=e;if(s[0]!=="$"){const O=t[s];if(O!==void 0)switch(O){case 1:return o[s];case 2:return c[s];case 4:return r[s];case 3:return u[s]}else{if(Da(o,s))return t[s]=1,o[s];if(c!==Ae&&be(c,s))return t[s]=2,c[s];if(be(u,s))return t[s]=3,u[s];if(r!==Ae&&be(r,s))return t[s]=4,r[s];La&&(t[s]=0)}}const w=rn[s];let y,A;if(w)return s==="$attrs"&&je(e.attrs,"get",""),w(e);if((y=f.__cssModules)&&(y=y[s]))return y;if(r!==Ae&&be(r,s))return t[s]=4,r[s];if(A=g.config.globalProperties,be(A,s))return A[s]},set({_:e},s,r){const{data:o,setupState:c,ctx:u}=e;return Da(c,s)?(c[s]=r,!0):o!==Ae&&be(o,s)?(o[s]=r,!0):be(e.props,s)||s[0]==="$"&&s.slice(1)in e?!1:(u[s]=r,!0)},has({_:{data:e,setupState:s,accessCache:r,ctx:o,appContext:c,props:u,type:t}},f){let g;return!!(r[f]||e!==Ae&&f[0]!=="$"&&be(e,f)||Da(s,f)||be(u,f)||be(o,f)||be(rn,f)||be(c.config.globalProperties,f)||(g=t.__cssModules)&&g[f])},defineProperty(e,s,r){return r.get!=null?e._.accessCache[s]=0:be(r,"value")&&this.set(e,s,r.value,null),Reflect.defineProperty(e,s,r)}};function Kr(e){return Y(e)?e.reduce((s,r)=>(s[r]=null,s),{}):e}let La=!0;function fu(e){const s=fo(e),r=e.proxy,o=e.ctx;La=!1,s.beforeCreate&&zr(s.beforeCreate,e,"bc");const{data:c,computed:u,methods:t,watch:f,provide:g,inject:w,created:y,beforeMount:A,mounted:O,beforeUpdate:F,updated:Z,activated:K,deactivated:xe,beforeDestroy:Se,beforeUnmount:ne,destroyed:ge,unmounted:z,render:Ce,renderTracked:Qe,renderTriggered:Je,errorCaptured:nt,serverPrefetch:is,expose:dt,inheritAttrs:Jt,components:cs,directives:qt,filters:Gs}=s;if(w&&pu(w,o,null),t)for(const De in t){const ve=t[De];Q(ve)&&(o[De]=ve.bind(r))}if(c){const De=c.call(r,r);_e(De)&&(e.data=zn(De))}if(La=!0,u)for(const De in u){const ve=u[De],ye=Q(ve)?ve.bind(r,r):Q(ve.get)?ve.get.bind(r,r):Tt,$=!Q(ve)&&Q(ve.set)?ve.set.bind(r):Tt,we=q({get:ye,set:$});Object.defineProperty(o,De,{enumerable:!0,configurable:!0,get:()=>we.value,set:Ze=>we.value=Ze})}if(f)for(const De in f)uo(f[De],o,r,De);if(g){const De=Q(g)?g.call(r):g;Reflect.ownKeys(De).forEach(ve=>{zc(ve,De[ve])})}y&&zr(y,e,"c");function $e(De,ve){Y(ve)?ve.forEach(ye=>De(ye.bind(r))):ve&&De(ve.bind(r))}if($e(nu,A),$e(oo,O),$e(au,F),$e(ru,Z),$e(eu,K),$e(tu,xe),$e(cu,nt),$e(iu,Qe),$e(ou,Je),$e(io,ne),$e(co,z),$e(lu,is),Y(dt))if(dt.length){const De=e.exposed||(e.exposed={});dt.forEach(ve=>{Object.defineProperty(De,ve,{get:()=>r[ve],set:ye=>r[ve]=ye,enumerable:!0})})}else e.exposed||(e.exposed={});Ce&&e.render===Tt&&(e.render=Ce),Jt!=null&&(e.inheritAttrs=Jt),cs&&(e.components=cs),qt&&(e.directives=qt),is&&ao(e)}function pu(e,s,r=Tt){Y(e)&&(e=Fa(e));for(const o in e){const c=e[o];let u;_e(c)?"default"in c?u=Nn(c.from||o,c.default,!0):u=Nn(c.from||o):u=Nn(c),Ue(u)?Object.defineProperty(s,o,{enumerable:!0,configurable:!0,get:()=>u.value,set:t=>u.value=t}):s[o]=u}}function zr(e,s,r){It(Y(e)?e.map(o=>o.bind(s.proxy)):e.bind(s.proxy),s,r)}function uo(e,s,r,o){let c=o.includes(".")?no(r,o):()=>r[o];if(Oe(e)){const u=s[e];Q(u)&&Re(c,u)}else if(Q(e))Re(c,e.bind(r));else if(_e(e))if(Y(e))e.forEach(u=>uo(u,s,r,o));else{const u=Q(e.handler)?e.handler.bind(r):s[e.handler];Q(u)&&Re(c,u,e)}}function fo(e){const s=e.type,{mixins:r,extends:o}=s,{mixins:c,optionsCache:u,config:{optionMergeStrategies:t}}=e.appContext,f=u.get(s);let g;return f?g=f:!c.length&&!r&&!o?g=s:(g={},c.length&&c.forEach(w=>jn(g,w,t,!0)),jn(g,s,t)),_e(s)&&u.set(s,g),g}function jn(e,s,r,o=!1){const{mixins:c,extends:u}=s;u&&jn(e,u,r,!0),c&&c.forEach(t=>jn(e,t,r,!0));for(const t in s)if(!(o&&t==="expose")){const f=gu[t]||r&&r[t];e[t]=f?f(e[t],s[t]):s[t]}return e}const gu={data:Jr,props:qr,emits:qr,methods:Qs,computed:Qs,beforeCreate:He,created:He,beforeMount:He,mounted:He,beforeUpdate:He,updated:He,beforeDestroy:He,beforeUnmount:He,destroyed:He,unmounted:He,activated:He,deactivated:He,errorCaptured:He,serverPrefetch:He,components:Qs,directives:Qs,watch:mu,provide:Jr,inject:hu};function Jr(e,s){return s?e?function(){return Be(Q(e)?e.call(this,this):e,Q(s)?s.call(this,this):s)}:s:e}function hu(e,s){return Qs(Fa(e),Fa(s))}function Fa(e){if(Y(e)){const s={};for(let r=0;r<e.length;r++)s[e[r]]=e[r];return s}return e}function He(e,s){return e?[...new Set([].concat(e,s))]:s}function Qs(e,s){return e?Be(Object.create(null),e,s):s}function qr(e,s){return e?Y(e)&&Y(s)?[...new Set([...e,...s])]:Be(Object.create(null),Kr(e),Kr(s??{})):s}function mu(e,s){if(!e)return s;if(!s)return e;const r=Be(Object.create(null),e);for(const o in s)r[o]=He(e[o],s[o]);return r}function po(){return{app:null,config:{isNativeTag:xl,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let bu=0;function vu(e,s){return function(o,c=null){Q(o)||(o=Be({},o)),c!=null&&!_e(c)&&(c=null);const u=po(),t=new WeakSet,f=[];let g=!1;const w=u.app={_uid:bu++,_component:o,_props:c,_container:null,_context:u,_instance:null,version:Yu,get config(){return u.config},set config(y){},use(y,...A){return t.has(y)||(y&&Q(y.install)?(t.add(y),y.install(w,...A)):Q(y)&&(t.add(y),y(w,...A))),w},mixin(y){return u.mixins.includes(y)||u.mixins.push(y),w},component(y,A){return A?(u.components[y]=A,w):u.components[y]},directive(y,A){return A?(u.directives[y]=A,w):u.directives[y]},mount(y,A,O){if(!g){const F=w._ceVNode||Dt(o,c);return F.appContext=u,O===!0?O="svg":O===!1&&(O=void 0),e(F,y,O),g=!0,w._container=y,y.__vue_app__=w,Qn(F.component)}},onUnmount(y){f.push(y)},unmount(){g&&(It(f,w._instance,16),e(null,w._container),delete w._container.__vue_app__)},provide(y,A){return u.provides[y]=A,w},runWithContext(y){const A=Es;Es=w;try{return y()}finally{Es=A}}};return w}}let Es=null;const yu=(e,s)=>s==="modelValue"||s==="model-value"?e.modelModifiers:e[`${s}Modifiers`]||e[`${pt(s)}Modifiers`]||e[`${os(s)}Modifiers`];function Su(e,s,...r){if(e.isUnmounted)return;const o=e.vnode.props||Ae;let c=r;const u=s.startsWith("update:"),t=u&&yu(o,s.slice(7));t&&(t.trim&&(c=r.map(y=>Oe(y)?y.trim():y)),t.number&&(c=r.map(Wn)));let f,g=o[f=_a(s)]||o[f=_a(pt(s))];!g&&u&&(g=o[f=_a(os(s))]),g&&It(g,e,6,c);const w=o[f+"Once"];if(w){if(!e.emitted)e.emitted={};else if(e.emitted[f])return;e.emitted[f]=!0,It(w,e,6,c)}}const _u=new WeakMap;function go(e,s,r=!1){const o=r?_u:s.emitsCache,c=o.get(e);if(c!==void 0)return c;const u=e.emits;let t={},f=!1;if(!Q(e)){const g=w=>{const y=go(w,s,!0);y&&(f=!0,Be(t,y))};!r&&s.mixins.length&&s.mixins.forEach(g),e.extends&&g(e.extends),e.mixins&&e.mixins.forEach(g)}return!u&&!f?(_e(e)&&o.set(e,null),null):(Y(u)?u.forEach(g=>t[g]=null):Be(t,u),_e(e)&&o.set(e,t),t)}function Xn(e,s){return!e||!Bn(s)?!1:(s=s.slice(2).replace(/Once$/,""),be(e,s[0].toLowerCase()+s.slice(1))||be(e,os(s))||be(e,s))}function Xr(e){const{type:s,vnode:r,proxy:o,withProxy:c,propsOptions:[u],slots:t,attrs:f,emit:g,render:w,renderCache:y,props:A,data:O,setupState:F,ctx:Z,inheritAttrs:K}=e,xe=Fn(e);let Se,ne;try{if(r.shapeFlag&4){const z=c||o,Ce=z;Se=Pt(w.call(Ce,z,y,A,F,O,Z)),ne=f}else{const z=s;Se=Pt(z.length>1?z(A,{attrs:f,slots:t,emit:g}):z(A,null)),ne=s.props?f:wu(f)}}catch(z){ln.length=0,Jn(z,e,1),Se=Dt(ls)}let ge=Se;if(ne&&K!==!1){const z=Object.keys(ne),{shapeFlag:Ce}=ge;z.length&&Ce&7&&(u&&z.some(Va)&&(ne=Pu(ne,u)),ge=Os(ge,ne,!1,!0))}return r.dirs&&(ge=Os(ge,null,!1,!0),ge.dirs=ge.dirs?ge.dirs.concat(r.dirs):r.dirs),r.transition&&tr(ge,r.transition),Se=ge,Fn(xe),Se}const wu=e=>{let s;for(const r in e)(r==="class"||r==="style"||Bn(r))&&((s||(s={}))[r]=e[r]);return s},Pu=(e,s)=>{const r={};for(const o in e)(!Va(o)||!(o.slice(9)in s))&&(r[o]=e[o]);return r};function Au(e,s,r){const{props:o,children:c,component:u}=e,{props:t,children:f,patchFlag:g}=s,w=u.emitsOptions;if(s.dirs||s.transition)return!0;if(r&&g>=0){if(g&1024)return!0;if(g&16)return o?Yr(o,t,w):!!t;if(g&8){const y=s.dynamicProps;for(let A=0;A<y.length;A++){const O=y[A];if(ho(t,o,O)&&!Xn(w,O))return!0}}}else return(c||f)&&(!f||!f.$stable)?!0:o===t?!1:o?t?Yr(o,t,w):!0:!!t;return!1}function Yr(e,s,r){const o=Object.keys(s);if(o.length!==Object.keys(e).length)return!0;for(let c=0;c<o.length;c++){const u=o[c];if(ho(s,e,u)&&!Xn(r,u))return!0}return!1}function ho(e,s,r){const o=e[r],c=s[r];return r==="style"&&_e(o)&&_e(c)?!Fs(o,c):o!==c}function Tu({vnode:e,parent:s},r){for(;s;){const o=s.subTree;if(o.suspense&&o.suspense.activeBranch===e&&(o.el=e.el),o===e)(e=s.vnode).el=r,s=s.parent;else break}}const mo={},bo=()=>Object.create(mo),vo=e=>Object.getPrototypeOf(e)===mo;function Du(e,s,r,o=!1){const c={},u=bo();e.propsDefaults=Object.create(null),yo(e,s,c,u);for(const t in e.propsOptions[0])t in c||(c[t]=void 0);r?e.props=o?c:Ec(c):e.type.props?e.props=c:e.props=u,e.attrs=u}function xu(e,s,r,o){const{props:c,attrs:u,vnode:{patchFlag:t}}=e,f=me(c),[g]=e.propsOptions;let w=!1;if((o||t>0)&&!(t&16)){if(t&8){const y=e.vnode.dynamicProps;for(let A=0;A<y.length;A++){let O=y[A];if(Xn(e.emitsOptions,O))continue;const F=s[O];if(g)if(be(u,O))F!==u[O]&&(u[O]=F,w=!0);else{const Z=pt(O);c[Z]=Ga(g,f,Z,F,e,!1)}else F!==u[O]&&(u[O]=F,w=!0)}}}else{yo(e,s,c,u)&&(w=!0);let y;for(const A in f)(!s||!be(s,A)&&((y=os(A))===A||!be(s,y)))&&(g?r&&(r[A]!==void 0||r[y]!==void 0)&&(c[A]=Ga(g,f,A,void 0,e,!0)):delete c[A]);if(u!==f)for(const A in u)(!s||!be(s,A))&&(delete u[A],w=!0)}w&&Ut(e.attrs,"set","")}function yo(e,s,r,o){const[c,u]=e.propsOptions;let t=!1,f;if(s)for(let g in s){if(Zs(g))continue;const w=s[g];let y;c&&be(c,y=pt(g))?!u||!u.includes(y)?r[y]=w:(f||(f={}))[y]=w:Xn(e.emitsOptions,g)||(!(g in o)||w!==o[g])&&(o[g]=w,t=!0)}if(u){const g=me(r),w=f||Ae;for(let y=0;y<u.length;y++){const A=u[y];r[A]=Ga(c,g,A,w[A],e,!be(w,A))}}return t}function Ga(e,s,r,o,c,u){const t=e[r];if(t!=null){const f=be(t,"default");if(f&&o===void 0){const g=t.default;if(t.type!==Function&&!t.skipFactory&&Q(g)){const{propsDefaults:w}=c;if(r in w)o=w[r];else{const y=bn(c);o=w[r]=g.call(null,s),y()}}else o=g;c.ce&&c.ce._setProp(r,o)}t[0]&&(u&&!f?o=!1:t[1]&&(o===""||o===os(r))&&(o=!0))}return o}const Iu=new WeakMap;function So(e,s,r=!1){const o=r?Iu:s.propsCache,c=o.get(e);if(c)return c;const u=e.props,t={},f=[];let g=!1;if(!Q(e)){const y=A=>{g=!0;const[O,F]=So(A,s,!0);Be(t,O),F&&f.push(...F)};!r&&s.mixins.length&&s.mixins.forEach(y),e.extends&&y(e.extends),e.mixins&&e.mixins.forEach(y)}if(!u&&!g)return _e(e)&&o.set(e,ks),ks;if(Y(u))for(let y=0;y<u.length;y++){const A=pt(u[y]);Qr(A)&&(t[A]=Ae)}else if(u)for(const y in u){const A=pt(y);if(Qr(A)){const O=u[y],F=t[A]=Y(O)||Q(O)?{type:O}:Be({},O),Z=F.type;let K=!1,xe=!0;if(Y(Z))for(let Se=0;Se<Z.length;++Se){const ne=Z[Se],ge=Q(ne)&&ne.name;if(ge==="Boolean"){K=!0;break}else ge==="String"&&(xe=!1)}else K=Q(Z)&&Z.name==="Boolean";F[0]=K,F[1]=xe,(K||be(F,"default"))&&f.push(A)}}const w=[t,f];return _e(e)&&o.set(e,w),w}function Qr(e){return e[0]!=="$"&&!Zs(e)}const sr=e=>e==="_"||e==="_ctx"||e==="$stable",nr=e=>Y(e)?e.map(Pt):[Pt(e)],Cu=(e,s,r)=>{if(s._n)return s;const o=Kc((...c)=>nr(s(...c)),r);return o._c=!1,o},_o=(e,s,r)=>{const o=e._ctx;for(const c in e){if(sr(c))continue;const u=e[c];if(Q(u))s[c]=Cu(c,u,o);else if(u!=null){const t=nr(u);s[c]=()=>t}}},wo=(e,s)=>{const r=nr(s);e.slots.default=()=>r},Po=(e,s,r)=>{for(const o in s)(r||!sr(o))&&(e[o]=s[o])},ku=(e,s,r)=>{const o=e.slots=bo();if(e.vnode.shapeFlag&32){const c=s._;c?(Po(o,s,r),r&&Nl(o,"_",c,!0)):_o(s,o)}else s&&wo(e,s)},Ru=(e,s,r)=>{const{vnode:o,slots:c}=e;let u=!0,t=Ae;if(o.shapeFlag&32){const f=s._;f?r&&f===1?u=!1:Po(c,s,r):(u=!s.$stable,_o(s,c)),t=s}else s&&(wo(e,s),t={default:1});if(u)for(const f in c)!sr(f)&&t[f]==null&&delete c[f]},Xe=$u;function Nu(e){return Eu(e)}function Eu(e,s){const r=Hn();r.__VUE__=!0;const{insert:o,remove:c,patchProp:u,createElement:t,createText:f,createComment:g,setText:w,setElementText:y,parentNode:A,nextSibling:O,setScopeId:F=Tt,insertStaticContent:Z}=e,K=(p,m,P,C=null,D=null,x=null,N=void 0,E=null,R=!!m.dynamicChildren)=>{if(p===m)return;p&&!Ys(p,m)&&(C=As(p),Ze(p,D,x,!0),p=null),m.patchFlag===-2&&(R=!1,m.dynamicChildren=null);const{type:T,ref:W,shapeFlag:L}=m;switch(T){case Yn:xe(p,m,P,C);break;case ls:Se(p,m,P,C);break;case En:p==null&&ne(m,P,C,N);break;case X:cs(p,m,P,C,D,x,N,E,R);break;default:L&1?Ce(p,m,P,C,D,x,N,E,R):L&6?qt(p,m,P,C,D,x,N,E,R):(L&64||L&128)&&T.process(p,m,P,C,D,x,N,E,R,kt)}W!=null&&D?nn(W,p&&p.ref,x,m||p,!m):W==null&&p&&p.ref!=null&&nn(p.ref,null,x,p,!0)},xe=(p,m,P,C)=>{if(p==null)o(m.el=f(m.children),P,C);else{const D=m.el=p.el;m.children!==p.children&&w(D,m.children)}},Se=(p,m,P,C)=>{p==null?o(m.el=g(m.children||""),P,C):m.el=p.el},ne=(p,m,P,C)=>{[p.el,p.anchor]=Z(p.children,m,P,C,p.el,p.anchor)},ge=({el:p,anchor:m},P,C)=>{let D;for(;p&&p!==m;)D=O(p),o(p,P,C),p=D;o(m,P,C)},z=({el:p,anchor:m})=>{let P;for(;p&&p!==m;)P=O(p),c(p),p=P;c(m)},Ce=(p,m,P,C,D,x,N,E,R)=>{if(m.type==="svg"?N="svg":m.type==="math"&&(N="mathml"),p==null)Qe(m,P,C,D,x,N,E,R);else{const T=p.el&&p.el._isVueCE?p.el:null;try{T&&T._beginPatch(),is(p,m,D,x,N,E,R)}finally{T&&T._endPatch()}}},Qe=(p,m,P,C,D,x,N,E)=>{let R,T;const{props:W,shapeFlag:L,transition:U,dirs:J}=p;if(R=p.el=t(p.type,x,W&&W.is,W),L&8?y(R,p.children):L&16&&nt(p.children,R,null,C,D,xa(p,x),N,E),J&&bs(p,null,C,"created"),Je(R,p,p.scopeId,N,C),W){for(const le in W)le!=="value"&&!Zs(le)&&u(R,le,null,W[le],x,C);"value"in W&&u(R,"value",null,W.value,x),(T=W.onVnodeBeforeMount)&&St(T,C,p)}J&&bs(p,null,C,"beforeMount");const re=Mu(D,U);re&&U.beforeEnter(R),o(R,m,P),((T=W&&W.onVnodeMounted)||re||J)&&Xe(()=>{T&&St(T,C,p),re&&U.enter(R),J&&bs(p,null,C,"mounted")},D)},Je=(p,m,P,C,D)=>{if(P&&F(p,P),C)for(let x=0;x<C.length;x++)F(p,C[x]);if(D){let x=D.subTree;if(m===x||xo(x.type)&&(x.ssContent===m||x.ssFallback===m)){const N=D.vnode;Je(p,N,N.scopeId,N.slotScopeIds,D.parent)}}},nt=(p,m,P,C,D,x,N,E,R=0)=>{for(let T=R;T<p.length;T++){const W=p[T]=E?jt(p[T]):Pt(p[T]);K(null,W,m,P,C,D,x,N,E)}},is=(p,m,P,C,D,x,N)=>{const E=m.el=p.el;let{patchFlag:R,dynamicChildren:T,dirs:W}=m;R|=p.patchFlag&16;const L=p.props||Ae,U=m.props||Ae;let J;if(P&&vs(P,!1),(J=U.onVnodeBeforeUpdate)&&St(J,P,m,p),W&&bs(m,p,P,"beforeUpdate"),P&&vs(P,!0),(L.innerHTML&&U.innerHTML==null||L.textContent&&U.textContent==null)&&y(E,""),T?dt(p.dynamicChildren,T,E,P,C,xa(m,D),x):N||ve(p,m,E,null,P,C,xa(m,D),x,!1),R>0){if(R&16)Jt(E,L,U,P,D);else if(R&2&&L.class!==U.class&&u(E,"class",null,U.class,D),R&4&&u(E,"style",L.style,U.style,D),R&8){const re=m.dynamicProps;for(let le=0;le<re.length;le++){const ue=re[le],Fe=L[ue],Ge=U[ue];(Ge!==Fe||ue==="value")&&u(E,ue,Fe,Ge,D,P)}}R&1&&p.children!==m.children&&y(E,m.children)}else!N&&T==null&&Jt(E,L,U,P,D);((J=U.onVnodeUpdated)||W)&&Xe(()=>{J&&St(J,P,m,p),W&&bs(m,p,P,"updated")},C)},dt=(p,m,P,C,D,x,N)=>{for(let E=0;E<m.length;E++){const R=p[E],T=m[E],W=R.el&&(R.type===X||!Ys(R,T)||R.shapeFlag&198)?A(R.el):P;K(R,T,W,null,C,D,x,N,!0)}},Jt=(p,m,P,C,D)=>{if(m!==P){if(m!==Ae)for(const x in m)!Zs(x)&&!(x in P)&&u(p,x,m[x],null,D,C);for(const x in P){if(Zs(x))continue;const N=P[x],E=m[x];N!==E&&x!=="value"&&u(p,x,E,N,D,C)}"value"in P&&u(p,"value",m.value,P.value,D)}},cs=(p,m,P,C,D,x,N,E,R)=>{const T=m.el=p?p.el:f(""),W=m.anchor=p?p.anchor:f("");let{patchFlag:L,dynamicChildren:U,slotScopeIds:J}=m;J&&(E=E?E.concat(J):J),p==null?(o(T,P,C),o(W,P,C),nt(m.children||[],P,W,D,x,N,E,R)):L>0&&L&64&&U&&p.dynamicChildren&&p.dynamicChildren.length===U.length?(dt(p.dynamicChildren,U,P,D,x,N,E),(m.key!=null||D&&m===D.subTree)&&Ao(p,m,!0)):ve(p,m,P,W,D,x,N,E,R)},qt=(p,m,P,C,D,x,N,E,R)=>{m.slotScopeIds=E,p==null?m.shapeFlag&512?D.ctx.activate(m,P,C,N,R):Gs(m,P,C,D,x,N,R):us(p,m,R)},Gs=(p,m,P,C,D,x,N)=>{const E=p.component=Wu(p,C,D);if(ro(p)&&(E.ctx.renderer=kt),Ku(E,!1,N),E.asyncDep){if(D&&D.registerDep(E,$e,N),!p.el){const R=E.subTree=Dt(ls);Se(null,R,m,P),p.placeholder=R.el}}else $e(E,p,m,P,D,x,N)},us=(p,m,P)=>{const C=m.component=p.component;if(Au(p,m,P))if(C.asyncDep&&!C.asyncResolved){De(C,m,P);return}else C.next=m,C.update();else m.el=p.el,C.vnode=m},$e=(p,m,P,C,D,x,N)=>{const E=()=>{if(p.isMounted){let{next:L,bu:U,u:J,parent:re,vnode:le}=p;{const rt=To(p);if(rt){L&&(L.el=le.el,De(p,L,N)),rt.asyncDep.then(()=>{Xe(()=>{p.isUnmounted||T()},D)});return}}let ue=L,Fe;vs(p,!1),L?(L.el=le.el,De(p,L,N)):L=le,U&&Rn(U),(Fe=L.props&&L.props.onVnodeBeforeUpdate)&&St(Fe,re,L,le),vs(p,!0);const Ge=Xr(p),at=p.subTree;p.subTree=Ge,K(at,Ge,A(at.el),As(at),p,D,x),L.el=Ge.el,ue===null&&Tu(p,Ge.el),J&&Xe(J,D),(Fe=L.props&&L.props.onVnodeUpdated)&&Xe(()=>St(Fe,re,L,le),D)}else{let L;const{el:U,props:J}=m,{bm:re,m:le,parent:ue,root:Fe,type:Ge}=p,at=an(m);vs(p,!1),re&&Rn(re),!at&&(L=J&&J.onVnodeBeforeMount)&&St(L,ue,m),vs(p,!0);{Fe.ce&&Fe.ce._hasShadowRoot()&&Fe.ce._injectChildStyle(Ge,p.parent?p.parent.type:void 0);const rt=p.subTree=Xr(p);K(null,rt,P,C,p,D,x),m.el=rt.el}if(le&&Xe(le,D),!at&&(L=J&&J.onVnodeMounted)){const rt=m;Xe(()=>St(L,ue,rt),D)}(m.shapeFlag&256||ue&&an(ue.vnode)&&ue.vnode.shapeFlag&256)&&p.a&&Xe(p.a,D),p.isMounted=!0,m=P=C=null}};p.scope.on();const R=p.effect=new $l(E);p.scope.off();const T=p.update=R.run.bind(R),W=p.job=R.runIfDirty.bind(R);W.i=p,W.id=p.uid,R.scheduler=()=>er(W),vs(p,!0),T()},De=(p,m,P)=>{m.component=p;const C=p.vnode.props;p.vnode=m,p.next=null,xu(p,m.props,C,P),Ru(p,m.children,P),Wt(),Vr(p),Ht()},ve=(p,m,P,C,D,x,N,E,R=!1)=>{const T=p&&p.children,W=p?p.shapeFlag:0,L=m.children,{patchFlag:U,shapeFlag:J}=m;if(U>0){if(U&128){$(T,L,P,C,D,x,N,E,R);return}else if(U&256){ye(T,L,P,C,D,x,N,E,R);return}}J&8?(W&16&&Ct(T,D,x),L!==T&&y(P,L)):W&16?J&16?$(T,L,P,C,D,x,N,E,R):Ct(T,D,x,!0):(W&8&&y(P,""),J&16&&nt(L,P,C,D,x,N,E,R))},ye=(p,m,P,C,D,x,N,E,R)=>{p=p||ks,m=m||ks;const T=p.length,W=m.length,L=Math.min(T,W);let U;for(U=0;U<L;U++){const J=m[U]=R?jt(m[U]):Pt(m[U]);K(p[U],J,P,null,D,x,N,E,R)}T>W?Ct(p,D,x,!0,!1,L):nt(m,P,C,D,x,N,E,R,L)},$=(p,m,P,C,D,x,N,E,R)=>{let T=0;const W=m.length;let L=p.length-1,U=W-1;for(;T<=L&&T<=U;){const J=p[T],re=m[T]=R?jt(m[T]):Pt(m[T]);if(Ys(J,re))K(J,re,P,null,D,x,N,E,R);else break;T++}for(;T<=L&&T<=U;){const J=p[L],re=m[U]=R?jt(m[U]):Pt(m[U]);if(Ys(J,re))K(J,re,P,null,D,x,N,E,R);else break;L--,U--}if(T>L){if(T<=U){const J=U+1,re=J<W?m[J].el:C;for(;T<=U;)K(null,m[T]=R?jt(m[T]):Pt(m[T]),P,re,D,x,N,E,R),T++}}else if(T>U)for(;T<=L;)Ze(p[T],D,x,!0),T++;else{const J=T,re=T,le=new Map;for(T=re;T<=U;T++){const Ve=m[T]=R?jt(m[T]):Pt(m[T]);Ve.key!=null&&le.set(Ve.key,T)}let ue,Fe=0;const Ge=U-re+1;let at=!1,rt=0;const ds=new Array(Ge);for(T=0;T<Ge;T++)ds[T]=0;for(T=J;T<=L;T++){const Ve=p[T];if(Fe>=Ge){Ze(Ve,D,x,!0);continue}let lt;if(Ve.key!=null)lt=le.get(Ve.key);else for(ue=re;ue<=U;ue++)if(ds[ue-re]===0&&Ys(Ve,m[ue])){lt=ue;break}lt===void 0?Ze(Ve,D,x,!0):(ds[lt-re]=T+1,lt>=rt?rt=lt:at=!0,K(Ve,m[lt],P,null,D,x,N,E,R),Fe++)}const Ts=at?Ou(ds):ks;for(ue=Ts.length-1,T=Ge-1;T>=0;T--){const Ve=re+T,lt=m[Ve],fs=m[Ve+1],ke=Ve+1<W?fs.el||Do(fs):C;ds[T]===0?K(null,lt,P,ke,D,x,N,E,R):at&&(ue<0||T!==Ts[ue]?we(lt,P,ke,2):ue--)}}},we=(p,m,P,C,D=null)=>{const{el:x,type:N,transition:E,children:R,shapeFlag:T}=p;if(T&6){we(p.component.subTree,m,P,C);return}if(T&128){p.suspense.move(m,P,C);return}if(T&64){N.move(p,m,P,kt);return}if(N===X){o(x,m,P);for(let L=0;L<R.length;L++)we(R[L],m,P,C);o(p.anchor,m,P);return}if(N===En){ge(p,m,P);return}if(C!==2&&T&1&&E)if(C===0)E.beforeEnter(x),o(x,m,P),Xe(()=>E.enter(x),D);else{const{leave:L,delayLeave:U,afterLeave:J}=E,re=()=>{p.ctx.isUnmounted?c(x):o(x,m,P)},le=()=>{x._isLeaving&&x[Zc](!0),L(x,()=>{re(),J&&J()})};U?U(x,re,le):le()}else o(x,m,P)},Ze=(p,m,P,C=!1,D=!1)=>{const{type:x,props:N,ref:E,children:R,dynamicChildren:T,shapeFlag:W,patchFlag:L,dirs:U,cacheIndex:J}=p;if(L===-2&&(D=!1),E!=null&&(Wt(),nn(E,null,P,p,!0),Ht()),J!=null&&(m.renderCache[J]=void 0),W&256){m.ctx.deactivate(p);return}const re=W&1&&U,le=!an(p);let ue;if(le&&(ue=N&&N.onVnodeBeforeUnmount)&&St(ue,m,p),W&6)Zn(p.component,P,C);else{if(W&128){p.suspense.unmount(P,C);return}re&&bs(p,null,m,"beforeUnmount"),W&64?p.type.remove(p,m,P,kt,C):T&&!T.hasOnce&&(x!==X||L>0&&L&64)?Ct(T,m,P,!1,!0):(x===X&&L&384||!D&&W&16)&&Ct(R,m,P),C&&js(p)}(le&&(ue=N&&N.onVnodeUnmounted)||re)&&Xe(()=>{ue&&St(ue,m,p),re&&bs(p,null,m,"unmounted")},P)},js=p=>{const{type:m,el:P,anchor:C,transition:D}=p;if(m===X){Us(P,C);return}if(m===En){z(p);return}const x=()=>{c(P),D&&!D.persisted&&D.afterLeave&&D.afterLeave()};if(p.shapeFlag&1&&D&&!D.persisted){const{leave:N,delayLeave:E}=D,R=()=>N(P,x);E?E(p.el,x,R):R()}else x()},Us=(p,m)=>{let P;for(;p!==m;)P=O(p),c(p),p=P;c(m)},Zn=(p,m,P)=>{const{bum:C,scope:D,job:x,subTree:N,um:E,m:R,a:T}=p;Zr(R),Zr(T),C&&Rn(C),D.stop(),x&&(x.flags|=8,Ze(N,p,m,P)),E&&Xe(E,m),Xe(()=>{p.isUnmounted=!0},m)},Ct=(p,m,P,C=!1,D=!1,x=0)=>{for(let N=x;N<p.length;N++)Ze(p[N],m,P,C,D)},As=p=>{if(p.shapeFlag&6)return As(p.component.subTree);if(p.shapeFlag&128)return p.suspense.next();const m=O(p.anchor||p.el),P=m&&m[Yc];return P?O(P):m};let Bs=!1;const Vs=(p,m,P)=>{let C;p==null?m._vnode&&(Ze(m._vnode,null,null,!0),C=m._vnode.component):K(m._vnode||null,p,m,null,null,null,P),m._vnode=p,Bs||(Bs=!0,Vr(C),Zl(),Bs=!1)},kt={p:K,um:Ze,m:we,r:js,mt:Gs,mc:nt,pc:ve,pbc:dt,n:As,o:e};return{render:Vs,hydrate:void 0,createApp:vu(Vs)}}function xa({type:e,props:s},r){return r==="svg"&&e==="foreignObject"||r==="mathml"&&e==="annotation-xml"&&s&&s.encoding&&s.encoding.includes("html")?void 0:r}function vs({effect:e,job:s},r){r?(e.flags|=32,s.flags|=4):(e.flags&=-33,s.flags&=-5)}function Mu(e,s){return(!e||e&&!e.pendingBranch)&&s&&!s.persisted}function Ao(e,s,r=!1){const o=e.children,c=s.children;if(Y(o)&&Y(c))for(let u=0;u<o.length;u++){const t=o[u];let f=c[u];f.shapeFlag&1&&!f.dynamicChildren&&((f.patchFlag<=0||f.patchFlag===32)&&(f=c[u]=jt(c[u]),f.el=t.el),!r&&f.patchFlag!==-2&&Ao(t,f)),f.type===Yn&&(f.patchFlag===-1&&(f=c[u]=jt(f)),f.el=t.el),f.type===ls&&!f.el&&(f.el=t.el)}}function Ou(e){const s=e.slice(),r=[0];let o,c,u,t,f;const g=e.length;for(o=0;o<g;o++){const w=e[o];if(w!==0){if(c=r[r.length-1],e[c]<w){s[o]=c,r.push(o);continue}for(u=0,t=r.length-1;u<t;)f=u+t>>1,e[r[f]]<w?u=f+1:t=f;w<e[r[u]]&&(u>0&&(s[o]=r[u-1]),r[u]=o)}}for(u=r.length,t=r[u-1];u-- >0;)r[u]=t,t=s[t];return r}function To(e){const s=e.subTree.component;if(s)return s.asyncDep&&!s.asyncResolved?s:To(s)}function Zr(e){if(e)for(let s=0;s<e.length;s++)e[s].flags|=8}function Do(e){if(e.placeholder)return e.placeholder;const s=e.component;return s?Do(s.subTree):null}const xo=e=>e.__isSuspense;function $u(e,s){s&&s.pendingBranch?Y(e)?s.effects.push(...e):s.effects.push(e):Hc(e)}const X=Symbol.for("v-fgt"),Yn=Symbol.for("v-txt"),ls=Symbol.for("v-cmt"),En=Symbol.for("v-stc"),ln=[];let st=null;function b(e=!1){ln.push(st=e?null:[])}function Lu(){ln.pop(),st=ln[ln.length-1]||null}let fn=1;function el(e,s=!1){fn+=e,e<0&&st&&s&&(st.hasOnce=!0)}function Io(e){return e.dynamicChildren=fn>0?st||ks:null,Lu(),fn>0&&st&&st.push(e),e}function v(e,s,r,o,c,u){return Io(i(e,s,r,o,c,u,!0))}function Fu(e,s,r,o,c){return Io(Dt(e,s,r,o,c,!0))}function Co(e){return e?e.__v_isVNode===!0:!1}function Ys(e,s){return e.type===s.type&&e.key===s.key}const ko=({key:e})=>e??null,Mn=({ref:e,ref_key:s,ref_for:r})=>(typeof e=="number"&&(e=""+e),e!=null?Oe(e)||Ue(e)||Q(e)?{i:ct,r:e,k:s,f:!!r}:e:null);function i(e,s=null,r=null,o=0,c=null,u=e===X?0:1,t=!1,f=!1){const g={__v_isVNode:!0,__v_skip:!0,type:e,props:s,key:s&&ko(s),ref:s&&Mn(s),scopeId:to,slotScopeIds:null,children:r,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:u,patchFlag:o,dynamicProps:c,dynamicChildren:null,appContext:null,ctx:ct};return f?(ar(g,r),u&128&&e.normalize(g)):r&&(g.shapeFlag|=Oe(r)?8:16),fn>0&&!t&&st&&(g.patchFlag>0||u&6)&&g.patchFlag!==32&&st.push(g),g}const Dt=Gu;function Gu(e,s=null,r=null,o=0,c=null,u=!1){if((!e||e===uu)&&(e=ls),Co(e)){const f=Os(e,s,!0);return r&&ar(f,r),fn>0&&!u&&st&&(f.shapeFlag&6?st[st.indexOf(e)]=f:st.push(f)),f.patchFlag=-2,f}if(Xu(e)&&(e=e.__vccOpts),s){s=ju(s);let{class:f,style:g}=s;f&&!Oe(f)&&(s.class=ce(f)),_e(g)&&(Za(g)&&!Y(g)&&(g=Be({},g)),s.style=on(g))}const t=Oe(e)?1:xo(e)?128:Qc(e)?64:_e(e)?4:Q(e)?2:0;return i(e,s,r,o,c,t,u,!0)}function ju(e){return e?Za(e)||vo(e)?Be({},e):e:null}function Os(e,s,r=!1,o=!1){const{props:c,ref:u,patchFlag:t,children:f,transition:g}=e,w=s?Uu(c||{},s):c,y={__v_isVNode:!0,__v_skip:!0,type:e.type,props:w,key:w&&ko(w),ref:s&&s.ref?r&&u?Y(u)?u.concat(Mn(s)):[u,Mn(s)]:Mn(s):u,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:f,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:s&&e.type!==X?t===-1?16:t|16:t,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:g,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Os(e.ssContent),ssFallback:e.ssFallback&&Os(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return g&&o&&tr(y,g.clone(y)),y}function pe(e=" ",s=0){return Dt(Yn,null,e,s)}function ys(e,s){const r=Dt(En,null,e);return r.staticCount=s,r}function M(e="",s=!1){return s?(b(),Fu(ls,null,e)):Dt(ls,null,e)}function Pt(e){return e==null||typeof e=="boolean"?Dt(ls):Y(e)?Dt(X,null,e.slice()):Co(e)?jt(e):Dt(Yn,null,String(e))}function jt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Os(e)}function ar(e,s){let r=0;const{shapeFlag:o}=e;if(s==null)s=null;else if(Y(s))r=16;else if(typeof s=="object")if(o&65){const c=s.default;c&&(c._c&&(c._d=!1),ar(e,c()),c._c&&(c._d=!0));return}else{r=32;const c=s._;!c&&!vo(s)?s._ctx=ct:c===3&&ct&&(ct.slots._===1?s._=1:(s._=2,e.patchFlag|=1024))}else Q(s)?(s={default:s,_ctx:ct},r=32):(s=String(s),o&64?(r=16,s=[pe(s)]):r=8);e.children=s,e.shapeFlag|=r}function Uu(...e){const s={};for(let r=0;r<e.length;r++){const o=e[r];for(const c in o)if(c==="class")s.class!==o.class&&(s.class=ce([s.class,o.class]));else if(c==="style")s.style=on([s.style,o.style]);else if(Bn(c)){const u=s[c],t=o[c];t&&u!==t&&!(Y(u)&&u.includes(t))&&(s[c]=u?[].concat(u,t):t)}else c!==""&&(s[c]=o[c])}return s}function St(e,s,r,o=null){It(e,s,7,[r,o])}const Bu=po();let Vu=0;function Wu(e,s,r){const o=e.type,c=(s?s.appContext:e.appContext)||Bu,u={uid:Vu++,vnode:e,type:o,parent:s,appContext:c,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new pc(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:s?s.provides:Object.create(c.provides),ids:s?s.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:So(o,c),emitsOptions:go(o,c),emit:null,emitted:null,propsDefaults:Ae,inheritAttrs:o.inheritAttrs,ctx:Ae,data:Ae,props:Ae,attrs:Ae,slots:Ae,refs:Ae,setupState:Ae,setupContext:null,suspense:r,suspenseId:r?r.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return u.ctx={_:u},u.root=s?s.root:u,u.emit=Su.bind(null,u),e.ce&&e.ce(u),u}let ze=null;const Hu=()=>ze||ct;let Un,ja;{const e=Hn(),s=(r,o)=>{let c;return(c=e[r])||(c=e[r]=[]),c.push(o),u=>{c.length>1?c.forEach(t=>t(u)):c[0](u)}};Un=s("__VUE_INSTANCE_SETTERS__",r=>ze=r),ja=s("__VUE_SSR_SETTERS__",r=>pn=r)}const bn=e=>{const s=ze;return Un(e),e.scope.on(),()=>{e.scope.off(),Un(s)}},tl=()=>{ze&&ze.scope.off(),Un(null)};function Ro(e){return e.vnode.shapeFlag&4}let pn=!1;function Ku(e,s=!1,r=!1){s&&ja(s);const{props:o,children:c}=e.vnode,u=Ro(e);Du(e,o,u,s),ku(e,c,r||s);const t=u?zu(e,s):void 0;return s&&ja(!1),t}function zu(e,s){const r=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,du);const{setup:o}=r;if(o){Wt();const c=e.setupContext=o.length>1?qu(e):null,u=bn(e),t=mn(o,e,0,[e.props,c]),f=Il(t);if(Ht(),u(),(f||e.sp)&&!an(e)&&ao(e),f){if(t.then(tl,tl),s)return t.then(g=>{sl(e,g)}).catch(g=>{Jn(g,e,0)});e.asyncDep=t}else sl(e,t)}else No(e)}function sl(e,s,r){Q(s)?e.type.__ssrInlineRender?e.ssrRender=s:e.render=s:_e(s)&&(e.setupState=Xl(s)),No(e)}function No(e,s,r){const o=e.type;e.render||(e.render=o.render||Tt);{const c=bn(e);Wt();try{fu(e)}finally{Ht(),c()}}}const Ju={get(e,s){return je(e,"get",""),e[s]}};function qu(e){const s=r=>{e.exposed=r||{}};return{attrs:new Proxy(e.attrs,Ju),slots:e.slots,emit:e.emit,expose:s}}function Qn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Xl(Mc(e.exposed)),{get(s,r){if(r in s)return s[r];if(r in rn)return rn[r](e)},has(s,r){return r in s||r in rn}})):e.proxy}function Xu(e){return Q(e)&&"__vccOpts"in e}const q=(e,s)=>jc(e,s,pn),Yu="3.5.30";let Ua;const nl=typeof window<"u"&&window.trustedTypes;if(nl)try{Ua=nl.createPolicy("vue",{createHTML:e=>e})}catch{}const Eo=Ua?e=>Ua.createHTML(e):e=>e,Qu="http://www.w3.org/2000/svg",Zu="http://www.w3.org/1998/Math/MathML",Gt=typeof document<"u"?document:null,al=Gt&&Gt.createElement("template"),ed={insert:(e,s,r)=>{s.insertBefore(e,r||null)},remove:e=>{const s=e.parentNode;s&&s.removeChild(e)},createElement:(e,s,r,o)=>{const c=s==="svg"?Gt.createElementNS(Qu,e):s==="mathml"?Gt.createElementNS(Zu,e):r?Gt.createElement(e,{is:r}):Gt.createElement(e);return e==="select"&&o&&o.multiple!=null&&c.setAttribute("multiple",o.multiple),c},createText:e=>Gt.createTextNode(e),createComment:e=>Gt.createComment(e),setText:(e,s)=>{e.nodeValue=s},setElementText:(e,s)=>{e.textContent=s},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Gt.querySelector(e),setScopeId(e,s){e.setAttribute(s,"")},insertStaticContent(e,s,r,o,c,u){const t=r?r.previousSibling:s.lastChild;if(c&&(c===u||c.nextSibling))for(;s.insertBefore(c.cloneNode(!0),r),!(c===u||!(c=c.nextSibling)););else{al.innerHTML=Eo(o==="svg"?`<svg>${e}</svg>`:o==="mathml"?`<math>${e}</math>`:e);const f=al.content;if(o==="svg"||o==="mathml"){const g=f.firstChild;for(;g.firstChild;)f.appendChild(g.firstChild);f.removeChild(g)}s.insertBefore(f,r)}return[t?t.nextSibling:s.firstChild,r?r.previousSibling:s.lastChild]}},td=Symbol("_vtc");function sd(e,s,r){const o=e[td];o&&(s=(s?[s,...o]:[...o]).join(" ")),s==null?e.removeAttribute("class"):r?e.setAttribute("class",s):e.className=s}const rl=Symbol("_vod"),nd=Symbol("_vsh"),ad=Symbol(""),rd=/(?:^|;)\s*display\s*:/;function ld(e,s,r){const o=e.style,c=Oe(r);let u=!1;if(r&&!c){if(s)if(Oe(s))for(const t of s.split(";")){const f=t.slice(0,t.indexOf(":")).trim();r[f]==null&&On(o,f,"")}else for(const t in s)r[t]==null&&On(o,t,"");for(const t in r)t==="display"&&(u=!0),On(o,t,r[t])}else if(c){if(s!==r){const t=o[ad];t&&(r+=";"+t),o.cssText=r,u=rd.test(r)}}else s&&e.removeAttribute("style");rl in e&&(e[rl]=u?o.display:"",e[nd]&&(o.display="none"))}const ll=/\s*!important$/;function On(e,s,r){if(Y(r))r.forEach(o=>On(e,s,o));else if(r==null&&(r=""),s.startsWith("--"))e.setProperty(s,r);else{const o=od(e,s);ll.test(r)?e.setProperty(os(o),r.replace(ll,""),"important"):e[o]=r}}const ol=["Webkit","Moz","ms"],Ia={};function od(e,s){const r=Ia[s];if(r)return r;let o=pt(s);if(o!=="filter"&&o in e)return Ia[s]=o;o=Rl(o);for(let c=0;c<ol.length;c++){const u=ol[c]+o;if(u in e)return Ia[s]=u}return s}const il="http://www.w3.org/1999/xlink";function cl(e,s,r,o,c,u=dc(s)){o&&s.startsWith("xlink:")?r==null?e.removeAttributeNS(il,s.slice(6,s.length)):e.setAttributeNS(il,s,r):r==null||u&&!El(r)?e.removeAttribute(s):e.setAttribute(s,u?"":xt(r)?String(r):r)}function ul(e,s,r,o,c){if(s==="innerHTML"||s==="textContent"){r!=null&&(e[s]=s==="innerHTML"?Eo(r):r);return}const u=e.tagName;if(s==="value"&&u!=="PROGRESS"&&!u.includes("-")){const f=u==="OPTION"?e.getAttribute("value")||"":e.value,g=r==null?e.type==="checkbox"?"on":"":String(r);(f!==g||!("_value"in e))&&(e.value=g),r==null&&e.removeAttribute(s),e._value=r;return}let t=!1;if(r===""||r==null){const f=typeof e[s];f==="boolean"?r=El(r):r==null&&f==="string"?(r="",t=!0):f==="number"&&(r=0,t=!0)}try{e[s]=r}catch{}t&&e.removeAttribute(c||s)}function rs(e,s,r,o){e.addEventListener(s,r,o)}function id(e,s,r,o){e.removeEventListener(s,r,o)}const dl=Symbol("_vei");function cd(e,s,r,o,c=null){const u=e[dl]||(e[dl]={}),t=u[s];if(o&&t)t.value=o;else{const[f,g]=ud(s);if(o){const w=u[s]=pd(o,c);rs(e,f,w,g)}else t&&(id(e,f,t,g),u[s]=void 0)}}const fl=/(?:Once|Passive|Capture)$/;function ud(e){let s;if(fl.test(e)){s={};let o;for(;o=e.match(fl);)e=e.slice(0,e.length-o[0].length),s[o[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):os(e.slice(2)),s]}let Ca=0;const dd=Promise.resolve(),fd=()=>Ca||(dd.then(()=>Ca=0),Ca=Date.now());function pd(e,s){const r=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=r.attached)return;It(gd(o,r.value),s,5,[o])};return r.value=e,r.attached=fd(),r}function gd(e,s){if(Y(s)){const r=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{r.call(e),e._stopped=!0},s.map(o=>c=>!c._stopped&&o&&o(c))}else return s}const pl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,hd=(e,s,r,o,c,u)=>{const t=c==="svg";s==="class"?sd(e,o,t):s==="style"?ld(e,r,o):Bn(s)?Va(s)||cd(e,s,r,o,u):(s[0]==="."?(s=s.slice(1),!0):s[0]==="^"?(s=s.slice(1),!1):md(e,s,o,t))?(ul(e,s,o),!e.tagName.includes("-")&&(s==="value"||s==="checked"||s==="selected")&&cl(e,s,o,t,u,s!=="value")):e._isVueCE&&(bd(e,s)||e._def.__asyncLoader&&(/[A-Z]/.test(s)||!Oe(o)))?ul(e,pt(s),o,u,s):(s==="true-value"?e._trueValue=o:s==="false-value"&&(e._falseValue=o),cl(e,s,o,t))};function md(e,s,r,o){if(o)return!!(s==="innerHTML"||s==="textContent"||s in e&&pl(s)&&Q(r));if(s==="spellcheck"||s==="draggable"||s==="translate"||s==="autocorrect"||s==="sandbox"&&e.tagName==="IFRAME"||s==="form"||s==="list"&&e.tagName==="INPUT"||s==="type"&&e.tagName==="TEXTAREA")return!1;if(s==="width"||s==="height"){const c=e.tagName;if(c==="IMG"||c==="VIDEO"||c==="CANVAS"||c==="SOURCE")return!1}return pl(s)&&Oe(r)?!1:s in e}function bd(e,s){const r=e._def.props;if(!r)return!1;const o=pt(s);return Array.isArray(r)?r.some(c=>pt(c)===o):Object.keys(r).some(c=>pt(c)===o)}const $s=e=>{const s=e.props["onUpdate:modelValue"]||!1;return Y(s)?r=>Rn(s,r):s};function vd(e){e.target.composing=!0}function gl(e){const s=e.target;s.composing&&(s.composing=!1,s.dispatchEvent(new Event("input")))}const Vt=Symbol("_assign");function hl(e,s,r){return s&&(e=e.trim()),r&&(e=Wn(e)),e}const Ee={created(e,{modifiers:{lazy:s,trim:r,number:o}},c){e[Vt]=$s(c);const u=o||c.props&&c.props.type==="number";rs(e,s?"change":"input",t=>{t.target.composing||e[Vt](hl(e.value,r,u))}),(r||u)&&rs(e,"change",()=>{e.value=hl(e.value,r,u)}),s||(rs(e,"compositionstart",vd),rs(e,"compositionend",gl),rs(e,"change",gl))},mounted(e,{value:s}){e.value=s??""},beforeUpdate(e,{value:s,oldValue:r,modifiers:{lazy:o,trim:c,number:u}},t){if(e[Vt]=$s(t),e.composing)return;const f=(u||e.type==="number")&&!/^0\d/.test(e.value)?Wn(e.value):e.value,g=s??"";f!==g&&(document.activeElement===e&&e.type!=="range"&&(o&&s===r||c&&e.value.trim()===g)||(e.value=g))}},ka={deep:!0,created(e,s,r){e[Vt]=$s(r),rs(e,"change",()=>{const o=e._modelValue,c=gn(e),u=e.checked,t=e[Vt];if(Y(o)){const f=Ka(o,c),g=f!==-1;if(u&&!g)t(o.concat(c));else if(!u&&g){const w=[...o];w.splice(f,1),t(w)}}else if(Ls(o)){const f=new Set(o);u?f.add(c):f.delete(c),t(f)}else t(Mo(e,u))})},mounted:ml,beforeUpdate(e,s,r){e[Vt]=$s(r),ml(e,s,r)}};function ml(e,{value:s,oldValue:r},o){e._modelValue=s;let c;if(Y(s))c=Ka(s,o.props.value)>-1;else if(Ls(s))c=s.has(o.props.value);else{if(s===r)return;c=Fs(s,Mo(e,!0))}e.checked!==c&&(e.checked=c)}const Ss={deep:!0,created(e,{value:s,modifiers:{number:r}},o){const c=Ls(s);rs(e,"change",()=>{const u=Array.prototype.filter.call(e.options,t=>t.selected).map(t=>r?Wn(gn(t)):gn(t));e[Vt](e.multiple?c?new Set(u):u:u[0]),e._assigning=!0,sn(()=>{e._assigning=!1})}),e[Vt]=$s(o)},mounted(e,{value:s}){bl(e,s)},beforeUpdate(e,s,r){e[Vt]=$s(r)},updated(e,{value:s}){e._assigning||bl(e,s)}};function bl(e,s){const r=e.multiple,o=Y(s);if(!(r&&!o&&!Ls(s))){for(let c=0,u=e.options.length;c<u;c++){const t=e.options[c],f=gn(t);if(r)if(o){const g=typeof f;g==="string"||g==="number"?t.selected=s.some(w=>String(w)===String(f)):t.selected=Ka(s,f)>-1}else t.selected=s.has(f);else if(Fs(gn(t),s)){e.selectedIndex!==c&&(e.selectedIndex=c);return}}!r&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function gn(e){return"_value"in e?e._value:e.value}function Mo(e,s){const r=s?"_trueValue":"_falseValue";return r in e?e[r]:s}const yd=["ctrl","shift","alt","meta"],Sd={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,s)=>yd.some(r=>e[`${r}Key`]&&!s.includes(r))},Ft=(e,s)=>{if(!e)return e;const r=e._withMods||(e._withMods={}),o=s.join(".");return r[o]||(r[o]=((c,...u)=>{for(let t=0;t<s.length;t++){const f=Sd[s[t]];if(f&&f(c,s))return}return e(c,...u)}))},_d={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},wd=(e,s)=>{const r=e._withKeys||(e._withKeys={}),o=s.join(".");return r[o]||(r[o]=(c=>{if(!("key"in c))return;const u=os(c.key);if(s.some(t=>t===u||_d[t]===u))return e(c)}))},Pd=Be({patchProp:hd},ed);let vl;function Ad(){return vl||(vl=Nu(Pd))}const Td=((...e)=>{const s=Ad().createApp(...e),{mount:r}=s;return s.mount=o=>{const c=xd(o);if(!c)return;const u=s._component;!Q(u)&&!u.render&&!u.template&&(u.template=c.innerHTML),c.nodeType===1&&(c.textContent="");const t=r(c,!1,Dd(c));return c instanceof Element&&(c.removeAttribute("v-cloak"),c.setAttribute("data-v-app","")),t},s});function Dd(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function xd(e){return Oe(e)?document.querySelector(e):e}const Id="modulepreload",Cd=function(e){return"/knxUltimateAI/sidebar/page/"+e},yl={},kd=function(s,r,o){let c=Promise.resolve();if(r&&r.length>0){let g=function(w){return Promise.all(w.map(y=>Promise.resolve(y).then(A=>({status:"fulfilled",value:A}),A=>({status:"rejected",reason:A}))))};document.getElementsByTagName("link");const t=document.querySelector("meta[property=csp-nonce]"),f=t?.nonce||t?.getAttribute("nonce");c=g(r.map(w=>{if(w=Cd(w),w in yl)return;yl[w]=!0;const y=w.endsWith(".css"),A=y?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${w}"]${A}`))return;const O=document.createElement("link");if(O.rel=y?"stylesheet":Id,y||(O.as="script"),O.crossOrigin="",O.href=w,f&&O.setAttribute("nonce",f),document.head.appendChild(O),y)return new Promise((F,Z)=>{O.addEventListener("load",F),O.addEventListener("error",()=>Z(new Error(`Unable to preload CSS for ${w}`)))})}))}function u(t){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=t,window.dispatchEvent(f),!f.defaultPrevented)throw t}return c.then(t=>{for(const f of t||[])f.status==="rejected"&&u(f.reason);return s().catch(u)})},Rd=(e,s)=>{const r=e.__vccOpts||e;for(const[o,c]of s)r[o]=c;return r},Nd={class:"m-header"},Ed=["aria-expanded"],Md={class:"app-sidebar"},Od={id:"knx-ai-sidebar",class:"sidebar-brand-wrap"},$d=["aria-expanded"],Ld={class:"sidebar-collapse-icon"},Fd={class:"sidebar-nav"},Gd=["disabled"],jd={key:0,class:"sidebar-panel sidebar-actions"},Ud=["disabled"],Bd={key:1,class:"sidebar-footer"},Vd={key:0,class:"status-detail"},Wd={class:"workspace-shell"},Hd={class:"content-grid workspace-main"},Kd={key:0,class:"card card-summary"},zd={class:"card-head"},Jd={key:0,class:"meta-chip"},qd={class:"summary-pre"},Xd={class:"metric-grid"},Yd={class:"metric"},Qd={class:"metric"},Zd={class:"metric"},ef={class:"metric"},tf={key:1,class:"card card-areas"},sf={class:"card-head"},nf={class:"card-head-actions"},af={class:"meta-chip"},rf=["disabled"],lf={class:"areas-toolbar"},of={class:"pill-row"},cf={class:"pill neutral"},uf={class:"pill neutral"},df={class:"pill neutral"},ff={class:"pill neutral"},pf={key:0,class:"areas-layout"},gf={key:0,class:"area-listbox-shell"},hf={class:"flow-field"},mf={class:"area-search-select"},bf=["placeholder"],vf={key:0,class:"area-search-select-menu"},yf=["onMousedown"],Sf={class:"area-editor"},_f={key:0,class:"card-head"},wf={class:"card-head-actions action-cluster"},Pf=["disabled"],Af=["disabled"],Tf=["disabled"],Df=["disabled"],xf={key:1,class:"area-editor-grid"},If={class:"flow-field"},Cf={class:"flow-field area-editor-span"},kf={class:"flow-field area-editor-span"},Rf={key:2,class:"ai-planner-shell area-llm-shell"},Nf={key:0,class:"card-head-actions action-cluster"},Ef={class:"area-editor-grid"},Mf={class:"flow-field area-editor-span"},Of={class:"profile-runbar"},$f=["disabled"],Lf={key:0,class:"planner-error-banner"},Ff={key:1,class:"area-detail-subhead"},Gf={key:3,class:"area-ga-editor"},jf={key:0,class:"simple-list simple-list-mono area-ga-list"},Uf={class:"area-ga-main"},Bf={key:0},Vf={key:0},Wf={class:"area-ga-actions"},Hf={class:"flow-field area-ga-role-field"},Kf=["value","disabled","onChange"],zf=["value"],Jf=["onClick"],qf={key:1,class:"empty-state"},Xf={class:"card-head"},Yf={class:"meta-chip"},Qf={class:"area-ga-catalog"},Zf=["onClick"],ep={class:"area-list-title"},tp={class:"area-list-meta"},sp={class:"area-list-tags"},np={key:0},ap={key:4,class:"area-editor-note"},rp={key:1,class:"empty-state"},lp={class:"card-head"},op={class:"area-detail-subhead"},ip={key:0,class:"card-head-actions"},cp={class:"meta-chip"},up={class:"meta-chip"},dp=["disabled"],fp={key:1,class:"card-head-actions"},pp={class:"meta-chip"},gp=["disabled"],hp={class:"profile-editor-stack"},mp={key:0,class:"area-detail planner-sidecard"},bp={class:"area-listbox-shell"},vp={class:"flow-field"},yp={class:"area-search-select"},Sp=["placeholder"],_p={key:0,class:"area-search-select-menu"},wp=["onMousedown"],Pp={key:0,class:"empty-state"},Ap={key:1,class:"area-detail"},Tp={key:0,class:"card-head"},Dp={key:0,class:"area-detail-subhead"},xp={class:"card-head-actions action-cluster"},Ip={key:0,class:"meta-chip"},Cp={class:"checkbox flow-toggle compact-toggle"},kp=["disabled"],Rp=["disabled"],Np=["disabled"],Ep={key:2,class:"plan-run-actions"},Mp=["disabled"],Op=["disabled"],$p={key:1,class:"ai-planner-shell"},Lp={key:0,class:"card-head-actions action-cluster"},Fp={class:"area-editor-grid"},Gp={class:"flow-field"},jp=["value"],Up={class:"flow-field area-editor-span"},Bp=["value"],Vp={class:"preset-row compact-preset-row"},Wp=["onClick"],Hp={class:"area-detail-subhead"},Kp={class:"profile-runbar"},zp=["disabled"],Jp={key:0,class:"planner-error-banner"},qp={key:1,class:"planner-generation"},Xp={key:0,class:"area-detail-subhead"},Yp={key:1,class:"area-detail-subhead"},Qp={key:2,class:"area-detail planner-run-focus"},Zp={class:"card-head"},eg={class:"area-detail-subhead"},tg={class:"meta-chip"},sg={class:"metric-grid area-metrics"},ng={class:"metric"},ag={class:"metric"},rg={class:"metric"},lg={class:"metric"},og={key:0,class:"report-check report-pass planner-step-card planner-step-running"},ig={class:"anomaly-head"},cg={class:"area-detail-subhead"},ug={key:0,class:"planner-step-grid"},dg={key:1,class:"planner-step-grid"},fg={key:2,class:"planner-check-sections"},pg={class:"planner-check-section"},gg={class:"planner-step-grid compact-grid"},hg={class:"planner-check-section"},mg={class:"planner-step-grid compact-grid"},bg={class:"card-head"},vg={class:"area-detail-subhead"},yg={class:"card-head-actions action-cluster"},Sg={class:"meta-chip"},_g={key:0,class:"meta-chip"},wg={class:"meta-chip"},Pg={class:"metric-grid area-metrics"},Ag={class:"report-checks"},Tg={class:"anomaly-head"},Dg={class:"area-detail-subhead"},xg={key:0,class:"planner-check-sections result-check-sections"},Ig={class:"planner-step-grid compact-grid"},Cg={key:1,class:"planner-step-grid"},kg={key:0,class:"empty-state"},Rg={key:1},Ng={class:"simple-list"},Eg={key:4,class:"area-detail plan-draft-shell"},Mg={class:"card-head"},Og={class:"card-head-actions action-cluster"},$g={class:"meta-chip"},Lg={class:"area-editor-grid"},Fg={class:"flow-field"},Gg=["value","disabled"],jg=["value"],Ug={class:"flow-field"},Bg={class:"flow-field area-editor-span"},Vg={class:"report-checks plan-steps-stack"},Wg=["onDragenter","onDrop"],Hg={class:"anomaly-head"},Kg={class:"planner-step-title"},zg=["onDragstart"],Jg=["aria-expanded","title","onClick"],qg={class:"card-head-actions action-cluster compact-actions"},Xg=["onClick"],Yg=["onClick"],Qg={key:0,class:"planner-step-summary"},Zg={key:0},eh={key:1},th={key:2},sh={key:3},nh={key:4},ah={key:5},rh={key:1,class:"planner-step-editor"},lh={class:"flow-field"},oh=["onUpdate:modelValue"],ih={class:"flow-field area-editor-span"},ch=["onUpdate:modelValue"],uh={key:0,class:"flow-field"},dh=["onUpdate:modelValue"],fh={key:1,class:"planner-field-group area-editor-span"},ph={class:"planner-field-group-grid"},gh={class:"flow-field"},hh=["onUpdate:modelValue","onChange"],mh=["value"],bh={class:"flow-field"},vh=["onUpdate:modelValue","onChange"],yh={class:"flow-field group-span"},Sh=["onUpdate:modelValue"],_h=["value"],wh=["onUpdate:modelValue"],Ph={key:2,class:"planner-field-group area-editor-span"},Ah={class:"planner-field-group-grid"},Th={class:"flow-field group-span"},Dh=["onUpdate:modelValue","onChange"],xh=["value"],Ih={class:"flow-field"},Ch=["onUpdate:modelValue","onChange"],kh={class:"flow-field"},Rh=["onUpdate:modelValue"],Nh=["value"],Eh=["onUpdate:modelValue"],Mh={key:3,class:"planner-check-sections editor-check-sections area-editor-span"},Oh={class:"planner-check-section"},$h={class:"flow-field"},Lh=["onUpdate:modelValue"],Fh={class:"planner-check-section"},Gh={class:"flow-field"},jh=["onUpdate:modelValue"],Uh={class:"flow-field area-editor-span"},Bh=["onUpdate:modelValue"],Vh={key:3,class:"card card-profiles"},Wh={class:"card-head"},Hh={class:"card-head-actions"},Kh={class:"meta-chip"},zh={class:"profiles-layout results-page-layout"},Jh={class:"area-detail planner-sidecard"},qh={class:"sidebar-results-list results-page-list"},Xh=["onClick"],Yh={class:"sidebar-result-head"},Qh={class:"sidebar-result-title"},Zh={key:0,class:"running-spinner","aria-hidden":"true"},em={class:"area-list-meta"},tm={key:0},sm={class:"area-list-tags"},nm={class:"area-list-tags"},am=["disabled","onClick"],rm={key:0,class:"empty-state sidebar-empty-state"},lm={class:"card-head"},om={class:"area-detail-subhead"},im={class:"card-head-actions action-cluster"},cm={class:"meta-chip"},um={key:0,class:"meta-chip"},dm={class:"meta-chip"},fm=["disabled"],pm={class:"metric-grid area-metrics"},gm={class:"report-checks"},hm={class:"anomaly-head"},mm={class:"area-detail-subhead"},bm={key:0,class:"planner-check-sections result-check-sections"},vm={class:"planner-step-grid compact-grid"},ym={key:1,class:"planner-step-grid"},Sm={key:0,class:"empty-state"},_m={key:1},wm={class:"simple-list"},Pm={key:1,class:"area-detail"},Am={key:4,class:"card"},Tm={class:"card-head"},Dm={class:"meta-chip"},xm={key:0,class:"rank-list"},Im={class:"rank-title"},Cm={class:"rank-label"},km={key:1,class:"empty-state"},Rm={key:5,class:"card"},Nm={class:"card-head"},Em={class:"meta-chip"},Mm={key:0,class:"event-list"},Om={class:"event-name"},$m={class:"event-bar"},Lm={key:1,class:"empty-state"},Fm={key:6,class:"card card-bus"},Gm={class:"card-head"},jm={key:0,class:"meta-chip"},Um={class:"pill-row"},Bm={class:"pill success"},Vm={class:"pill danger"},Wm={class:"pill neutral"},Hm={class:"bus-track"},Km=["title"],zm={class:"bus-scale"},Jm={key:1,class:"empty-state"},qm={class:"card-head"},Xm={class:"card-head-actions"},Ym={class:"meta-chip"},Qm={class:"flow-toolbar"},Zm={class:"flow-field"},eb={class:"flow-field flow-field-search"},tb={class:"flow-field flow-field-select"},sb=["value"],nb={class:"checkbox flow-toggle flow-toggle-inline"},ab={class:"flow-frame"},rb=["viewBox"],lb=["id"],ob=["fill"],ib=["d","stroke","stroke-width","opacity","marker-end"],cb=["cx","cy"],ub=["x","y"],db=["x","y"],fb=["x","y"],pb=["x","y"],gb={key:1,class:"empty-state flow-empty"},hb={class:"flow-note"},mb={key:8,class:"card card-anomalies"},bb={class:"card-head"},vb={class:"meta-chip"},yb={key:0,class:"anomaly-list"},Sb={class:"anomaly-head"},_b={class:"anomaly-time"},wb={key:1,class:"empty-state"},Pb={key:9,class:"card card-chat"},Ab={class:"card-head"},Tb={class:"meta-chip"},Db={class:"preset-row"},xb=["disabled","onClick"],Ib={class:"ask-row"},Cb=["disabled"],kb=["disabled"],Rb={class:"chat-log"},Nb=["innerHTML"],Eb={key:1},Mb={key:0,class:"chat-message chat-pending"},Ob={key:1,class:"empty-state"},$b={key:10,class:"card card-settings"},Lb={class:"settings-tab-strip"},Fb={key:0,class:"area-detail settings-panel"},Gb={class:"settings-node-grid"},jb={class:"flow-field"},Ub=["value"],Bb={class:"checkbox settings-node-checkbox"},Vb={key:1,class:"area-detail settings-panel"},Wb={class:"card-head-actions action-cluster settings-config-actions"},Hb=["disabled"],Kb=["disabled"],zb={class:"area-detail-subhead"},Jb={class:"modal-actions"},qb=["disabled"],Xb={class:"area-detail-subhead"},Yb={class:"modal-actions"},Qb=["disabled"],Sl="knxUltimateAI:selectedNodeId",_l="knxUltimateAI:autoRefresh",wl="knxUltimateAI:activeTab",Pl="knxUltimateAI:settingsTab",Al="knxUltimateAI:flowPreview",Tl="knxUltimateAI:voiceEnabled",Dl="knxUltimateAI:sidebarExpanded",Zb="knxUltimateAI:selectedTestAreaId:",ev="https://supergiovane.github.io/node-red-contrib-knx-ultimate/wiki/knxUltimateAI-vue",tv={__name:"App",setup(e){const s=["Summarize the current KNX traffic and highlight the busiest group addresses.","Explain any anomalies you see and suggest what to check first.","Generate an SVG bar chart of Top Group Addresses with counts and title."],r=[{id:"lights_on_off",title:"Lights on, then off",prompt:"Turn the lights on, then turn them off, and verify that the related status values are coherent.",description:"Applies to all matching lighting command GA in the selected area."},{id:"area_activate",title:"Activate main actuators",prompt:"Activate the main actuators in the area and verify the status feedback to confirm that it follows the commands.",description:"Builds a deterministic active test using the supported command GA in the selected area."},{id:"shading_open_close",title:"Open and close shading",prompt:"Open and close the shading actuators in the area, then verify that the status matches the commands sent.",description:"Targets supported shading command GA in the selected area."},{id:"hvac_check",title:"HVAC active check",prompt:"Run a full test of the HVAC commands in the area and verify that setpoints and statuses are coherent.",description:"Targets supported HVAC command GA in the selected area."}],o=[{value:"command",label:"Command"},{value:"status",label:"Status"},{value:"neutral",label:"Don't use in tests"}],c={write:"#ff9800",response:"#46b86d",read:"#d99a34",repeat:"#c34747",other:"#8d8578"},u=(()=>{try{return new URLSearchParams(window.location.search).get("nodeId")||""}catch{return""}})(),t=zn({nodes:[],selectedNodeId:"",activeTab:ge(wl,"overview"),settingsTab:ge(Pl,"config"),autoRefresh:z(_l,!0),voiceEnabled:z(Tl,!0),flowMaxNodes:Ce().maxNodes,flowSelectedGa:Ce().selectedGa,flowShowUniversalNodes:Ce().showUniversalNodes,flowSearch:"",areaSearch:"",areaSearchOpen:!1,areaSelectedId:"",testAreaSelectedId:"",areaDraftName:"",areaDraftDescription:"",areaDraftTags:"",areaDraftGaList:[],areaDraftId:"",areaDraftIsNew:!1,areaLlmPrompt:"",areaLlmBusy:!1,areaLlmError:"",areaLlmRegenerating:!1,gaCatalog:[],gaCatalogSearch:"",gaCatalogLoading:!1,areaGaRoleSavingGa:"",areaSaving:!1,profileSelectedId:"",profileDraftMode:!1,profileDraftId:"",profileDraftName:"",profileDraftDescription:"",profileDraftTargetTags:"",profileDraftMinActivityPct:20,profileDraftMaxSilentPct:60,profileDraftMaxAnomalies:2,profileSaving:!1,profileRunning:!1,actuatorPresetSelectedId:"",actuatorDraftMode:!1,actuatorDraftId:"",actuatorDraftName:"",actuatorDraftDescription:"",actuatorDraftCommandGA:"",actuatorDraftCommandDPT:"",actuatorDraftCommandPayload:"",actuatorDraftStatusGA:"",actuatorDraftStatusDPT:"",actuatorDraftStatusWriteTimeoutMs:5e3,actuatorDraftStatusResponseTimeoutMs:5e3,actuatorSaving:!1,actuatorRunning:!1,testPlanSelectedId:"",testPlanSearch:"",testPlanSearchOpen:!1,selectedTestResultId:"",liveTestResultId:"",testResultsMenuOpen:!0,testResultFocusMode:!1,deletingTestResultId:"",testPlanPrompt:"",testPlanDraft:null,testPlanCatalog:null,testPlanCatalogLoading:!1,testPlanCatalogError:"",testPlanGenerating:!1,testPlanSaving:!1,testPlanDeleting:!1,testPlanRunning:!1,testPlanGeneration:null,testPlanGenerationError:"",testPlanRunConfirmOpen:!1,testPlanRunMode:"single",testPlanRunningStepId:"",testPlanRepeatForever:!1,testPlanRepeatStopRequested:!1,testPlanDraftBaseline:"",testPlanUnsavedConfirmOpen:!1,areaUnsavedConfirmOpen:!1,testPlanPendingActionLabel:"",draggedTestPlanStepId:"",dragOverTestPlanStepId:"",showAiPlanner:!0,testTemplateBuilderFocus:!1,showAiAreaBuilder:!1,areaBuilderFocus:!1,status:"Ready",loadingNodes:!1,loadingState:!1,asking:!1,stateData:null,lastError:"",chatMessages:[],chatDraft:"",pollStateHandle:null,pollNodesHandle:null}),f=ms(null),g=ms(!1),w=ms(null),y=ms(null),A=ms(z(Dl,!0)),O=ms(!1),F=ms(!1),Z=q(()=>F.value?O.value:A.value);let K=null,xe=null,Se=null;function ne(){if(K){try{K.pause(),K.src=""}catch{}K=null}}function ge(a,n=""){try{return window.localStorage&&window.localStorage.getItem(a)||n}catch{return n}}function z(a,n){try{if(!window.localStorage)return n;const l=window.localStorage.getItem(a);return l==null||l===""?n:l==="true"}catch{return n}}function Ce(){try{if(!window.localStorage)return{maxNodes:14,selectedGa:[],showUniversalNodes:!1};const a=window.localStorage.getItem(Al);if(!a)return{maxNodes:14,selectedGa:[],showUniversalNodes:!1};const n=JSON.parse(a),l=Math.max(4,Math.min(32,Number(n&&n.maxNodes)||14)),d=Array.isArray(n&&n.selectedGa)?Array.from(new Set(n.selectedGa.map(I=>String(I||"").trim()).filter(Boolean))).slice(0,80):[],h=n&&n.showUniversalNodes===!0;return{maxNodes:l,selectedGa:d,showUniversalNodes:h}}catch{return{maxNodes:14,selectedGa:[],showUniversalNodes:!1}}}function Qe(a,n){try{window.localStorage&&window.localStorage.setItem(a,String(n??""))}catch{}}function Je(a,n){try{window.localStorage&&window.localStorage.setItem(a,n?"true":"false")}catch{}}function nt(){try{F.value=window.matchMedia("(max-width: 1100px)").matches}catch{F.value=window.innerWidth<=1100}F.value||(O.value=!1)}function is(){if(F.value){O.value=O.value!==!0;return}A.value=A.value!==!0}function dt(){F.value&&(O.value=!1)}function Jt(a){!a||a.key!=="Escape"||dt()}function cs(a){const n=String(a||"").trim();return n?`${Zb}${n}`:""}function qt(a){const n=cs(a);return n?ge(n,""):""}function Gs(a,n){const l=cs(a);if(!l)return;const d=String(n||"").trim();d&&Qe(l,d)}function us(){const a=qt(t.selectedNodeId);return!a||!Pe.value.find(n=>n.id===a)?!1:(t.testAreaSelectedId===a||(t.testAreaSelectedId=a),!0)}function $e(){try{if(!window.localStorage)return;window.localStorage.setItem(Al,JSON.stringify({maxNodes:Math.max(4,Math.min(32,Number(t.flowMaxNodes)||14)),selectedGa:Array.from(new Set((t.flowSelectedGa||[]).map(a=>String(a||"").trim()).filter(Boolean))).slice(0,80),showUniversalNodes:t.flowShowUniversalNodes===!0}))}catch{}}async function De(){const a=f.value;if(!(!a||typeof a.requestFullscreen!="function"))try{document.fullscreenElement===a?await document.exitFullscreen():document.fullscreenElement||await a.requestFullscreen()}catch{}}function ve(){g.value=document.fullscreenElement===f.value}function ye(a){return new URL(a,window.location.href).toString()}function $(a){t.status=String(a||"")}async function we(a,n){const l=await fetch(a,Object.assign({credentials:"same-origin"},n||{})),d=await l.text();let h={};try{h=d?JSON.parse(d):{}}catch{h={error:d||`HTTP ${l.status}`}}if(!l.ok){const I=h&&h.error?h.error:`HTTP ${l.status}`;throw l.status===401||l.status===403?new Error(`Authentication required or insufficient permissions (${l.status}).`):new Error(I)}return h}async function Ze(a,n){const l=await fetch(a,Object.assign({credentials:"same-origin",cache:"no-store"},n||{}));if(!l.ok){const d=await l.text();let h=d||`HTTP ${l.status}`;try{const I=d?JSON.parse(d):{};h=I&&I.error?I.error:h}catch{}throw l.status===401||l.status===403?new Error(`Authentication required or insufficient permissions (${l.status}).`):new Error(h)}return await l.blob()}function js(a){if(a==null)return"";if(typeof a=="string")return a;try{return JSON.stringify(a,null,2)}catch{return String(a)}}function Us(a){return String(a||"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Zn(a){const n=String(a||"").trim();return n.includes("-")&&/^\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/.test(n)}function Ct(a){let n=String(a||"").trim();return n.startsWith("|")&&(n=n.slice(1)),n.endsWith("|")&&(n=n.slice(0,-1)),n.split("|").map(l=>String(l||"").trim())}function As(a){return Ct(a).map(n=>{const l=String(n||"").trim(),d=l.startsWith(":"),h=l.endsWith(":");return d&&h?"center":h?"right":"left"})}function Bs(a){const n=String(a||"").split(/\r?\n/);let l="",d=!1;const h=I=>{let k=String(I||"");return k=k.replace(/`([^`]+)`/g,"<code>$1</code>"),k=k.replace(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>"),k=k.replace(/\*([^*]+)\*/g,"<em>$1</em>"),k=k.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(j,G,oe)=>`<a href="${/^javascript:/i.test(String(oe||"").trim())?"#":oe}" target="_blank" rel="noopener noreferrer">${G}</a>`),k};for(let I=0;I<n.length;I++){const k=n[I];if(/^```/.test(k.trim())){d=!d,l+=d?"<pre><code>":"</code></pre>";continue}if(d){l+=`${k}
2
+ `;continue}if(/^###\s+/.test(k)){l+=`<h3>${k.replace(/^###\s+/,"")}</h3>`;continue}if(/^##\s+/.test(k)){l+=`<h2>${k.replace(/^##\s+/,"")}</h2>`;continue}if(/^#\s+/.test(k)){l+=`<h1>${k.replace(/^#\s+/,"")}</h1>`;continue}if(k.includes("|")&&I+1<n.length&&Zn(n[I+1])){const oe=Ct(k),V=As(n[I+1]),de=[];for(I+=2;I<n.length&&n[I]&&n[I].includes("|")&&!/^```/.test(n[I].trim());)de.push(Ct(n[I])),I++;I-=1;const se=Math.max(oe.length,V.length,...de.map(H=>H.length),0);l+='<div class="chat-table-wrap"><table><thead><tr>';for(let H=0;H<se;H++)l+=`<th style="text-align:${V[H]||"left"};">${h(oe[H]||"")}</th>`;l+="</tr></thead><tbody>",de.forEach(H=>{l+="<tr>";for(let ie=0;ie<se;ie++)l+=`<td style="text-align:${V[ie]||"left"};">${h(H[ie]||"")}</td>`;l+="</tr>"}),l+="</tbody></table></div>";continue}const j=/^\s*[-*]\s+/.test(k),G=/^\s*\d+\.\s+/.test(k);if(j||G){const oe=G?"ol":"ul",V=G?/^\s*\d+\.\s+/:/^\s*[-*]\s+/;for(l+=`<${oe}>`;I<n.length&&V.test(n[I]);)l+=`<li>${h(n[I].replace(V,""))}</li>`,I++;I-=1,l+=`</${oe}>`;continue}if(k.trim()===""){l+="<br>";continue}l+=`<p>${h(k)}</p>`}return d&&(l+="</code></pre>"),l}function Vs(a){return String(a||"").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&quot;/gi,'"').replace(/&#39;/gi,"'").replace(/&amp;/gi,"&")}function kt(a){const n=[],l=/<svg[\s\S]*?<\/svg>/gi;let d;for(;(d=l.exec(String(a||"")))!==null;)d&&d[0]&&n.push(String(d[0]));return n}const rr=new Set(["svg","g","path","line","polyline","polygon","circle","ellipse","rect","text","tspan","title","desc","defs","marker","lineargradient","radialgradient","stop","clippath"]),p=new Set(["xmlns","xmlns:xlink","viewbox","preserveaspectratio","width","height","role","aria-label","id","class","x","y","x1","y1","x2","y2","cx","cy","r","rx","ry","d","points","transform","fill","fill-opacity","stroke","stroke-width","stroke-opacity","stroke-dasharray","stroke-linecap","stroke-linejoin","opacity","font-size","font-family","font-weight","text-anchor","dominant-baseline","offset","stop-color","stop-opacity","gradientunits","gradienttransform","fx","fy","marker-start","marker-mid","marker-end","markerwidth","markerheight","refx","refy","orient","markerunits","href","xlink:href","clip-path","clippathunits"]);function m(a){try{const l=new window.DOMParser().parseFromString(String(a||""),"image/svg+xml");if(!l||!l.documentElement||l.getElementsByTagName("parsererror").length)return"";const d=l.documentElement;if(String(d.tagName||"").toLowerCase()!=="svg")return"";const h=k=>{const j=String(k.tagName||"").toLowerCase();if(!rr.has(j)){k.remove();return}Array.from(k.attributes||[]).forEach(G=>{const oe=String(G.name||"").toLowerCase(),V=String(G.value||"");if(oe.startsWith("on")||!p.has(oe)){k.removeAttribute(G.name);return}(oe==="href"||oe==="xlink:href")&&V&&!String(V).trim().startsWith("#")&&k.removeAttribute(G.name)}),Array.from(k.childNodes||[]).forEach(G=>{G.nodeType===1?h(G):G.nodeType!==3&&G.remove()})};h(d),!d.getAttribute("viewBox")&&!d.getAttribute("viewbox")&&d.setAttribute("viewBox","0 0 920 360"),d.setAttribute("role",d.getAttribute("role")||"img");const I=new window.XMLSerializer().serializeToString(d);return I.length>12e4?"":I}catch{return""}}function P(a){return Bs(Us(a||""))}function C(a){const n=js(a),l=n.trim();if(!l)return P("(empty answer)");const d=/```(?:svg|xml|html)?\s*([\s\S]*?)```/gi;let h="",I=0,k=!1,j;for(;(j=d.exec(n))!==null;){const oe=n.slice(I,j.index);oe.trim()&&(h+=P(oe));const V=String(j[1]||""),de=Vs(V),se=kt(de);if(se.length){let H=0;se.forEach(ie=>{const he=m(ie);he&&(H++,k=!0,h+=`<div class="chat-svg-wrap">${he}</div>`)}),H||(h+=`<pre><code>${Us(V)}</code></pre>`)}else{const H=m(de);H?(k=!0,h+=`<div class="chat-svg-wrap">${H}</div>`):h+=`<pre><code>${Us(V)}</code></pre>`}I=j.index+j[0].length}const G=n.slice(I);if(G.trim()&&(h+=P(G)),!k){const oe=Vs(n),V=Array.from(new Set([...kt(n),...kt(oe)])).map(de=>m(de)).filter(Boolean);if(V.length){const de=n.replace(/<svg[\s\S]*?<\/svg>/gi,"").replace(/&lt;svg[\s\S]*?&lt;\/svg&gt;/gi,"").trim();h=de?P(de):"",V.forEach(se=>{h+=`<div class="chat-svg-wrap">${se}</div>`})}}return h||P(l)}function D(a){const n=Math.max(0,Math.round(Number(a)||0)),l=Math.floor(n/3600),d=Math.floor(n%3600/60),h=n%60;return l?`${l}h ${d}m`:d?`${d}m ${h}s`:`${h}s`}function x(a){if(!a)return"n/a";try{return new Date(a).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return"n/a"}}function N(a){if(!a)return"";try{return new Date(a).toLocaleString()}catch{return String(a)}}function E(a){return a&&a.payload&&typeof a.payload=="object"?a.payload:{}}function R(a){return a==null?"":String(a).trim()}function T(a,n=null){try{return JSON.parse(JSON.stringify(a))}catch{return n}}function W(a=[]){return Array.from(new Set((Array.isArray(a)?a:[]).map(n=>String(n||"").trim()).filter(Boolean))).sort()}function L(a=""){return W(String(a||"").split(","))}function U(a={}){return JSON.stringify({isNew:a.isNew===!0,areaId:String(a.areaId||"").trim(),name:String(a.name||"").trim(),description:String(a.description||"").trim(),tags:W(a.tags||[]),gaList:W(a.gaList||[]),llmPrompt:String(a.llmPrompt||"").trim()})}function J(a={}){return JSON.stringify({prompt:String(a.prompt||""),draft:T(a.draft,null)})}function re(){return{selectedId:String(t.testPlanSelectedId||""),prompt:String(t.testPlanPrompt||""),draft:T(t.testPlanDraft,null),generation:T(t.testPlanGeneration,null),showAiPlanner:t.showAiPlanner===!0}}function le(){xe=re(),t.testPlanDraftBaseline=J(xe)}function ue(){const a=T(xe,null);if(!a){t.testPlanSelectedId="",t.testPlanPrompt="",t.testPlanDraft=null,t.testPlanGeneration=null,t.testPlanRunConfirmOpen=!1,t.showAiPlanner=!0;return}t.testPlanSelectedId=String(a.selectedId||""),t.testPlanPrompt=String(a.prompt||""),t.testPlanDraft=T(a.draft,null),t.testPlanGeneration=T(a.generation,null),t.testPlanRunConfirmOpen=!1,t.showAiPlanner=a.showAiPlanner!==!1,a.draft&&a.draft.areaId&&Pe.value.find(n=>n.id===a.draft.areaId)&&(t.areaSelectedId=a.draft.areaId)}function Fe(a){const n=String(a||"").trim();return n.length>14?`${n.slice(0,12)}..`:n}function Ge(a){const n=String(a||"").trim();return n?n.length>28?`${n.slice(0,26)}..`:n:""}function at(a){const n=R(a).replace(/\s+/g," ");return n?n.length>30?`${n.slice(0,28)}..`:n:""}function rt(a){const n=String(a||"").toLowerCase();return n.includes("repeat")?"repeat":n.includes("write")?"write":n.includes("response")?"response":n.includes("read")?"read":"other"}function ds(a){const n={write:0,response:0,read:0,repeat:0,other:0};return Object.keys(a||{}).forEach(l=>{const d=Number(a[l]||0);d<=0||(n[rt(l)]+=d)}),Object.keys(n).sort((l,d)=>n[d]-n[l])[0]||"other"}function Ts(a){return!!(a&&a.kind==="node"&&a.listenAllGA)}function Ve(a){const n=a&&a.summary?a.summary:{},l=Array.isArray(a&&a.anomalies)?a.anomalies:[],d=Array.isArray(n.patternTransitions)?n.patternTransitions:[],h=Array.isArray(n.patterns)?n.patterns:[],I=n&&typeof n.gaLabels=="object"?n.gaLabels:{},k=n&&typeof n.gaLastPayload=="object"?n.gaLastPayload:{},j=n&&typeof n.gaLastSeenAt=="object"?n.gaLastSeenAt:{},G=new Set((Array.isArray(n.flowKnownGAs)?n.flowKnownGAs:[]).map(_=>String(_||"").trim()).filter(Boolean)),oe={};l.forEach(_=>{const B=String(_&&_.payload&&_.payload.ga?_.payload.ga:"BUS").trim()||"BUS";oe[B]=(oe[B]||0)+1});const V=n&&n.flowMapTopology&&typeof n.flowMapTopology=="object"?n.flowMapTopology:null,de=Array.isArray(V&&V.nodes)?V.nodes:[],se=Array.isArray(V&&V.edges)?V.edges:[],H=new Map,ie=_=>{const B=String(_&&_.from?_.from:"").trim(),ee=String(_&&_.to?_.to:"").trim();if(!B||!ee||B===ee)return;const Le=`${B}->${ee}`,We={key:Le,from:B,to:ee,weight:Math.max(1,Number(_&&(_.weight??_.currentWindowCount??_.totalCount??_.count)||1)),delta:Number(_&&_.delta?_.delta:0),edgeByEvent:_&&typeof _.edgeByEvent=="object"?_.edgeByEvent:{},lastAtMs:(()=>{const tt=Number(_&&_.lastAtMs?_.lastAtMs:0);if(Number.isFinite(tt)&&tt>0)return tt;const ns=new Date(String(_&&_.lastAt?_.lastAt:"")).getTime();return Number.isFinite(ns)?ns:0})(),linkType:String(_&&_.linkType?_.linkType:"").trim()};if(!H.has(Le)){H.set(Le,We);return}const qe=H.get(Le);qe.weight+=We.weight,qe.delta+=We.delta,qe.lastAtMs=Math.max(Number(qe.lastAtMs||0),Number(We.lastAtMs||0)),Object.keys(We.edgeByEvent||{}).forEach(tt=>{qe.edgeByEvent[tt]=Number(qe.edgeByEvent[tt]||0)+Number(We.edgeByEvent[tt]||0)})};se.length?se.forEach(ie):d.length?d.forEach(ie):h.forEach(_=>ie({from:_&&_.from,to:_&&_.to,count:_&&_.count,edgeByEvent:{}}));const he=new Map,ss=(_,B={})=>{const ee=String(_||"").trim();return ee?(he.has(ee)||he.set(ee,{id:ee,displayId:String(B.displayId||ee).trim()||ee,kind:String(B.kind||(ee.startsWith("N:")?"node":"ga")).trim()||"ga",subtitle:String(B.subtitle||"").trim(),payload:R(B.payload),anomalyCount:Number(B.anomalyCount||oe[ee]||0),inFlow:B.inFlow!==void 0?!!B.inFlow:G.size?G.has(ee)||ee==="BUS"||ee.startsWith("N:"):!0,lastSeenAtMs:Number(B.lastSeenAtMs||0),score:Number(B.score||0),listenAllGA:B.listenAllGA===!0}),he.get(ee)):null};return de.forEach(_=>{const B=String(_&&_.id?_.id:"").trim();B&&ss(B,{displayId:_&&_.displayId,kind:_&&_.kind,subtitle:_&&_.subtitle?_.subtitle:I[B],payload:_&&_.payload!==void 0?_.payload:k[B],anomalyCount:Number(_&&_.anomalyCount?_.anomalyCount:oe[B]||0),inFlow:_&&_.inFlow!==void 0?!!_.inFlow:void 0,lastSeenAtMs:Number(_&&_.lastSeenAtMs?_.lastSeenAtMs:new Date(String(_&&_.lastAt?_.lastAt:j[B]||"")).getTime()||0),score:Number(_&&_.score?_.score:0),listenAllGA:_&&_.listenAllGA===!0})}),Array.from(H.values()).forEach(_=>{ss(_.from,{subtitle:I[_.from],payload:k[_.from],lastSeenAtMs:new Date(String(j[_.from]||"")).getTime()||_.lastAtMs||0}),ss(_.to,{subtitle:I[_.to],payload:k[_.to],lastSeenAtMs:new Date(String(j[_.to]||"")).getTime()||_.lastAtMs||0});const B=he.get(_.from),ee=he.get(_.to);B&&(B.score+=Number(_.weight||0)),ee&&(ee.score+=Number(_.weight||0))}),(Array.isArray(n.topGAs)?n.topGAs:[]).slice(0,12).forEach(_=>{const B=String(_&&_.ga?_.ga:"").trim();if(!B)return;const ee=ss(B,{subtitle:_&&_.label?_.label:I[B],payload:k[B],lastSeenAtMs:new Date(String(j[B]||"")).getTime()||0});ee&&(ee.score+=Number(_&&_.count?_.count:0))}),{nodes:Array.from(he.values()),edges:Array.from(H.values()).sort((_,B)=>Number(B.weight||0)-Number(_.weight||0)).slice(0,48),telemetryWindowSec:Number(n&&n.graph&&n.graph.windowSec?n.graph.windowSec:n?.meta?.analysisWindowSec||0)}}function lt(a){let n=Array.isArray(a&&a.nodes)?a.nodes.slice():[];const l=Array.isArray(a&&a.edges)?a.edges.slice():[];t.flowShowUniversalNodes!==!0&&(n=n.filter(_=>!Ts(_)));const d=new Set(n.map(_=>_.id)),h=new Set((t.flowSelectedGa||[]).map(_=>String(_||"").trim()).filter(_=>_&&d.has(_))),I=Math.max(4,Math.min(32,Number(t.flowMaxNodes)||14));let k=n.slice().sort((_,B)=>{const ee=Number(_.anomalyCount||0)*10+Number(_.score||0),Le=Number(B.anomalyCount||0)*10+Number(B.score||0);return Le!==ee?Le-ee:String(_.id||"").localeCompare(String(B.id||""))});if(h.size){const _=new Set(h);l.forEach(B=>{h.has(B.from)&&_.add(B.to),h.has(B.to)&&_.add(B.from)}),k=k.filter(B=>_.has(B.id))}else k=k.slice(0,I);const j=new Set(k.map(_=>_.id)),G=l.filter(_=>j.has(_.from)&&j.has(_.to)),oe=Math.max(...G.map(_=>Number(_.weight||0)),1),V=Math.max(2,Math.min(6,Math.ceil(Math.sqrt(Math.max(k.length,4)*1.5)))),de=Math.max(1,Math.ceil(k.length/V)),se=1080,H=Math.max(420,140+(de-1)*150),ie=new Map;k.forEach((_,B)=>{const ee=Math.floor(B/V),Le=B%V,We=V===1?se/2:90+Le*((se-180)/Math.max(V-1,1)),qe=92+ee*148;ie.set(_.id,{x:We,y:qe,row:ee,col:Le})});const he=Date.now(),ss=G.map((_,B)=>{const ee=ie.get(_.from),Le=ie.get(_.to);if(!ee||!Le)return null;const We=Le.x-ee.x,qe=Le.y-ee.y,tt=Math.max(Math.hypot(We,qe),1),ns=We/tt,xs=qe/tt,Ie=24,yt=ee.x+ns*(Ie+2),Mt=ee.y+xs*(Ie+2),Ot=Le.x-ns*(Ie+8),$t=Le.y-xs*(Ie+8),Tn=-xs,Dn=ns,qs=28+B%3*14,xn=B%2===0?1:-1,Sa=(yt+Ot)/2+Tn*qs*xn,tc=(Mt+$t)/2+Dn*qs*xn,Lr=ds(_.edgeByEvent),Fr=Number(_.lastAtMs||0)>0&&he-Number(_.lastAtMs||0)<=5e3;return{key:_.key,from:_.from,to:_.to,d:`M ${yt} ${Mt} Q ${Sa} ${tc} ${Ot} ${$t}`,width:(.9+Number(_.weight||0)/oe*1.7).toFixed(2),color:c[Lr]||c.other,opacity:Fr?.82:.24,markerId:`flow-arrow-${Lr}`,tooltip:`${_.from} -> ${_.to} | traffic: ${Number(_.weight||0)}${_.delta?` | delta: ${_.delta>0?"+":""}${_.delta}`:""}`,active:Fr}}).filter(Boolean);return{width:se,height:H,telemetryWindowSec:Number(a&&a.telemetryWindowSec?a.telemetryWindowSec:0),nodes:k.map(_=>{const B=ie.get(_.id),ee=Number(_.lastSeenAtMs||0);return Object.assign({},_,B,{shortLabel:Fe(_.displayId||_.id),shortSubtitle:Ge(_.subtitle),shortPayload:at(_.payload),isIdle:ee>0&&he-ee>45e3})}),edges:ss,maxNodes:I,selectedCount:h.size}}const fs=q(()=>t.nodes.find(a=>a.id===t.selectedNodeId)||null),ke=q(()=>t.stateData&&t.stateData.summary?t.stateData.summary:{}),Xt=q(()=>t.stateData&&t.stateData.node?t.stateData.node:{}),ps=q(()=>t.stateData&&t.stateData.areas?t.stateData.areas:{suggested:[],totals:{}}),Pe=q(()=>Array.isArray(ps.value&&ps.value.suggested)?ps.value.suggested:[]),Ws=q(()=>ps.value&&ps.value.totals?ps.value.totals:{}),gs=q(()=>Array.isArray(t.stateData&&t.stateData.profiles)?t.stateData.profiles:[]),Oo=q(()=>t.stateData&&t.stateData.profileReport?t.stateData.profileReport:null),hs=q(()=>Array.isArray(t.stateData&&t.stateData.actuatorTests)?t.stateData.actuatorTests:[]),$o=q(()=>t.stateData&&t.stateData.actuatorTestReport?t.stateData.actuatorTestReport:null),mt=q(()=>Array.isArray(t.stateData&&t.stateData.testPlans)?t.stateData.testPlans:[]),lr=q(()=>{const a=String(t.testPlanSearch||"").trim().toLowerCase();return mt.value.filter(n=>a?[n.name,n.description,n.areaName,n.areaId].filter(Boolean).join(" ").toLowerCase().includes(a):!0)}),ft=q(()=>t.stateData&&t.stateData.testPlanReport?t.stateData.testPlanReport:null),Hs=q(()=>Array.isArray(t.stateData&&t.stateData.testResults)?t.stateData.testResults:[]),or=q(()=>!t.liveTestResultId||!ft.value||ft.value.id!==t.liveTestResultId?null:Object.assign({},ft.value,{live:t.testPlanRunning===!0})),Yt=q(()=>{const a=[],n=new Set,l=(d,h=!1)=>{if(!d||typeof d!="object"||!d.id)return;const I=String(d.id);n.has(I)||(n.add(I),a.push(Object.assign({},d,{live:h})))};return l(or.value,!0),Hs.value.forEach(d=>l(d,!1)),a}),te=q(()=>{if(t.selectedTestResultId){const a=Yt.value.find(n=>n&&n.id===t.selectedTestResultId);if(a)return a}return or.value||Hs.value[0]||null}),bt=q(()=>t.activeTab==="tests"&&t.testResultFocusMode===!0&&!!te.value),ea=q(()=>{const a=String(t.areaSearch||"").trim().toLowerCase();return Pe.value.filter(n=>a?[n.path,n.name,n.parentName,...Array.isArray(n.tags)?n.tags:[],...Array.isArray(n.sampleLabels)?n.sampleLabels:[]].filter(Boolean).join(" ").toLowerCase().includes(a):!0)}),Me=q(()=>{if(t.areaDraftIsNew===!0&&!String(t.areaSelectedId||"").trim())return null;if(t.areaSelectedId){const a=Pe.value.find(n=>n.id===t.areaSelectedId);if(a)return a}return null}),ot=q(()=>{if(t.testAreaSelectedId){const a=Pe.value.find(n=>n.id===t.testAreaSelectedId);if(a)return a}return Pe.value[0]||null}),Rt=q(()=>{const a=String(t.testPlanDraft&&t.testPlanDraft.areaId?t.testPlanDraft.areaId:"").trim();if(a){const n=Pe.value.find(l=>l.id===a);if(n)return n}return ot.value}),ir=q(()=>{const a=String(t.gaCatalogSearch||"").trim().toLowerCase(),n=new Set((t.areaDraftGaList||[]).map(l=>String(l||"").trim()).filter(Boolean));return(Array.isArray(t.gaCatalog)?t.gaCatalog:[]).filter(l=>!l||!l.ga||n.has(l.ga)?!1:a?[l.ga,l.label,l.hierarchyPath,...Array.isArray(l.tags)?l.tags:[]].filter(Boolean).join(" ").toLowerCase().includes(a):!0).slice(0,80)}),cr=q(()=>{const a=new Map((Array.isArray(t.gaCatalog)?t.gaCatalog:[]).map(n=>[String(n&&n.ga?n.ga:"").trim(),n]));return(t.areaDraftGaList||[]).map(n=>a.get(String(n||"").trim())||{ga:String(n||"").trim(),label:"",dpt:"",hierarchyPath:"",tags:[]})}),ta=q(()=>Array.isArray(t.testPlanCatalog&&t.testPlanCatalog.commandSignals)?t.testPlanCatalog.commandSignals:[]),ur=q(()=>Array.isArray(t.testPlanCatalog&&t.testPlanCatalog.statusSignals)?t.testPlanCatalog.statusSignals:[]),vt=q(()=>{if(t.profileDraftMode===!0)return null;if(t.profileSelectedId){const a=gs.value.find(n=>n.id===t.profileSelectedId);if(a)return a}return gs.value[0]||null}),it=q(()=>{if(t.actuatorDraftMode===!0)return null;if(t.actuatorPresetSelectedId){const a=hs.value.find(n=>n.id===t.actuatorPresetSelectedId);if(a)return a}return hs.value[0]||null}),Qt=q(()=>t.testPlanSelectedId&&mt.value.find(a=>a.id===t.testPlanSelectedId)||null),Ne=q(()=>!t.testPlanRunningStepId||!t.testPlanDraft||!Array.isArray(t.testPlanDraft.steps)?null:t.testPlanDraft.steps.find(a=>String(a&&a.id?a.id:"")===t.testPlanRunningStepId)||null),Lo=q(()=>!!(t.testPlanDraft&&Array.isArray(t.testPlanDraft.steps)&&t.testPlanDraft.steps.length>0)),sa=q(()=>t.showAiPlanner===!0),dr=q(()=>t.showAiAreaBuilder===!0),fr=q(()=>t.testPlanDraft?J({prompt:t.testPlanPrompt,draft:t.testPlanDraft})!==t.testPlanDraftBaseline:!1),Fo=q(()=>{if(!(t.areaDraftIsNew===!0||!!Me.value))return!1;const n=U({isNew:t.areaDraftIsNew===!0,areaId:String(t.areaDraftId||t.areaSelectedId||"").trim(),name:t.areaDraftName,description:t.areaDraftDescription,tags:L(t.areaDraftTags),gaList:t.areaDraftGaList||[],llmPrompt:t.areaLlmPrompt});if(t.areaDraftIsNew===!0){const h=U({isNew:!0,areaId:"",name:"New Area",description:"",tags:[],gaList:[],llmPrompt:""});return n!==h}const l=Me.value;if(!l)return!1;const d=U({isNew:!1,areaId:String(l.id||"").trim(),name:String(l.name||""),description:String(l.customDescription||""),tags:Array.isArray(l.tags)?l.tags:[],gaList:Array.isArray(l.gaList)?l.gaList:[],llmPrompt:""});return n!==d}),na=q(()=>Array.isArray(t.stateData&&t.stateData.anomalies)?t.stateData.anomalies.slice().reverse():[]),aa=q(()=>{const a=Array.isArray(ke.value.topGAs)?ke.value.topGAs:[],n=ke.value&&typeof ke.value.gaLabels=="object"?ke.value.gaLabels:{};return a.slice(0,10).map(l=>{const d=l&&typeof l=="object"?l:{},h=String(d.ga||"").trim(),I=String(d.label||"").trim(),k=h?String(n[h]||"").trim():"";return Object.assign({},d,{ga:h,label:I||k})})}),vn=q(()=>{const a=ke.value&&ke.value.byEvent&&typeof ke.value.byEvent=="object"?ke.value.byEvent:{};return Object.keys(a).map(n=>({name:n,count:Number(a[n]||0)})).filter(n=>n.count>0).sort((n,l)=>l.count-n.count)}),Go=q(()=>Math.max(...vn.value.map(a=>a.count),1)),ra=q(()=>Ve(t.stateData)),Zt=q(()=>lt(ra.value)),jo=q(()=>{const a=String(t.flowSearch||"").trim().toLowerCase();return ra.value.nodes.slice().filter(n=>t.flowShowUniversalNodes===!0||!Ts(n)).sort((n,l)=>String(n.id||"").localeCompare(String(l.id||""))).filter(n=>a?`${n.id} ${n.subtitle||""}`.toLowerCase().includes(a):!0).slice(0,120)}),et=q(()=>ke.value&&ke.value.busConnection&&typeof ke.value.busConnection=="object"?ke.value.busConnection:null),Uo=q(()=>{const a=ke.value||{};if(!Object.keys(a).length)return"No data available.";const n=a.counters||{},l=[];return l.push(Xt.value.name||fs.value?.name||"KNX AI"),l.push(`Analysis window: ${Number(a.meta?.analysisWindowSec||0)}s`),l.push(`Telegrams: ${Number(n.telegrams||0)} | Rate: ${Number(n.overallRatePerSec||0)}/s`),l.push(`Echoed: ${Number(n.echoed||0)} | Repeat: ${Number(n.repeated||0)} | Unknown DPT: ${Number(n.unknownDpt||0)}`),et.value&&l.push(`Bus: ${String(et.value.currentState||"unknown")} | Connected: ${Number(et.value.connectedPct||0)}% | Disconnected: ${Number(et.value.disconnectedPct||0)}%`),l.join(`
3
+ `)}),Bo=q(()=>{const a=et.value;return!a||!Array.isArray(a.segments)?[]:a.segments.map((n,l)=>{const d=Math.max(0,Math.min(1,Number(n&&n.ratioStart)||0)),h=Math.max(0,Math.min(1,Number(n&&n.ratioWidth)||0));return{key:`${l}-${n?.startedAt||""}`,left:`${(d*100).toFixed(3)}%`,width:`${Math.max(h*100,.4).toFixed(3)}%`,title:`${n?.state==="connected"?"Connected":"Disconnected"} | ${x(n?.startedAt)} -> ${x(n?.endedAt)} | ${D(n?.durationSec||0)}`,className:n?.state==="connected"?"segment-connected":"segment-disconnected"}}).filter(n=>Number.parseFloat(n.width)>0)}),pr=q(()=>t.chatMessages.map((a,n)=>({key:`${n}-${a.kind}`,kind:a.kind,rawText:js(a.text),html:a.kind==="assistant"?C(a.text):""})));Re(()=>t.selectedNodeId,a=>{Qe(Sl,a||""),t.areaSelectedId="",t.testAreaSelectedId=qt(a||"")}),Re(()=>t.autoRefresh,a=>{Je(_l,a)}),Re(()=>t.voiceEnabled,a=>{Je(Tl,a),a!==!0&&ne()}),Re(A,a=>{Je(Dl,a)}),Re(()=>t.activeTab,a=>{Qe(wl,a||"overview")}),Re(()=>t.settingsTab,a=>{Qe(Pl,a||"config")}),Re(()=>t.flowMaxNodes,a=>{t.flowMaxNodes=Math.max(4,Math.min(32,Number(a)||14)),$e()}),Re(()=>(t.flowSelectedGa||[]).join("|"),()=>{$e()}),Re(()=>t.flowShowUniversalNodes,a=>{a!==!0&&(t.flowSelectedGa=(t.flowSelectedGa||[]).filter(n=>{const l=ra.value.nodes.find(d=>d.id===n);return!Ts(l)})),$e()}),Re(()=>Pe.value.map(a=>a.id).join("|"),()=>{if(!Pe.value.length){t.areaSelectedId="",t.testAreaSelectedId="",t.activeTab==="tests"&&(t.activeTab="areas");return}if(t.areaDraftIsNew===!0&&!String(t.areaSelectedId||"").trim()){const l=String(t.testAreaSelectedId||"").trim();if(us())return;(!l||!Pe.value.find(d=>d.id===l))&&(t.testAreaSelectedId=Pe.value[0].id);return}const a=String(t.areaSelectedId||"").trim();a&&!Pe.value.find(l=>l.id===a)&&(t.areaSelectedId="");const n=String(t.testAreaSelectedId||"").trim();us()||(!n||!Pe.value.find(l=>l.id===n))&&(t.testAreaSelectedId=Pe.value[0].id)}),Re(()=>t.testAreaSelectedId,a=>{t.selectedNodeId&&Gs(t.selectedNodeId,a||"")}),Re(()=>Me.value?JSON.stringify({id:Me.value.id,name:Me.value.name,customDescription:Me.value.customDescription||"",tags:Me.value.tags||[]}):"",()=>{if(t.areaDraftIsNew===!0&&!String(t.areaSelectedId||"").trim())return;const a=Me.value;if(!a){t.areaDraftId="",t.areaDraftName="",t.areaDraftDescription="",t.areaDraftTags="",t.areaDraftGaList=[],t.areaLlmPrompt="",t.areaLlmError="",t.areaDraftIsNew=!1;return}t.areaDraftId=String(a.id||""),t.areaDraftName=String(a.name||""),t.areaDraftDescription=String(a.customDescription||""),t.areaDraftTags=Array.isArray(a.tags)?a.tags.join(", "):"",t.areaDraftGaList=Array.isArray(a.gaList)?a.gaList.slice():[],t.areaLlmPrompt="",t.areaLlmError="",t.areaDraftIsNew=!1}),Re(()=>Rt.value?Rt.value.id:"",async(a,n)=>{if(!a||!t.selectedNodeId){t.testPlanCatalog=null,t.testPlanCatalogError="";return}n&&a!==n&&(t.testPlanRunConfirmOpen=!1,t.testPlanDraft&&!t.testPlanSelectedId&&(t.testPlanDraft.areaId=String(a||""),t.testPlanDraft.areaName=Rt.value?String(Rt.value.path||Rt.value.name||""):"")),await Ar()}),Re(()=>gs.value.map(a=>a.id).join("|"),()=>{if(!gs.value.length){t.profileSelectedId="";return}t.profileDraftMode!==!0&&(!t.profileSelectedId||!gs.value.find(a=>a.id===t.profileSelectedId))&&(t.profileSelectedId=gs.value[0].id)}),Re(()=>vt.value?JSON.stringify({id:vt.value.id,name:vt.value.name,description:vt.value.description,targetTags:vt.value.targetTags||[],minActivityPct:vt.value.minActivityPct,maxSilentPct:vt.value.maxSilentPct,maxAnomalies:vt.value.maxAnomalies,builtIn:vt.value.builtIn===!0}):"",()=>{const a=vt.value;if(!a){t.profileDraftId="",t.profileDraftName="",t.profileDraftDescription="",t.profileDraftTargetTags="",t.profileDraftMinActivityPct=20,t.profileDraftMaxSilentPct=60,t.profileDraftMaxAnomalies=2;return}t.profileDraftId=String(a.id||""),t.profileDraftName=String(a.name||""),t.profileDraftDescription=String(a.description||""),t.profileDraftTargetTags=Array.isArray(a.targetTags)?a.targetTags.join(", "):"",t.profileDraftMinActivityPct=Number(a.minActivityPct||20),t.profileDraftMaxSilentPct=Number(a.maxSilentPct||60),t.profileDraftMaxAnomalies=Number(a.maxAnomalies||2)}),Re(()=>hs.value.map(a=>a.id).join("|"),()=>{if(!hs.value.length){t.actuatorPresetSelectedId="";return}t.actuatorDraftMode!==!0&&(!t.actuatorPresetSelectedId||!hs.value.find(a=>a.id===t.actuatorPresetSelectedId))&&(t.actuatorPresetSelectedId=hs.value[0].id)}),Re(()=>it.value?JSON.stringify({id:it.value.id,name:it.value.name,description:it.value.description,commandGA:it.value.commandGA,commandDPT:it.value.commandDPT,commandPayload:it.value.commandPayload,statusGA:it.value.statusGA,statusDPT:it.value.statusDPT,statusWriteTimeoutMs:it.value.statusWriteTimeoutMs,statusResponseTimeoutMs:it.value.statusResponseTimeoutMs}):"",()=>{const a=it.value;if(!a){t.actuatorDraftId="",t.actuatorDraftName="",t.actuatorDraftDescription="",t.actuatorDraftCommandGA="",t.actuatorDraftCommandDPT="",t.actuatorDraftCommandPayload="",t.actuatorDraftStatusGA="",t.actuatorDraftStatusDPT="",t.actuatorDraftStatusWriteTimeoutMs=5e3,t.actuatorDraftStatusResponseTimeoutMs=5e3;return}t.actuatorDraftId=String(a.id||""),t.actuatorDraftName=String(a.name||""),t.actuatorDraftDescription=String(a.description||""),t.actuatorDraftCommandGA=String(a.commandGA||""),t.actuatorDraftCommandDPT=String(a.commandDPT||""),t.actuatorDraftCommandPayload=String(a.commandPayload||""),t.actuatorDraftStatusGA=String(a.statusGA||""),t.actuatorDraftStatusDPT=String(a.statusDPT||""),t.actuatorDraftStatusWriteTimeoutMs=Number(a.statusWriteTimeoutMs||5e3),t.actuatorDraftStatusResponseTimeoutMs=Number(a.statusResponseTimeoutMs||5e3)}),Re(()=>mt.value.map(a=>a.id).join("|"),()=>{if(!mt.value.length){t.testPlanSelectedId="";return}t.testPlanSelectedId&&!mt.value.find(a=>a.id===t.testPlanSelectedId)&&(t.testPlanSelectedId="")}),Re(()=>Yt.value.map(a=>a.id).join("|"),()=>{if(!Yt.value.length){t.selectedTestResultId="";return}(!t.selectedTestResultId||!Yt.value.find(a=>a.id===t.selectedTestResultId))&&(t.selectedTestResultId=String(Yt.value[0].id||"")),t.liveTestResultId&&Hs.value.some(a=>String(a&&a.id?a.id:"")===t.liveTestResultId)&&t.testPlanRunning!==!0&&(t.liveTestResultId="")}),Re(()=>`${t.selectedTestResultId}|${t.activeTab}`,()=>{t.activeTab!=="results"||!t.selectedTestResultId||requestAnimationFrame(()=>{const a=document.querySelector(".results-page-list .area-list-item.active");a&&typeof a.scrollIntoView=="function"&&a.scrollIntoView({block:"nearest",behavior:"smooth"})})});function la(a,n){t.chatMessages.push({kind:a,text:n})}function Vo(){t.chatMessages=[]}function Wo(a,n=null){const l=Array.isArray(a)?a:[];return{totalSteps:Math.max(l.length,Number(n||0)),pass:l.filter(h=>h&&h.status==="pass").length,warn:l.filter(h=>h&&h.status==="warn").length,fail:l.filter(h=>h&&h.status==="fail").length}}function Ho(a){const n=[];return Number(a&&a.fail)>0&&n.push("At least one feedback object returned an incoherent value. Check the actuator/status pairing in ETS first."),Number(a&&a.warn)>0&&n.push("Some steps did not receive feedback in time. Verify the status group address and the actuator programming."),n.length||n.push("The selected active test completed with coherent feedback on all verified steps."),n}function oa({plan:a,area:n,stepResults:l,reportId:d=""}){const h=Wo(l,Array.isArray(a&&a.steps)?a.steps.length:0),I=h.fail>0?"fail":h.warn>0?"warn":"pass";return{id:String(d||`${a.id||"plan"}:${Date.now()}`),generatedAt:new Date().toISOString(),mode:"ai_test_plan",overallStatus:I,name:a.name,description:a.description,prompt:a.prompt,area:n,metrics:h,steps:l,suggestions:Ho(h)}}function yn(a){return!a||typeof a!="object"?"Test result":String(a.name||a.profile?.name||"Test result")}function Sn(a){return!a||typeof a!="object"?"":String(a.area?.path||a.area?.name||a.area?.id||"")}function Ks(a){const n=String(a&&a.mode?a.mode:"").trim().toLowerCase();return n==="ai_test_plan"?"Test Plan":n==="active_test"?"Actuator":n==="read_only"?"Read-only":n||"Test"}function ia(a){const n=a&&a.metrics&&typeof a.metrics=="object"?a.metrics:{};return String(a&&a.mode?a.mode:"")==="read_only"?[{label:"Total GA",value:Number(n.totalGAs||0)},{label:"Active GA",value:Number(n.activeGaCount||0)},{label:"Silent GA",value:Number(n.silentGaCount||0)},{label:"Anomalies",value:Number(n.anomalyCount||0)}]:String(a&&a.mode?a.mode:"")==="active_test"?[{label:"Command GA",value:a&&a.command&&a.command.ga?a.command.ga:"n/a"},{label:"Status GA",value:a&&(a.statusResponse?.ga||a.statusWrite?.ga||a.statusRead?.ga)?a.statusResponse?.ga||a.statusWrite?.ga||a.statusRead?.ga:"n/a"},{label:"Status",value:a&&a.overallStatus?a.overallStatus:"n/a"},{label:"Generated",value:N(a&&a.generatedAt?a.generatedAt:"")||"n/a"}]:[{label:"Total Steps",value:Number(n.totalSteps||0)},{label:"Pass",value:Number(n.pass||0)},{label:"Warn",value:Number(n.warn||0)},{label:"Fail",value:Number(n.fail||0)}]}function Nt(a){if(a==null||a==="")return"n/a";if(typeof a=="string"||typeof a=="number"||typeof a=="boolean")return String(a);try{return JSON.stringify(a)}catch{return String(a)}}function ca(a,n,l="n/a"){const d=String(n||"").trim(),h=a==null?"":String(a);if(!d)return h||l;const I=ha(h,d),k=ts(d).find(j=>String(j.value)===String(I));return k&&k.label?k.label:h||l}function gr(a){if(!a||typeof a!="object")return"n/a";const n=a.ga||"n/a";if(a.ok===!0){const l=a.payloadLabel||Nt(a.payload),d=a.coherent===!1?"mismatch":"ok";return`${n} / ${l} / ${d}`}return`${n} / ${a.error||"timeout"}`}function ua(a){return N(a||"")||"n/a"}function Ko(a,n="report"){return String(a||"").trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||n}function hr({command:a,statusWrite:n,statusResponse:l,statusRead:d,expectedPayloadLabel:h,expectedPayload:I}){const k=l||d;return[{title:"Command",items:[{label:"Command",value:`${a?.ga||"n/a"} / ${a?.payloadLabel||Nt(a?.payload)}`},{label:"Command Sent",value:ua(a?.sentAt)}]},{title:"Spontaneous Write From Status GA",items:[{label:"Result",value:gr(n)},{label:"Expected",value:n?.expectedPayloadLabel||h||Nt(I)},{label:"Received At",value:ua(n?.at)},{label:"Event",value:n?.event||"n/a"}]},{title:"Active Read Request To Status GA",items:[{label:"Result",value:gr(k)},{label:"Expected",value:k?.expectedPayloadLabel||h||Nt(I)},{label:"Received At",value:ua(k?.at)},{label:"Event",value:k?.event||"n/a"}]}]}function zs(a){return!a||typeof a!="object"?[]:Array.isArray(a.steps)&&a.steps.length?a.steps.map(n=>{const l=n.kind==="wait"?[{label:"Wait",value:`${Number(n.delayMs||0)} ms`},{label:"Reason",value:n.reason||"Pause before next action"}]:[];return{id:String(n.id||`${a.id}-step`),title:n.title||n.id||"Step",status:n.status||"pass",message:n.message||n.description||"",details:l,detailGroups:n.kind==="wait"?[]:hr({command:n.command,statusWrite:n.statusWrite,statusResponse:n.statusResponse,statusRead:n.statusRead,expectedPayloadLabel:n.expectedPayloadLabel,expectedPayload:n.expectedPayload})}}):Array.isArray(a.checks)&&a.checks.length?a.checks.map(n=>({id:String(n.id||`${a.id}-check`),title:n.title||n.id||"Check",status:n.status||"pass",message:n.message||"",details:[{label:"Metrics",value:Nt(n.metrics||{})},{label:"Sample",value:Nt(n.sample||[])}]})):String(a.mode||"")==="active_test"?[{id:String(a.id||"active-test"),title:a.name||"Actuator Test",status:a.overallStatus||"pass",message:a.overallStatus==="pass"?"Both feedback checks passed.":a.overallStatus==="warn"?"One feedback check passed and one failed.":"Both feedback checks failed.",details:[],detailGroups:hr({command:a.command,statusWrite:a.statusWrite,statusResponse:a.statusResponse,statusRead:a.statusRead,expectedPayloadLabel:a.statusResponse?.expectedPayloadLabel||a.statusWrite?.expectedPayloadLabel||a.statusRead?.expectedPayloadLabel,expectedPayload:a.statusRead?.expectedPayload})}]:[]}function Js(a){return Array.isArray(a&&a.suggestions)?a.suggestions:[]}function zo(a){const n=a&&a.source&&typeof a.source=="object"?a.source:{},l=String(a&&a.mode?a.mode:"").trim().toLowerCase(),d=String(n.areaId||a?.area?.id||"").trim();return l==="ai_test_plan"?{type:"ai_test_plan",planId:String(n.planId||String(a.id||"").split(":")[0]||"").trim(),areaId:d}:l==="read_only"?{type:"profile",profileId:String(n.profileId||a?.profile?.id||"").trim(),areaId:d}:l==="active_test"?{type:"actuator_test",presetId:String(n.presetId||String(a.id||"").split(":")[0]||"").trim(),areaId:d}:{type:"",areaId:d}}async function mr(){const a=te.value;if(!a||typeof a!="object"){$("No test result selected to export");return}try{const{jsPDF:n}=await kd(async()=>{const{jsPDF:Ie}=await import("./chunk-jspdf.es.min.js").then(yt=>yt.j);return{jsPDF:Ie}},[]),l=new n({orientation:"portrait",unit:"pt",format:"a4"}),d=l.internal.pageSize.getWidth(),h=l.internal.pageSize.getHeight(),I=42,k=42,j=44,G=42,oe=d-I-k;let V=j;const de=(Ie=14)=>{V+Ie<=h-G||(l.addPage(),V=j)},se=(Ie,{size:yt=11,bold:Mt=!1,indent:Ot=0,color:$t=[35,41,52],lineHeight:Tn=14,gapAfter:Dn=0}={})=>{const qs=String(Ie||"").trim();if(!qs)return;l.setFont("helvetica",Mt?"bold":"normal"),l.setFontSize(yt),l.setTextColor($t[0],$t[1],$t[2]);const xn=l.splitTextToSize(qs,Math.max(80,oe-Ot));for(const Sa of xn)de(Tn),l.text(String(Sa),I+Ot,V),V+=Tn;Dn>0&&(V+=Dn)},H=()=>{de(12),l.setDrawColor(210,214,222),l.line(I,V,d-k,V),V+=12},ie=yn(a),he=N(new Date().toISOString())||new Date().toISOString(),ss=N(a.generatedAt||"")||String(a.generatedAt||"n/a"),_=Sn(a)||"n/a",B=Ks(a),ee=String(a.overallStatus||"n/a"),Le=ia(a),We=zs(a),qe=Js(a);se("KNX AI Test Result",{size:17,bold:!0,color:[20,28,39],lineHeight:20}),se(ie,{size:14,bold:!0,color:[20,28,39],lineHeight:17,gapAfter:4}),se(`Exported: ${he}`,{size:10,color:[88,96,113]}),se(`Generated: ${ss}`,{size:10,color:[88,96,113]}),se(`Mode: ${B}`,{size:10,color:[88,96,113]}),se(`Status: ${ee}`,{size:10,color:[88,96,113]}),se(`Area: ${_}`,{size:10,color:[88,96,113]}),se(`Report ID: ${String(a.id||"n/a")}`,{size:10,color:[88,96,113],gapAfter:2}),H(),Le.length&&(se("Metrics",{size:12,bold:!0,color:[20,28,39],gapAfter:2}),Le.forEach(Ie=>{se(`${Ie.label}: ${Nt(Ie.value)}`,{size:10,color:[35,41,52]})}),V+=4,H()),se(`Checks (${We.length})`,{size:12,bold:!0,color:[20,28,39],gapAfter:2}),We.length?We.forEach((Ie,yt)=>{se(`${yt+1}. ${Ie.title||"Check"} [${String(Ie.status||"n/a").toUpperCase()}]`,{size:11,bold:!0,color:[31,41,55]}),se(Ie.message||"No additional details available.",{size:10,color:[70,78,94]}),Array.isArray(Ie.detailGroups)&&Ie.detailGroups.length?Ie.detailGroups.forEach(Mt=>{se(Mt.title||"Details",{size:10,bold:!0,indent:12,color:[35,41,52]}),(Array.isArray(Mt.items)?Mt.items:[]).forEach($t=>{se(`${$t.label}: ${Nt($t.value)}`,{size:10,indent:24,color:[70,78,94]})})}):(Array.isArray(Ie.details)?Ie.details:[]).forEach(Ot=>{se(`${Ot.label}: ${Nt(Ot.value)}`,{size:10,indent:12,color:[70,78,94]})}),V+=2}):se("No detailed entries stored for this report yet.",{size:10,color:[88,96,113]}),qe.length&&(V+=4,H(),se("Suggestions",{size:12,bold:!0,color:[20,28,39],gapAfter:2}),qe.forEach((Ie,yt)=>{se(`${yt+1}. ${String(Ie||"")}`,{size:10,color:[35,41,52]})}));const tt=new Date(a.generatedAt||Date.now()),ns=Number.isFinite(tt.getTime())?tt.toISOString().replace(/[:.]/g,"-"):String(Date.now()),xs=`knx-ai-test-result-${Ko(ie,"report")}-${ns}.pdf`;l.save(xs),$(`PDF exported (${xs})`)}catch(n){t.lastError=n&&n.message?n.message:"Failed to export PDF",$(t.lastError)}}function br(a,n,l=new Date().toISOString()){const d=a&&a.kind==="wait";return{id:a&&a.id?a.id:`step-${Date.now()}`,title:a&&a.title?a.title:"Test Step",description:a&&a.description?a.description:"",reason:a&&a.reason?a.reason:"",kind:a&&a.kind?a.kind:"write_and_verify",status:"warn",command:d?null:{ga:a&&a.commandGA?a.commandGA:"",dpt:a&&a.commandDPT?a.commandDPT:"",payload:a?a.commandPayload:void 0,sentAt:l},statusWrite:null,statusResponse:null,statusRead:null,expectedPayload:d?void 0:a?a.expectedPayload:void 0,delayMs:Number(a&&a.delayMs?a.delayMs:0),statusWriteTimeoutMs:d?0:Number(a&&a.statusWriteTimeoutMs?a.statusWriteTimeoutMs:0),statusResponseTimeoutMs:d?0:Number(a&&a.statusResponseTimeoutMs?a.statusResponseTimeoutMs:0),message:n&&n.message?n.message:"Failed to run step"}}async function vr(a){return ne(),await new Promise((n,l)=>{const d=URL.createObjectURL(a),h=new Audio(d);K=h;const I=()=>{K===h&&(K=null),h.onended=null,h.onerror=null,URL.revokeObjectURL(d)};h.onended=()=>{I(),n()},h.onerror=()=>{I(),l(new Error("Audio playback failed"))};const k=h.play();k&&typeof k.then=="function"&&k.catch(j=>{I(),l(j instanceof Error?j:new Error(String(j)))})})}function Jo(a,n=null){const l=String(a||"").trim();return!l||!t.testPlanDraft||!Array.isArray(t.testPlanDraft.steps)?n:t.testPlanDraft.steps.find(d=>String(d&&d.id?d.id:"")===l)||n}function yr(a,n=""){const l=`${String(a||"")} ${String(n||"")}`.trim().toLowerCase(),d=` ${l} `;if(!l)return String((navigator.language||"it").split("-")[0]||"it").trim().toLowerCase()||"it";const h=j=>j.some(G=>d.includes(G)),I=[{voice:"it",score:[h([" accendi "," spegni "," stato "," verifica "," coerente "," leggi "," apri "," chiudi "," attiva "," controlla "," area "," luce "," luci "," tapparella "," tapparelle "," clima "])?3:0,/[àèéìíîòóù]/.test(l)?2:0].reduce((j,G)=>j+G,0)},{voice:"en",score:[h([" turn on "," turn off "," verify "," feedback "," status "," check "," read "," open "," close "," command "," area "," light "," lights "])?3:0].reduce((j,G)=>j+G,0)},{voice:"fr",score:[h([" allume "," éteins "," etat "," état "," vérifier "," ouvre "," ferme "," lumière "," lumières "," zone "])?3:0,/[àâçéèêëîïôûùüÿœ]/.test(l)?2:0].reduce((j,G)=>j+G,0)},{voice:"de",score:[h([" einschalten "," ausschalten "," status "," prüfen "," öffne "," schließe "," licht "," bereich "])?3:0,/[äöüß]/.test(l)?2:0].reduce((j,G)=>j+G,0)},{voice:"es",score:[h([" enciende "," apaga "," estado "," verifica "," abre "," cierra "," luz "," luces "," zona "])?3:0,/[áéíóúñü]/.test(l)?2:0].reduce((j,G)=>j+G,0)},{voice:"pt",score:[h([" liga "," desliga "," estado "," verificar "," abre "," fecha "," luz "," luzes "," área "])?3:0,/[ãõâêôçáéíóú]/.test(l)?2:0].reduce((j,G)=>j+G,0)}];return I.sort((j,G)=>G.score-j.score),I[0]&&I[0].score>0?I[0].voice:String((navigator.language||"it").split("-")[0]||"it").trim().toLowerCase()||"it"}function qo(a={},n=null){const l=Jo(a&&a.id?a.id:"",a),d=String(l&&l.title?l.title:"").trim(),h=String(l&&l.description?l.description:"").trim();return{text:`${Number.isInteger(n)&&n>0?`${n}. `:""}${d}`.trim(),voice:yr(d,h)}}async function Xo(a={},n=null){if(t.voiceEnabled!==!0)return;const l=qo(a,n),d=String(l.text||"").trim();if(!d||!t.selectedNodeId)return;const h=await Ze(`${ye("tts/googletranslate")}?ts=${Date.now()}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,text:d,voice:l.voice,slow:!1})});await vr(h)}async function Yo(a,n=""){if(t.voiceEnabled!==!0||!t.selectedNodeId)return;const l=String(a).trim();if(!l)return;const d=yr(l,n),h=await Ze(`${ye("tts/googletranslate")}?ts=${Date.now()}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,text:l,voice:d,slow:!1})});await vr(h)}function Qo(a){const n=u&&a.find(h=>h.id===u)?u:"",l=ge(Sl,""),d=l&&a.find(h=>h.id===l)?l:"";return n||d||(a[0]?a[0].id:"")}async function da({preserveSelection:a=!0}={}){t.loadingNodes=!0,$("Loading nodes...");try{const n=await we(ye("nodes")),l=Array.isArray(n&&n.nodes)?n.nodes:[];if(t.nodes=l,!l.length){t.selectedNodeId="",t.stateData=null,t.lastError="No KNX AI nodes found.",$(t.lastError);return}const d=a&&t.selectedNodeId&&l.find(h=>h.id===t.selectedNodeId)?t.selectedNodeId:Qo(l);t.selectedNodeId=d,t.lastError="",$("Ready")}catch(n){t.lastError=n.message||"Failed to load nodes",$(t.lastError)}finally{t.loadingNodes=!1}}async function es({fresh:a=!1}={}){if(!(!t.selectedNodeId||t.loadingState)){t.loadingState=!0,a&&$("Loading...");try{const n=t.testPlanRunning===!0&&t.liveTestResultId?T(t.stateData&&t.stateData.testPlanReport?t.stateData.testPlanReport:null,null):null,l=await we(ye(`state?nodeId=${encodeURIComponent(t.selectedNodeId)}&fresh=${a?1:0}`));n&&n.id===t.liveTestResultId&&(l.testPlanReport=n),t.stateData=l,sn(()=>{t.areaDraftIsNew!==!0&&t.areaSelectedId&&!Pe.value.find(d=>d.id===t.areaSelectedId)&&(t.areaSelectedId=""),!us()&&!t.testAreaSelectedId&&Pe.value[0]&&(t.testAreaSelectedId=Pe.value[0].id)}),t.lastError="",$("Ready")}catch(n){t.lastError=n.message||"Failed to load state",$(t.lastError)}finally{t.loadingState=!1}}}async function Zo(){await da({preserveSelection:!0}),await es({fresh:!0}),await wn()}async function ei(){Vo(),t.selectedTestResultId="",t.liveTestResultId="",t.testResultFocusMode=!1,t.testAreaSelectedId=qt(t.selectedNodeId),await es({fresh:!0}),await wn()}function Sr(){t.selectedTestResultId="",t.testResultFocusMode=!1,t.testPlanSelectedId="",t.testPlanDraft=null,t.testPlanPrompt="",t.testPlanGeneration=null,t.testPlanRunConfirmOpen=!1,t.testPlanUnsavedConfirmOpen=!1,t.showAiPlanner=!0,t.testTemplateBuilderFocus=!1,!us()&&!t.testAreaSelectedId&&Pe.value[0]&&(t.testAreaSelectedId=Pe.value[0].id),va(),ba()}function ti(){t.showAiPlanner=!0,t.testTemplateBuilderFocus=!0}function si(){t.testTemplateBuilderFocus=!1,t.showAiPlanner=!1}function ni(){t.showAiAreaBuilder=!0,t.areaBuilderFocus=!0}function ai(){t.areaBuilderFocus=!1,t.showAiAreaBuilder=!1}function fa(){t.areaSelectedId="",t.areaDraftIsNew=!1,t.areaDraftId="",t.areaDraftName="",t.areaDraftDescription="",t.areaDraftTags="",t.areaDraftGaList=[],t.areaLlmPrompt="",t.areaLlmError="",t.areaSearch="",t.areaSearchOpen=!1,t.showAiAreaBuilder=!1,t.areaBuilderFocus=!1,t.areaUnsavedConfirmOpen=!1}function ri(){if(Fo.value){t.areaUnsavedConfirmOpen=!0;return}fa(),$("Area editor closed")}function _r(){t.areaUnsavedConfirmOpen=!1}function li(){t.areaUnsavedConfirmOpen=!1,fa(),$("Area editor closed")}function oi(){t.testPlanRunning||ya(()=>{Sr(),t.testPlanSearchOpen=!1,$("Test editor closed")},"close the current test editor")}function wr(a){const n=String(a||"").trim();n!=="node"&&n!=="config"||(t.settingsTab=n)}function Ds(a){const n=String(a||"").trim();if(n){if(n==="tests"&&Pe.value.length===0){$("Define at least one area before using Tests");return}if(n==="areas"){const l=!!String(t.areaSelectedId||"").trim(),d=t.areaDraftIsNew===!0;!l&&!d&&fa()}if(n==="tests"){const l=!!String(t.testPlanSelectedId||"").trim(),d=!!String(t.selectedTestResultId||"").trim(),h=!!t.testPlanDraft;!l&&!d&&!h&&Sr()}t.activeTab!==n?t.activeTab=n:(t.activeTab="",sn(()=>{t.activeTab=n})),dt()}}async function pa(a){const n=String(a||"").trim();if(!(!n||!t.selectedNodeId||t.deletingTestResultId)){t.deletingTestResultId=n;try{const l=await we(ye("test-results/delete"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,reportId:n})}),d=Array.isArray(l&&l.testResults)?l.testResults:[];t.stateData=Object.assign({},t.stateData||{},{testResults:d}),t.selectedTestResultId===n&&(t.selectedTestResultId=d[0]&&d[0].id?String(d[0].id):"",d.length||(t.testResultFocusMode=!1)),t.liveTestResultId===n&&(t.liveTestResultId=""),$("Test result deleted")}catch(l){t.lastError=l.message||"Failed to delete test result",$(t.lastError)}finally{t.deletingTestResultId=""}}}function _n(a,{openMenu:n=!0,activateTestsTab:l=!1,activateResultsTab:d=!1,resultOnly:h=!0}={}){const I=String(a||"").trim();if(!I)return;n&&(t.testResultsMenuOpen=!0);const k=d?"results":l?"tests":"",j=()=>{k&&(t.activeTab=k),t.selectedTestResultId=I,t.testResultFocusMode=h===!0,sn(()=>{const G=document.querySelector(".results-page-list .area-list-item.active");G&&typeof G.scrollIntoView=="function"&&G.scrollIntoView({block:"nearest",behavior:"smooth"})})};t.selectedTestResultId===I&&(!k||t.activeTab===k)||j()}function Pr(){const a=te.value;if(!a)return;if(!Pe.value.length){$("Define at least one area before using Tests");return}const n=zo(a);if(t.activeTab="tests",t.testResultFocusMode=!1,n.type==="ai_test_plan"&&n.planId){const l=mt.value.find(d=>d&&d.id===n.planId);if(l){Nr(l),$(`Opened source plan "${l.name||l.id}"`);return}}if(n.type==="profile"){$("Returned to the Tests page for the source read-only profile.");return}if(n.type==="actuator_test"){$("Returned to the Tests page for the source actuator test.");return}$("Returned to the Tests page.")}async function ii(a){if(!t.selectedNodeId||!a||typeof a!="object")return null;const n=await we(ye("test-results/save"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,report:a})});return t.stateData=Object.assign({},t.stateData||{},{testResults:n.testResults||Hs.value,testPlanReport:n.report&&n.report.mode==="ai_test_plan"?n.report:ft.value,actuatorTestReport:n.report&&n.report.mode==="active_test"?n.report:$o.value,profileReport:n.report&&n.report.mode==="read_only"?n.report:Oo.value}),n&&n.report&&n.report.id&&(t.liveTestResultId="",_n(n.report.id,{openMenu:!0,activateResultsTab:!0,resultOnly:!0})),n}async function ga(a=""){const n=String(a||"").trim(),l=n||String(t.chatDraft||"").trim();if(!(!l||!t.selectedNodeId)){la("user",l),n||(t.chatDraft=""),t.asking=!0,$("Asking...");try{const d=await we(ye("ask"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,question:l})});la("assistant",d&&d.answer!==void 0?d.answer:""),$("Ready")}catch(d){la("error",d.message||"Ask failed"),$(d.message||"Ask failed")}finally{t.asking=!1}}}async function ci(){const a=Me.value;if(!t.selectedNodeId||t.areaSaving||!t.areaDraftIsNew&&!a)return;const n=t.areaDraftIsNew===!0;t.areaSaving=!0,$(n?"Creating area...":"Saving area...");try{const d=await we(ye(n?"areas/create":"areas/save"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:t.areaDraftIsNew?void 0:a.id,name:t.areaDraftName,description:t.areaDraftDescription,tags:String(t.areaDraftTags||"").split(",").map(h=>String(h||"").trim()).filter(Boolean),gaList:t.areaDraftGaList||[]})});d&&d.areas?(t.stateData=Object.assign({},t.stateData||{},{areas:d.areas}),d.areaId&&(t.areaSelectedId=d.areaId),t.areaLlmPrompt="",t.areaLlmError="",t.areaDraftIsNew=!1):await es({fresh:!0}),$(n?"Area created":"Area saved")}catch(l){t.lastError=l.message||"Failed to save area",$(t.lastError)}finally{t.areaSaving=!1}}async function ui(){const a=Me.value;if(!(!a||!t.selectedNodeId||t.areaSaving)){t.areaSaving=!0,$("Resetting area...");try{const n=await we(ye("areas/reset"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:a.id})});n&&n.areas?t.stateData=Object.assign({},t.stateData||{},{areas:n.areas}):await es({fresh:!0}),$("Area reset")}catch(n){t.lastError=n.message||"Failed to reset area",$(t.lastError)}finally{t.areaSaving=!1}}}async function di(){const a=Me.value;if(!(!a||!t.selectedNodeId||t.areaSaving)){t.areaSaving=!0,$("Deleting area...");try{const n=await we(ye("areas/delete"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:a.id})});if(n&&n.areas){t.stateData=Object.assign({},t.stateData||{},{areas:n.areas});const l=Array.isArray(n.areas&&n.areas.suggested)?n.areas.suggested:[];t.areaDraftIsNew=!1,t.areaSelectedId=l[0]&&l[0].id?l[0].id:""}else await es({fresh:!0});$("Area deleted")}catch(n){t.lastError=n.message||"Failed to delete area",$(t.lastError)}finally{t.areaSaving=!1}}}async function Ar(){const a=Rt.value;if(!a||!t.selectedNodeId){t.testPlanCatalog=null,t.testPlanCatalogError="";return}t.testPlanCatalogLoading=!0,t.testPlanCatalogError="";try{const n=await we(ye("test-plans/catalog"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:a.id})});t.testPlanCatalog=n&&n.catalog?n.catalog:null,n&&n.testPlans&&(t.stateData=Object.assign({},t.stateData||{},{testPlans:n.testPlans}))}catch(n){t.testPlanCatalog=null,t.testPlanCatalogError=n.message||"Failed to load area command/status catalog"}finally{t.testPlanCatalogLoading=!1}}async function wn(){if(!(!t.selectedNodeId||t.gaCatalogLoading)){t.gaCatalogLoading=!0;try{const a=await we(ye("areas/catalog"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId})});t.gaCatalog=Array.isArray(a&&a.gaCatalog)?a.gaCatalog:[]}catch(a){t.lastError=a.message||"Failed to load GA catalog",$(t.lastError)}finally{t.gaCatalogLoading=!1}}}function fi(a){const n=String(a||"").trim();n&&((t.areaDraftGaList||[]).includes(n)||(t.areaDraftGaList=[...t.areaDraftGaList||[],n]))}function Tr(a){const n=String(a||"").trim().toLowerCase(),l=o.find(d=>d.value===n);return l?l.label:n==="auto"?"Auto":"Command"}function Dr(a){const n=a&&typeof a=="object"?a:{},l=String(n.path||n.name||"Area").trim(),d=String(n.kind||"").trim(),h=Number(n.gaCount||0),I=Number(n.activeGaCount||0),k=[d,`${h} GA`,`active ${I}`].filter(Boolean).join(" | ");return k?`${l} ${k}`:l}function pi(a){const n=a&&typeof a=="object"?a:null;!n||!n.id||(t.areaDraftIsNew=!1,t.showAiAreaBuilder=!1,t.areaBuilderFocus=!1,t.areaSelectedId=n.id,t.areaSearch="",t.areaSearchOpen=!1)}function gi(){setTimeout(()=>{t.areaSearchOpen=!1},150)}function xr(a){const n=a&&typeof a=="object"?a:{},l=String(n.name||"Plan").trim(),d=String(n.areaName||n.areaId||"").trim(),h=Number(n.steps&&n.steps.length?n.steps.length:0),I=[d,`${h} steps`].filter(Boolean).join(" | ");return I?`${l} ${I}`:l}function hi(a){const n=a&&typeof a=="object"?a:null;!n||!n.id||(Bi(n),t.testPlanSearch="",t.testPlanSearchOpen=!1)}function mi(){setTimeout(()=>{t.testPlanSearchOpen=!1},150)}function bi(){const a=String(document&&document.documentElement&&document.documentElement.lang?document.documentElement.lang:"").trim().toLowerCase();return a?a.split("-")[0]||"en":String(navigator.language||"en").trim().toLowerCase().split("-")[0]||"en"}function vi(a){const n=String(a||"").trim();n&&(t.areaDraftGaList=(t.areaDraftGaList||[]).filter(l=>l!==n))}async function yi(a,n){const l=String(a||"").trim();if(!(!t.selectedNodeId||!l||t.areaGaRoleSavingGa===l)){t.areaGaRoleSavingGa=l,$(`Saving role for ${l}...`);try{const d=await we(ye("areas/ga-role/save"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,ga:l,role:n})});Array.isArray(d&&d.gaCatalog)&&(t.gaCatalog=d.gaCatalog),d&&d.areas&&(t.stateData=Object.assign({},t.stateData||{},{areas:d.areas})),Rt.value&&Array.isArray(Rt.value.gaList)&&Rt.value.gaList.includes(l)&&await Ar(),$(`Role saved for ${l}`)}catch(d){t.lastError=d.message||"Failed to save GA role",$(t.lastError)}finally{t.areaGaRoleSavingGa=""}}}function Si(){t.activeTab="areas",t.areaDraftIsNew=!0,t.areaSelectedId="",t.areaDraftId="",t.areaDraftName="New Area",t.areaDraftDescription="",t.areaDraftTags="",t.areaDraftGaList=[],t.areaLlmPrompt="",t.areaLlmError="",t.showAiAreaBuilder=!1,t.areaBuilderFocus=!1}async function _i(){if(!(!t.selectedNodeId||t.areaLlmRegenerating)){t.areaLlmRegenerating=!0,t.areaLlmError="",$("Regenerating AI areas...");try{const a=await we(ye("areas/regenerate-llm"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId})});Array.isArray(a&&a.gaCatalog)&&(t.gaCatalog=a.gaCatalog),a&&a.areas?t.stateData=Object.assign({},t.stateData||{},{areas:a.areas}):await es({fresh:!0}),$(`AI areas regenerated (${Number(a&&a.generatedCount?a.generatedCount:0)})`)}catch(a){t.areaLlmError=a.message||"Failed to regenerate AI areas",$(t.areaLlmError)}finally{t.areaLlmRegenerating=!1}}}async function wi(){if(!t.selectedNodeId||t.areaLlmBusy)return;const a=String(t.areaLlmPrompt||"").trim();if(a){t.areaLlmBusy=!0,t.areaLlmError="",$("AI is selecting area GA...");try{const n=await we(ye("areas/suggest-llm"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,prompt:a,name:t.areaDraftName,description:t.areaDraftDescription,gaList:t.areaDraftGaList||[]})}),l=n&&n.suggestion?n.suggestion:null;if(Array.isArray(n&&n.gaCatalog)&&(t.gaCatalog=n.gaCatalog),!l||!Array.isArray(l.gaList)||!l.gaList.length)throw new Error("The AI did not return any group addresses");!String(t.areaDraftName||"").trim()&&l.name&&(t.areaDraftName=String(l.name)),!String(t.areaDraftDescription||"").trim()&&l.description&&(t.areaDraftDescription=String(l.description)),(!t.areaDraftTags||!String(t.areaDraftTags).trim())&&Array.isArray(l.tags)&&l.tags.length&&(t.areaDraftTags=l.tags.join(", ")),t.areaDraftGaList=Array.from(new Set([...t.areaDraftGaList||[],...l.gaList.map(d=>String(d||"").trim()).filter(Boolean)])),t.showAiAreaBuilder=!1,t.areaBuilderFocus=!1,$(`AI added ${Number(l.gaList.length||0)} GA to the draft`)}catch(n){t.areaLlmError=n.message||"Failed to suggest area GA",$(t.areaLlmError)}finally{t.areaLlmBusy=!1}}}function Pi(a){if(a&&typeof a=="object"){t.testPlanPrompt=String(a.prompt||"").trim();return}t.testPlanPrompt=String(a||"").trim()}function Ir(a){const n=String(a||"").trim();return n&&(Array.isArray(t.testPlanCatalog&&t.testPlanCatalog.pairs)?t.testPlanCatalog.pairs:[]).find(d=>d&&d.command&&d.command.ga===n)||null}function Cr(a){const n=String(a||"").trim();return ta.value.find(l=>l&&l.ga===n)||null}function Ai(a){const n=String(a||"").trim();return ur.value.find(l=>l&&l.ga===n)||null}function ts(a){const n=String(a||"").trim();if(!n)return[];const l=t.testPlanCatalog&&t.testPlanCatalog.dptOptionsById&&typeof t.testPlanCatalog.dptOptionsById=="object"?t.testPlanCatalog.dptOptionsById:{};return Array.isArray(l[n])?l[n]:[]}function Et(a){return String(a||"").trim().normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()}const Ti=[{type:"on",patterns:[/\bturn on\b/g,/\bturn(?:\s+\w+){1,4}\s+on\b/g,/\bswitch on\b/g,/\bswitch(?:\s+\w+){1,4}\s+on\b/g,/\bpower on\b/g,/\bpower(?:\s+\w+){1,4}\s+on\b/g,/\bstart\b/g,/\benable\b/g,/\bactivate\b/g,/\baccendi\b/g,/\battiva\b/g,/\ballume\b/g,/\bactive\b/g,/\beinschalten\b/g,/\baktivieren\b/g,/\benciende\b/g,/\bactivar\b/g,/\bliga\b/g,/\bativa\b/g,/\baan\b/g,/\binschakelen\b/g]},{type:"off",patterns:[/\bturn off\b/g,/\bturn(?:\s+\w+){1,4}\s+off\b/g,/\bswitch off\b/g,/\bswitch(?:\s+\w+){1,4}\s+off\b/g,/\bpower off\b/g,/\bpower(?:\s+\w+){1,4}\s+off\b/g,/\bdisable\b/g,/\bdeactivate\b/g,/\bshutdown\b/g,/\bspegni\b/g,/\bdisattiva\b/g,/\beteins\b/g,/\bdesactive\b/g,/\bausschalten\b/g,/\bdeaktivieren\b/g,/\bapaga\b/g,/\bdesactiva\b/g,/\bdesliga\b/g,/\bdesativa\b/g,/\buit\b/g,/\buitschakelen\b/g]},{type:"open",patterns:[/\bopen\b/g,/\braise\b/g,/\blift\b/g,/\bmove up\b/g,/\bapri\b/g,/\balza\b/g,/\bsolleva\b/g,/\bouvre\b/g,/\bmonte\b/g,/\boffnen\b/g,/\bhoch\b/g,/\bauf\b/g,/\babre\b/g,/\bsube\b/g,/\babrir\b/g,/\bsobe\b/g,/\bopenen\b/g,/\bomhoog\b/g]},{type:"close",patterns:[/\bclose\b/g,/\blower\b/g,/\bmove down\b/g,/\bchiudi\b/g,/\babbassa\b/g,/\bferme\b/g,/\bdescends?\b/g,/\bschliessen\b/g,/\brunter\b/g,/\bzu\b/g,/\bcierra\b/g,/\bbaja\b/g,/\bfechar\b/g,/\bdesce\b/g,/\bsluiten\b/g,/\bomlaag\b/g]},{type:"stop",patterns:[/\bstop\b/g,/\bhalt\b/g,/\bpause\b/g,/\bferma\b/g,/\barresta\b/g,/\barrete\b/g,/\bstoppe\b/g,/\banhalten\b/g,/\bstopp\b/g,/\bdeten\b/g,/\bparar\b/g,/\bpare\b/g,/\bstoppen\b/g]}];function Di(a){const n=Et(a);if(!n)return"";const l=[];return Ti.forEach(d=>{d.patterns.forEach(h=>{h.lastIndex=0;let I;for(;(I=h.exec(n))!==null;)l.push({type:d.type,index:I.index})})}),l.sort((d,h)=>d.index-h.index),l[0]?l[0].type:""}function xi(a){return["on","open"].includes(String(a||"").trim().toLowerCase())}function Ii(a){return["off","close","stop"].includes(String(a||"").trim().toLowerCase())}function ha(a,n,l=""){const d=ts(n);if(!d.length)return String(a??"");const h=String(a??"").trim(),I=Et(h),k=Et(l),j=`${I} ${k}`.trim(),G=Di(l||j);if(G){if(xi(G)){const H=d.find(he=>["true","1","100"].includes(String(he.value)));if(H)return String(H.value);const ie=d.find(he=>/\b(on|open|up|start|enable|enabled|active|acceso|accesa|aperto|aperta|su|einschalten|allume|enciende|liga|aan)\b/.test(Et(he.label)));if(ie)return String(ie.value)}if(Ii(G)){const H=d.find(he=>["false","0"].includes(String(he.value)));if(H)return String(H.value);const ie=d.find(he=>/\b(off|close|down|stop|disable|disabled|inactive|chiuso|spento|giu|ausschalten|eteins|apaga|desliga|uit)\b/.test(Et(he.label)));if(ie)return String(ie.value)}}if(d.some(H=>String(H.value)===h))return h;const oe=d.find(H=>Et(H.label)===I);if(oe)return String(oe.value);const V=d.find(H=>{const ie=Et(H.label);return I&&(ie.includes(I)||I.includes(ie))});if(V)return String(V.value);const de=/\b(on|open|up|true|1|accendi|attiva|apri|su|acceso|accesa|accesi|accese|aperto|aperta|enabled|enable|start|allume|einschalten|enciende|liga|aan)\b/,se=/\b(off|close|down|false|0|spegni|disattiva|chiudi|giu|spento|spenta|spenti|spente|chiuso|chiusa|disabled|disable|stop|ferma|eteins|ausschalten|apaga|desliga|uit)\b/;if(de.test(j)){const H=d.find(he=>["true","1","100"].includes(String(he.value)));if(H)return String(H.value);const ie=d.find(he=>/\b(on|open|up|start|enable|enabled|active|acceso|accesa|aperto|aperta|su)\b/.test(Et(he.label)));if(ie)return String(ie.value)}if(se.test(j)){const H=d.find(he=>["false","0"].includes(String(he.value)));if(H)return String(H.value);const ie=d.find(he=>/\b(off|close|down|stop|disable|disabled|inactive|spento|spenta|chiuso|chiusa|giu)\b/.test(Et(he.label)));if(ie)return String(ie.value)}return String(d[0].value)}function Pn(a){if(!a)return;const n=ts(a.commandDPT),l=ts(a.statusDPT||a.commandDPT),d=String(a.action||"").trim().toLowerCase();n.length&&(a.commandPayload=ha(a.commandPayload,a.commandDPT,d||`${a.title||""} ${a.description||""} ${a.reason||""}`)),l.length&&(a.expectedPayload=ha(a.expectedPayload,a.statusDPT||a.commandDPT,d||`${a.title||""} ${a.description||""} ${a.reason||""}`))}function ma(a={}){if(String(a.kind||"").trim().toLowerCase()==="wait")return{id:String(a.id||`step-${Date.now()}-${Math.round(Math.random()*1e3)}`),kind:"wait",action:"",collapsed:a.collapsed!==!1,title:String(a.title||"Wait"),description:String(a.description||""),reason:String(a.reason||""),delayMs:Number(a.delayMs||a.readDelayMs||1200),commandGA:"",commandDPT:"",commandPayload:"",statusGA:"",statusDPT:"",expectedPayload:"",statusWriteTimeoutMs:0,statusResponseTimeoutMs:0};const l=String(a.commandGA||"").trim()||String(ta.value[0]?.ga||""),d=Ir(l),h=Cr(l),I=d&&d.status?d.status:null,k={id:String(a.id||`step-${Date.now()}-${Math.round(Math.random()*1e3)}`),kind:String(a.kind||(I?"write_and_verify":"write_only")),action:String(a.action||"").trim().toLowerCase(),collapsed:a.collapsed!==!1,title:String(a.title||(h?`Step ${h.label}`:"Manual Step")),description:String(a.description||""),reason:String(a.reason||""),commandGA:l,commandDPT:String(a.commandDPT||h?.dpt||""),commandPayload:String(a.commandPayload??""),statusGA:String(a.statusGA||I?.ga||""),statusDPT:String(a.statusDPT||I?.dpt||""),expectedPayload:String(a.expectedPayload??a.commandPayload??""),statusWriteTimeoutMs:Number(a.statusWriteTimeoutMs||a.timeoutMs||5e3),statusResponseTimeoutMs:Number(a.statusResponseTimeoutMs||a.timeoutMs||5e3)};return Pn(k),k}function An(a){const n=T(a,null);return n?(n.steps=(Array.isArray(n.steps)?n.steps:[]).map(l=>ma(l)),n):null}function Ci(){return An({id:"",name:"",description:"",areaId:ot.value?String(ot.value.id||""):"",areaName:ot.value?String(ot.value.path||ot.value.name||""):"",prompt:"",source:"manual",generatedAt:new Date().toISOString(),steps:[]})}function kr(a){if(!a||a.kind==="wait")return;const n=Cr(a.commandGA),l=Ai(a.statusGA),d=Ir(a.commandGA);n&&(a.commandDPT=String(n.dpt||"")),l&&(a.statusDPT=String(l.dpt||"")),d&&d.status&&(!a.statusGA||a.statusGA==="")&&(a.statusGA=String(d.status.ga||""),a.statusDPT=String(d.status.dpt||""),a.kind="write_and_verify"),a.statusGA&&(a.kind="write_and_verify"),a.expectedPayload||(a.expectedPayload=String(a.commandPayload??"")),a.statusGA||(a.statusDPT="",a.kind="write_only"),Pn(a)}function ki(){if(!t.testPlanDraft)return;const a={id:`step-${Date.now()}-${Math.round(Math.random()*1e3)}`,kind:"write_only",action:"",collapsed:!0,title:"Manual Step",description:"",reason:"",commandGA:"",commandDPT:"",commandPayload:"",statusGA:"",statusDPT:"",expectedPayload:"",statusWriteTimeoutMs:5e3,statusResponseTimeoutMs:5e3};t.testPlanDraft.steps=[...t.testPlanDraft.steps||[],a]}function Ri(){if(!t.testPlanDraft)return;const a=ma({id:`wait-${(t.testPlanDraft.steps?.length||0)+1}`,kind:"wait",title:"Wait",description:"Pause the test before the next action.",delayMs:1200});t.testPlanDraft.steps=[...t.testPlanDraft.steps||[],a]}function Ni(a){if(!t.testPlanDraft||!Array.isArray(t.testPlanDraft.steps))return;const n=t.testPlanDraft.steps[a];if(!n)return;const l=ma(Object.assign({},n,{id:`${n.id||"step"}-copy`}));t.testPlanDraft.steps.splice(a+1,0,l)}function Ei(a){!t.testPlanDraft||!Array.isArray(t.testPlanDraft.steps)||t.testPlanDraft.steps.splice(a,1)}function Mi(a){a&&(a.collapsed=a.collapsed!==!0)}function ba(){t.draggedTestPlanStepId="",t.dragOverTestPlanStepId=""}function Oi(a,n){const l=String(a||"").trim();l&&(t.draggedTestPlanStepId=l,t.dragOverTestPlanStepId="",n&&n.dataTransfer&&(n.dataTransfer.effectAllowed="move",n.dataTransfer.setData("text/plain",l)))}function $i(a){const n=String(a||"").trim();!n||!t.draggedTestPlanStepId||n===t.draggedTestPlanStepId||(t.dragOverTestPlanStepId=n)}function Li(a,n){if(!t.testPlanDraft||!Array.isArray(t.testPlanDraft.steps))return;const l=String(a||"").trim(),d=String(n||"").trim();if(!l||!d||l===d)return;const h=t.testPlanDraft.steps.slice(),I=h.findIndex(G=>String(G&&G.id?G.id:"")===l),k=h.findIndex(G=>String(G&&G.id?G.id:"")===d);if(I===-1||k===-1)return;const[j]=h.splice(I,1);h.splice(k,0,j),t.testPlanDraft.steps=h}function Fi(a,n){n&&n.preventDefault();const l=String(t.draggedTestPlanStepId||"").trim(),d=String(a||"").trim();l&&d&&l!==d&&Li(l,d),ba()}function Gi(){!t.testPlanDraft||t.testPlanRunning||(t.testPlanRunMode="single",t.testPlanRepeatStopRequested=!1,t.testPlanRunConfirmOpen=!0)}function ji(){!t.testPlanDraft||t.testPlanRunning||(t.testPlanRunMode="repeat",t.testPlanRepeatStopRequested=!1,t.testPlanRunConfirmOpen=!0)}function Rr(){t.testPlanRunConfirmOpen=!1,t.testPlanRunMode="single"}function Ui(){t.testPlanRepeatForever===!0&&(t.testPlanRepeatStopRequested=!0,$("Stopping repeat mode after the current cycle..."))}function Nr(a=null){const n=a||Qt.value;n&&(t.testResultFocusMode=!1,t.testPlanSelectedId=String(n.id||""),t.testPlanDraft=An(n),t.testPlanPrompt=String(n.prompt||""),t.testPlanGeneration={provider:String(n.source||"saved"),model:"",fallback:!1,error:""},t.testPlanRunConfirmOpen=!1,t.showAiPlanner=!1,t.testTemplateBuilderFocus=!1,le())}function va(){Se=null,t.testPlanPendingActionLabel=""}function Er(){t.testPlanUnsavedConfirmOpen=!1,va()}function Mr(){const a=Se;t.testPlanUnsavedConfirmOpen=!1,va(),typeof a=="function"&&a()}function ya(a,n="another plan"){if(!fr.value){a();return}Se=a,t.testPlanPendingActionLabel=String(n||"another plan"),t.testPlanUnsavedConfirmOpen=!0}function Bi(a){if(!a||!a.id)return;const n=String(a.id);t.testPlanSelectedId!==n&&ya(()=>Nr(a),`plan "${a.name||n}"`)}function Vi(){ue(),$("Plan changes discarded")}async function Wi(){await $r()&&Mr()}function Or(){if(!Pe.value.length){$("Define at least one area before creating a test plan");return}ya(()=>{t.activeTab="tests",t.testResultFocusMode=!1,t.testPlanSelectedId="",t.testPlanDraft=Ci(),t.testPlanGeneration=null,t.testPlanRunConfirmOpen=!1,t.testPlanPrompt="",t.showAiPlanner=!1,t.testTemplateBuilderFocus=!1,le()},"a new plan")}function Hi(a){const n=String(a||"").trim();if(!n)return;const l=Pe.value.find(d=>d&&d.id===n);l&&(t.testAreaSelectedId=n,t.testPlanDraft&&(t.testPlanDraft.areaId=n,t.testPlanDraft.areaName=String(l.path||l.name||"")))}function Ki(){const a=T(t.testPlanDraft||Qt.value,null);a&&(t.activeTab="tests",t.testResultFocusMode=!1,t.testPlanSelectedId="",t.testPlanRunConfirmOpen=!1,t.testPlanGeneration={provider:"duplicated",model:"",fallback:!1,error:""},a.id="",a.name=String(a.name||"Plan Draft").trim()?`${String(a.name||"Plan Draft").trim()} Copy`:"Plan Copy",t.testPlanPrompt=String(a.prompt||t.testPlanPrompt||""),t.testPlanDraft=An(a),t.showAiPlanner=!0,t.testTemplateBuilderFocus=!1,le(),$("Plan duplicated"))}async function zi(){const a=ot.value,n=String(t.testPlanPrompt||"").trim(),l=bi();if(!(!t.selectedNodeId||!a||!n||t.testPlanGenerating)){t.testPlanGenerating=!0,t.testTemplateBuilderFocus=!1,t.showAiPlanner=!1,t.testResultFocusMode=!1,t.testPlanGenerationError="",$("Building test plan...");try{const d=await we(ye("test-plans/generate"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:a.id,prompt:n,language:l})});t.testPlanDraft=d&&d.plan?An(d.plan):null,t.testPlanCatalog=d&&d.catalog?d.catalog:t.testPlanCatalog,t.testPlanGeneration=d&&d.generation?d.generation:null,t.testPlanGenerationError="",t.testPlanSelectedId="",t.testPlanRunConfirmOpen=!1,t.showAiPlanner=!1,d&&d.testPlans&&(t.stateData=Object.assign({},t.stateData||{},{testPlans:d.testPlans})),le(),$("Test plan ready")}catch(d){const h=d.message||"Failed to build the test plan";t.lastError=h,t.testPlanGenerationError=h,t.testPlanGeneration={provider:"",model:"",fallback:!1,error:h},$(h)}finally{t.testPlanGenerating=!1}}}async function $r(){if(!t.selectedNodeId||!t.testPlanDraft||t.testPlanSaving)return!1;t.testPlanSaving=!0,$("Saving test plan...");try{const a=await we(ye("test-plans/save"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,plan:Object.assign({},t.testPlanDraft,{prompt:t.testPlanPrompt})})});return a&&a.testPlans&&(t.stateData=Object.assign({},t.stateData||{},{testPlans:a.testPlans})),a&&a.planId&&(t.testPlanSelectedId=a.planId),a&&a.planId&&t.testPlanDraft&&(t.testPlanDraft.id=a.planId),t.testPlanRunConfirmOpen=!1,le(),$("Test plan saved"),!0}catch(a){return t.lastError=a.message||"Failed to save test plan",$(t.lastError),!1}finally{t.testPlanSaving=!1}}async function Ji(){const a=Qt.value;if(!(!a||!t.selectedNodeId||t.testPlanDeleting)){t.testPlanDeleting=!0,$("Deleting test plan...");try{const n=await we(ye("test-plans/delete"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,planId:a.id})});n&&n.testPlans&&(t.stateData=Object.assign({},t.stateData||{},{testPlans:n.testPlans})),t.testPlanDraft=null,t.testPlanGeneration=null,t.testPlanRunConfirmOpen=!1,t.showAiPlanner=!0,t.testTemplateBuilderFocus=!1,le(),$("Test plan deleted")}catch(n){t.lastError=n.message||"Failed to delete test plan",$(t.lastError)}finally{t.testPlanDeleting=!1}}}async function qi(a="single"){if(!t.selectedNodeId||!t.testPlanDraft||t.testPlanRunning)return;const l=String(a||t.testPlanRunMode||"single").trim().toLowerCase()==="repeat";t.testPlanRunning=!0,t.showAiPlanner=!1,t.testTemplateBuilderFocus=!1,t.testPlanRepeatForever=l,t.testPlanRepeatStopRequested=!1,t.testPlanRunningStepId="",t.testPlanRunConfirmOpen=!1,t.lastError="",$(l?"Running test plan in repeat mode...":"Running test plan...");try{const d=JSON.parse(JSON.stringify(Object.assign({},t.testPlanDraft,{prompt:t.testPlanPrompt}))),h=Array.isArray(d.steps)?d.steps:[];if(!d.areaId)throw new Error("Missing areaId in test plan");if(!h.length)throw new Error("The test plan has no executable steps");let I=ot.value,k=0;do{k+=1;const j=`${d.id||"plan"}:${Date.now()}`,G=[];t.liveTestResultId=j,t.testResultsMenuOpen=!0,_n(j,{openMenu:!0,activateResultsTab:!0,resultOnly:!0}),t.stateData=Object.assign({},t.stateData||{},{testPlanReport:oa({plan:d,area:I,stepResults:[],reportId:j})});try{await Yo(d.name||"Test plan",d.description||"")}catch{}for(let V=0;V<h.length;V+=1){const de=h[V];t.testPlanRunningStepId=de&&de.id?de.id:"";const se=l?`Cycle ${k} · `:"";$(`${se}Step ${V+1}/${h.length}: ${de&&de.title?de.title:"Running..."}`);try{await Xo(de||{title:`Step ${V+1}`},V+1)}catch{$(`Voice unavailable for step ${V+1}. Continuing test...`)}try{const H=await we(ye("test-plans/run-step"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,areaId:d.areaId,step:de})});H&&H.area&&(I=H.area),G.push(H&&H.stepResult?H.stepResult:br(de,new Error("Step returned no result")))}catch(H){G.push(br(de,H))}t.stateData=Object.assign({},t.stateData||{},{testPlanReport:oa({plan:d,area:I,stepResults:G.slice(),reportId:j})})}const oe=oa({plan:d,area:I,stepResults:G,reportId:j});t.stateData=Object.assign({},t.stateData||{},{testPlans:mt.value,testPlanReport:oe}),_n(j,{openMenu:!0,activateResultsTab:!0,resultOnly:!0});try{await ii(oe)}catch(V){t.lastError=V.message||"Failed to save test result",$(`Test completed, but the result was not saved: ${t.lastError}`)}l&&t.testPlanRepeatStopRequested!==!0&&(t.testResultFocusMode=!1,$(`Cycle ${k} completed. Starting the next cycle...`))}while(l&&t.testPlanRepeatStopRequested!==!0);t.testPlanRunConfirmOpen=!1,t.lastError||$(l?"Repeat mode stopped":"Test completed"),requestAnimationFrame(()=>{try{y.value&&typeof y.value.scrollIntoView=="function"&&y.value.scrollIntoView({behavior:"smooth",block:"start"})}catch{}})}catch(d){t.lastError=d.message||"Failed to run test plan",$(t.lastError)}finally{t.testPlanRunningStepId="",ne(),t.testPlanRunning=!1,t.testPlanRepeatForever=!1,t.testPlanRepeatStopRequested=!1,t.testPlanRunMode="single"}}async function Xi(){if(t.selectedNodeId){$("Exporting config...");try{const a=await we(ye("config/export"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId})}),n=new Blob([JSON.stringify(a,null,2)],{type:"application/json"}),l=window.URL.createObjectURL(n),d=document.createElement("a");d.href=l,d.download=`knx-ai-config-${t.selectedNodeId}.json`,document.body.appendChild(d),d.click(),document.body.removeChild(d),window.URL.revokeObjectURL(l),$("Config exported")}catch(a){t.lastError=a.message||"Failed to export config",$(t.lastError)}}}function Yi(){w.value&&w.value.click()}async function Qi(a){const n=a&&a.target&&a.target.files&&a.target.files[0]?a.target.files[0]:null;if(!(!n||!t.selectedNodeId)){$("Importing config...");try{const l=await n.text(),d=JSON.parse(l),h=await we(ye("config/import"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:t.selectedNodeId,config:d})});t.stateData=Object.assign({},t.stateData||{},{areas:h.areas||ps.value,profiles:h.profiles||gs.value,actuatorTests:h.actuatorTests||hs.value,testPlans:h.testPlans||mt.value,testResults:h.testResults||Hs.value}),await wn(),$("Config imported")}catch(l){t.lastError=l.message||"Failed to import config",$(t.lastError)}finally{a&&a.target&&(a.target.value="")}}}function Zi(){t.pollStateHandle||(t.pollStateHandle=window.setInterval(()=>{t.autoRefresh&&es({fresh:!1})},1500)),t.pollNodesHandle||(t.pollNodesHandle=window.setInterval(()=>{da({preserveSelection:!0})},15e3))}function ec(){t.pollStateHandle&&(window.clearInterval(t.pollStateHandle),t.pollStateHandle=null),t.pollNodesHandle&&(window.clearInterval(t.pollNodesHandle),t.pollNodesHandle=null)}return oo(async()=>{nt(),window.addEventListener("resize",nt),document.addEventListener("keydown",Jt),document.addEventListener("fullscreenchange",ve),await da({preserveSelection:!1}),await es({fresh:!0}),await wn(),Zi()}),io(()=>{window.removeEventListener("resize",nt),document.removeEventListener("keydown",Jt),document.removeEventListener("fullscreenchange",ve),ec(),ne()}),(a,n)=>(b(),v(X,null,[i("header",Nd,[n[42]||(n[42]=i("div",{class:"m-header-brand"},[i("span",{class:"m-logo-mark"},"K"),i("span",{class:"hb-logo-text-mobile"},"KNX AI")],-1)),i("button",{class:ce(["hamburger-icon",{"hamburger-icon-cross":Z.value}]),type:"button","aria-expanded":Z.value?"true":"false","aria-controls":"knx-ai-sidebar","aria-label":"Toggle menu",onClick:is},[...n[41]||(n[41]=[i("span",null,null,-1),i("span",null,null,-1),i("span",null,null,-1),i("span",null,null,-1)])],10,Ed)]),F.value&&Z.value?(b(),v("button",{key:0,class:"sidebar-overlay",type:"button","aria-label":"Close menu",onClick:dt})):M("",!0),i("div",{class:ce(["page-shell",{"sidebar-collapsed":!Z.value,"sidebar-mobile-open":F.value&&Z.value}])},[i("aside",Md,[i("div",Od,[n[43]||(n[43]=i("div",{class:"sidebar-brand-mark","aria-hidden":"true"},"K",-1)),n[44]||(n[44]=i("div",{class:"sidebar-brand"},[i("p",{class:"eyebrow"},"KNX Ultimate")],-1)),i("button",{class:"sidebar-collapse-toggle",type:"button","aria-expanded":Z.value?"true":"false","aria-controls":"knx-ai-sidebar","aria-label":"Toggle sidebar",onClick:is},[i("span",Ld,S(Z.value?F.value?"×":"‹":"›"),1)],8,$d)]),i("nav",Fd,[i("button",{class:ce(["tab-button",{active:t.activeTab==="overview"}]),type:"button",onClick:n[0]||(n[0]=l=>Ds("overview"))},[...n[45]||(n[45]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-151c7c88><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-151c7c88><path d="M3 10.8 12 3l9 7.8v9.2a1 1 0 0 1-1 1h-5v-6h-6v6H4a1 1 0 0 1-1-1z" data-v-151c7c88></path></svg></span><span class="sidebar-nav-copy" data-v-151c7c88><span class="sidebar-nav-title" data-v-151c7c88>Overview</span></span>',2)])],2),i("button",{class:ce(["tab-button",{active:t.activeTab==="areas"}]),type:"button",onClick:n[1]||(n[1]=l=>Ds("areas"))},[...n[46]||(n[46]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-151c7c88><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-151c7c88><path d="M3 3h8v8H3zm10 0h8v8h-8zM3 13h8v8H3zm10 0h8v8h-8z" data-v-151c7c88></path></svg></span><span class="sidebar-nav-copy" data-v-151c7c88><span class="sidebar-nav-title" data-v-151c7c88>Areas</span></span>',2)])],2),i("button",{class:ce(["tab-button sidebar-nav-child",{active:t.activeTab==="tests"}]),type:"button",disabled:!Pe.value.length,onClick:n[2]||(n[2]=l=>Ds("tests"))},[...n[47]||(n[47]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-151c7c88><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-151c7c88><path d="M9 3h6v2h-1v4.3l5.5 8.8A2 2 0 0 1 17.8 21H6.2a2 2 0 0 1-1.7-2.9L10 9.3V5H9zm1.9 8.2L6.9 18h10.2l-4-6.8z" data-v-151c7c88></path></svg></span><span class="sidebar-nav-copy" data-v-151c7c88><span class="sidebar-nav-title" data-v-151c7c88>Tests</span></span>',2)])],10,Gd),i("button",{class:ce(["tab-button sidebar-nav-child",{active:t.activeTab==="results"}]),type:"button",onClick:n[3]||(n[3]=l=>Ds("results"))},[...n[48]||(n[48]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-151c7c88><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-151c7c88><path d="M4 4h16v4H4zm0 6h16v4H4zm0 6h16v4H4z" data-v-151c7c88></path></svg></span><span class="sidebar-nav-copy" data-v-151c7c88><span class="sidebar-nav-title" data-v-151c7c88>Test Results</span></span>',2)])],2),i("button",{class:ce(["tab-button",{active:t.activeTab==="assistant"}]),type:"button",onClick:n[4]||(n[4]=l=>Ds("assistant"))},[...n[49]||(n[49]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-151c7c88><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-151c7c88><path d="M4 5h16a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H9l-5 4v-4H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2z" data-v-151c7c88></path></svg></span><span class="sidebar-nav-copy" data-v-151c7c88><span class="sidebar-nav-title" data-v-151c7c88>Assistant</span></span>',2)])],2),i("button",{class:ce(["tab-button",{active:t.activeTab==="settings"}]),type:"button",onClick:n[5]||(n[5]=l=>Ds("settings"))},[...n[50]||(n[50]=[ys('<span class="sidebar-nav-icon" aria-hidden="true" data-v-151c7c88><svg viewBox="0 0 24 24" class="sidebar-nav-svg" data-v-151c7c88><path d="M19.14 12.94a7.43 7.43 0 0 0 .05-.94 7.43 7.43 0 0 0-.05-.94l2.03-1.58a.5.5 0 0 0 .12-.64l-1.92-3.32a.5.5 0 0 0-.6-.22l-2.39.96a7.18 7.18 0 0 0-1.63-.94l-.36-2.54A.5.5 0 0 0 13.9 2h-3.8a.5.5 0 0 0-.49.42l-.36 2.54a7.18 7.18 0 0 0-1.63.94l-2.39-.96a.5.5 0 0 0-.6.22L2.71 8.48a.5.5 0 0 0 .12.64l2.03 1.58a7.43 7.43 0 0 0-.05.94 7.43 7.43 0 0 0 .05.94l-2.03 1.58a.5.5 0 0 0-.12.64l1.92 3.32a.5.5 0 0 0 .6.22l2.39-.96c.5.39 1.04.71 1.63.94l.36 2.54a.5.5 0 0 0 .49.42h3.8a.5.5 0 0 0 .49-.42l.36-2.54c.59-.23 1.13-.55 1.63-.94l2.39.96a.5.5 0 0 0 .6-.22l1.92-3.32a.5.5 0 0 0-.12-.64zM12 15.2A3.2 3.2 0 1 1 12 8.8a3.2 3.2 0 0 1 0 6.4z" data-v-151c7c88></path></svg></span><span class="sidebar-nav-copy" data-v-151c7c88><span class="sidebar-nav-title" data-v-151c7c88>Settings</span></span>',2)])],2)]),Z.value?(b(),v("div",jd,[i("button",{class:"primary-button sidebar-action-button",type:"button",disabled:t.loadingNodes||t.loadingState,onClick:Zo}," Refresh ",8,Ud)])):M("",!0),Z.value?(b(),v("div",Bd,[i("span",{class:ce(["status-pill",{error:!!t.lastError}])},S(t.status),3),fs.value?(b(),v("span",Vd,"Provider: "+S(fs.value.llmProvider||"n/a")+" | Model: "+S(fs.value.llmModel||"n/a"),1)):M("",!0),i("a",{class:"sidebar-doc-link",href:ev,target:"_blank",rel:"noopener noreferrer"}," Documentation: KNX AI Vue ")])):M("",!0)]),i("section",Wd,[i("main",Hd,[t.activeTab==="overview"?(b(),v("section",Kd,[i("div",zd,[n[51]||(n[51]=i("h2",null,"Summary",-1)),ke.value.meta?.generatedAt?(b(),v("span",Jd,S(N(ke.value.meta.generatedAt)),1)):M("",!0)]),i("pre",qd,S(Uo.value),1),i("div",Xd,[i("article",Yd,[n[52]||(n[52]=i("span",null,"Telegrams",-1)),i("strong",null,S(Number(ke.value.counters?.telegrams||0)),1)]),i("article",Qd,[n[53]||(n[53]=i("span",null,"Rate",-1)),i("strong",null,S(Number(ke.value.counters?.overallRatePerSec||0))+"/s",1)]),i("article",Zd,[n[54]||(n[54]=i("span",null,"Repeat",-1)),i("strong",null,S(Number(ke.value.counters?.repeated||0)),1)]),i("article",ef,[n[55]||(n[55]=i("span",null,"Unknown DPT",-1)),i("strong",null,S(Number(ke.value.counters?.unknownDpt||0)),1)])])])):M("",!0),t.activeTab==="areas"?(b(),v("section",tf,[i("div",sf,[n[56]||(n[56]=i("h2",null,"Select an Area",-1)),i("div",nf,[i("span",af,S(Number(Ws.value.suggestedAreaCount||0))+" areas",1),i("button",{class:"secondary-button",type:"button",disabled:t.areaLlmRegenerating||!Xt.value.llmEnabled,onClick:_i},S(t.areaLlmRegenerating?"Regenerating...":"Regenerate AI Areas"),9,rf),i("button",{class:"secondary-button new-button",type:"button",onClick:Si}," New Area ")])]),i("div",lf,[i("div",of,[i("span",cf,"GA "+S(Number(Ws.value.gaCount||0)),1),i("span",uf,"Hierarchical "+S(Number(Ws.value.hierarchicalGaCount||0)),1),i("span",df,"Secondary "+S(Number(Ws.value.secondaryGroupCount||0)),1),i("span",ff,"Active "+S(Number(Ws.value.activeAreaCount||0)),1)])]),ea.value.length||t.areaDraftIsNew?(b(),v("div",pf,[!Me.value&&!t.areaDraftIsNew?(b(),v("div",gf,[i("label",hf,[n[57]||(n[57]=i("span",null,"Areas",-1)),i("div",mf,[fe(i("input",{"onUpdate:modelValue":n[6]||(n[6]=l=>t.areaSearch=l),class:"area-search-select-input",type:"text",placeholder:Me.value?Dr(Me.value):"Search area...",onFocus:n[7]||(n[7]=l=>t.areaSearchOpen=!0),onInput:n[8]||(n[8]=l=>t.areaSearchOpen=!0),onBlur:gi},null,40,bf),[[Ee,t.areaSearch]]),t.areaSearchOpen&&ea.value.length?(b(),v("div",vf,[(b(!0),v(X,null,ae(ea.value.slice(0,80),l=>(b(),v("button",{key:l.id,type:"button",class:ce(["area-search-select-option",{active:Me.value&&Me.value.id===l.id}]),onMousedown:Ft(d=>pi(l),["prevent"])},S(Dr(l)),43,yf))),128))])):M("",!0)])])])):M("",!0),Me.value||t.areaDraftIsNew?(b(),v("article",{key:1,class:ce(["area-detail",{"area-detail-wide":t.areaDraftIsNew}])},[i("div",Sf,[t.areaBuilderFocus!==!0?(b(),v("div",_f,[n[58]||(n[58]=i("div",null,[i("h4",null,"Edit Area"),i("p",{class:"area-detail-subhead"},"The installer can rename the area and decide exactly which group addresses belong to it. Everything is persisted per KNX AI node.")],-1)),i("div",wf,[t.areaDraftIsNew&&!dr.value?(b(),v("button",{key:0,class:"secondary-button",type:"button",onClick:ni}," Show AI Area Builder ")):M("",!0),t.areaDraftIsNew?M("",!0):(b(),v("button",{key:1,class:"danger-button",type:"button",disabled:t.areaSaving,onClick:di}," Delete Area ",8,Pf)),i("button",{class:"secondary-button",type:"button",disabled:t.areaSaving,onClick:ui}," Reset ",8,Af),i("button",{class:"primary-button",type:"button",disabled:t.areaSaving,onClick:ci},S(t.areaSaving?"Saving...":"Save Area"),9,Tf),i("button",{class:"secondary-button",type:"button",disabled:t.areaSaving,onClick:ri}," Close ",8,Df)])])):M("",!0),t.areaBuilderFocus!==!0?(b(),v("div",xf,[i("label",If,[n[59]||(n[59]=i("span",null,"Area name",-1)),fe(i("input",{"onUpdate:modelValue":n[9]||(n[9]=l=>t.areaDraftName=l),type:"text",placeholder:"Installer alias"},null,512),[[Ee,t.areaDraftName]])]),i("label",Cf,[n[60]||(n[60]=i("span",null,"Description",-1)),fe(i("textarea",{"onUpdate:modelValue":n[10]||(n[10]=l=>t.areaDraftDescription=l),rows:"3",placeholder:"Optional note for diagnostics and reports"},null,512),[[Ee,t.areaDraftDescription]])]),i("label",kf,[n[61]||(n[61]=i("span",null,"Add group addresses to this area",-1)),fe(i("input",{"onUpdate:modelValue":n[11]||(n[11]=l=>t.gaCatalogSearch=l),type:"text",placeholder:"Search GA, label or ETS path"},null,512),[[Ee,t.gaCatalogSearch]])])])):M("",!0),t.areaDraftIsNew&&dr.value?(b(),v("div",Rf,[i("div",{class:ce(["ai-planner-shell-head",{"template-builder-focus-head":t.areaBuilderFocus===!0}])},[n[62]||(n[62]=i("div",null,[i("h4",null,"AI Area Builder"),i("p",{class:"area-detail-subhead"},"Describe the room, zone or function you want. The AI will suggest the most relevant group addresses for this draft.")],-1)),t.areaBuilderFocus===!0?(b(),v("div",Nf,[i("button",{class:"secondary-button",type:"button",onClick:ai}," Close ")])):M("",!0)],2),i("div",Ef,[i("label",Mf,[n[63]||(n[63]=i("span",null,"Assistant prompt",-1)),fe(i("textarea",{"onUpdate:modelValue":n[12]||(n[12]=l=>t.areaLlmPrompt=l),rows:"3",placeholder:"Example: Add all technical room lighting command and status GA."},null,512),[[Ee,t.areaLlmPrompt]])])]),i("div",Of,[i("button",{class:"primary-button",type:"button",disabled:t.areaLlmBusy||!t.areaLlmPrompt.trim()||!Xt.value.llmEnabled,onClick:wi},S(t.areaLlmBusy?"Suggesting...":"Suggest GA with AI"),9,$f)]),t.areaLlmError?(b(),v("p",Lf,S(t.areaLlmError),1)):M("",!0),Xt.value.llmEnabled?M("",!0):(b(),v("p",Ff," Enable the AI in the KNX AI node to regenerate areas or suggest GA for a new draft. "))])):M("",!0),t.areaBuilderFocus!==!0?(b(),v("div",Gf,[i("div",null,[n[65]||(n[65]=i("h4",null,"Area GA membership",-1)),cr.value.length?(b(),v("ul",jf,[(b(!0),v(X,null,ae(cr.value,l=>(b(),v("li",{key:l.ga,class:"area-ga-item"},[i("div",Uf,[i("strong",null,S(l.ga),1),i("span",null,[pe(S(l.label||"Unlabeled GA"),1),l.dpt?(b(),v("span",Bf," | DPT "+S(l.dpt),1)):M("",!0)]),i("span",null,[pe("Role "+S(Tr(l.role)),1),l.roleSource?(b(),v("span",Vf," | source "+S(l.roleSource),1)):M("",!0)])]),i("div",Wf,[i("label",Hf,[n[64]||(n[64]=i("span",null,"Role",-1)),i("select",{value:l.roleOverride&&l.roleOverride!=="auto"?l.roleOverride:l.role||"neutral",disabled:t.areaGaRoleSavingGa===l.ga,onChange:d=>yi(l.ga,d.target.value)},[(b(),v(X,null,ae(o,d=>i("option",{key:d.value,value:d.value},S(d.label),9,zf)),64))],40,Kf)]),i("button",{class:"secondary-button",type:"button",onClick:d=>vi(l.ga)}," Remove ",8,Jf)])]))),128))])):(b(),v("p",qf,"No GA selected for this area yet."))]),i("div",null,[i("div",Xf,[n[66]||(n[66]=i("div",null,[i("h4",null,"Available GA"),i("p",{class:"area-detail-subhead"},"Pick from the ETS catalog. Already selected GA are hidden from this list.")],-1)),i("span",Yf,S(t.gaCatalogLoading?"Loading...":`${ir.value.length} visible`),1)]),i("div",Qf,[(b(!0),v(X,null,ae(ir.value,l=>(b(),v("button",{key:l.ga,type:"button",class:"area-list-item",onClick:d=>fi(l.ga)},[i("span",ep,S(l.ga),1),i("span",tp,S(l.label||"Unlabeled GA"),1),i("span",sp,[pe(S(l.hierarchyPath||l.dpt||""),1),l.role?(b(),v("span",np," | "+S(Tr(l.role)),1)):M("",!0)])],8,Zf))),128))])])])):M("",!0),t.areaBuilderFocus!==!0?(b(),v("p",ap,[n[67]||(n[67]=pe(" Original ETS path: ",-1)),i("strong",null,S(t.areaDraftIsNew?"Manual area":Me.value.basePath||Me.value.path||Me.value.name),1)])):M("",!0)])],2)):M("",!0)])):(b(),v("p",rp,"No areas matched the current search or the ETS file does not expose a usable hierarchy yet."))])):M("",!0),t.activeTab==="tests"?(b(),v("section",{key:2,class:ce(["card card-profiles",{"card-results-focus":bt.value}])},[i("div",lp,[i("div",null,[i("h2",null,S(bt.value?"Test Result":"Test Planner"),1),i("p",op,S(bt.value?"Showing only the selected test report.":"Select an area, choose a standard test template, review the generated plan, then save or run it."),1)]),bt.value?(b(),v("div",fp,[i("span",pp,S(Ks(te.value)),1),i("button",{class:"danger-button",type:"button",disabled:!te.value||t.deletingTestResultId===te.value.id,onClick:n[13]||(n[13]=l=>pa(te.value?.id))},S(t.deletingTestResultId===te.value?.id?"Deleting...":"Delete"),9,gp),i("button",{class:"secondary-button",type:"button",onClick:Pr}," Open Source Test ")])):(b(),v("div",ip,[i("span",cp,"Area "+S(ot.value?ot.value.path||ot.value.name:"n/a"),1),i("span",up,S(mt.value.length)+" saved plans",1),i("button",{class:"secondary-button",type:"button",disabled:!t.testPlanDraft,onClick:Ki}," Duplicate Plan ",8,dp),i("button",{class:"secondary-button new-button",type:"button",onClick:Or}," New Plan ")]))]),i("div",{class:ce(["profiles-layout test-planner-layout",{"result-only-layout":bt.value}])},[i("div",hp,[!bt.value&&!t.testPlanDraft&&!t.testPlanRunning?(b(),v("article",mp,[n[69]||(n[69]=i("div",{class:"card-head"},[i("div",null,[i("h3",null,"Select test plan"),i("p",{class:"area-detail-subhead"},"Reusable deterministic active tests saved by the installer.")])],-1)),i("div",bp,[i("label",vp,[n[68]||(n[68]=i("span",null,"Plans",-1)),i("div",yp,[fe(i("input",{"onUpdate:modelValue":n[14]||(n[14]=l=>t.testPlanSearch=l),class:"area-search-select-input",type:"text",placeholder:Qt.value?xr(Qt.value):"Search saved plan...",onFocus:n[15]||(n[15]=l=>t.testPlanSearchOpen=!0),onInput:n[16]||(n[16]=l=>t.testPlanSearchOpen=!0),onBlur:mi},null,40,Sp),[[Ee,t.testPlanSearch]]),t.testPlanSearchOpen&&lr.value.length?(b(),v("div",_p,[(b(!0),v(X,null,ae(lr.value.slice(0,80),l=>(b(),v("button",{key:l.id,type:"button",class:ce(["area-search-select-option",{active:Qt.value&&Qt.value.id===l.id}]),onMousedown:Ft(d=>hi(l),["prevent"])},S(xr(l)),43,wp))),128))])):M("",!0)])])]),mt.value.length?M("",!0):(b(),v("p",Pp,"No saved plans yet."))])):M("",!0),!bt.value&&t.testPlanDraft?(b(),v("article",Ap,[t.testTemplateBuilderFocus!==!0?(b(),v("div",Tp,[i("div",null,[i("h3",null,S(t.testPlanDraft?.name||"Plan Draft"),1),sa.value?(b(),v("p",Dp,"Choose a standard test template for the selected area, then build the plan deterministically from the ETS catalog.")):M("",!0)]),i("div",xp,[fr.value?(b(),v("span",Ip,"Unsaved changes")):M("",!0),i("button",{class:"secondary-button new-button",type:"button",onClick:Or}," New Plan "),sa.value?M("",!0):(b(),v("button",{key:1,class:"secondary-button",type:"button",onClick:ti}," Show Template Builder ")),i("label",Cp,[fe(i("input",{"onUpdate:modelValue":n[17]||(n[17]=l=>t.voiceEnabled=l),type:"checkbox"},null,512),[[ka,t.voiceEnabled]]),n[70]||(n[70]=i("span",null,"Voice",-1))]),i("button",{class:"danger-button",type:"button",disabled:t.testPlanDeleting||!Qt.value,onClick:Ji},S(t.testPlanDeleting?"Deleting...":"Delete"),9,kp),i("button",{class:"secondary-button",type:"button",disabled:t.testPlanSaving||t.testPlanRunning,onClick:oi}," Close ",8,Rp),i("button",{class:"secondary-button",type:"button",disabled:t.testPlanSaving||!t.testPlanDraft,onClick:$r},S(t.testPlanSaving?"Saving...":"Save Plan"),9,Np),Lo.value?(b(),v("div",Ep,[i("button",{class:"secondary-button",type:"button",disabled:!t.testPlanDraft&&t.testPlanRepeatForever!==!0||t.testPlanRunning&&t.testPlanRepeatForever!==!0||t.testPlanRepeatStopRequested===!0,onClick:n[18]||(n[18]=l=>t.testPlanRepeatForever===!0?Ui():ji())},S(t.testPlanRepeatForever===!0?t.testPlanRepeatStopRequested===!0?"Stopping...":"Stop Repeat":"Repeat Forever"),9,Mp),i("button",{class:"primary-button",type:"button",disabled:t.testPlanRunning||!t.testPlanDraft,onClick:Gi},S(t.testPlanRunning?"Running...":"Run Plan"),9,Op)])):M("",!0)])])):M("",!0),sa.value?(b(),v("div",$p,[i("div",{class:ce(["ai-planner-shell-head",{"template-builder-focus-head":t.testTemplateBuilderFocus===!0}])},[n[71]||(n[71]=i("div",null,[i("h4",null,"Template Builder"),i("p",{class:"area-detail-subhead"},"Select one of the standard templates. The plan is built only from the command GA available in the selected area.")],-1)),t.testTemplateBuilderFocus===!0?(b(),v("div",Lp,[i("button",{class:"secondary-button",type:"button",onClick:si}," Close ")])):M("",!0)],2),i("div",Fp,[i("label",Gp,[n[72]||(n[72]=i("span",null,"Area to test",-1)),fe(i("select",{"onUpdate:modelValue":n[19]||(n[19]=l=>t.testAreaSelectedId=l)},[(b(!0),v(X,null,ae(Pe.value,l=>(b(),v("option",{key:l.id,value:l.id},S(l.path||l.name),9,jp))),128))],512),[[Ss,t.testAreaSelectedId]])]),i("label",Up,[n[73]||(n[73]=i("span",null,"Selected template",-1)),i("textarea",{value:t.testPlanPrompt||"Select one of the templates below.",rows:"4",readonly:""},null,8,Bp)])]),i("div",Vp,[(b(),v(X,null,ae(r,l=>i("button",{key:l.id,class:ce(["preset-button",{active:t.testPlanPrompt===l.prompt}]),type:"button",onClick:d=>Pi(l)},S(l.title),11,Wp)),64))]),i("p",Hp,S((r.find(l=>l.prompt===t.testPlanPrompt)||{}).description||"Choose a template to see what the deterministic builder will do in the selected area."),1),i("div",Kp,[i("button",{class:"primary-button",type:"button",disabled:t.testPlanGenerating||!ot.value||!t.testPlanPrompt.trim(),onClick:zi},S(t.testPlanGenerating?"Building...":"Build Test Plan"),9,zp)]),t.testPlanGenerationError?(b(),v("p",Jp,S(t.testPlanGenerationError),1)):M("",!0),t.testPlanGeneration?(b(),v("div",qp,[t.testPlanGeneration.error?M("",!0):(b(),v("p",Xp," Built with "+S(t.testPlanGeneration.provider||"deterministic builder")+". ",1)),t.testPlanGeneration.error?(b(),v("p",Yp,S(t.testPlanGeneration.error),1)):M("",!0)])):M("",!0)])):M("",!0)])):M("",!0),t.testPlanRunning&&!bt.value?(b(),v("article",Qp,[i("div",Zp,[i("div",null,[n[74]||(n[74]=i("h3",{class:"running-headline"},[i("span",{class:"running-spinner","aria-hidden":"true"}),i("span",null,"Test Running")],-1)),i("p",eg,S(Ne.value?.title||"Executing current step..."),1)]),i("span",tg,S(ft.value?.metrics?.totalSteps?`${Number(ft.value.steps?.length||0)}/${Number(ft.value.metrics.totalSteps||0)}`:"in progress"),1)]),i("div",sg,[i("article",ng,[n[75]||(n[75]=i("span",null,"Completed",-1)),i("strong",null,S(Number(ft.value?.steps?.length||0)),1)]),i("article",ag,[n[76]||(n[76]=i("span",null,"Pass",-1)),i("strong",null,S(Number(ft.value?.metrics?.pass||0)),1)]),i("article",rg,[n[77]||(n[77]=i("span",null,"Warn",-1)),i("strong",null,S(Number(ft.value?.metrics?.warn||0)),1)]),i("article",lg,[n[78]||(n[78]=i("span",null,"Fail",-1)),i("strong",null,S(Number(ft.value?.metrics?.fail||0)),1)])]),Ne.value?(b(),v("div",og,[i("div",ig,[i("strong",null,S(Ne.value.title||Ne.value.id),1),i("span",null,S(Ne.value.kind),1)]),i("p",cg,S(Ne.value.description||"Current step in execution."),1),Ne.value.kind==="wait"?(b(),v("div",ug,[i("span",null,[n[79]||(n[79]=i("strong",null,"Wait",-1)),pe(" "+S(Number(Ne.value.delayMs||0))+" ms",1)]),i("span",null,[n[80]||(n[80]=i("strong",null,"Reason",-1)),pe(" "+S(Ne.value.reason||"Pause before next action"),1)])])):(b(),v("div",dg,[i("span",null,[n[81]||(n[81]=i("strong",null,"Command",-1)),pe(" "+S(Ne.value.commandGA||"n/a"),1)]),i("span",null,[n[82]||(n[82]=i("strong",null,"Status GA",-1)),pe(" "+S(Ne.value.statusGA||"n/a"),1)]),i("span",null,[n[83]||(n[83]=i("strong",null,"Payload",-1)),pe(" "+S(ca(Ne.value.commandPayload,Ne.value.commandDPT)),1)]),i("span",null,[n[84]||(n[84]=i("strong",null,"Expected",-1)),pe(" "+S(ca(Ne.value.expectedPayload,Ne.value.statusDPT||Ne.value.commandDPT)),1)])])),Ne.value.kind!=="wait"&&Ne.value.statusGA?(b(),v("div",fg,[i("section",pg,[n[87]||(n[87]=i("h4",null,"Spontaneous Write From Status GA",-1)),i("div",gg,[i("span",null,[n[85]||(n[85]=i("strong",null,"Status GA",-1)),pe(" "+S(Ne.value.statusGA||"n/a"),1)]),i("span",null,[n[86]||(n[86]=i("strong",null,"Timeout",-1)),pe(" "+S(Number(Ne.value.statusWriteTimeoutMs||0))+" ms",1)])])]),i("section",hg,[n[90]||(n[90]=i("h4",null,"Active Read Request To Status GA",-1)),i("div",mg,[i("span",null,[n[88]||(n[88]=i("strong",null,"Status GA",-1)),pe(" "+S(Ne.value.statusGA||"n/a"),1)]),i("span",null,[n[89]||(n[89]=i("strong",null,"Timeout",-1)),pe(" "+S(Number(Ne.value.statusResponseTimeoutMs||0))+" ms",1)])])])])):M("",!0)])):M("",!0)])):M("",!0),te.value&&bt.value?(b(),v("article",{key:3,ref_key:"testPlanReportRef",ref:y,class:"area-detail"},[i("div",bg,[i("div",null,[i("h3",null,S(yn(te.value)),1),i("p",vg,S(Sn(te.value)||N(te.value.generatedAt)),1)]),i("div",yg,[i("span",Sg,S(Ks(te.value)),1),te.value.live===!0?(b(),v("span",_g,"Running")):M("",!0),i("span",wg,S(te.value.overallStatus),1),i("button",{class:"secondary-button",type:"button",onClick:mr}," Export PDF ")])]),i("div",Pg,[(b(!0),v(X,null,ae(ia(te.value),l=>(b(),v("article",{key:l.label,class:"metric"},[i("span",null,S(l.label),1),i("strong",null,S(l.value),1)]))),128))]),i("div",Ag,[(b(!0),v(X,null,ae(zs(te.value),l=>(b(),v("article",{key:l.id,class:ce(["report-check",`report-${l.status}`])},[i("div",Tg,[i("strong",null,S(l.title),1),i("span",null,S(l.status),1)]),i("p",Dg,S(l.message||"No additional details available."),1),l.detailGroups?.length?(b(),v("div",xg,[(b(!0),v(X,null,ae(l.detailGroups,d=>(b(),v("section",{key:`${l.id}-${d.title}`,class:"planner-check-section"},[i("h4",null,S(d.title),1),i("div",Ig,[(b(!0),v(X,null,ae(d.items,h=>(b(),v("span",{key:`${l.id}-${d.title}-${h.label}`},[i("strong",null,S(h.label),1),pe(" "+S(h.value),1)]))),128))])]))),128))])):(b(),v("div",Cg,[(b(!0),v(X,null,ae(l.details,d=>(b(),v("span",{key:`${l.id}-${d.label}`},[i("strong",null,S(d.label),1),pe(" "+S(d.value),1)]))),128))]))],2))),128))]),zs(te.value).length?M("",!0):(b(),v("p",kg,"No detailed entries stored for this report yet.")),Js(te.value).length?(b(),v("div",Rg,[n[91]||(n[91]=i("h4",null,"Suggestions",-1)),i("ul",Ng,[(b(!0),v(X,null,ae(Js(te.value),l=>(b(),v("li",{key:l},S(l),1))),128))])])):M("",!0)],512)):M("",!0),t.testPlanDraft&&!t.testPlanRunning&&!bt.value&&t.testTemplateBuilderFocus!==!0?(b(),v("article",Eg,[i("div",Mg,[n[92]||(n[92]=i("div",null,[i("h3",null,"Edit Plan")],-1)),i("div",Og,[i("span",$g,S(Number(t.testPlanDraft.steps?.length||0))+" steps",1),i("button",{class:"secondary-button",type:"button",onClick:ki}," Add Step "),i("button",{class:"secondary-button",type:"button",onClick:Ri}," Add Wait ")])]),i("div",Lg,[i("label",Fg,[n[94]||(n[94]=i("span",null,"Area",-1)),i("select",{value:t.testPlanDraft.areaId||t.testAreaSelectedId||"",disabled:!Pe.value.length,onChange:n[20]||(n[20]=l=>Hi(l.target.value))},[n[93]||(n[93]=i("option",{value:"",disabled:""},"Select area",-1)),(b(!0),v(X,null,ae(Pe.value,l=>(b(),v("option",{key:l.id,value:l.id},S(l.path||l.name),9,jg))),128))],40,Gg)]),i("label",Ug,[n[95]||(n[95]=i("span",null,"Plan name",-1)),fe(i("input",{"onUpdate:modelValue":n[21]||(n[21]=l=>t.testPlanDraft.name=l),type:"text",placeholder:"KNX active test name"},null,512),[[Ee,t.testPlanDraft.name]])]),i("label",Bg,[n[96]||(n[96]=i("span",null,"Description",-1)),fe(i("textarea",{"onUpdate:modelValue":n[22]||(n[22]=l=>t.testPlanDraft.description=l),rows:"2",placeholder:"Short operator-facing description"},null,512),[[Ee,t.testPlanDraft.description]])])]),i("div",Vg,[(b(!0),v(X,null,ae(t.testPlanDraft.steps||[],(l,d)=>(b(),v("article",{key:l.id,class:ce(["report-check report-pass planner-step-card",{"planner-step-running":t.testPlanRunning&&t.testPlanRunningStepId===l.id,"planner-step-dragging":t.draggedTestPlanStepId===l.id,"planner-step-drop-target":t.dragOverTestPlanStepId===l.id}]),onDragenter:Ft(h=>$i(l.id),["prevent"]),onDragover:n[23]||(n[23]=Ft(()=>{},["prevent"])),onDrop:h=>Fi(l.id,h)},[i("div",Hg,[i("div",Kg,[i("button",{class:"drag-handle",type:"button",draggable:"true",tabindex:"-1","aria-label":"Drag step",title:"Drag step",onDragstart:h=>Oi(l.id,h),onDragend:ba}," ⋮⋮ ",40,zg),i("button",{class:"collapse-toggle",type:"button","aria-expanded":l.collapsed!==!0,title:l.collapsed===!0?"Expand step":"Collapse step",onClick:h=>Mi(l)},[i("span",{class:ce(["collapse-icon",{collapsed:l.collapsed===!0}])},"▾",2)],8,Jg),i("strong",null,S(l.title||l.id),1)]),i("div",qg,[i("span",null,S(l.kind),1),i("button",{class:"secondary-button",type:"button",onClick:h=>Ni(d)}," Duplicate ",8,Xg),i("button",{class:"secondary-button",type:"button",onClick:h=>Ei(d)}," Remove ",8,Yg)])]),l.collapsed===!0?(b(),v("div",Qg,[l.kind==="wait"?(b(),v("span",Zg,[n[97]||(n[97]=i("strong",null,"Wait",-1)),pe(" "+S(Number(l.delayMs||0))+" ms",1)])):(b(),v("span",eh,[n[98]||(n[98]=i("strong",null,"Command",-1)),pe(" "+S(l.commandGA||"n/a"),1)])),l.kind!=="wait"?(b(),v("span",th,[n[99]||(n[99]=i("strong",null,"Status GA",-1)),pe(" "+S(l.statusGA||"n/a"),1)])):M("",!0),l.kind!=="wait"?(b(),v("span",sh,[n[100]||(n[100]=i("strong",null,"Payload",-1)),pe(" "+S(ca(l.commandPayload,l.commandDPT)),1)])):M("",!0),l.kind!=="wait"&&l.statusGA?(b(),v("span",nh,[n[101]||(n[101]=i("strong",null,"Write timeout",-1)),pe(" "+S(Number(l.statusWriteTimeoutMs||0))+" ms",1)])):M("",!0),l.kind!=="wait"&&l.statusGA?(b(),v("span",ah,[n[102]||(n[102]=i("strong",null,"Response timeout",-1)),pe(" "+S(Number(l.statusResponseTimeoutMs||0))+" ms",1)])):M("",!0)])):(b(),v("div",rh,[i("label",lh,[n[103]||(n[103]=i("span",null,"Title",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.title=h,type:"text",placeholder:"Step title"},null,8,oh),[[Ee,l.title]])]),i("label",ih,[n[104]||(n[104]=i("span",null,"Description",-1)),fe(i("textarea",{"onUpdate:modelValue":h=>l.description=h,rows:"2",placeholder:"What this step checks"},null,8,ch),[[Ee,l.description]])]),l.kind==="wait"?(b(),v("label",uh,[n[105]||(n[105]=i("span",null,"Wait ms",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.delayMs=h,type:"number",min:"0",max:"30000",step:"100"},null,8,dh),[[Ee,l.delayMs,void 0,{number:!0}]])])):M("",!0),l.kind!=="wait"?(b(),v("section",fh,[n[110]||(n[110]=i("h4",null,"Command",-1)),i("div",ph,[i("label",gh,[n[107]||(n[107]=i("span",null,"Command GA",-1)),fe(i("select",{"onUpdate:modelValue":h=>l.commandGA=h,onChange:h=>kr(l)},[n[106]||(n[106]=i("option",{value:""},"Select command GA",-1)),(b(!0),v(X,null,ae(ta.value,h=>(b(),v("option",{key:h.ga,value:h.ga},S(`${h.ga} | ${h.label}`),9,mh))),128))],40,hh),[[Ss,l.commandGA]])]),i("label",bh,[n[108]||(n[108]=i("span",null,"Command DPT",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.commandDPT=h,type:"text",placeholder:"1.001",onChange:h=>Pn(l)},null,40,vh),[[Ee,l.commandDPT]])]),i("label",yh,[n[109]||(n[109]=i("span",null,"Command payload",-1)),ts(l.commandDPT).length?fe((b(),v("select",{key:0,"onUpdate:modelValue":h=>l.commandPayload=h},[(b(!0),v(X,null,ae(ts(l.commandDPT),h=>(b(),v("option",{key:`${l.id}-command-${h.value}`,value:String(h.value)},S(h.label),9,_h))),128))],8,Sh)),[[Ss,l.commandPayload]]):fe((b(),v("input",{key:1,"onUpdate:modelValue":h=>l.commandPayload=h,type:"text",placeholder:"true, false, 50"},null,8,wh)),[[Ee,l.commandPayload]])])])])):M("",!0),l.kind!=="wait"?(b(),v("section",Ph,[n[115]||(n[115]=i("h4",null,"Status",-1)),i("div",Ah,[i("label",Th,[n[112]||(n[112]=i("span",null,"Status GA",-1)),fe(i("select",{"onUpdate:modelValue":h=>l.statusGA=h,onChange:h=>kr(l)},[n[111]||(n[111]=i("option",{value:""},"No feedback",-1)),(b(!0),v(X,null,ae(ur.value,h=>(b(),v("option",{key:h.ga,value:h.ga},S(`${h.ga} | ${h.label}`),9,xh))),128))],40,Dh),[[Ss,l.statusGA]])]),i("label",Ih,[n[113]||(n[113]=i("span",null,"Status DPT",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.statusDPT=h,type:"text",placeholder:"1.001",onChange:h=>Pn(l)},null,40,Ch),[[Ee,l.statusDPT]])]),i("label",kh,[n[114]||(n[114]=i("span",null,"Expected payload",-1)),ts(l.statusDPT||l.commandDPT).length?fe((b(),v("select",{key:0,"onUpdate:modelValue":h=>l.expectedPayload=h},[(b(!0),v(X,null,ae(ts(l.statusDPT||l.commandDPT),h=>(b(),v("option",{key:`${l.id}-expected-${h.value}`,value:String(h.value)},S(h.label),9,Nh))),128))],8,Rh)),[[Ss,l.expectedPayload]]):fe((b(),v("input",{key:1,"onUpdate:modelValue":h=>l.expectedPayload=h,type:"text",placeholder:"Expected feedback value"},null,8,Eh)),[[Ee,l.expectedPayload]])])])])):M("",!0),l.kind!=="wait"&&l.statusGA?(b(),v("div",Mh,[i("section",Oh,[n[117]||(n[117]=i("h4",null,"Spontaneous Write From Status GA",-1)),n[118]||(n[118]=i("p",{class:"area-detail-subhead"},[pe("Wait for a spontaneous "),i("code",null,"GroupValue_Write"),pe(" telegram from the status GA.")],-1)),i("label",$h,[n[116]||(n[116]=i("span",null,"Status write timeout ms",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.statusWriteTimeoutMs=h,type:"number",min:"500",max:"60000",step:"100"},null,8,Lh),[[Ee,l.statusWriteTimeoutMs,void 0,{number:!0}]])])]),i("section",Fh,[n[120]||(n[120]=i("h4",null,"Active Read Request To Status GA",-1)),n[121]||(n[121]=i("p",{class:"area-detail-subhead"},[pe("Send a "),i("code",null,"read"),pe(" telegram to the status GA and wait for a "),i("code",null,"GroupValue_Response"),pe(".")],-1)),i("label",Gh,[n[119]||(n[119]=i("span",null,"Read response timeout ms",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.statusResponseTimeoutMs=h,type:"number",min:"500",max:"60000",step:"100"},null,8,jh),[[Ee,l.statusResponseTimeoutMs,void 0,{number:!0}]])])])])):M("",!0),i("label",Uh,[n[122]||(n[122]=i("span",null,"Reason",-1)),fe(i("input",{"onUpdate:modelValue":h=>l.reason=h,type:"text",placeholder:"Why this step exists"},null,8,Bh),[[Ee,l.reason]])])]))],42,Wg))),128))])])):M("",!0)])],2)],2)):M("",!0),t.activeTab==="results"?(b(),v("section",Vh,[i("div",Wh,[n[123]||(n[123]=i("div",null,[i("h2",null,"Test Results"),i("p",{class:"area-detail-subhead"},"Live and saved reports generated by KNX active and read-only tests.")],-1)),i("div",Hh,[i("span",Kh,S(Yt.value.length)+" available",1)])]),i("div",zh,[i("article",Jh,[n[124]||(n[124]=i("div",{class:"card-head"},[i("div",null,[i("h3",null,"Select Test Result"),i("p",{class:"area-detail-subhead"},"Choose a report to inspect metrics, detailed checks, and suggestions.")])],-1)),i("div",qh,[(b(!0),v(X,null,ae(Yt.value,l=>(b(),v("div",{key:l.id,class:"sidebar-result-row"},[i("button",{type:"button",class:ce(["area-list-item sidebar-result-item",{active:te.value&&te.value.id===l.id,running:l.live===!0}]),onClick:d=>_n(l.id,{openMenu:!1,activateResultsTab:!0,resultOnly:!0})},[i("span",Yh,[i("strong",Qh,[l.live===!0?(b(),v("span",Zh)):M("",!0),i("span",null,S(yn(l)),1)]),i("span",{class:ce(["sidebar-result-status",`status-${l.overallStatus||"pass"}`])},S(l.overallStatus||"n/a"),3)]),i("span",em,[pe(S(Ks(l)),1),l.live===!0?(b(),v("span",tm," | running")):M("",!0)]),i("span",sm,S(Sn(l)||N(l.generatedAt)),1),i("span",nm,S(N(l.generatedAt)),1)],10,Xh),i("button",{class:"sidebar-result-delete-button",type:"button",disabled:t.deletingTestResultId===l.id,onClick:Ft(d=>pa(l.id),["stop"])},S(t.deletingTestResultId===l.id?"Deleting...":"Delete"),9,am)]))),128)),Yt.value.length?M("",!0):(b(),v("p",rm,"No saved test results yet."))])]),te.value?(b(),v("article",{key:0,ref_key:"testPlanReportRef",ref:y,class:"area-detail"},[i("div",lm,[i("div",null,[i("h3",null,S(yn(te.value)),1),i("p",om,S(Sn(te.value)||N(te.value.generatedAt)),1)]),i("div",im,[i("span",cm,S(Ks(te.value)),1),te.value.live===!0?(b(),v("span",um,"Running")):M("",!0),i("span",dm,S(te.value.overallStatus),1),i("button",{class:"secondary-button",type:"button",onClick:mr}," Export PDF "),i("button",{class:"danger-button",type:"button",disabled:!te.value||t.deletingTestResultId===te.value.id,onClick:n[24]||(n[24]=l=>pa(te.value?.id))},S(t.deletingTestResultId===te.value?.id?"Deleting...":"Delete"),9,fm),i("button",{class:"secondary-button",type:"button",onClick:Pr}," Open Source Test ")])]),i("div",pm,[(b(!0),v(X,null,ae(ia(te.value),l=>(b(),v("article",{key:l.label,class:"metric"},[i("span",null,S(l.label),1),i("strong",null,S(l.value),1)]))),128))]),i("div",gm,[(b(!0),v(X,null,ae(zs(te.value),l=>(b(),v("article",{key:l.id,class:ce(["report-check",`report-${l.status}`])},[i("div",hm,[i("strong",null,S(l.title),1),i("span",null,S(l.status),1)]),i("p",mm,S(l.message||"No additional details available."),1),l.detailGroups?.length?(b(),v("div",bm,[(b(!0),v(X,null,ae(l.detailGroups,d=>(b(),v("section",{key:`${l.id}-${d.title}`,class:"planner-check-section"},[i("h4",null,S(d.title),1),i("div",vm,[(b(!0),v(X,null,ae(d.items,h=>(b(),v("span",{key:`${l.id}-${d.title}-${h.label}`},[i("strong",null,S(h.label),1),pe(" "+S(h.value),1)]))),128))])]))),128))])):(b(),v("div",ym,[(b(!0),v(X,null,ae(l.details,d=>(b(),v("span",{key:`${l.id}-${d.label}`},[i("strong",null,S(d.label),1),pe(" "+S(d.value),1)]))),128))]))],2))),128))]),zs(te.value).length?M("",!0):(b(),v("p",Sm,"No detailed entries stored for this report yet.")),Js(te.value).length?(b(),v("div",_m,[n[125]||(n[125]=i("h4",null,"Suggestions",-1)),i("ul",wm,[(b(!0),v(X,null,ae(Js(te.value),l=>(b(),v("li",{key:l},S(l),1))),128))])])):M("",!0)],512)):(b(),v("article",Pm,[...n[126]||(n[126]=[i("p",{class:"empty-state"},"No test result selected.",-1)])]))])])):M("",!0),t.activeTab==="overview"?(b(),v("section",Am,[i("div",Tm,[n[127]||(n[127]=i("h2",null,"Top Group Addresses",-1)),i("span",Dm,S(aa.value.length)+" visible",1)]),aa.value.length?(b(),v("ul",xm,[(b(!0),v(X,null,ae(aa.value,l=>(b(),v("li",{key:l.ga,class:"rank-row"},[i("span",Im,S(l.ga),1),i("span",Cm,S(l.label||"Unlabeled"),1),i("strong",null,S(Number(l.count||0)),1)]))),128))])):(b(),v("p",km,"No top group address data available yet."))])):M("",!0),t.activeTab==="overview"?(b(),v("section",Rm,[i("div",Nm,[n[128]||(n[128]=i("h2",null,"Event Mix",-1)),i("span",Em,S(vn.value.length)+" event types",1)]),vn.value.length?(b(),v("ul",Mm,[(b(!0),v(X,null,ae(vn.value,l=>(b(),v("li",{key:l.name,class:"event-row"},[i("span",Om,S(l.name),1),i("div",$m,[i("span",{class:"event-bar-fill",style:on({width:`${Math.max(l.count/Go.value*100,6)}%`})},null,4)]),i("strong",null,S(l.count),1)]))),128))])):(b(),v("p",Lm,"Event distribution will appear after the first samples."))])):M("",!0),t.activeTab==="overview"?(b(),v("section",Fm,[i("div",Gm,[n[129]||(n[129]=i("h2",null,"Bus Connection Persistence",-1)),et.value?(b(),v("span",jm,S(String(et.value.currentState||"unknown")),1)):M("",!0)]),et.value?(b(),v(X,{key:0},[i("div",Um,[i("span",Bm,"Connected "+S(D(et.value.connectedSec||0)),1),i("span",Vm,"Disconnected "+S(D(et.value.disconnectedSec||0)),1),i("span",Wm,"Coverage "+S(Number(et.value.knownCoveragePct||0))+"%",1)]),i("div",Hm,[(b(!0),v(X,null,ae(Bo.value,l=>(b(),v("span",{key:l.key,class:ce(["bus-segment",l.className]),style:on({left:l.left,width:l.width}),title:l.title},null,14,Km))),128))]),i("div",zm,[i("span",null,S(x(et.value.windowStartAt)),1),i("span",null,S(x(et.value.windowEndAt)),1),n[130]||(n[130]=i("span",null,"Now",-1))]),n[131]||(n[131]=i("p",{class:"bus-note"},"Green shows time connected to the KNX bus. Red shows downtime inside the selected history window.",-1))],64)):(b(),v("p",Jm,"Waiting for connection persistence data..."))])):M("",!0),t.activeTab==="overview"?(b(),v("section",{key:7,ref_key:"flowCardRef",ref:f,class:ce(["card card-flow",{"is-fullscreen":g.value}])},[i("div",qm,[n[132]||(n[132]=i("h2",null,"Flow Map",-1)),i("div",Xm,[i("span",Ym," Nodes "+S(Zt.value.nodes.length)+" | Links "+S(Zt.value.edges.length),1),i("button",{class:"secondary-button",type:"button",onClick:De},S(g.value?"Exit Fullscreen":"Fullscreen"),1)])]),i("div",Qm,[i("label",Zm,[n[133]||(n[133]=i("span",null,"Max nodes",-1)),fe(i("input",{"onUpdate:modelValue":n[25]||(n[25]=l=>t.flowMaxNodes=l),type:"number",min:"4",max:"32",step:"1"},null,512),[[Ee,t.flowMaxNodes,void 0,{number:!0}]])]),i("label",eb,[n[134]||(n[134]=i("span",null,"Find GA",-1)),fe(i("input",{"onUpdate:modelValue":n[26]||(n[26]=l=>t.flowSearch=l),type:"text",placeholder:"Search GA or label"},null,512),[[Ee,t.flowSearch]])]),i("div",tb,[n[136]||(n[136]=i("span",null,"Select Nodes to Filter by",-1)),fe(i("select",{"onUpdate:modelValue":n[27]||(n[27]=l=>t.flowSelectedGa=l),multiple:"",size:"5"},[(b(!0),v(X,null,ae(jo.value,l=>(b(),v("option",{key:l.id,value:l.id},S(`${l.id}${l.subtitle?` | ${l.subtitle}`:""}`),9,sb))),128))],512),[[Ss,t.flowSelectedGa]]),i("label",nb,[fe(i("input",{"onUpdate:modelValue":n[28]||(n[28]=l=>t.flowShowUniversalNodes=l),type:"checkbox"},null,512),[[ka,t.flowShowUniversalNodes]]),n[135]||(n[135]=i("span",null,"Show Universal Mode nodes",-1))])]),n[137]||(n[137]=ys('<div class="flow-legend" data-v-151c7c88><span data-v-151c7c88><i class="legend-line legend-write" data-v-151c7c88></i>Write</span><span data-v-151c7c88><i class="legend-line legend-response" data-v-151c7c88></i>Response</span><span data-v-151c7c88><i class="legend-line legend-read" data-v-151c7c88></i>Read</span><span data-v-151c7c88><i class="legend-line legend-repeat" data-v-151c7c88></i>Repeat</span><span data-v-151c7c88><i class="legend-dot legend-anomaly" data-v-151c7c88></i>Anomaly</span><span data-v-151c7c88><i class="legend-dot legend-external" data-v-151c7c88></i>External</span></div>',1))]),i("div",ab,[Zt.value.nodes.length?(b(),v("svg",{key:0,class:"flow-svg",viewBox:`0 0 ${Zt.value.width} ${Zt.value.height}`,preserveAspectRatio:"xMidYMid meet"},[i("defs",null,[(b(),v(X,null,ae(c,(l,d)=>i("marker",{id:`flow-arrow-${d}`,key:d,viewBox:"0 0 10 8",markerWidth:"10",markerHeight:"8",refX:"8.8",refY:"4",orient:"auto",markerUnits:"userSpaceOnUse"},[i("path",{d:"M0,0 L10,4 L0,8 z",fill:l},null,8,ob)],8,lb)),64))]),(b(!0),v(X,null,ae(Zt.value.edges,l=>(b(),v("path",{key:l.key,class:ce(["flow-edge",{"flow-edge-active":l.active,"flow-edge-idle":!l.active}]),d:l.d,stroke:l.color,"stroke-width":l.width,opacity:l.opacity,"marker-end":`url(#${l.markerId})`},[i("title",null,S(l.tooltip),1)],10,ib))),128)),(b(!0),v(X,null,ae(Zt.value.nodes,l=>(b(),v("g",{key:l.id,class:ce(["flow-node",{"is-anomaly":l.anomalyCount>0,"is-external":!l.inFlow,"is-idle":l.isIdle}])},[i("circle",{cx:l.x,cy:l.y,r:"24"},null,8,cb),i("text",{class:"node-label",x:l.x,y:l.y+1},S(l.shortLabel),9,ub),l.shortSubtitle?(b(),v("text",{key:0,class:"node-subtitle",x:l.x,y:l.y+38},S(l.shortSubtitle),9,db)):M("",!0),l.shortPayload?(b(),v("text",{key:1,class:"node-payload",x:l.x,y:l.y+52},S(l.shortPayload),9,fb)):M("",!0),l.anomalyCount>0?(b(),v("text",{key:2,class:"node-badge",x:l.x,y:l.y-30},"anomaly x"+S(l.anomalyCount),9,pb)):M("",!0),i("title",null,S(`${l.id}${l.subtitle?` | ${l.subtitle}`:""}${l.payload?` | payload: ${l.payload}`:""}`),1)],2))),128))],8,rb)):(b(),v("p",gb,"No topology data available yet."))]),i("p",hb,"Window "+S(Zt.value.telemetryWindowSec||0)+"s.",1)],2)):M("",!0),t.activeTab==="overview"?(b(),v("section",mb,[i("div",bb,[n[138]||(n[138]=i("h2",null,"Anomalies",-1)),i("span",vb,S(na.value.length)+" recent",1)]),na.value.length?(b(),v("div",yb,[(b(!0),v(X,null,ae(na.value.slice(0,20),l=>(b(),v("article",{key:`${l.at}-${E(l).ga||""}`,class:"anomaly-card"},[i("div",Sb,[i("strong",null,S(E(l).type||"anomaly"),1),i("span",null,S(E(l).ga||"no GA"),1)]),i("p",_b,S(l.at||""),1),i("pre",null,S(JSON.stringify(E(l),null,2)),1)]))),128))])):(b(),v("p",wb,"No anomalies detected right now."))])):M("",!0),t.activeTab==="assistant"?(b(),v("section",Pb,[i("div",Ab,[n[139]||(n[139]=i("h2",null,"Ask",-1)),i("span",Tb,S(Xt.value.llmEnabled?"AI enabled":"AI disabled"),1)]),i("div",Db,[(b(),v(X,null,ae(s,l=>i("button",{key:l,class:"preset-button",type:"button",disabled:t.asking||!Xt.value.llmEnabled,onClick:d=>ga(l)},S(l),9,xb)),64))]),i("div",Ib,[fe(i("input",{"onUpdate:modelValue":n[29]||(n[29]=l=>t.chatDraft=l),class:"ask-input",type:"text",disabled:t.asking||!Xt.value.llmEnabled,placeholder:"Ask a question about KNX traffic...",onKeydown:n[30]||(n[30]=wd(Ft(l=>ga(),["prevent"]),["enter"]))},null,40,Cb),[[Ee,t.chatDraft]]),i("button",{class:"primary-button",type:"button",disabled:t.asking||!Xt.value.llmEnabled,onClick:n[31]||(n[31]=l=>ga())}," Send ",8,kb)]),i("div",Rb,[(b(!0),v(X,null,ae(pr.value,l=>(b(),v("article",{key:l.key,class:ce(["chat-message",`chat-${l.kind}`])},[l.kind==="assistant"?(b(),v("div",{key:0,innerHTML:l.html},null,8,Nb)):(b(),v("pre",Eb,S(l.rawText),1))],2))),128)),t.asking?(b(),v("article",Mb,"Thinking...")):M("",!0),!pr.value.length&&!t.asking?(b(),v("p",Ob,"Ask a question about KNX traffic. SVG responses are supported here as well.")):M("",!0)])])):M("",!0),t.activeTab==="settings"?(b(),v("section",$b,[n[146]||(n[146]=i("div",{class:"card-head"},[i("div",null,[i("h2",null,"Settings"),i("p",{class:"area-detail-subhead"},"Manage node options and full configuration import/export.")])],-1)),i("div",Lb,[i("button",{class:ce(["settings-tab-button",{active:t.settingsTab==="node"}]),type:"button",onClick:n[32]||(n[32]=l=>wr("node"))}," KNX AI Node ",2),i("button",{class:ce(["settings-tab-button",{active:t.settingsTab==="config"}]),type:"button",onClick:n[33]||(n[33]=l=>wr("config"))}," Import / Export ",2)]),t.settingsTab==="node"?(b(),v("article",Fb,[n[142]||(n[142]=i("div",{class:"card-head settings-panel-head"},[i("h3",null,"KNX AI Node"),i("span",{class:"meta-chip"},"Runtime preferences")],-1)),n[143]||(n[143]=i("p",{class:"area-detail-subhead"},"Select the node used by this UI and control refresh behavior.",-1)),i("div",Gb,[i("label",jb,[n[140]||(n[140]=i("span",null,"Node",-1)),fe(i("select",{"onUpdate:modelValue":n[34]||(n[34]=l=>t.selectedNodeId=l),class:"node-select",onChange:ei},[(b(!0),v(X,null,ae(t.nodes,l=>(b(),v("option",{key:l.id,value:l.id},S(`${l.name||"KNX AI"}${l.gatewayName?` | ${l.gatewayName}`:""}`),9,Ub))),128))],544),[[Ss,t.selectedNodeId]])]),i("label",Bb,[fe(i("input",{"onUpdate:modelValue":n[35]||(n[35]=l=>t.autoRefresh=l),type:"checkbox"},null,512),[[ka,t.autoRefresh]]),n[141]||(n[141]=i("span",null,"Auto refresh",-1))])])])):(b(),v("article",Vb,[n[144]||(n[144]=i("div",{class:"card-head settings-panel-head"},[i("h3",null,"Import / Export"),i("span",{class:"meta-chip"},"Full configuration")],-1)),n[145]||(n[145]=i("p",{class:"area-detail-subhead"},"Export or import the full KNX AI configuration for the selected node.",-1)),i("div",Wb,[i("button",{class:"secondary-button",type:"button",disabled:!t.selectedNodeId,onClick:Xi}," Export Configuration ",8,Hb),i("button",{class:"secondary-button",type:"button",disabled:!t.selectedNodeId,onClick:Yi}," Import Configuration ",8,Kb)])])),i("input",{ref_key:"configImportRef",ref:w,type:"file",accept:"application/json,.json",class:"hidden-file-input",onChange:Qi},null,544)])):M("",!0)])]),t.testPlanRunConfirmOpen?(b(),v("div",{key:0,class:"modal-backdrop",onClick:Rr},[i("div",{class:"modal-card",role:"dialog","aria-modal":"true","aria-labelledby":"run-test-title",onClick:n[37]||(n[37]=Ft(()=>{},["stop"]))},[n[147]||(n[147]=i("h3",{id:"run-test-title"},"Start test?",-1)),i("p",zb,S(t.testPlanRunMode==="repeat"?"This will send real telegrams on the KNX bus and repeat the selected test plan until you press Stop Repeat.":"This will send real telegrams on the KNX bus for the selected test plan."),1),i("div",Jb,[i("button",{class:"secondary-button",type:"button",autofocus:"",onClick:Rr}," Cancel "),i("button",{class:"primary-button",type:"button",disabled:t.testPlanRunning,onClick:n[36]||(n[36]=l=>qi(t.testPlanRunMode))}," Start Test ",8,qb)])])])):M("",!0),t.testPlanUnsavedConfirmOpen?(b(),v("div",{key:1,class:"modal-backdrop",onClick:Er},[i("div",{class:"modal-card",role:"dialog","aria-modal":"true","aria-labelledby":"unsaved-plan-title",onClick:n[39]||(n[39]=Ft(()=>{},["stop"]))},[n[148]||(n[148]=i("h3",{id:"unsaved-plan-title"},"Unsaved changes",-1)),i("p",Xb,"Save or discard the current plan changes before opening "+S(t.testPlanPendingActionLabel||"another plan")+".",1),i("div",Yb,[i("button",{class:"secondary-button",type:"button",autofocus:"",onClick:Er}," Stay Here "),i("button",{class:"secondary-button",type:"button",onClick:n[38]||(n[38]=l=>{Vi(),Mr()})}," Discard Changes "),i("button",{class:"primary-button",type:"button",disabled:t.testPlanSaving||!t.testPlanDraft,onClick:Wi},S(t.testPlanSaving?"Saving...":"Save and Continue"),9,Qb)])])])):M("",!0),t.areaUnsavedConfirmOpen?(b(),v("div",{key:2,class:"modal-backdrop",onClick:_r},[i("div",{class:"modal-card",role:"dialog","aria-modal":"true","aria-labelledby":"unsaved-area-title",onClick:n[40]||(n[40]=Ft(()=>{},["stop"]))},[n[149]||(n[149]=i("h3",{id:"unsaved-area-title"},"Unsaved changes",-1)),n[150]||(n[150]=i("p",{class:"area-detail-subhead"},"Discard the current area changes and close the editor?",-1)),i("div",{class:"modal-actions"},[i("button",{class:"secondary-button",type:"button",autofocus:"",onClick:_r}," Stay Here "),i("button",{class:"primary-button",type:"button",onClick:li}," Discard and Close ")])])])):M("",!0)],2)],64))}},sv=Rd(tv,[["__scopeId","data-v-151c7c88"]]);Td(sv).mount("#app");export{kd as _};