mirror of
https://github.com/wnlen/clash-for-linux.git
synced 2026-02-04 10:11:28 +08:00
1 line
82 KiB
JavaScript
1 line
82 KiB
JavaScript
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"./DB3QyUG1.js";import{t as j}from"./_v7-ePgP.js";import{t as M}from"./BGrMhtLn.js";import{t as N}from"./Ds3PMqWb.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"./CdfRVy8H.js";import{t as me}from"./CDMImveV.js";import{n as he,t as z}from"./RfkGMhKY.js";import{t as ge}from"./DVG4eZ5B.js";import{a as _e,d as ve,i as ye,l as be}from"./CAhuthQu.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=`<b>${`${e.getMinutes().toString().padStart(2,`0`)}:${e.getSeconds().toString().padStart(2,`0`)}`}</b><br/>`;return this.points?.forEach(e=>{t+=`<span style="color:${e.color}">\u25CF</span> ${e.series.name}: <b>${c(e.y,!0)}</b><br/>`}),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<t;++e){if(!(r=arguments[e]+``)||r in n||/[\s.]/.test(r))throw Error(`illegal type: `+r);n[r]=[]}return new Gt(n)}function Gt(e){this._=e}function Kt(e,t){return e.trim().split(/^|\s+/).map(function(e){var n=``,r=e.indexOf(`.`);if(r>=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(;++a<o;)if((i=(e=r[a]).type)&&(i=qt(n[i],e.name)))return i;return}if(t!=null&&typeof t!=`function`)throw Error(`invalid callback: `+t);for(;++a<o;)if(i=(e=r[a]).type)n[i]=Jt(n[i],e.name,t);else if(t==null)for(i in n)n[i]=Jt(n[i],e.name,null);return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new Gt(e)},call:function(e,t){if((i=arguments.length-2)>0)for(var n=Array(i),r=0,i,a;r<i;++r)n[r]=arguments[r+2];if(!this._.hasOwnProperty(e))throw Error(`unknown type: `+e);for(a=this._[e],r=0,i=a.length;r<i;++r)a[r].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw Error(`unknown type: `+e);for(var r=this._[e],i=0,a=r.length;i<a;++i)r[i].value.apply(t,n)}};function qt(e,t){for(var n=0,r=e.length,i;n<r;++n)if((i=e[n]).name===t)return i.value}function Jt(e,t,n){for(var r=0,i=e.length;r<i;++r)if(e[r].name===t){e[r]=Ut,e=e.slice(0,r).concat(e.slice(r+1));break}return n!=null&&e.push({name:t,value:n}),e}var Yt=Wt,Xt={svg:`http://www.w3.org/2000/svg`,xhtml:`http://www.w3.org/1999/xhtml`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`};function Zt(e){var t=e+=``,n=t.indexOf(`:`);return n>=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<n;++i)for(var a=t[i],o=a.length,s=r[i]=Array(o),c,l,u=0;u<o;++u)(c=a[u])&&(l=e.call(c,c.__data__,u,a))&&(`__data__`in c&&(l.__data__=c.__data__),s[u]=l);return new V(r,this._parents)}function an(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function on(){return[]}function sn(e){return e==null?on:function(){return this.querySelectorAll(e)}}function cn(e){return function(){return an(e.apply(this,arguments))}}function ln(e){e=typeof e==`function`?cn(e):sn(e);for(var t=this._groups,n=t.length,r=[],i=[],a=0;a<n;++a)for(var o=t[a],s=o.length,c,l=0;l<s;++l)(c=o[l])&&(r.push(e.call(c,c.__data__,l,o)),i.push(c));return new V(r,i)}function un(e){return function(){return this.matches(e)}}function dn(e){return function(t){return t.matches(e)}}var fn=Array.prototype.find;function pn(e){return function(){return fn.call(this.children,e)}}function mn(){return this.firstElementChild}function hn(e){return this.select(e==null?mn:pn(typeof e==`function`?e:dn(e)))}var gn=Array.prototype.filter;function _n(){return Array.from(this.children)}function vn(e){return function(){return gn.call(this.children,e)}}function yn(e){return this.selectAll(e==null?_n:vn(typeof e==`function`?e:dn(e)))}function bn(e){typeof e!=`function`&&(e=un(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=[],c,l=0;l<o;++l)(c=a[l])&&e.call(c,c.__data__,l,a)&&s.push(c);return new V(r,this._parents)}function xn(e){return Array(e.length)}function Sn(){return new V(this._enter||this._groups.map(xn),this._parents)}function Cn(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}Cn.prototype={constructor:Cn,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function wn(e){return function(){return e}}function Tn(e,t,n,r,i,a){for(var o=0,s,c=t.length,l=a.length;o<l;++o)(s=t[o])?(s.__data__=a[o],r[o]=s):n[o]=new Cn(e,a[o]);for(;o<c;++o)(s=t[o])&&(i[o]=s)}function En(e,t,n,r,i,a,o){var s,c,l=new Map,u=t.length,d=a.length,f=Array(u),p;for(s=0;s<u;++s)(c=t[s])&&(f[s]=p=o.call(c,c.__data__,s,t)+``,l.has(p)?i[s]=c:l.set(p,c));for(s=0;s<d;++s)p=o.call(e,a[s],s,a)+``,(c=l.get(p))?(r[s]=c,c.__data__=a[s],l.delete(p)):n[s]=new Cn(e,a[s]);for(s=0;s<u;++s)(c=t[s])&&l.get(f[s])===c&&(i[s]=c)}function Dn(e){return e.__data__}function On(e,t){if(!arguments.length)return Array.from(this,Dn);var n=t?En:Tn,r=this._parents,i=this._groups;typeof e!=`function`&&(e=wn(e));for(var a=i.length,o=Array(a),s=Array(a),c=Array(a),l=0;l<a;++l){var u=r[l],d=i[l],f=d.length,p=kn(e.call(u,u&&u.__data__,l,r)),m=p.length,h=s[l]=Array(m),g=o[l]=Array(m);n(u,d,h,g,c[l]=Array(f),p,t);for(var _=0,v=0,y,b;_<m;++_)if(y=h[_]){for(_>=v&&(v=_+1);!(b=g[v])&&++v<m;);y._next=b||null}}return o=new V(o,r),o._enter=s,o._exit=c,o}function kn(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function An(){return new V(this._exit||this._groups.map(xn),this._parents)}function jn(e,t,n){var r=this.enter(),i=this,a=this.exit();return typeof e==`function`?(r=e(r),r&&=r.selection()):r=r.append(e+``),t!=null&&(i=t(i),i&&=i.selection()),n==null?a.remove():n(a),r&&i?r.merge(i).order():i}function Mn(e){for(var t=e.selection?e.selection():e,n=this._groups,r=t._groups,i=n.length,a=r.length,o=Math.min(i,a),s=Array(i),c=0;c<o;++c)for(var l=n[c],u=r[c],d=l.length,f=s[c]=Array(d),p,m=0;m<d;++m)(p=l[m]||u[m])&&(f[m]=p);for(;c<i;++c)s[c]=n[c];return new V(s,this._parents)}function Nn(){for(var e=this._groups,t=-1,n=e.length;++t<n;)for(var r=e[t],i=r.length-1,a=r[i],o;--i>=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;a<r;++a){for(var o=n[a],s=o.length,c=i[a]=Array(s),l,u=0;u<s;++u)(l=o[u])&&(c[u]=l);c.sort(t)}return new V(i,this._parents).order()}function Fn(e,t){return e<t?-1:e>t?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;t<n;++t)for(var r=e[t],i=0,a=r.length;i<a;++i){var o=r[i];if(o)return o}return null}function zn(){let e=0;for(let t of this)++e;return e}function Bn(){return!this.node()}function Vn(e){for(var t=this._groups,n=0,r=t.length;n<r;++n)for(var i=t[n],a=0,o=i.length,s;a<o;++a)(s=i[a])&&e.call(s,s.__data__,a,i);return this}function Hn(e){return function(){this.removeAttribute(e)}}function Un(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Wn(e,t){return function(){this.setAttribute(e,t)}}function Gn(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function Kn(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function qn(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function Jn(e,t){var n=Zt(e);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((t==null?n.local?Un:Hn:typeof t==`function`?n.local?qn:Kn:n.local?Gn:Wn)(n,t))}function Yn(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function Xn(e){return function(){this.style.removeProperty(e)}}function Zn(e,t,n){return function(){this.style.setProperty(e,t,n)}}function Qn(e,t,n){return function(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function $n(e,t,n){return arguments.length>1?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<i;)n.add(t[r])}function cr(e,t){for(var n=ar(e),r=-1,i=t.length;++r<i;)n.remove(t[r])}function lr(e){return function(){sr(this,e)}}function ur(e){return function(){cr(this,e)}}function dr(e,t){return function(){(t.apply(this,arguments)?sr:cr)(this,e)}}function fr(e,t){var n=ir(e+``);if(arguments.length<2){for(var r=ar(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each((typeof t==`function`?dr:t?lr:ur)(n,t))}function pr(){this.textContent=``}function mr(e){return function(){this.textContent=e}}function hr(e){return function(){this.textContent=e.apply(this,arguments)??``}}function gr(e){return arguments.length?this.each(e==null?pr:(typeof e==`function`?hr:mr)(e)):this.node().textContent}function _r(){this.innerHTML=``}function vr(e){return function(){this.innerHTML=e}}function yr(e){return function(){this.innerHTML=e.apply(this,arguments)??``}}function br(e){return arguments.length?this.each(e==null?_r:(typeof e==`function`?yr:vr)(e)):this.node().innerHTML}function xr(){this.nextSibling&&this.parentNode.appendChild(this)}function Sr(){return this.each(xr)}function Cr(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function wr(){return this.each(Cr)}function Tr(e){var t=typeof e==`function`?e:en(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function Er(){return null}function Dr(e,t){var n=typeof e==`function`?e:en(e),r=t==null?Er:typeof t==`function`?t:nn(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function Or(){var e=this.parentNode;e&&e.removeChild(this)}function kr(){return this.each(Or)}function Ar(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function jr(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function Mr(e){return this.select(e?jr:Ar)}function Nr(e){return arguments.length?this.property(`__data__`,e):this.node().__data__}function Pr(e){return function(t){e.call(this,t,this.__data__)}}function Fr(e){return e.trim().split(/^|\s+/).map(function(e){var t=``,n=e.indexOf(`.`);return n>=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<i;++n)a=t[n],(!e.type||a.type===e.type)&&a.name===e.name?this.removeEventListener(a.type,a.listener,a.options):t[++r]=a;++r?t.length=r:delete this.__on}}}function Lr(e,t,n){return function(){var r=this.__on,i,a=Pr(t);if(r){for(var o=0,s=r.length;o<s;++o)if((i=r[o]).type===e.type&&i.name===e.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=n),i.value=t;return}}this.addEventListener(e.type,a,n),i={type:e.type,name:e.name,value:t,listener:a,options:n},r?r.push(i):this.__on=[i]}}function Rr(e,t,n){var r=Fr(e+``),i,a=r.length,o;if(arguments.length<2){var s=this.node().__on;if(s){for(var c=0,l=s.length,u;c<l;++c)for(i=0,u=s[c];i<a;++i)if((o=r[i]).type===u.type&&o.name===u.name)return u.value}return}for(s=t?Lr:Ir,i=0;i<a;++i)this.each(s(r[i],t,n));return this}function zr(e,t,n){var r=Yn(e),i=r.CustomEvent;typeof i==`function`?i=new i(t,n):(i=r.document.createEvent(`Event`),n?(i.initEvent(t,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(t,!1,!1)),e.dispatchEvent(i)}function Br(e,t){return function(){return zr(this,e,t)}}function Vr(e,t){return function(){return zr(this,e,t.apply(this,arguments))}}function Hr(e,t){return this.each((typeof t==`function`?Vr:Br)(e,t))}function*Ur(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,a=r.length,o;i<a;++i)(o=r[i])&&(yield o)}var Wr=[null];function V(e,t){this._groups=e,this._parents=t}function Gr(){return new V([[document.documentElement]],Wr)}function Kr(){return this}V.prototype=Gr.prototype={constructor:V,select:rn,selectAll:ln,selectChild:hn,selectChildren:yn,filter:bn,data:On,enter:Sn,exit:An,join:jn,merge:Mn,selection:Kr,order:Nn,sort:Pn,call:In,nodes:Ln,node:Rn,size:zn,empty:Bn,each:Vn,attr:Jn,style:$n,property:rr,classed:fr,text:gr,html:br,raise:Sr,lower:wr,append:Tr,insert:Dr,remove:kr,clone:Mr,datum:Nr,on:Rr,dispatch:Hr,[Symbol.iterator]:Ur};var qr=Gr;function Jr(e){return typeof e==`string`?new V([[document.querySelector(e)]],[document.documentElement]):new V([[e]],Wr)}function Yr(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function Xr(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Zr(){}var Qr=.7,$r=1/Qr,H=`\\s*([+-]?\\d+)\\s*`,ei=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,U=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,ti=/^#([0-9a-f]{3,8})$/,ni=RegExp(`^rgb\\(${H},${H},${H}\\)$`),ri=RegExp(`^rgb\\(${U},${U},${U}\\)$`),ii=RegExp(`^rgba\\(${H},${H},${H},${ei}\\)$`),ai=RegExp(`^rgba\\(${U},${U},${U},${ei}\\)$`),oi=RegExp(`^hsl\\(${ei},${U},${U}\\)$`),si=RegExp(`^hsla\\(${ei},${U},${U},${ei}\\)$`),ci={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Yr(Zr,pi,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:li,formatHex:li,formatHex8:ui,formatHsl:di,formatRgb:fi,toString:fi});function li(){return this.rgb().formatHex()}function ui(){return this.rgb().formatHex8()}function di(){return Ci(this).formatHsl()}function fi(){return this.rgb().formatRgb()}function pi(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=ti.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?mi(t):n===3?new W(t>>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+(n<r)*6:n===a?(r-t)/s+2:(t-n)/s+4,s/=c<.5?a+i:2-a-i,o*=60):s=c>0&&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 n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?Li(c[0].x):Ii(t):(t=c.length,function(e){for(var n=0,r;n<t;++n)s[(r=c[n]).i]=r.x(e);return s.join(``)})}var zi=180/Math.PI,Bi={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Vi(e,t,n,r,i,a){var o,s,c;return(o=Math.sqrt(e*e+t*t))&&(e/=o,t/=o),(c=e*n+t*r)&&(n-=e*c,r-=t*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),e*r<t*n&&(e=-e,t=-t,c=-c,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(t,e)*zi,skewX:Math.atan(c)*zi,scaleX:o,scaleY:s}}var Hi;function Ui(e){let t=new(typeof DOMMatrix==`function`?DOMMatrix:WebKitCSSMatrix)(e+``);return t.isIdentity?Bi:Vi(t.a,t.b,t.c,t.d,t.e,t.f)}function Wi(e){return e==null||(Hi||=document.createElementNS(`http://www.w3.org/2000/svg`,`g`),Hi.setAttribute(`transform`,e),!(e=Hi.transform.baseVal.consolidate()))?Bi:(e=e.matrix,Vi(e.a,e.b,e.c,e.d,e.e,e.f))}function Gi(e,t,n,r){function i(e){return e.length?e.pop()+` `:``}function a(e,r,i,a,o,s){if(e!==i||r!==a){var c=o.push(`translate(`,null,t,null,n);s.push({i:c-4,x:J(e,i)},{i:c-2,x:J(r,a)})}else (i||a)&&o.push(`translate(`+i+t+a+n)}function o(e,t,n,a){e===t?t&&n.push(i(n)+`rotate(`+t+r):(e-t>180?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<n;)r[(a=i[t]).i]=a.x(e);return r.join(``)}}}var Ki=Gi(Ui,`px, `,`px)`,`deg)`),qi=Gi(Wi,`, `,`)`,`)`),Y=0,Ji=0,Yi=0,Xi=1e3,Zi,Qi,$i=0,ea=0,ta=0,na=typeof performance==`object`&&performance.now?performance:Date,ra=typeof window==`object`&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function ia(){return ea||=(ra(aa),na.now()+ta)}function aa(){ea=0}function oa(){this._call=this._time=this._next=null}oa.prototype=sa.prototype={constructor:oa,restart:function(e,t,n){if(typeof e!=`function`)throw TypeError(`callback is not a function`);n=(n==null?ia():+n)+(t==null?0:+t),!this._next&&Qi!==this&&(Qi?Qi._next=this:Zi=this,Qi=this),this._call=e,this._time=n,fa()},stop:function(){this._call&&(this._call=null,this._time=1/0,fa())}};function sa(e,t,n){var r=new oa;return r.restart(e,t,n),r}function ca(){ia(),++Y;for(var e=Zi,t;e;)(t=ea-e._time)>=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]):+l<t&&(f.state=6,f.timer.stop(),f.on.call(`cancel`,e,e.__data__,f.index,f.group),delete r[l])}if(pa(function(){n.state===3&&(n.state=4,n.timer.restart(s,n.delay,n.time),s(a))}),n.state=2,n.on.call(`start`,e,e.__data__,n.index,n.group),n.state===2){for(n.state=3,i=Array(d=n.tween.length),l=0,u=-1;l<d;++l)(f=n.tween[l].value.call(e,e.__data__,n.index,n.group))&&(i[++u]=f);i.length=u+1}}function s(t){for(var r=t<n.duration?n.ease.call(null,t/n.duration):(n.timer.restart(c),n.state=5,1),a=-1,o=i.length;++a<o;)i[a].call(e,r);n.state===5&&(n.on.call(`end`,e,e.__data__,n.index,n.group),c())}function c(){for(var i in n.state=6,n.timer.stop(),delete r[t],r)return;delete e.__transition}}function ya(e,t){var n=e.__transition,r,i,a=!0,o;if(n){for(o in t=t==null?null:t+``,n){if((r=n[o]).name!==t){a=!1;continue}i=r.state>2&&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<s;++o)if(r[o].name===t){r=r.slice(),r.splice(o,1);break}}i.tween=r}}function Sa(e,t,n){var r,i;if(typeof n!=`function`)throw Error();return function(){var a=X(this,e),o=a.tween;if(o!==r){i=(r=o).slice();for(var s={name:t,value:n},c=0,l=i.length;c<l;++c)if(i[c].name===t){i[c]=s;break}c===l&&i.push(s)}a.tween=i}}function Ca(e,t){var n=this._id;if(e+=``,arguments.length<2){for(var r=Z(this.node(),n).tween,i=0,a=r.length,o;i<a;++i)if((o=r[i]).name===e)return o.value;return null}return this.each((t==null?xa:Sa)(n,e,t))}function wa(e,t,n){var r=e._id;return e.each(function(){var e=X(this,r);(e.value||={})[t]=n.apply(this,arguments)}),function(e){return Z(e,r).value[t]}}function Ta(e,t){var n;return(typeof t==`number`?J:t instanceof pi?Ni:(n=pi(t))?(t=n,Ni):Ri)(e,t)}function Ea(e){return function(){this.removeAttribute(e)}}function Da(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Oa(e,t,n){var r,i=n+``,a;return function(){var o=this.getAttribute(e);return o===i?null:o===r?a:a=t(r=o,n)}}function ka(e,t,n){var r,i=n+``,a;return function(){var o=this.getAttributeNS(e.space,e.local);return o===i?null:o===r?a:a=t(r=o,n)}}function Aa(e,t,n){var r,i,a;return function(){var o,s=n(this),c;return s==null?void this.removeAttribute(e):(o=this.getAttribute(e),c=s+``,o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s)))}}function ja(e,t,n){var r,i,a;return function(){var o,s=n(this),c;return s==null?void this.removeAttributeNS(e.space,e.local):(o=this.getAttributeNS(e.space,e.local),c=s+``,o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s)))}}function Ma(e,t){var n=Zt(e),r=n===`transform`?qi:Ta;return this.attrTween(e,typeof t==`function`?(n.local?ja:Aa)(n,r,wa(this,`attr.`+e,t)):t==null?(n.local?Da:Ea)(n):(n.local?ka:Oa)(n,r,t))}function Na(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function Pa(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function Fa(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&Pa(e,i)),n}return i._value=t,i}function Ia(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&Na(e,i)),n}return i._value=t,i}function La(e,t){var n=`attr.`+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!=`function`)throw Error();var r=Zt(e);return this.tween(n,(r.local?Fa:Ia)(r,t))}function Ra(e,t){return function(){_a(this,e).delay=+t.apply(this,arguments)}}function za(e,t){return t=+t,function(){_a(this,e).delay=t}}function Ba(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?Ra:za)(t,e)):Z(this.node(),t).delay}function Va(e,t){return function(){X(this,e).duration=+t.apply(this,arguments)}}function Ha(e,t){return t=+t,function(){X(this,e).duration=t}}function Ua(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?Va:Ha)(t,e)):Z(this.node(),t).duration}function Wa(e,t){if(typeof t!=`function`)throw Error();return function(){X(this,e).ease=t}}function Ga(e){var t=this._id;return arguments.length?this.each(Wa(t,e)):Z(this.node(),t).ease}function Ka(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!=`function`)throw Error();X(this,e).ease=n}}function qa(e){if(typeof e!=`function`)throw Error();return this.each(Ka(this._id,e))}function Ja(e){typeof e!=`function`&&(e=un(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=[],c,l=0;l<o;++l)(c=a[l])&&e.call(c,c.__data__,l,a)&&s.push(c);return new Q(r,this._parents,this._name,this._id)}function Ya(e){if(e._id!==this._id)throw Error();for(var t=this._groups,n=e._groups,r=t.length,i=n.length,a=Math.min(r,i),o=Array(r),s=0;s<a;++s)for(var c=t[s],l=n[s],u=c.length,d=o[s]=Array(u),f,p=0;p<u;++p)(f=c[p]||l[p])&&(d[p]=f);for(;s<r;++s)o[s]=t[s];return new Q(o,this._parents,this._name,this._id)}function Xa(e){return(e+``).trim().split(/^|\s+/).every(function(e){var t=e.indexOf(`.`);return t>=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<i;++o)for(var s=r[o],c=s.length,l=a[o]=Array(c),u,d,f=0;f<c;++f)(u=s[f])&&(d=e.call(u,u.__data__,f,s))&&(`__data__`in u&&(d.__data__=u.__data__),l[f]=d,ga(l[f],t,n,f,l,Z(u,n)));return new Q(a,this._parents,t,n)}function no(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=sn(e));for(var r=this._groups,i=r.length,a=[],o=[],s=0;s<i;++s)for(var c=r[s],l=c.length,u,d=0;d<l;++d)if(u=c[d]){for(var f=e.call(u,u.__data__,d,c),p,m=Z(u,n),h=0,g=f.length;h<g;++h)(p=f[h])&&ga(p,t,n,h,f,m);a.push(f),o.push(u)}return new Q(a,o,t,n)}var ro=qr.prototype.constructor;function io(){return new ro(this._groups,this._parents)}function ao(e,t){var n,r,i;return function(){var a=B(this,e),o=(this.style.removeProperty(e),B(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}function oo(e){return function(){this.style.removeProperty(e)}}function so(e,t,n){var r,i=n+``,a;return function(){var o=B(this,e);return o===i?null:o===r?a:a=t(r=o,n)}}function co(e,t,n){var r,i,a;return function(){var o=B(this,e),s=n(this),c=s+``;return s??(c=s=(this.style.removeProperty(e),B(this,e))),o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s))}}function lo(e,t){var n,r,i,a=`style.`+t,o=`end.`+a,s;return function(){var c=X(this,e),l=c.on,u=c.value[a]==null?s||=oo(t):void 0;(l!==n||i!==u)&&(r=(n=l).copy()).on(o,i=u),c.on=r}}function uo(e,t,n){var r=(e+=``)==`transform`?Ki:Ta;return t==null?this.styleTween(e,ao(e,r)).on(`end.style.`+e,oo(e)):typeof t==`function`?this.styleTween(e,co(e,r,wa(this,`style.`+e,t))).each(lo(this._id,e)):this.styleTween(e,so(e,r,t),n).on(`end.style.`+e,null)}function fo(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function po(e,t,n){var r,i;function a(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&fo(e,a,n)),r}return a._value=t,a}function mo(e,t,n){var r=`style.`+(e+=``);if(arguments.length<2)return(r=this.tween(r))&&r._value;if(t==null)return this.tween(r,null);if(typeof t!=`function`)throw Error();return this.tween(r,po(e,t,n??``))}function ho(e){return function(){this.textContent=e}}function go(e){return function(){this.textContent=e(this)??``}}function _o(e){return this.tween(`text`,typeof e==`function`?go(wa(this,`text`,e)):ho(e==null?``:e+``))}function vo(e){return function(t){this.textContent=e.call(this,t)}}function yo(e){var t,n;function r(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&vo(r)),t}return r._value=e,r}function bo(e){var t=`text`;if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!=`function`)throw Error();return this.tween(t,yo(e))}function xo(){for(var e=this._name,t=this._id,n=To(),r=this._groups,i=r.length,a=0;a<i;++a)for(var o=r[a],s=o.length,c,l=0;l<s;++l)if(c=o[l]){var u=Z(c,t);ga(c,e,n,l,o,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new Q(r,this._parents,e,n)}function So(){var e,t,n=this,r=n._id,i=n.size();return new Promise(function(a,o){var s={value:o},c={value:function(){--i===0&&a()}};n.each(function(){var n=X(this,r),i=n.on;i!==e&&(t=(e=i).copy(),t._.cancel.push(s),t._.interrupt.push(s),t._.end.push(c)),n.on=t}),i===0&&a()})}var Co=0;function Q(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function wo(e){return qr().transition(e)}function To(){return++Co}var $=qr.prototype;Q.prototype=wo.prototype={constructor:Q,select:to,selectAll:no,selectChild:$.selectChild,selectChildren:$.selectChildren,filter:Ja,merge:Ya,selection:io,transition:xo,call:$.call,nodes:$.nodes,node:$.node,size:$.size,empty:$.empty,each:$.each,on:Qa,attr:Ma,attrTween:La,style:uo,styleTween:mo,text:_o,textTween:bo,remove:eo,tween:Ca,delay:Ba,duration:Ua,ease:Ga,easeVarying:qa,end:So,[Symbol.iterator]:$[Symbol.iterator]};function Eo(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var Do={time:null,delay:0,duration:250,ease:Eo};function Oo(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw Error(`transition ${t} not found`);return n}function ko(e){var t,n;e instanceof Q?(t=e._id,e=e._name):(t=To(),(n=Do).time=ia(),e=e==null?null:e+``);for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var o=r[a],s=o.length,c,l=0;l<s;++l)(c=o[l])&&ga(c,e,t,l,o,n||Oo(c,t));return new Q(r,this._parents,e,t)}qr.prototype.interrupt=ba,qr.prototype.transition=ko;var{abs:Ao,max:jo,min:Mo}=Math;[`w`,`e`].map(No),[`n`,`s`].map(No),[`n`,`w`,`e`,`s`,`nw`,`ne`,`sw`,`se`].map(No);function No(e){return{type:e}}function Po(e){var t=0,n=e.children,r=n&&n.length;if(!r)t=1;else for(;--r>=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<s;++o)r.push(a[o]);for(;n=i.pop();)e.call(t,n,++c,this);return this}function zo(e,t){let n=-1;for(let r of this)if(e.call(t,r,++n,this))return r}function Bo(e){return this.eachAfter(function(t){for(var n=+e(t.data)||0,r=t.children,i=r&&r.length;--i>=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<a;++i)n.push(r[i]);while(n.length)}function Yo(e,t){e instanceof Map?(e=[void 0,e],t===void 0&&(t=Qo)):t===void 0&&(t=Zo);for(var n=new ts(e),r,i=[n],a,o,s,c;r=i.pop();)if((o=t(r.data))&&(c=(o=Array.from(o)).length))for(r.children=o,s=c-1;s>=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.x<l.x&&(l=e),e.x>u.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;t<d&&(d=t),t>f&&(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.firstSeen<r&&(r=e.firstSeen),e.lastSeen&&e.lastSeen>i&&(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}<br/>${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}: <b>${e}</b> (${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`<b>${n[this.x]||this.x}</b><br/>${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}; |