import{$ as e,C as t,Dt as n,E as r,Et as i,G as a,H as o,J as s,K as c,L as l,Mt as u,Ot as d,Q as f,V as p,W as m,Z as h,at as g,ct as _,dt as v,ft as y,ht as b,j as x,kt as S,lt as C,ot as w,pt as ee,q as T,rt as E,st as D,ut as O,x as k,yt as A}from"./CxatB1L6.js";import{t as j}from"./_v7-ePgP.js";import{t as M}from"./BxUO6acX.js";import{t as N}from"./Dnb7sY_Q.js";import{B as te,C as P,E as ne,F,O as re,R as I,a as ie,d as ae,g as oe,h as se,k as L,m as ce,n as le,o as ue,t as de,v as fe,x as pe,z as R}from"./BlFRk3uc.js";import{t as me}from"./CDMImveV.js";import{n as he,t as z}from"./4_-5c3is.js";import{t as ge}from"./B3gVVFQn.js";import{a as _e,d as ve,i as ye,l as be}from"./D8VGDxpn.js";var xe={class:`stat place-items-center px-2 py-3`},Se={class:`stat-title text-xs text-primary-content sm:text-sm`},Ce={class:`stat-value text-center text-lg whitespace-nowrap text-primary-content sm:text-xl lg:text-2xl`},we=e({__name:`TrafficWidget`,props:{label:{}},setup(e){return(t,n)=>(D(),s(`div`,xe,[a(`div`,Se,S(e.label),1),a(`div`,Ce,[C(t.$slots,`default`)])]))}}),Te=Object.assign(we,{__name:`TrafficWidget`}),Ee=u(ge(),1),De={class:`relative h-full w-full`},Oe={key:0,class:`absolute inset-0 flex items-center justify-center`},ke=e({__name:`RealtimeLineChart`,props:{title:{},seriesConfig:{},isLoading:{type:Boolean,default:!1},initialData:{default:()=>[]},valueMode:{default:`bytes`}},emits:[`chartReady`],setup(e,{expose:t,emit:r}){let i=e,o=r,c=(e,t=!1)=>i.valueMode===`number`?String(e):t?`${z(e).toString()}/s`:z(e).toString(),l=A(),u,d=M();function f(){let e=be();return{chart:{type:`areaspline`,animation:{duration:800,easing:`linear`},backgroundColor:e.backgroundColor},credits:{enabled:!1},accessibility:{enabled:!1},title:{text:i.title,style:{color:e.textColor}},legend:{enabled:!0,itemStyle:{color:e.textColor},itemHoverStyle:{color:e.textColorHover}},xAxis:{type:`datetime`,tickPixelInterval:100,labels:{style:{color:e.textColor},formatter(){let e=new Date(this.value);return`${e.getMinutes().toString().padStart(2,`0`)}:${e.getSeconds().toString().padStart(2,`0`)}`}},lineColor:e.lineColor,tickColor:e.tickColor},yAxis:{title:{text:void 0},labels:{style:{color:e.textColor},formatter(){return c(this.value)}},gridLineColor:e.gridLineColor,min:0},tooltip:{shared:!0,formatter(){let e=new Date(this.x),t=`${`${e.getMinutes().toString().padStart(2,`0`)}:${e.getSeconds().toString().padStart(2,`0`)}`}
`;return this.points?.forEach(e=>{t+=`\u25CF ${e.series.name}: ${c(e.y,!0)}
`}),t}},plotOptions:{areaspline:{fillOpacity:.3,marker:{enabled:!1},lineWidth:2,states:{hover:{lineWidth:3}},threshold:null}},series:i.seriesConfig.map((t,n)=>({type:`areaspline`,name:t.name,color:t.color||e.seriesColors[n]||Ee.default.getOptions().colors?.[n]||`hsl(${n*120}, 70%, 50%)`,data:i.initialData?.[n]||[]}))}}let p={addPoint:(e,t,n)=>{if(u?.series[e]){let r=u.series[e].data.length>=10;u.series[e].addPoint([t,n],!0,r,{duration:800,easing:`linear`})}},addPoints:e=>{if(!u)return;let t=new Map;e.forEach(e=>{t.has(e.seriesIndex)||t.set(e.seriesIndex,[]),t.get(e.seriesIndex).push({time:e.time,value:e.value})}),t.forEach((e,t)=>{let n=u?.series[t];n&&e.forEach(e=>{let t=n.data.length>=10;n.addPoint([e.time,e.value],!1,t)})}),u.redraw({duration:800,easing:`linear`})},setSeriesData:(e,t)=>{u?.series[e]&&u.series[e].setData(t,!0,!1,!1)}};return t({chartRef:p}),g(()=>{if(!l.value)return;u=Ee.default.chart(l.value,f()),o(`chartReady`,p);let e=new ResizeObserver(()=>{u&&l.value&&u.setSize(l.value.clientWidth,l.value.clientHeight,!0)});e.observe(l.value),w(()=>{e.disconnect(),u?.destroy()})}),v(()=>i.title,e=>{u&&u.setTitle({text:e})}),v(()=>i.seriesConfig,e=>{u&&(e.forEach((e,t)=>{u.series[t]&&u.series[t].update({type:`areaspline`,name:e.name,color:e.color},!1)}),u.redraw())},{deep:!0}),v(()=>d.curTheme,()=>{requestAnimationFrame(()=>{if(u){let e=be();u.update({chart:{backgroundColor:e.backgroundColor},title:{style:{color:e.textColor}},legend:{itemStyle:{color:e.textColor},itemHoverStyle:{color:e.textColorHover}},xAxis:{labels:{style:{color:e.textColor}},lineColor:e.lineColor,tickColor:e.tickColor},yAxis:{labels:{style:{color:e.textColor}},gridLineColor:e.gridLineColor}},!0,!1,!1)}})}),(t,r)=>(D(),s(`div`,De,[e.isLoading?(D(),s(`div`,Oe,[...r[0]||=[a(`span`,{class:`loading loading-lg loading-dots`},null,-1)]])):T(``,!0),a(`div`,{ref_key:`containerRef`,ref:l,class:n([`h-full w-full`,{"opacity-0":e.isLoading}])},null,2)]))}}),Ae=Object.assign(ke,{__name:`RealtimeLineChart`}),je=u(ge(),1),Me={class:`relative h-full w-full`},Ne={key:0,class:`absolute inset-0 flex items-center justify-center`},Pe=e({__name:`HighchartsAutoSize`,props:{options:{},isLoading:{type:Boolean,default:!1}},setup(e){let t=e,r=A(),i,o=M();function c(){let e=be();return{chart:{animation:{duration:300},backgroundColor:e.backgroundColor},credits:{enabled:!1},accessibility:{enabled:!1},legend:{itemStyle:{color:e.textColor},itemHoverStyle:{color:e.textColorHover}},title:{style:{color:e.textColor}}}}return g(()=>{if(!r.value)return;let e=c(),n={...e,...t.options,chart:{...e.chart,...t.options.chart}};i=je.default.chart(r.value,n);let a=r.value.clientWidth,o=r.value.clientHeight,s=new ResizeObserver(()=>{if(i&&r.value){let e=r.value.clientWidth,t=r.value.clientHeight;(e!==a||t!==o)&&(a=e,o=t,i.setSize(e,t,!1))}});s.observe(r.value),w(()=>{s.disconnect(),i?.destroy()})}),v(()=>t.options,e=>{i&&i.update(e,!0,!1,!1)},{deep:!0}),v(()=>o.curTheme,()=>{requestAnimationFrame(()=>{if(i){let e=be();i.update({chart:{backgroundColor:e.backgroundColor},title:{style:{color:e.textColor}},legend:{itemStyle:{color:e.textColor},itemHoverStyle:{color:e.textColorHover}},xAxis:{labels:{style:{color:e.textColor}},lineColor:e.lineColor,tickColor:e.tickColor},yAxis:{labels:{style:{color:e.textColor}},gridLineColor:e.gridLineColor}},!0,!1,!1)}})}),(t,i)=>(D(),s(`div`,Me,[e.isLoading?(D(),s(`div`,Ne,[...i[0]||=[a(`span`,{class:`loading loading-lg loading-dots`},null,-1)]])):T(``,!0),a(`div`,{ref_key:`containerRef`,ref:r,class:n([`h-full w-full`,{"opacity-0":e.isLoading}])},null,2)]))}}),Fe=Object.assign(Pe,{__name:`HighchartsAutoSize`}),Ie={"ip.sb":`https://api.ip.sb/geoip`,"ipwho.is":`https://ipwho.is/`,"ipapi.is":`https://api.ipapi.is/`};function Le(e){return{ip:e.ip,country:e.country,city:e.city,asn:e.asn,org:e.asn_organization}}function Re(e){return{ip:e.ip,country:e.country,countryCode:e.country_code,city:e.city,region:e.region,asn:e.connection?.asn,org:e.connection?.org,isp:e.connection?.isp,latitude:e.latitude,longitude:e.longitude,timezone:e.timezone?.id}}function ze(e){return{ip:e.ip,country:e.location?.country,countryCode:e.location?.country_code,city:e.location?.city,region:e.location?.state,asn:e.asn?.asn,org:e.asn?.org,isProxy:e.is_proxy,isVPN:e.is_vpn,latitude:e.location?.latitude,longitude:e.location?.longitude,timezone:e.location?.timezone}}async function Be(e){let t=Ie[e],n=await me.get(t,{timeout:1e4}).json();switch(e){case`ip.sb`:return Le(n);case`ipwho.is`:return Re(n);case`ipapi.is`:return ze(n);default:throw Error(`Unknown IP provider: ${e}`)}}function Ve(){let e=A(`ip.sb`),t=A(null),n=A(!1),r=A(null);async function i(i){let a=i??e.value;n.value=!0,r.value=null;try{t.value=await Be(a),e.value=a}catch(e){r.value=e instanceof Error?e.message:`Failed to fetch IP info`,t.value=null}finally{n.value=!1}}return{currentProvider:e,ipInfo:t,isLoading:n,error:r,fetchIP:i}}var He={class:`card bg-base-200 p-4 shadow-sm`},Ue={class:`mb-3 flex items-center justify-between`},We={class:`flex items-center gap-2`},Ge={class:`font-semibold`},Ke={class:`flex items-center gap-2`},qe=[`value`],Je=[`value`],Ye=[`disabled`],Xe={key:0,class:`flex justify-center py-4`},Ze={key:1,class:`alert alert-error`},Qe={key:2,class:`space-y-2`},$e={class:`flex items-center justify-between gap-2`},et={class:`shrink-0 text-base-content/60`},tt=[`title`],nt={key:0,class:`flex items-center justify-between gap-2`},rt={class:`shrink-0 text-base-content/60`},it={class:`truncate`},at={key:1,class:`flex items-center justify-between gap-2`},ot={class:`shrink-0 text-base-content/60`},st={class:`truncate`},ct={key:2,class:`flex items-center justify-between gap-2`},lt={class:`shrink-0 text-base-content/60`},ut=[`title`],dt={key:3,class:`flex items-center justify-between gap-2`},ft={class:`truncate font-mono`},pt={key:4,class:`flex items-center justify-between gap-2`},mt=[`title`],ht={key:5,class:`flex items-center justify-between`},gt={class:`text-base-content/60`},_t={class:`flex gap-1`},vt={key:0,class:`badge badge-sm badge-warning`},yt={key:1,class:`badge badge-sm badge-warning`},bt={key:2,class:`badge badge-sm badge-success`},xt={key:3,class:`py-4 text-center text-base-content/60`},St=e({__name:`IPInfoCard`,setup(e){let{t}=k(),{currentProvider:r,ipInfo:c,isLoading:l,error:u,fetchIP:d}=Ve(),p=[{value:`ip.sb`,label:`IP.SB`},{value:`ipwho.is`,label:`ipwho.is`},{value:`ipapi.is`,label:`ipapi.is`}];g(()=>{d()});function m(e){let t=e.target;d(t.value)}return(e,h)=>(D(),s(`div`,He,[a(`div`,Ue,[a(`div`,We,[f(i(ie),{class:`h-5 w-5 text-primary`}),a(`h3`,Ge,S(i(t)(`currentIP`)),1)]),a(`div`,Ke,[a(`select`,{value:i(r),class:`select-bordered select select-sm`,onChange:m},[(D(),s(o,null,_(p,e=>a(`option`,{key:e.value,value:e.value},S(e.label),9,Je)),64))],40,qe),a(`button`,{class:n([`btn btn-circle btn-ghost btn-sm`,{"animate-spin":i(l)}]),disabled:i(l),onClick:h[0]||=e=>i(d)()},[f(i(ce),{class:`h-4 w-4`})],10,Ye)])]),i(l)?(D(),s(`div`,Xe,[...h[1]||=[a(`span`,{class:`loading loading-md loading-spinner`},null,-1)]])):i(u)?(D(),s(`div`,Ze,[a(`span`,null,S(i(u)),1)])):i(c)?(D(),s(`div`,Qe,[a(`div`,$e,[a(`span`,et,S(i(t)(`ipAddress`)),1),a(`span`,{class:`truncate font-mono font-semibold`,title:i(c).ip},S(i(c).ip),9,tt)]),i(c).country?(D(),s(`div`,nt,[a(`span`,rt,S(i(t)(`country`)),1),a(`span`,it,S(i(c).country),1)])):T(``,!0),i(c).city?(D(),s(`div`,at,[a(`span`,ot,S(i(t)(`city`)),1),a(`span`,st,S(i(c).city),1)])):T(``,!0),i(c).org?(D(),s(`div`,ct,[a(`span`,lt,S(i(t)(`organization`)),1),a(`span`,{class:`truncate text-right`,title:i(c).org},S(i(c).org),9,ut)])):T(``,!0),i(c).asn?(D(),s(`div`,dt,[h[2]||=a(`span`,{class:`shrink-0 text-base-content/60`},`ASN`,-1),a(`span`,ft,`AS`+S(i(c).asn),1)])):T(``,!0),i(c).isp?(D(),s(`div`,pt,[h[3]||=a(`span`,{class:`shrink-0 text-base-content/60`},`ISP`,-1),a(`span`,{class:`truncate text-right`,title:i(c).isp},S(i(c).isp),9,mt)])):T(``,!0),i(c).isProxy!==void 0||i(c).isVPN!==void 0?(D(),s(`div`,ht,[a(`span`,gt,S(i(t)(`proxyDetection`)),1),a(`div`,_t,[i(c).isProxy?(D(),s(`span`,vt,` Proxy `)):T(``,!0),i(c).isVPN?(D(),s(`span`,yt,` VPN `)):T(``,!0),!i(c).isProxy&&!i(c).isVPN?(D(),s(`span`,bt,S(i(t)(`clean`)),1)):T(``,!0)])])):T(``,!0)])):(D(),s(`div`,xt,S(i(t)(`noData`)),1))]))}}),Ct=Object.assign(St,{__name:`IPInfoCard`}),wt=[{name:`Google`,url:`https://www.google.com/generate_204`},{name:`Cloudflare`,url:`https://www.cloudflare.com/cdn-cgi/trace`},{name:`GitHub`,url:`https://github.com`}];async function Tt(e){try{let t=performance.now();await fetch(e,{method:`HEAD`,mode:`no-cors`,cache:`no-store`});let n=performance.now();return Math.round(n-t)}catch{return null}}function Et(){let e=A(new Map),t=A(!1),n=A(wt);async function r(t,n){e.value.set(n,{url:n,latency:null,status:`pending`,timestamp:Date.now()});let r=await Tt(n);return e.value.set(n,{url:n,latency:r,status:r===null?`error`:`success`,timestamp:Date.now()}),r}async function i(){t.value=!0;let e=n.value.map(e=>r(e.name,e.url));await Promise.all(e),t.value=!1}function a(t){return e.value.get(t)}return{results:e,isTestingAll:t,targets:n,testLatency:r,testAllLatencies:i,getResult:a,allResults:m(()=>n.value.map(t=>({name:t.name,url:t.url,result:e.value.get(t.url)}))),averageLatency:m(()=>{let t=Array.from(e.value.values()).filter(e=>e.status===`success`&&e.latency!==null);if(t.length===0)return null;let n=t.reduce((e,t)=>e+(t.latency??0),0);return Math.round(n/t.length)})}}var Dt={class:`card bg-base-200 p-4 shadow-sm`},Ot={class:`mb-3 flex items-center justify-between`},kt={class:`flex items-center gap-2`},At={class:`font-semibold`},jt={class:`flex items-center gap-2`},Mt=[`disabled`],Nt={class:`space-y-3`},Pt={class:`w-20 shrink-0 truncate text-sm`},Ft={class:`relative h-4 flex-1 overflow-hidden rounded-full bg-base-300`},It={class:`w-16 shrink-0 text-right font-mono text-sm`},Lt={key:0,class:`loading loading-xs loading-spinner`},Rt={key:1},zt={key:2,class:`text-error`},Bt={key:3,class:`text-base-content/40`},Vt=e({__name:`LatencyCard`,setup(e){let{t}=k(),{allResults:r,isTestingAll:c,testAllLatencies:l,averageLatency:u}=Et();g(()=>{l()});function p(e){return e==null?`badge-ghost`:e<100?`badge-success`:e<300?`badge-warning`:`badge-error`}function m(e){return e==null?`0%`:`${Math.min(e/500*100,100)}%`}function h(e){return e==null?`bg-base-300`:e<100?`bg-success`:e<300?`bg-warning`:`bg-error`}return(e,g)=>(D(),s(`div`,Dt,[a(`div`,Ot,[a(`div`,kt,[f(i(te),{class:`h-5 w-5 text-primary`}),a(`h3`,At,S(i(t)(`networkLatency`)),1)]),a(`div`,jt,[i(u)===null?T(``,!0):(D(),s(`span`,{key:0,class:n([`badge`,p(i(u))])},S(i(t)(`average`))+`: `+S(i(u))+`ms `,3)),a(`button`,{class:n([`btn btn-circle btn-ghost btn-sm`,{"animate-spin":i(c)}]),disabled:i(c),onClick:g[0]||=(...e)=>i(l)&&i(l)(...e)},[f(i(ce),{class:`h-4 w-4`})],10,Mt)])]),a(`div`,Nt,[(D(!0),s(o,null,_(i(r),e=>(D(),s(`div`,{key:e.url,class:`flex items-center gap-3`},[a(`span`,Pt,S(e.name),1),a(`div`,Ft,[a(`div`,{class:n([`absolute inset-y-0 left-0 rounded-full transition-all duration-500`,h(e.result?.latency)]),style:d({width:m(e.result?.latency)})},null,6)]),a(`span`,It,[e.result?.status===`pending`?(D(),s(`span`,Lt)):e.result?.status===`success`?(D(),s(`span`,Rt,S(e.result.latency)+`ms `,1)):e.result?.status===`error`?(D(),s(`span`,zt,S(i(t)(`timeout`)),1)):(D(),s(`span`,Bt,`-`))])]))),128))])]))}}),Ht=Object.assign(Vt,{__name:`LatencyCard`}),Ut={value:()=>{}};function Wt(){for(var e=0,t=arguments.length,n={},r;e=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw Error(`unknown type: `+e);return{type:e,name:n}})}Gt.prototype=Wt.prototype={constructor:Gt,on:function(e,t){var n=this._,r=Kt(e+``,n),i,a=-1,o=r.length;if(arguments.length<2){for(;++a0)for(var n=Array(i),r=0,i,a;r=0&&(t=e.slice(0,n))!==`xmlns`&&(e=e.slice(n+1)),Xt.hasOwnProperty(t)?{space:Xt[t],local:e}:e}function Qt(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===`http://www.w3.org/1999/xhtml`&&t.documentElement.namespaceURI===`http://www.w3.org/1999/xhtml`?t.createElement(e):t.createElementNS(n,e)}}function $t(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function en(e){var t=Zt(e);return(t.local?$t:Qt)(t)}function tn(){}function nn(e){return e==null?tn:function(){return this.querySelector(e)}}function rn(e){typeof e!=`function`&&(e=nn(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i=v&&(v=_+1);!(b=g[v])&&++v=0;)(o=r[i])&&(a&&o.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(o,a),a=o);return this}function Pn(e){e||=Fn;function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}for(var n=this._groups,r=n.length,i=Array(r),a=0;at?1:e>=t?0:NaN}function In(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function Ln(){return Array.from(this)}function Rn(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?Xn:typeof t==`function`?Qn:Zn)(e,t,n??``)):B(this.node(),e)}function B(e,t){return e.style.getPropertyValue(t)||Yn(e).getComputedStyle(e,null).getPropertyValue(t)}function er(e){return function(){delete this[e]}}function tr(e,t){return function(){this[e]=t}}function nr(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function rr(e,t){return arguments.length>1?this.each((t==null?er:typeof t==`function`?nr:tr)(e,t)):this.node()[e]}function ir(e){return e.trim().split(/^|\s+/)}function ar(e){return e.classList||new or(e)}function or(e){this._node=e,this._names=ir(e.getAttribute(`class`)||``)}or.prototype={add:function(e){this._names.indexOf(e)<0&&(this._names.push(e),this._node.setAttribute(`class`,this._names.join(` `)))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute(`class`,this._names.join(` `)))},contains:function(e){return this._names.indexOf(e)>=0}};function sr(e,t){for(var n=ar(e),r=-1,i=t.length;++r=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}function Ir(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,a;n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?hi(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?hi(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=ni.exec(e))?new W(t[1],t[2],t[3],1):(t=ri.exec(e))?new W(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=ii.exec(e))?hi(t[1],t[2],t[3],t[4]):(t=ai.exec(e))?hi(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=oi.exec(e))?Si(t[1],t[2]/100,t[3]/100,1):(t=si.exec(e))?Si(t[1],t[2]/100,t[3]/100,t[4]):ci.hasOwnProperty(e)?mi(ci[e]):e===`transparent`?new W(NaN,NaN,NaN,0):null}function mi(e){return new W(e>>16&255,e>>8&255,e&255,1)}function hi(e,t,n,r){return r<=0&&(e=t=n=NaN),new W(e,t,n,r)}function gi(e){return e instanceof Zr||(e=pi(e)),e?(e=e.rgb(),new W(e.r,e.g,e.b,e.opacity)):new W}function _i(e,t,n,r){return arguments.length===1?gi(e):new W(e,t,n,r??1)}function W(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Yr(W,_i,Xr(Zr,{brighter(e){return e=e==null?$r:$r**+e,new W(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Qr:Qr**+e,new W(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new W(G(this.r),G(this.g),G(this.b),xi(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:vi,formatHex:vi,formatHex8:yi,formatRgb:bi,toString:bi}));function vi(){return`#${K(this.r)}${K(this.g)}${K(this.b)}`}function yi(){return`#${K(this.r)}${K(this.g)}${K(this.b)}${K((isNaN(this.opacity)?1:this.opacity)*255)}`}function bi(){let e=xi(this.opacity);return`${e===1?`rgb(`:`rgba(`}${G(this.r)}, ${G(this.g)}, ${G(this.b)}${e===1?`)`:`, ${e})`}`}function xi(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function G(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function K(e){return e=G(e),(e<16?`0`:``)+e.toString(16)}function Si(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new q(e,t,n,r)}function Ci(e){if(e instanceof q)return new q(e.h,e.s,e.l,e.opacity);if(e instanceof Zr||(e=pi(e)),!e)return new q;if(e instanceof q)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n0&&c<1?0:o,new q(o,s,c,e.opacity)}function wi(e,t,n,r){return arguments.length===1?Ci(e):new q(e,t,n,r??1)}function q(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Yr(q,wi,Xr(Zr,{brighter(e){return e=e==null?$r:$r**+e,new q(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Qr:Qr**+e,new q(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new W(Di(e>=240?e-240:e+120,i,r),Di(e,i,r),Di(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new q(Ti(this.h),Ei(this.s),Ei(this.l),xi(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=xi(this.opacity);return`${e===1?`hsl(`:`hsla(`}${Ti(this.h)}, ${Ei(this.s)*100}%, ${Ei(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function Ti(e){return e=(e||0)%360,e<0?e+360:e}function Ei(e){return Math.max(0,Math.min(1,e||0))}function Di(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var Oi=e=>()=>e;function ki(e,t){return function(n){return e+n*t}}function Ai(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function ji(e){return(e=+e)==1?Mi:function(t,n){return n-t?Ai(t,n,e):Oi(isNaN(t)?n:t)}}function Mi(e,t){var n=t-e;return n?ki(e,n):Oi(isNaN(e)?t:e)}var Ni=(function e(t){var n=ji(t);function r(e,t){var r=n((e=_i(e)).r,(t=_i(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=Mi(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function J(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var Pi=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Fi=new RegExp(Pi.source,`g`);function Ii(e){return function(){return e}}function Li(e){return function(t){return e(t)+``}}function Ri(e,t){var n=Pi.lastIndex=Fi.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=Pi.exec(e))&&(i=Fi.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:J(r,i)})),n=Fi.lastIndex;return n180?t+=360:t-e>180&&(e+=360),a.push({i:n.push(i(n)+`rotate(`,null,r)-2,x:J(e,t)}))}function s(e,t,n,a){e===t?t&&n.push(i(n)+`skewX(`+t+r):a.push({i:n.push(i(n)+`skewX(`,null,r)-2,x:J(e,t)})}function c(e,t,n,r,a,o){if(e!==n||t!==r){var s=a.push(i(a)+`scale(`,null,`,`,null,`)`);o.push({i:s-4,x:J(e,n)},{i:s-2,x:J(t,r)})}else (n!==1||r!==1)&&a.push(i(a)+`scale(`+n+`,`+r+`)`)}return function(t,n){var r=[],i=[];return t=e(t),n=e(n),a(t.translateX,t.translateY,n.translateX,n.translateY,r,i),o(t.rotate,n.rotate,r,i),s(t.skewX,n.skewX,r,i),c(t.scaleX,t.scaleY,n.scaleX,n.scaleY,r,i),t=n=null,function(e){for(var t=-1,n=i.length,a;++t=0&&e._call.call(void 0,t),e=e._next;--Y}function la(){ea=($i=na.now())+ta,Y=Ji=0;try{ca()}finally{Y=0,da(),ea=0}}function ua(){var e=na.now(),t=e-$i;t>Xi&&(ta-=t,$i=e)}function da(){for(var e,t=Zi,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Zi=n);Qi=e,fa(r)}function fa(e){Y||(Ji&&=clearTimeout(Ji),e-ea>24?(e<1/0&&(Ji=setTimeout(la,e-na.now()-ta)),Yi&&=clearInterval(Yi)):(Yi||=($i=na.now(),setInterval(ua,Xi)),Y=1,ra(la)))}function pa(e,t,n){var r=new oa;return t=t==null?0:+t,r.restart(n=>{r.stop(),e(n+t)},t,n),r}var ma=Yt(`start`,`end`,`cancel`,`interrupt`),ha=[];function ga(e,t,n,r,i,a){var o=e.__transition;if(!o)e.__transition={};else if(n in o)return;va(e,n,{name:t,index:r,group:i,on:ma,tween:ha,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:0})}function _a(e,t){var n=Z(e,t);if(n.state>0)throw Error(`too late; already scheduled`);return n}function X(e,t){var n=Z(e,t);if(n.state>3)throw Error(`too late; already running`);return n}function Z(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw Error(`transition not found`);return n}function va(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=sa(a,0,n.time);function a(e){n.state=1,n.timer.restart(o,n.delay,n.time),n.delay<=e&&o(e-n.delay)}function o(a){var l,u,d,f;if(n.state!==1)return c();for(l in r)if(f=r[l],f.name===n.name){if(f.state===3)return pa(o);f.state===4?(f.state=6,f.timer.stop(),f.on.call(`interrupt`,e,e.__data__,f.index,f.group),delete r[l]):+l2&&r.state<5,r.state=6,r.timer.stop(),r.on.call(i?`interrupt`:`cancel`,e,e.__data__,r.index,r.group),delete n[o]}a&&delete e.__transition}}function ba(e){return this.each(function(){ya(this,e)})}function xa(e,t){var n,r;return function(){var i=X(this,e),a=i.tween;if(a!==n){r=n=a;for(var o=0,s=r.length;o=0&&(e=e.slice(0,t)),!e||e===`start`})}function Za(e,t,n){var r,i,a=Xa(t)?_a:X;return function(){var o=a(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}function Qa(e,t){var n=this._id;return arguments.length<2?Z(this.node(),n).on.on(e):this.each(Za(n,e,t))}function $a(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function eo(){return this.on(`end.remove`,$a(this._id))}function to(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=nn(e));for(var r=this._groups,i=r.length,a=Array(i),o=0;o=0;)t+=n[r].value;e.value=t}function Fo(){return this.eachAfter(Po)}function Io(e,t){let n=-1;for(let r of this)e.call(t,r,++n,this);return this}function Lo(e,t){for(var n=this,r=[n],i,a,o=-1;n=r.pop();)if(e.call(t,n,++o,this),i=n.children)for(a=i.length-1;a>=0;--a)r.push(i[a]);return this}function Ro(e,t){for(var n=this,r=[n],i=[],a,o,s,c=-1;n=r.pop();)if(i.push(n),a=n.children)for(o=0,s=a.length;o=0;)n+=r[i].value;t.value=n})}function Vo(e){return this.eachBefore(function(t){t.children&&t.children.sort(e)})}function Ho(e){for(var t=this,n=Uo(t,e),r=[t];t!==n;)t=t.parent,r.push(t);for(var i=r.length;e!==n;)r.splice(i,0,e),e=e.parent;return r}function Uo(e,t){if(e===t)return e;var n=e.ancestors(),r=t.ancestors(),i=null;for(e=n.pop(),t=r.pop();e===t;)i=e,e=n.pop(),t=r.pop();return i}function Wo(){for(var e=this,t=[e];e=e.parent;)t.push(e);return t}function Go(){return Array.from(this)}function Ko(){var e=[];return this.eachBefore(function(t){t.children||e.push(t)}),e}function qo(){var e=this,t=[];return e.each(function(n){n!==e&&t.push({source:n.parent,target:n})}),t}function*Jo(){var e=this,t,n=[e],r,i,a;do for(t=n.reverse(),n=[];e=t.pop();)if(yield e,r=e.children)for(i=0,a=r.length;i=0;--s)i.push(a=o[s]=new ts(o[s])),a.parent=r,a.depth=r.depth+1;return n.eachBefore(es)}function Xo(){return Yo(this).eachBefore($o)}function Zo(e){return e.children}function Qo(e){return Array.isArray(e)?e[1]:null}function $o(e){e.data.value!==void 0&&(e.value=e.data.value),e.data=e.data.data}function es(e){var t=0;do e.height=t;while((e=e.parent)&&e.height<++t)}function ts(e){this.data=e,this.depth=this.height=0,this.parent=null}ts.prototype=Yo.prototype={constructor:ts,count:Fo,each:Io,eachAfter:Ro,eachBefore:Lo,find:zo,sum:Bo,sort:Vo,path:Ho,ancestors:Wo,descendants:Go,leaves:Ko,links:qo,copy:Xo,[Symbol.iterator]:Jo};function ns(e,t){return e.parent===t.parent?1:2}function rs(e){var t=e.children;return t?t[0]:e.t}function is(e){var t=e.children;return t?t[t.length-1]:e.t}function as(e,t,n){var r=n/(t.i-e.i);t.c-=r,t.s+=n,e.c+=r,t.z+=n,t.m+=n}function os(e){for(var t=0,n=0,r=e.children,i=r.length,a;--i>=0;)a=r[i],a.z+=t,a.m+=t,t+=a.s+(n+=a.c)}function ss(e,t,n){return e.a.parent===t.parent?e.a:n}function cs(e,t){this._=e,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=t}cs.prototype=Object.create(ts.prototype);function ls(e){for(var t=new cs(e,0),n,r=[t],i,a,o,s;n=r.pop();)if(a=n._.children)for(n.children=Array(s=a.length),o=s-1;o>=0;--o)r.push(i=n.children[o]=new cs(a[o],o)),i.parent=n;return(t.parent=new cs(null,0)).children=[t],t}function us(){var e=ns,t=1,n=1,r=null;function i(i){var s=ls(i);if(s.eachAfter(a),s.parent.m=-s.z,s.eachBefore(o),r)i.eachBefore(c);else{var l=i,u=i,d=i;i.eachBefore(function(e){e.xu.x&&(u=e),e.depth>d.depth&&(d=e)});var f=l===u?1:e(l,u)/2,p=f-l.x,m=t/(u.x+f+p),h=n/(d.depth||1);i.eachBefore(function(e){e.x=(e.x+p)*m,e.y=e.depth*h})}return i}function a(t){var n=t.children,r=t.parent.children,i=t.i?r[t.i-1]:null;if(n){os(t);var a=(n[0].z+n[n.length-1].z)/2;i?(t.z=i.z+e(t._,i._),t.m=t.z-a):t.z=a}else i&&(t.z=i.z+e(t._,i._));t.parent.A=s(t,i,t.parent.A||r[0])}function o(e){e._.x=e.z+e.parent.m,e.m+=e.parent.m}function s(t,n,r){if(n){for(var i=t,a=t,o=n,s=i.parent.children[0],c=i.m,l=a.m,u=o.m,d=s.m,f;o=is(o),i=rs(i),o&&i;)s=rs(s),a=is(a),a.a=t,f=o.z+u-i.z-c+e(o._,i._),f>0&&(as(ss(o,t,r),t,f),c+=f,l+=f),u+=o.m,c+=i.m,d+=s.m,l+=a.m;o&&!is(a)&&(a.t=o,a.m+=u-l),i&&!rs(s)&&(s.t=i,s.m+=c-d,r=t)}return r}function c(e){e.x*=t,e.y=e.depth*n}return i.separation=function(t){return arguments.length?(e=t,i):e},i.size=function(e){return arguments.length?(r=!1,t=+e[0],n=+e[1],i):r?null:[t,n]},i.nodeSize=function(e){return arguments.length?(r=!0,t=+e[0],n=+e[1],i):r?[t,n]:null},i}function ds(e,t,n){this.k=e,this.x=t,this.y=n}ds.prototype={constructor:ds,scale:function(e){return e===1?this:new ds(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new ds(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return`translate(`+this.x+`,`+this.y+`) scale(`+this.k+`)`}};var fs=new ds(1,0,0);ps.prototype=ds.prototype;function ps(e){for(;!e.__zoom;)if(!(e=e.parentNode))return fs;return e.__zoom}var ms={class:`mb-4 flex items-center justify-between`},hs={class:`flex items-center gap-2`},gs=[`title`],_s={class:`flex flex-wrap gap-2 text-sm text-base-content/60`},vs={class:`mb-4 flex flex-wrap gap-4 text-xs`},ys={class:`flex items-center gap-1`},bs={class:`flex items-center gap-1`},xs={class:`flex items-center gap-1`},Ss={class:`flex items-center gap-1`},Cs={class:`flex items-center gap-1`},ws={key:0,class:`flex flex-col items-center justify-center py-8 text-base-content/60`},Ts=e({__name:`NetworkTopology`,setup(e){let{t}=k(),r=he(),o=M(),l=A(null),u=A(null),d=A(new Set),p=A(!1),h=A(null),_=m(()=>p.value&&h.value?h.value:r.activeConnections),y=null,b=null,x=null;function C(e,t=`600 11px sans-serif`){x||=document.createElement(`canvas`);let n=x.getContext(`2d`);return n?(n.font=t,n.measureText(e).width):e.length*7}let ee=!1;function T(){ee||(ee=!0,requestAnimationFrame(()=>{ee=!1,ue()}))}let j=m(()=>{let e=_.value,t=new Map;e.forEach(e=>{let n=e.metadata.sourceIP||`Unknown`,r=String(e.metadata.sourcePort||`Unknown`),i=e.rule||`Direct`,a=e.rulePayload,o=a?`${i}: ${a}`:i,s=e.chains||[],c=s[0]??`Direct`,l=s.length>1?s[1]??`Direct`:s[0]??`Direct`,u=e.download+e.upload;t.has(l)||t.set(l,{data:{id:`group-${l}`,name:l,type:`group`,connections:0,traffic:0},proxies:new Map});let d=t.get(l);d.data.connections++,d.data.traffic+=u,d.proxies.has(c)||d.proxies.set(c,{data:{id:`proxy-${l}-${c}`,name:c,type:`proxy`,connections:0,traffic:0},rules:new Map});let f=d.proxies.get(c);f.data.connections++,f.data.traffic+=u,f.rules.has(o)||f.rules.set(o,{data:{id:`rule-${l}-${c}-${o}`,name:o,type:`rule`,connections:0,traffic:0},clients:new Map});let p=f.rules.get(o);p.data.connections++,p.data.traffic+=u,p.clients.has(n)||p.clients.set(n,{data:{id:`client-${l}-${c}-${o}-${n}`,name:n,type:`client`,connections:0,traffic:0},ports:new Map});let m=p.clients.get(n);m.data.connections++,m.data.traffic+=u,m.ports.has(r)||m.ports.set(r,{id:`port-${l}-${c}-${o}-${n}-${r}`,name:r,type:`port`,connections:0,traffic:0});let h=m.ports.get(r);h.connections++,h.traffic+=u});let n=[];function r(e,t=!1){return(d.value.has(e.id)||t)&&e.children&&e.children.length>0?{...e,_children:e.children,children:void 0,collapsed:!0}:{...e,collapsed:!1}}return t.forEach(e=>{let t={...e.data,children:[]};e.proxies.forEach(e=>{let n={...e.data,children:[]};e.rules.forEach(e=>{let t={...e.data,children:[]};e.clients.forEach(e=>{let n=Array.from(e.ports.values()),r=d.value.has(`expanded-${e.data.id}`)?{...e.data,children:n,collapsed:!1}:{...e.data,_children:n,children:void 0,collapsed:!0};t.children.push(r)}),!d.value.has(`expanded-${e.data.id}`)&&t.children.length>0?(t._children=t.children,t.children=void 0,t.collapsed=!0):t.collapsed=!1,n.children.push(t)});let i=r(n);t.children.push(i)});let i=r(t);n.push(i)}),{id:`root`,name:`Connections`,type:`root`,connections:e.length,traffic:e.reduce((e,t)=>e+t.download+t.upload,0),children:n}}),N=m(()=>{let e=_.value,t=new Set,n=new Set,r=new Set,i=new Set;return e.forEach(e=>{t.add(e.metadata.sourceIP||`Unknown`),n.add(e.rule||`Direct`);let a=e.chains||[];i.add(a[0]??`Direct`),r.add(a.length>1?a[1]??`Direct`:a[0]??`Direct`)}),{clientCount:t.size,ruleCount:n.size,groupCount:r.size,proxyCount:i.size,totalTraffic:e.reduce((e,t)=>e+t.download+t.upload,0)}});function te(){let e=ve();return{root:{fill:e.neutral,bg:`color-mix(in oklch, ${e.neutral} 15%, transparent)`},client:{fill:e.primary,bg:`color-mix(in oklch, ${e.primary} 15%, transparent)`},port:{fill:e.warning,bg:`color-mix(in oklch, ${e.warning} 15%, transparent)`},rule:{fill:e.secondary,bg:`color-mix(in oklch, ${e.secondary} 15%, transparent)`},group:{fill:e.accent,bg:`color-mix(in oklch, ${e.accent} 15%, transparent)`},proxy:{fill:e.info,bg:`color-mix(in oklch, ${e.info} 15%, transparent)`},baseContent:e.baseContent}}function F(){let e=o.curTheme;return y&&b===e?y:(y=te(),b=e,y)}function I(e){return F()[e].fill}function ie(e){return F()[e].bg}function L(e){switch(e){case`client`:return re;case`port`:return P;case`rule`:return ne;case`group`:return fe;case`proxy`:return ae;default:return fe}}function le(e,t){let n=`expanded-${e}`;t?e.startsWith(`rule-`)||e.startsWith(`client-`)?d.value.add(n):d.value.delete(e):e.startsWith(`rule-`)||e.startsWith(`client-`)?d.value.delete(n):d.value.add(e)}function ue(){if(!l.value||!u.value)return;let e=j.value;if(!e.children||e.children.length===0)return;Jr(l.value).selectAll(`*`).remove();let t=Yo(e),n=u.value.clientWidth;us().nodeSize([50,100]).separation((e,t)=>e.parent===t.parent?1:1.5)(t);let r=new Map,i=t.descendants();for(let e of i)if(e.data.type!==`root`){let t=C(e.data.name),n=e.data.children&&e.data.children.length>0||e.data._children&&e.data._children.length>0?20:0;r.set(e.data.id,t+32+n)}function a(e){return r.get(e.data.id)??80}let o=new Map;t.descendants().forEach(e=>{if(e.data.type!==`root`){let t=a(e),n=o.get(e.depth)??0;o.set(e.depth,Math.max(n,t))}});let s=new Map,c=0;for(let e=1;e<=o.size;e++){let t=o.get(e)??100;if(e===1)c=t/2;else{let n=o.get(e-1)??100;c+=n/2+40+t/2}s.set(e,c)}t.descendants().forEach(e=>{e.data.type!==`root`&&e.depth>0&&(e.y=s.get(e.depth)??e.y)});let d=1/0,f=-1/0;t.each(e=>{let t=e.x??0;tf&&(f=t)});let p=f-d+50,m=Math.max(400,p+25+40),h=0;t.each(e=>{if(e.data.type!==`root`){let t=r.get(e.data.id)??80,n=(e.y??0)+t/2;n>h&&(h=n)}});let g=Math.max(n,h+60+40),_=Jr(l.value).attr(`width`,g).attr(`height`,m).append(`g`).attr(`transform`,`translate(60, ${-d+50/2+25})`),v=F(),y=t.links().filter(e=>e.source.data.type!==`root`);_.selectAll(`.link`).data(y).join(`path`).attr(`class`,`link`).attr(`d`,e=>{let t=e.source,n=e.target,r=a(t),i=a(n),o=t.y-0+r/2,s=t.x,c=n.y-0-i/2,l=n.x,u=(o+c)/2;return`M${o},${s} C${u},${s} ${u},${l} ${c},${l}`}).attr(`fill`,`none`).attr(`stroke`,v.baseContent).attr(`stroke-opacity`,.3).attr(`stroke-width`,e=>Math.max(1,Math.min(4,e.target.data.connections/5)));let b=_.selectAll(`.node`).data(t.descendants().filter(e=>e.data.type!==`root`)).join(`g`).attr(`class`,`node`).attr(`transform`,e=>`translate(${(e.y??0)-0},${e.x})`).style(`cursor`,e=>e.data.children&&e.data.children.length>0||e.data._children&&e.data._children.length>0?`pointer`:`default`).on(`click`,(e,t)=>{(t.data.children&&t.data.children.length>0||t.data._children&&t.data._children.length>0)&&le(t.data.id,t.data.collapsed??!1)});b.append(`text`).attr(`dy`,-30/2-4).attr(`text-anchor`,`middle`).attr(`fill`,e=>I(e.data.type)).attr(`font-size`,`10px`).attr(`font-weight`,`500`).text(e=>`${e.data.connections}`),b.append(`rect`).attr(`x`,e=>-a(e)/2).attr(`y`,-30/2).attr(`width`,e=>a(e)).attr(`height`,30).attr(`rx`,6).attr(`fill`,e=>ie(e.data.type)).attr(`stroke`,e=>I(e.data.type)).attr(`stroke-width`,2),b.filter(e=>!!(e.data.children&&e.data.children.length>0||e.data._children&&e.data._children.length>0)).append(`text`).attr(`x`,e=>a(e)/2-12).attr(`dy`,`0.35em`).attr(`text-anchor`,`middle`).attr(`fill`,e=>I(e.data.type)).attr(`font-size`,`14px`).attr(`font-weight`,`700`).text(e=>e.data.collapsed?`+`:`−`),b.append(`text`).attr(`dy`,`0.31em`).attr(`text-anchor`,`middle`).attr(`fill`,e=>I(e.data.type)).attr(`font-size`,`11px`).attr(`font-weight`,`600`).text(e=>e.data.name),b.append(`title`).text(e=>`${e.data.name}\n${e.data.connections} connections\n${z(e.data.traffic).toString()}`)}function de(){p.value?h.value=null:h.value=[...r.activeConnections],p.value=!p.value}return v([()=>j.value,()=>o.curTheme],()=>{E(T)},{deep:!0}),g(()=>{E(T);let e=new ResizeObserver(()=>T());u.value&&e.observe(u.value),w(()=>{e.disconnect(),x=null,y=null})}),(e,r)=>(D(),s(`div`,null,[a(`div`,ms,[a(`div`,hs,[a(`button`,{class:n([`btn btn-circle btn-ghost btn-xs`,{"text-warning":i(p)}]),title:i(p)?i(t)(`resume`):i(t)(`pause`),onClick:de},[i(p)?(D(),c(i(se),{key:0,class:`h-4 w-4`})):(D(),c(i(oe),{key:1,class:`h-4 w-4`}))],10,gs)]),a(`div`,_s,[a(`span`,null,S(i(N).clientCount)+` `+S(i(t)(`clients`)),1),r[0]||=a(`span`,null,`·`,-1),a(`span`,null,S(i(N).ruleCount)+` `+S(i(t)(`rules`)),1),r[1]||=a(`span`,null,`·`,-1),a(`span`,null,S(i(N).groupCount)+` `+S(i(t)(`groups`)),1),r[2]||=a(`span`,null,`·`,-1),a(`span`,null,S(i(N).proxyCount)+` `+S(i(t)(`nodes`)),1),r[3]||=a(`span`,null,`·`,-1),a(`span`,null,S(i(z)(i(N).totalTraffic).toString()),1)])]),a(`div`,vs,[a(`div`,ys,[(D(),c(O(L(`group`)),{class:`h-4 w-4 text-accent`})),a(`span`,null,S(i(t)(`proxyGroups`)),1)]),a(`div`,bs,[(D(),c(O(L(`proxy`)),{class:`h-4 w-4 text-info`})),a(`span`,null,S(i(t)(`proxyNodes`)),1)]),a(`div`,xs,[(D(),c(O(L(`rule`)),{class:`h-4 w-4 text-secondary`})),a(`span`,null,S(i(t)(`rules`)),1)]),a(`div`,Ss,[(D(),c(O(L(`client`)),{class:`h-4 w-4 text-primary`})),a(`span`,null,S(i(t)(`sourceIP`)),1)]),a(`div`,Cs,[(D(),c(O(L(`port`)),{class:`h-4 w-4 text-warning`})),a(`span`,null,S(i(t)(`sourcePort`)),1)])]),i(_).length===0?(D(),s(`div`,ws,[f(i(ce),{class:`mb-2 h-8 w-8 animate-pulse`}),a(`span`,null,S(i(t)(`waitingForConnections`)),1)])):(D(),s(`div`,{key:1,ref_key:`containerRef`,ref:u,class:`touch-pan-x touch-pan-y overflow-x-auto`},[(D(),s(`svg`,{ref_key:`svgRef`,ref:l,class:`min-h-100`},null,512))],512))]))}}),Es=Object.assign(Ts,{__name:`NetworkTopology`}),Ds={class:`rounded-box bg-base-300 p-4`},Os={class:`mb-4 flex flex-col gap-2`},ks={class:`flex items-center justify-between gap-2`},As={class:`flex items-center gap-2`},js={class:`text-xl font-bold text-base-content`},Ms=[`data-tip`],Ns={class:`btn btn-circle text-info btn-ghost btn-xs`},Ps={class:`hidden sm:inline`},Fs={key:0,class:`stats stats-vertical bg-base-200 shadow sm:stats-horizontal`},Is={class:`stat py-2`},Ls={class:`stat-title text-xs`},Rs={class:`stat-value text-lg text-primary`},zs={key:0,class:`stat py-2`},Bs={class:`stat-title text-xs`},Vs=[`title`],Hs={class:`flex items-center gap-1`},Us={class:`stat py-2`},Ws={class:`stat-title text-xs`},Gs={class:`stat-value text-lg`},Ks={class:`stat py-2`},qs={class:`stat-title text-xs`},Js={class:`stat-value text-lg`},Ys={class:`stat py-2`},Xs={class:`stat-title text-xs`},Zs={class:`stat-value text-lg text-secondary`},Qs={class:`hidden overflow-x-auto rounded-md lg:block`},$s={class:`table w-full table-zebra`},ec={class:`bg-base-200`},tc={class:`text-base-content`},nc={class:`flex items-center gap-2`},rc={class:`text-base-content`},ic={class:`text-base-content`},ac={class:`text-base-content`},oc={class:`text-base-content`},sc={class:`text-base-content`},cc={key:0},lc={colspan:`6`,class:`text-center text-base-content/70`},uc=[`onClick`],dc={colspan:`6`,class:`py-2`},fc={class:`flex items-center gap-2`},pc={class:`font-semibold text-primary`},mc={class:`text-xs text-base-content/60`},hc={class:`text-xs text-base-content/60`},gc={class:`font-mono text-base-content`},_c=[`title`],vc={class:`flex items-center gap-1`},yc={class:`text-sm`},bc={class:`text-base-content`},xc={class:`text-base-content`},Sc={class:`font-bold text-primary`},Cc=[`title`,`onClick`],wc={class:`flex flex-col gap-3 lg:hidden`},Tc={key:0,class:`flex flex-col gap-2 rounded-lg bg-base-200 p-3`},Ec={class:`flex items-center gap-2`},Dc={class:`text-xs font-semibold text-base-content/60`},Oc={class:`flex flex-1 gap-2`},kc={class:`flex items-center gap-2`},Ac={class:`text-xs font-semibold text-base-content/60`},jc={class:`flex flex-1 gap-2`},Mc={key:1,class:`rounded-lg bg-base-200 p-4 text-center text-base-content/70`},Nc=[`onClick`],Pc={class:`card-body p-4`},Fc={class:`flex items-center justify-between`},Ic={class:`font-semibold text-primary`},Lc={class:`text-xs text-base-content/60`},Rc={class:`card-body p-4`},zc={class:`mb-2 flex items-start justify-between`},Bc={class:`flex-1`},Vc={class:`text-xs font-semibold text-base-content/60 uppercase`},Hc={class:`font-mono text-sm font-bold text-base-content`},Uc=[`title`,`onClick`],Wc={key:0,class:`mb-2`},Gc={class:`text-xs font-semibold text-base-content/60 uppercase`},Kc={class:`flex items-center gap-1 text-sm text-base-content`},qc={class:`text-xs text-base-content/60`},Jc={class:`grid grid-cols-3 gap-2`},Yc={class:`text-xs font-semibold text-base-content/60 uppercase`},Xc={class:`text-sm font-medium text-base-content`},Zc={class:`text-xs font-semibold text-base-content/60 uppercase`},Qc={class:`text-sm font-medium text-base-content`},$c={class:`text-xs font-semibold text-base-content/60 uppercase`},el={class:`text-sm font-bold text-primary`},tl=e({__name:`DataUsageTable`,setup(e){let{t,locale:u}=k(),g=he(),v=A(`total`),y=A(`desc`),x=A(null),C=A({}),w=r(`showDataUsageTable`,!1),E=e=>z(e).toString();function O(e){v.value===e?y.value=y.value===`asc`?`desc`:`asc`:(v.value=e,y.value=`desc`)}function j(e){x.value===e?(x.value=null,C.value={}):(x.value=e,C.value={})}function M(e){C.value[e]=!C.value[e]}let N=m(()=>{let e=Object.values(g.dataUsageMap),t=v.value,n=y.value;return e.sort((e,r)=>{let i=0;switch(t){case`ip`:i=e.sourceIP.localeCompare(r.sourceIP);break;case`duration`:i=(e.firstSeen?e.lastSeen-e.firstSeen:0)-(r.firstSeen?r.lastSeen-r.firstSeen:0);break;case`upload`:i=e.upload-r.upload;break;case`download`:i=e.download-r.download;break;case`total`:i=e.total-r.total;break}return n===`asc`?i:-i})}),te=m(()=>{let e=N.value;if(!x.value)return e.map(e=>({type:`data`,original:e,depth:0}));let t=new Map;for(let n of e){let e=n.sourceIP,r=t.get(e);r?r.push(n):t.set(e,[n])}let n=[];for(let[e,r]of t)if(n.push({type:`group`,key:e,depth:0,subRows:r}),C.value[e])for(let e of r)n.push({type:`data`,original:e,depth:1});return n}),P=m(()=>{let e=N.value,t=e.reduce((e,t)=>e+t.upload,0),n=e.reduce((e,t)=>e+t.download,0),r=2**53-1,i=0;e.forEach(e=>{e.firstSeen&&e.firstSeeni&&(i=e.lastSeen)});let a=r!==2**53-1&&i>0;return{count:e.length,upload:t,download:n,total:t+n,firstSeen:a?r:void 0,lastSeen:a?i:void 0}});function ne(){confirm(t(`confirmClearAll`))&&g.clearDataUsage()}function F(e){g.removeDataUsageEntry(e)}return(e,r)=>(D(),s(`div`,Ds,[a(`div`,Os,[a(`div`,ks,[a(`div`,As,[a(`h2`,js,S(i(t)(`dataUsage`)),1),a(`div`,{class:`tooltip tooltip-top before:ml-4 before:max-w-xs before:rounded-lg before:p-2 before:text-xs before:content-[attr(data-tip)] md:tooltip-right md:before:ml-0 md:before:text-sm lg:before:text-base`,"data-tip":i(t)(`dataUsageInfo`)},[a(`button`,Ns,[f(i(pe),{size:18})])],8,Ms),ee(a(`input`,{"onUpdate:modelValue":r[0]||=e=>b(w)?w.value=e:null,type:`checkbox`,class:`toggle toggle-primary`},null,512),[[l,i(w)]])]),i(w)?(D(),s(`button`,{key:0,class:`btn btn-sm btn-error`,onClick:ne},[f(i(ue),{size:16}),a(`span`,Ps,S(i(t)(`clearAll`)),1)])):T(``,!0)]),i(w)?(D(),s(o,{key:0},[i(P).count>0?(D(),s(`div`,Fs,[a(`div`,Is,[a(`div`,Ls,S(i(t)(`devices`)),1),a(`div`,Rs,S(i(P).count),1)]),i(P).firstSeen&&i(P).lastSeen?(D(),s(`div`,zs,[a(`div`,Bs,S(i(t)(`timeRange`)),1),a(`div`,{class:`stat-value text-sm`,title:i(ye)(i(P).firstSeen,i(P).lastSeen,i(u))},[a(`div`,Hs,[f(i(L),{size:16}),a(`span`,null,S(i(_e)(i(P).firstSeen,i(P).lastSeen)),1)])],8,Vs)])):T(``,!0),a(`div`,Us,[a(`div`,Ws,S(i(t)(`uploadTotal`)),1),a(`div`,Gs,S(E(i(P).upload)),1)]),a(`div`,Ks,[a(`div`,qs,S(i(t)(`downloadTotal`)),1),a(`div`,Js,S(E(i(P).download)),1)]),a(`div`,Ys,[a(`div`,Xs,S(i(t)(`grandTotal`)),1),a(`div`,Zs,S(E(i(P).total)),1)])])):T(``,!0),a(`div`,Qs,[a(`table`,$s,[a(`thead`,null,[a(`tr`,ec,[a(`th`,tc,[a(`div`,nc,[a(`button`,{class:`flex items-center gap-1 hover:text-primary`,onClick:r[1]||=e=>O(`ip`)},[a(`span`,null,S(i(t)(`ipAddress`)),1),i(v)===`ip`&&i(y)===`asc`?(D(),c(i(I),{key:0,size:14})):i(v)===`ip`&&i(y)===`desc`?(D(),c(i(R),{key:1,size:14})):T(``,!0)]),i(x)===`ip`?(D(),s(`button`,{key:1,class:`cursor-pointer text-primary`,onClick:r[3]||=p(e=>j(`ip`),[`stop`])},[f(i(de),{size:16})])):(D(),s(`button`,{key:0,class:`cursor-pointer`,onClick:r[2]||=p(e=>j(`ip`),[`stop`])},[f(i(le),{size:16})]))])]),a(`th`,rc,[a(`button`,{class:`flex items-center gap-1 hover:text-primary`,onClick:r[4]||=e=>O(`duration`)},[a(`span`,null,S(i(t)(`duration`)),1),i(v)===`duration`&&i(y)===`asc`?(D(),c(i(I),{key:0,size:14})):i(v)===`duration`&&i(y)===`desc`?(D(),c(i(R),{key:1,size:14})):T(``,!0)])]),a(`th`,ic,[a(`button`,{class:`flex items-center gap-1 hover:text-primary`,onClick:r[5]||=e=>O(`upload`)},[a(`span`,null,S(i(t)(`upload`)),1),i(v)===`upload`&&i(y)===`asc`?(D(),c(i(I),{key:0,size:14})):i(v)===`upload`&&i(y)===`desc`?(D(),c(i(R),{key:1,size:14})):T(``,!0)])]),a(`th`,ac,[a(`button`,{class:`flex items-center gap-1 hover:text-primary`,onClick:r[6]||=e=>O(`download`)},[a(`span`,null,S(i(t)(`download`)),1),i(v)===`download`&&i(y)===`asc`?(D(),c(i(I),{key:0,size:14})):i(v)===`download`&&i(y)===`desc`?(D(),c(i(R),{key:1,size:14})):T(``,!0)])]),a(`th`,oc,[a(`button`,{class:`flex items-center gap-1 hover:text-primary`,onClick:r[7]||=e=>O(`total`)},[a(`span`,null,S(i(t)(`total`)),1),i(v)===`total`&&i(y)===`asc`?(D(),c(i(I),{key:0,size:14})):i(v)===`total`&&i(y)===`desc`?(D(),c(i(R),{key:1,size:14})):T(``,!0)])]),a(`th`,sc,S(i(t)(`actions`)),1)])]),a(`tbody`,null,[i(N).length===0?(D(),s(`tr`,cc,[a(`td`,lc,S(i(t)(`noDataUsageYet`)),1)])):(D(!0),s(o,{key:1},_(i(te),e=>(D(),s(o,{key:e.type===`group`?`group-${e.key}`:`data-${e.original.sourceIP}`},[e.type===`group`?(D(),s(`tr`,{key:0,class:`cursor-pointer bg-base-200 hover:bg-base-300`,onClick:t=>M(e.key)},[a(`td`,dc,[a(`div`,fc,[a(`span`,pc,S(i(t)(`ipAddress`))+`: `+S(e.key),1),a(`span`,mc,` (`+S(e.subRows.length)+` `+S(e.subRows.length===1?i(t)(`devices`).slice(0,-1):i(t)(`devices`))+`) `,1),a(`span`,hc,S(i(t)(`total`))+`: `+S(E(e.subRows.reduce((e,t)=>e+t.total,0))),1),i(C)[e.key]?(D(),c(i(R),{key:0,size:14,class:`ml-auto`})):(D(),c(i(I),{key:1,size:14,class:`ml-auto`}))])])],8,uc)):e.type===`data`?(D(),s(`tr`,{key:1,class:`hover`,style:d({paddingLeft:`${e.depth*1}rem`})},[a(`td`,gc,S(e.original.sourceIP),1),a(`td`,{class:`text-base-content`,title:e.original.firstSeen?i(ye)(e.original.firstSeen,e.original.lastSeen,i(u)):`-`},[a(`div`,vc,[f(i(L),{size:14,class:`text-base-content/60`}),a(`span`,yc,S(e.original.firstSeen?i(_e)(e.original.firstSeen,e.original.lastSeen):`-`),1)])],8,_c),a(`td`,bc,S(E(e.original.upload)),1),a(`td`,xc,S(E(e.original.download)),1),a(`td`,Sc,S(E(e.original.total)),1),a(`td`,null,[a(`button`,{class:`btn text-error btn-ghost btn-xs hover:bg-error/20`,title:i(t)(`remove`),onClick:p(t=>F(e.original.sourceIP),[`stop`])},[f(i(ue),{size:14})],8,Cc)])],4)):T(``,!0)],64))),128))])])]),a(`div`,wc,[i(N).length>0?(D(),s(`div`,Tc,[a(`div`,Ec,[a(`div`,Dc,S(i(t)(`sortBy`)),1),a(`div`,Oc,[a(`button`,{class:n([`btn flex-1 btn-xs`,i(v)===`ip`?`btn-primary`:`btn-ghost`]),onClick:r[8]||=e=>O(`ip`)},[h(S(i(t)(`ipShort`))+` `,1),i(v)===`ip`&&i(y)===`asc`?(D(),c(i(I),{key:0,size:12})):i(v)===`ip`&&i(y)===`desc`?(D(),c(i(R),{key:1,size:12})):T(``,!0)],2),a(`button`,{class:n([`btn flex-1 btn-xs`,i(v)===`duration`?`btn-primary`:`btn-ghost`]),onClick:r[9]||=e=>O(`duration`)},[h(S(i(t)(`duration`))+` `,1),i(v)===`duration`&&i(y)===`asc`?(D(),c(i(I),{key:0,size:12})):i(v)===`duration`&&i(y)===`desc`?(D(),c(i(R),{key:1,size:12})):T(``,!0)],2),a(`button`,{class:n([`btn flex-1 btn-xs`,i(v)===`upload`?`btn-primary`:`btn-ghost`]),onClick:r[10]||=e=>O(`upload`)},[h(S(i(t)(`upload`))+` `,1),i(v)===`upload`&&i(y)===`asc`?(D(),c(i(I),{key:0,size:12})):i(v)===`upload`&&i(y)===`desc`?(D(),c(i(R),{key:1,size:12})):T(``,!0)],2),a(`button`,{class:n([`btn flex-1 btn-xs`,i(v)===`download`?`btn-primary`:`btn-ghost`]),onClick:r[11]||=e=>O(`download`)},[h(S(i(t)(`download`))+` `,1),i(v)===`download`&&i(y)===`asc`?(D(),c(i(I),{key:0,size:12})):i(v)===`download`&&i(y)===`desc`?(D(),c(i(R),{key:1,size:12})):T(``,!0)],2),a(`button`,{class:n([`btn flex-1 btn-xs`,i(v)===`total`?`btn-primary`:`btn-ghost`]),onClick:r[12]||=e=>O(`total`)},[h(S(i(t)(`total`))+` `,1),i(v)===`total`&&i(y)===`asc`?(D(),c(i(I),{key:0,size:12})):i(v)===`total`&&i(y)===`desc`?(D(),c(i(R),{key:1,size:12})):T(``,!0)],2)])]),a(`div`,kc,[a(`div`,Ac,S(i(t)(`groupBy`)),1),a(`div`,jc,[a(`button`,{class:n([`btn flex-1 btn-xs`,i(x)===`ip`?`btn-primary`:`btn-ghost`]),onClick:r[13]||=e=>j(`ip`)},[h(S(i(t)(`ipShort`))+` `,1),i(x)===`ip`?(D(),c(i(de),{key:0,size:12})):(D(),c(i(le),{key:1,size:12}))],2)])])])):T(``,!0),i(N).length===0?(D(),s(`div`,Mc,S(i(t)(`noDataUsageYet`)),1)):T(``,!0),(D(!0),s(o,null,_(i(te),e=>(D(),s(o,{key:e.type===`group`?`group-${e.key}`:`data-${e.original.sourceIP}`},[e.type===`group`?(D(),s(`div`,{key:0,class:`card cursor-pointer bg-primary/20 shadow-md`,onClick:t=>M(e.key)},[a(`div`,Pc,[a(`div`,Fc,[a(`div`,null,[a(`div`,Ic,S(i(t)(`ipAddress`))+`: `+S(e.key),1),a(`div`,Lc,S(e.subRows.length)+` `+S(e.subRows.length===1?i(t)(`devices`).slice(0,-1):i(t)(`devices`))+` · `+S(i(t)(`total`))+`: `+S(E(e.subRows.reduce((e,t)=>e+t.total,0))),1)]),i(C)[e.key]?(D(),c(i(R),{key:0,size:16})):(D(),c(i(I),{key:1,size:16}))])])],8,Nc)):e.type===`data`?(D(),s(`div`,{key:1,class:`card bg-base-200 shadow-md`,style:d({marginLeft:`${e.depth*1}rem`})},[a(`div`,Rc,[a(`div`,zc,[a(`div`,Bc,[a(`div`,Vc,S(i(t)(`ipAddress`)),1),a(`div`,Hc,S(e.original.sourceIP),1)]),a(`button`,{class:`btn btn-circle text-error btn-ghost btn-xs`,title:i(t)(`remove`),onClick:p(t=>F(e.original.sourceIP),[`stop`])},[f(i(ue),{size:16})],8,Uc)]),e.original.firstSeen?(D(),s(`div`,Wc,[a(`div`,Gc,S(i(t)(`timeRange`)),1),a(`div`,Kc,[f(i(L),{size:14,class:`text-base-content/60`}),a(`span`,null,S(i(_e)(e.original.firstSeen,e.original.lastSeen)),1)]),a(`div`,qc,S(i(ye)(e.original.firstSeen,e.original.lastSeen,i(u))),1)])):T(``,!0),r[14]||=a(`div`,{class:`divider my-2`},null,-1),a(`div`,Jc,[a(`div`,null,[a(`div`,Yc,S(i(t)(`upload`)),1),a(`div`,Xc,S(E(e.original.upload)),1)]),a(`div`,null,[a(`div`,Zc,S(i(t)(`download`)),1),a(`div`,Qc,S(E(e.original.download)),1)]),a(`div`,null,[a(`div`,$c,S(i(t)(`total`)),1),a(`div`,el,S(E(e.original.total)),1)])])])],4)):T(``,!0)],64))),128))])],64)):T(``,!0)])]))}}),nl=Object.assign(tl,{__name:`DataUsageTable`}),rl={class:`flex h-full flex-col gap-4 overflow-y-auto`},il={class:`stats grid w-full shrink-0 stats-vertical grid-cols-2 bg-primary shadow sm:grid-cols-3 xl:grid-cols-6`},al={key:0,class:`flex items-center justify-center gap-2 rounded-lg bg-base-200 px-4 py-2 text-sm`},ol={class:`text-base-content/60`},sl={class:`font-mono font-medium`},cl={class:`grid grid-cols-1 gap-4 lg:grid-cols-2 xl:grid-cols-3`},ll={class:`card h-72 bg-base-200 p-2 shadow-sm lg:h-80`},ul={class:`card h-72 bg-base-200 p-2 shadow-sm lg:h-80`},dl={class:`card h-72 bg-base-200 p-2 shadow-sm lg:h-80`},fl={class:`card h-72 bg-base-200 p-2 shadow-sm lg:h-80`},pl={class:`card h-72 bg-base-200 p-2 shadow-sm lg:h-80`},ml={class:`card h-72 bg-base-200 p-2 shadow-sm lg:h-80`},hl={class:`grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3`},gl={class:`card bg-base-200 p-4 shadow-sm`},_l={class:`font-semibold`},vl={class:`btn btn-circle btn-ghost btn-xs`},yl=e({__name:`overview`,setup(e){let{t:r}=k();x({title:m(()=>r(`overview`))});let o=N(),l=he(),u=t(),d=M(),p=e=>z(e).toString(),g=m(()=>(d.curTheme,be())),_=A(),b=A(),C=A(),w=m(()=>[{name:r(`down`),color:g.value.seriesColors[0]},{name:r(`up`),color:g.value.seriesColors[1]}]),ee=m(()=>[[...o.trafficChartHistory.download],[...o.trafficChartHistory.upload]]),E=m(()=>[{name:r(`memory`),color:g.value.seriesColors[2]}]),O=m(()=>[[...o.memoryChartHistory]]),j=m(()=>[{name:r(`activeConnections`),color:g.value.seriesColors[3]}]),te=m(()=>[[...o.connectionCountHistory]]),P=m(()=>({chart:{type:`pie`,backgroundColor:g.value.backgroundColor,animation:!1},credits:{enabled:!1},accessibility:{enabled:!1},title:{text:r(`flow`),style:{color:g.value.textColor}},tooltip:{pointFormatter(){let e=this.y||0,t=this.percentage||0;return`${this.name}
${z(e).toString()} (${t.toFixed(1)}%)`}},plotOptions:{pie:{allowPointSelect:!0,cursor:`pointer`,dataLabels:{enabled:!1},showInLegend:!0,animation:!1}},legend:{itemStyle:{color:g.value.textColor},itemHoverStyle:{color:g.value.textColorHover}},series:[{type:`pie`,name:r(`flow`),data:[{name:r(`downloadTotal`),y:l.latestConnectionMsg?.downloadTotal||0,color:g.value.seriesColors[0]},{name:r(`uploadTotal`),y:l.latestConnectionMsg?.uploadTotal||0,color:g.value.seriesColors[1]}]}]})),ne=m(()=>{let e=l.activeConnections,t=0,n=0,i=0;return e.forEach(e=>{let r=e.metadata.network?.toLowerCase()||``;r===`tcp`?t++:r===`udp`?n++:i++}),{chart:{type:`pie`,backgroundColor:g.value.backgroundColor,animation:!1},credits:{enabled:!1},accessibility:{enabled:!1},title:{text:r(`networkTypes`),style:{color:g.value.textColor}},tooltip:{pointFormatter(){let e=this.y||0,t=this.percentage||0;return`${this.name}: ${e} (${t.toFixed(1)}%)`}},plotOptions:{pie:{allowPointSelect:!0,cursor:`pointer`,dataLabels:{enabled:!1},showInLegend:!0,animation:!1}},legend:{itemStyle:{color:g.value.textColor},itemHoverStyle:{color:g.value.textColorHover}},series:[{type:`pie`,name:r(`networkTypes`),data:[{name:r(`tcp`),y:t,color:g.value.seriesColors[0]},{name:r(`udp`),y:n,color:g.value.seriesColors[1]},...i>0?[{name:r(`other`),y:i,color:g.value.seriesColors[2]}]:[]]}]}}),re=m(()=>{let e=l.speedGroupByName,t=Object.entries(e).sort(([,e],[,t])=>t-e).slice(0,5),n=t.map(([e])=>e),i=t.map(([,e])=>e);return{chart:{type:`bar`,backgroundColor:g.value.backgroundColor,animation:!1},credits:{enabled:!1},accessibility:{enabled:!1},title:{text:r(`topProxies`),style:{color:g.value.textColor}},xAxis:{categories:n,labels:{style:{color:g.value.textColor}},lineColor:g.value.lineColor},yAxis:{title:{text:void 0},labels:{style:{color:g.value.textColor},formatter(){return`${z(this.value).toString()}/s`}},gridLineColor:g.value.gridLineColor,min:0},tooltip:{formatter(){return`${n[this.x]||this.x}
${z(this.y).toString()}/s`}},legend:{enabled:!1},plotOptions:{bar:{dataLabels:{enabled:!1},animation:!1}},series:[{type:`bar`,name:r(`traffic`),data:i,color:g.value.seriesColors[0]}]}}),I=o.trafficChartHistory.download.at(-1)?.[0]??0,ie=o.memoryChartHistory.at(-1)?.[0]??0,ae=o.connectionCountHistory.at(-1)?.[0]??0;return v(()=>o.latestTraffic,e=>{if(e&&_.value?.chartRef){let t=Date.now();t>I&&(_.value.chartRef.addPoints([{seriesIndex:0,time:t,value:e.down},{seriesIndex:1,time:t,value:e.up}]),I=t)}}),v(()=>o.latestMemory?.inuse,e=>{if(e&&b.value?.chartRef){let t=Date.now();t>ie&&(b.value.chartRef.addPoint(0,t,e),ie=t)}}),v(()=>l.latestConnectionMsg?.connections?.length,e=>{if(e!==void 0&&C.value?.chartRef){let t=Date.now();t>ae&&(C.value.chartRef.addPoint(0,t,e),ae=t)}}),(e,t)=>{let m=Te,g=Ae,v=Fe,x=Ct,k=Ht,A=Es,M=nl;return D(),s(`div`,rl,[a(`div`,il,[f(m,{label:i(r)(`upload`)},{default:y(()=>[h(S(p(i(o).latestTraffic?.up||0))+`/s `,1)]),_:1},8,[`label`]),f(m,{label:i(r)(`download`)},{default:y(()=>[h(S(p(i(o).latestTraffic?.down||0))+`/s `,1)]),_:1},8,[`label`]),f(m,{label:i(r)(`uploadTotal`)},{default:y(()=>[h(S(p(i(l).latestConnectionMsg?.uploadTotal||0)),1)]),_:1},8,[`label`]),f(m,{label:i(r)(`downloadTotal`)},{default:y(()=>[h(S(p(i(l).latestConnectionMsg?.downloadTotal||0)),1)]),_:1},8,[`label`]),f(m,{label:i(r)(`activeConnections`)},{default:y(()=>[h(S(i(l).latestConnectionMsg?.connections?.length||0),1)]),_:1},8,[`label`]),f(m,{label:i(r)(`memoryUsage`)},{default:y(()=>[h(S(p(i(o).latestMemory?.inuse||0)),1)]),_:1},8,[`label`])]),i(u).currentEndpoint?.url?(D(),s(`div`,al,[a(`span`,ol,S(i(r)(`connectedTo`))+`:`,1),a(`span`,sl,S(i(u).currentEndpoint?.url),1)])):T(``,!0),a(`div`,cl,[a(`div`,ll,[f(g,{ref_key:`trafficChartRef`,ref:_,title:i(r)(`traffic`),"series-config":i(w),"initial-data":i(ee),"is-loading":!i(o).latestTraffic},null,8,[`title`,`series-config`,`initial-data`,`is-loading`])]),a(`div`,ul,[f(v,{options:i(P),"is-loading":!i(l).latestConnectionMsg?.connections?.length},null,8,[`options`,`is-loading`])]),a(`div`,dl,[f(g,{ref_key:`memoryChartRef`,ref:b,title:i(r)(`memory`),"series-config":i(E),"initial-data":i(O),"is-loading":!i(o).latestMemory},null,8,[`title`,`series-config`,`initial-data`,`is-loading`])]),a(`div`,fl,[f(g,{ref_key:`connectionsChartRef`,ref:C,title:i(r)(`connectionsChart`),"series-config":i(j),"initial-data":i(te),"is-loading":!i(l).latestConnectionMsg?.connections?.length,"value-mode":`number`},null,8,[`title`,`series-config`,`initial-data`,`is-loading`])]),a(`div`,pl,[f(v,{options:i(ne),"is-loading":!i(l).latestConnectionMsg?.connections?.length},null,8,[`options`,`is-loading`])]),a(`div`,ml,[f(v,{options:i(re),"is-loading":Object.keys(i(l).speedGroupByName).length===0},null,8,[`options`,`is-loading`])])]),a(`div`,hl,[f(x),f(k)]),a(`div`,gl,[a(`div`,{class:`flex cursor-pointer items-center justify-between`,onClick:t[0]||=e=>i(d).showNetworkTopology=!i(d).showNetworkTopology},[a(`h3`,_l,S(i(r)(`networkTopology`)),1),a(`button`,vl,[f(i(F),{class:n([`h-5 w-5 transition-transform`,{"rotate-180":i(d).showNetworkTopology}])},null,8,[`class`])])]),i(d).showNetworkTopology?(D(),c(A,{key:0,class:`mt-4`})):T(``,!0)]),f(M)])}}});export{yl as default};