import{r as e}from"./QTnfLwEv.js";import{B as t,Ct as n,D as r,G as i,H as a,J as o,Q as s,T as c,V as l,Y as u,_ as d,b as f,c as p,d as m,it as h,lt as g,s as _,v,vt as y,wt as b,x,xt as S,y as C}from"./CaGtQlYh.js";import{H as w,It as T,K as ee,M as E,N as te,Ot as D,V as ne,W as O,Wt as k,Y as re,Z as ie,_ as ae,c as A,d as j,l as M,m as oe,o as se,p as N,tt as P,u as F,v as ce,zt as le}from"#entry";import{t as I}from"./CJgAejf_.js";import{a as L,b as ue,o as de,u as R}from"./CsU6pgHx.js";import{n as z,t as B}from"./DhTvfVif.js";import{t as fe}from"./BShnNZNf.js";import{t as V}from"./CxiWMChH.js";import{t as H}from"./BcteWY0Z.js";var U={class:`flex h-full w-full flex-col`},W={class:`mb-4 flex items-center gap-2 font-semibold text-base-content`},G={class:`flex-1 touch-pan-y overflow-y-auto pr-2`},K=[`onClick`],q={class:`flex items-center justify-between gap-2`},J={class:`flex items-center gap-3 text-[10px] font-bold opacity-60`},Y={class:`flex items-center gap-1`},X={class:`flex items-center gap-1`},pe={key:0,class:`py-8 text-center text-sm text-base-content/60`},me=Object.assign(r({__name:`TrafficRankings`,props:{title:{},icon:{},data:{},selectedRow:{}},emits:[`select`],setup(e,{emit:t}){let n=t,{t:r}=D();return(t,s)=>(a(),x(`div`,U,[v(`div`,W,[e.icon?(a(),C(o(e.icon),{key:0,size:20})):f(``,!0),v(`h3`,null,b(e.title),1)]),v(`div`,G,[(a(!0),x(m,null,i(e.data,t=>(a(),x(`div`,{key:t.label,class:S([`mb-2 flex cursor-pointer flex-col gap-1 rounded-lg p-2 transition-colors hover:bg-base-content/5`,{"bg-primary/10! shadow-sm":e.selectedRow===t.label}]),onClick:e=>n(`select`,t.label)},[v(`div`,q,[v(`span`,{class:S([`min-w-0 flex-1 truncate font-mono text-sm font-medium`,e.selectedRow===t.label?`text-primary`:`text-base-content`])},b(t.label),3),v(`span`,{class:S([`shrink-0 text-xs font-black`,e.selectedRow===t.label?`text-primary`:`text-base-content/80`])},b(y(L)(t.total)),3)]),v(`div`,J,[v(`div`,Y,[s[0]||=v(`span`,{class:`uppercase opacity-50`},`↑`,-1),v(`span`,null,b(y(L)(t.upload)),1)]),v(`div`,X,[s[1]||=v(`span`,{class:`uppercase opacity-50`},`↓`,-1),v(`span`,null,b(y(L)(t.download)),1)])])],10,K))),128)),e.data.length?f(``,!0):(a(),x(`div`,pe,b(y(r)(`noData`)),1))])]))}}),{__name:`TrafficRankings`}),Z={class:`flex h-full w-full flex-col`},Q={key:0,class:`flex items-center justify-center gap-2 px-4 py-2`},he={class:`text-lg font-bold tracking-wider text-base-content uppercase`},ge=Object.assign(r({__name:`TrafficTrendChart`,props:{data:{},startTime:{},endTime:{},isLoading:{type:Boolean},title:{}},setup(e){let n=e,{t:r,locale:i}=D(),o=I(),s=g(),c,d,p,m=()=>{if(!s.value||!d)return;let e=R();c=d.chart(s.value,{chart:{type:`areaspline`,backgroundColor:`transparent`},title:{text:void 0},credits:{enabled:!1},accessibility:{enabled:!1},xAxis:{type:`datetime`,min:n.startTime,max:n.endTime,labels:{style:{color:e.textColor}},lineColor:e.lineColor,tickColor:e.tickColor},yAxis:{title:{text:void 0},labels:{style:{color:e.textColor},formatter(){return L(this.value)}},gridLineColor:e.gridLineColor,min:0},legend:{itemStyle:{color:e.textColor}},tooltip:{shared:!0,formatter(){let e=`${d.dateFormat(`%Y-%m-%d %H:%M`,this.x)}
`;return this.points?.forEach(t=>{e+=`\u25CF ${t.series.name}: ${L(t.y)}
`}),e}},plotOptions:{areaspline:{fillOpacity:.15,marker:{enabled:!1},lineWidth:1.5}},series:[{type:`areaspline`,name:r(`upload`),data:[],color:e.seriesColors[0]},{type:`areaspline`,name:r(`download`),data:[],color:e.seriesColors[1]}]})},h=()=>{if(!c)return;let e=n.data.map(e=>[e.timestamp,e.upload]),t=n.data.map(e=>[e.timestamp,e.download]);c.series[0]?.setData(e,!1),c.series[1]?.setData(t,!1),c.xAxis[0]?.update({min:n.startTime,max:n.endTime},!0)};return u(()=>n.data,h,{deep:!0}),u([()=>n.startTime,()=>n.endTime],()=>{c&&c.xAxis[0]?.update({min:n.startTime,max:n.endTime},!0)}),u(()=>o.curTheme,()=>{if(c){let e=R();c.update({xAxis:{labels:{style:{color:e.textColor}},lineColor:e.lineColor},yAxis:{labels:{style:{color:e.textColor}},gridLineColor:e.gridLineColor},legend:{itemStyle:{color:e.textColor}}})}}),u(i,()=>{c&&(c.series[0]?.update({type:`areaspline`,name:r(`upload`)},!1),c.series[1]?.update({type:`areaspline`,name:r(`download`)},!0))}),t(async()=>{d=await V(),m(),h(),p=new ResizeObserver(()=>{c&&s.value&&c.setSize(s.value.clientWidth,s.value.clientHeight,!0)}),s.value&&p.observe(s.value)}),l(()=>{p?.disconnect(),c?.destroy(),c=void 0}),(t,n)=>(a(),x(`div`,Z,[e.title?(a(),x(`div`,Q,[v(`h3`,he,b(e.title),1)])):f(``,!0),v(`div`,{ref_key:`containerRef`,ref:s,class:S([`min-h-0 w-full flex-1 transition-opacity`,{"opacity-50":e.isLoading}])},null,2)]))}}),{__name:`TrafficTrendChart`}),_e={class:`relative flex h-[600px] shrink-0 flex-col overflow-hidden rounded-2xl border border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] bg-base-200/50 shadow-[0_0_0_1px_color-mix(in_oklch,var(--color-primary)_20%,transparent),0_4px_24px_-4px_color-mix(in_oklch,var(--color-primary)_10%,transparent)] backdrop-blur-[4px] transition-all duration-300 hover:border-primary/30 hover:shadow-[0_0_0_1px_color-mix(in_oklch,var(--color-primary)_30%,transparent),0_8px_32px_-4px_color-mix(in_oklch,var(--color-primary)_10%,transparent)]`},ve={class:`flex items-center gap-3 border-b border-[color-mix(in_oklch,var(--color-base-content)_5%,transparent)] bg-base-300/30 px-4 py-3`},ye={class:`font-semibold tracking-tight text-base-content`},be={class:`relative hidden w-64 sm:block`},xe=[`placeholder`],Se={class:`min-h-0 flex-1 overflow-auto`},Ce={class:`hidden md:table-header-group`},we={class:`sticky top-0 z-10 bg-base-200`},Te={class:`flex items-center gap-1`},Ee={class:`flex items-center gap-1`},De={class:`flex items-center gap-1`},Oe={class:`flex items-center justify-end gap-1 md:justify-start`},ke=[`onClick`],Ae={class:`flex-1 md:table-cell`},je={class:`flex flex-col gap-0.5 py-1`},Me={class:`flex items-center gap-2 font-mono text-xs`},Ne={class:`shrink-0 opacity-30`},Pe={class:`truncate`},Fe={class:`flex items-center gap-3 pl-5 text-[10px] font-bold opacity-50 lg:hidden`},Ie={class:`flex items-center gap-0.5`},Le={class:`flex items-center gap-0.5`},Re={class:`hidden lg:table-cell`},ze={class:`hidden lg:table-cell`},Be={class:`font-mono text-xs opacity-70`},Ve={class:`text-right md:table-cell md:text-left`},He={class:`text-xs font-black text-primary`},Ue={key:0,class:`animate-in fade-in slide-in-from-top-1 block w-full md:table-row`},We={colspan:`4`,class:`block w-full px-2 py-1 md:table-cell md:p-4`},Ge={class:`grid w-full grid-cols-2 gap-2 sm:grid-cols-2 sm:gap-4 lg:grid-cols-3`},Ke=[`title`],qe={class:`flex flex-col gap-1 text-[9px] font-bold sm:text-[10px]`},Je={class:`flex items-center justify-between border-b border-base-content/5 pb-1`},Ye={class:`flex items-center gap-1 opacity-50`},Xe={class:`font-black text-primary`},Ze={class:`flex flex-wrap items-center justify-between gap-x-1 opacity-60`},Qe={class:`whitespace-nowrap`},$e={class:`whitespace-nowrap`},et={key:0,class:`flex items-center justify-center px-4 py-12 text-sm text-base-content/50 italic`},tt={class:`flex shrink-0 items-center justify-between gap-4 border-t border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] bg-base-200/60 p-3`},nt={class:`flex items-center gap-3`},rt=[`value`],it={class:`text-xs font-bold tracking-wider whitespace-nowrap text-base-content/60 uppercase`},at=Object.assign(r({__name:`TrafficDetailsTable`,props:{selectedRow:{},activeView:{},subStats:{},proxyStatsMap:{},selectedSubRow:{}},emits:[`subRowClick`],setup(e,{emit:t}){let r=e,l=t,{t:w}=D(),ee=I(),ne=d(()=>ee.tableSizeClassName(ee.connectionsTableSize)),O=g(``),k=g(0),A=T(`traffic_sub_page_size`,50),j=g(`total`),M=g(`desc`),se=[20,50,100,200],P=e=>{j.value===e?M.value=M.value===`asc`?`desc`:`asc`:(j.value=e,M.value=`desc`)},F=d(()=>{let e=[...r.subStats||[]],t=e;if(O.value){let n=O.value.toLowerCase();t=e.filter(e=>e.label.toLowerCase().includes(n))}return t.sort((e,t)=>{let n=0;return n=j.value===`label`?e.label.localeCompare(t.label):e[j.value]-t[j.value],M.value===`asc`?n:-n})}),le=d(()=>Math.max(1,Math.ceil(F.value.length/A.value))),ue=(e,t)=>{let n=[];n.push(0);for(let r=Math.max(1,e-1);r<=Math.min(t-2,e+1);r++)n.includes(r)||n.push(r);return t>1&&!n.includes(t-1)&&n.push(t-1),n.sort((e,t)=>e-t)},de=d(()=>ue(k.value,le.value)),R=d(()=>{let e=k.value*A.value;return F.value.slice(e,e+A.value)}),z=d(()=>{let e=F.value.length,t=k.value*A.value+1,n=Math.min((k.value+1)*A.value,e);return e>0?`${t}-${n} / ${e}`:`0 / 0`}),B=e=>`${r.selectedRow}:${e}`,fe=e=>r.proxyStatsMap[B(e)]||[],V=e=>j.value===e?M.value===`asc`?oe:N:ae,U=e=>j.value===e?`text-primary`:`opacity-30`;return u(()=>r.selectedRow,()=>{k.value=0}),(t,r)=>{let u=H;return a(),x(`div`,_e,[v(`div`,ve,[c(y(E),{size:20,class:`text-primary`}),v(`h3`,ye,b(y(w)(`dataUsage`))+b(y(w)(`details`)),1),r[9]||=v(`div`,{class:`flex-1`},null,-1),v(`div`,be,[c(y(ce),{size:14,class:`absolute top-1/2 left-3 -translate-y-1/2 text-base-content/40`}),s(v(`input`,{"onUpdate:modelValue":r[0]||=e=>h(O)?O.value=e:null,type:`search`,placeholder:y(w)(`search`),class:`w-full rounded-lg border border-[color-mix(in_oklch,var(--color-base-content)_12%,transparent)] bg-base-200/60 py-1.5 pr-3 pl-9 text-[0.8125rem] text-base-content transition-all duration-200 placeholder:text-base-content/40 focus:border-primary focus:bg-base-100 focus:outline-none`},null,8,xe),[[p,y(O)]])])]),v(`div`,Se,[v(`table`,{class:S([`table w-full border-collapse`,y(ne)])},[v(`thead`,Ce,[v(`tr`,we,[v(`th`,{class:`cursor-pointer border-b border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] px-4 py-3 text-left text-xs font-semibold tracking-wide whitespace-nowrap text-base-content/70 uppercase transition-colors hover:bg-base-content/5`,onClick:r[1]||=e=>P(`label`)},[v(`div`,Te,[v(`span`,null,b(e.activeView===`host`?y(w)(`devices`):y(w)(`host`)),1),(a(),C(o(V(`label`)),{size:14,class:S(U(`label`))},null,8,[`class`]))])]),v(`th`,{class:`hidden cursor-pointer border-b border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] px-4 py-3 text-left text-xs font-semibold tracking-wide whitespace-nowrap text-base-content/70 uppercase transition-colors hover:bg-base-content/5 lg:table-cell`,onClick:r[2]||=e=>P(`upload`)},[v(`div`,Ee,[v(`span`,null,b(y(w)(`upload`)),1),(a(),C(o(V(`upload`)),{size:14,class:S(U(`upload`))},null,8,[`class`]))])]),v(`th`,{class:`hidden cursor-pointer border-b border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] px-4 py-3 text-left text-xs font-semibold tracking-wide whitespace-nowrap text-base-content/70 uppercase transition-colors hover:bg-base-content/5 lg:table-cell`,onClick:r[3]||=e=>P(`download`)},[v(`div`,De,[v(`span`,null,b(y(w)(`download`)),1),(a(),C(o(V(`download`)),{size:14,class:S(U(`download`))},null,8,[`class`]))])]),v(`th`,{class:`cursor-pointer border-b border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] px-4 py-3 text-right text-xs font-semibold tracking-wide whitespace-nowrap text-base-content/70 uppercase transition-colors hover:bg-base-content/5 md:text-left`,onClick:r[4]||=e=>P(`total`)},[v(`div`,Oe,[v(`span`,null,b(y(w)(`total`)),1),(a(),C(o(V(`total`)),{size:14,class:S(U(`total`))},null,8,[`class`]))])])])]),v(`tbody`,null,[(a(!0),x(m,null,i(y(R),(t,o)=>(a(),x(m,{key:t.label},[v(`tr`,{class:S([`animate-in fade-in slide-in-from-bottom-1 m-1 flex cursor-pointer flex-wrap rounded-lg bg-base-100 p-2 transition-all duration-200 hover:bg-base-content/5 hover:shadow-[0_2px_8px_rgba(var(--color-base-content),0.08)] md:m-0 md:table-row md:rounded-none md:bg-transparent md:p-0 md:shadow-none md:even:bg-base-content/5 md:hover:bg-base-content/10 md:hover:shadow-none`,{"bg-primary/10! md:bg-primary/10!":e.selectedSubRow===B(t.label)}]),style:n({animationDelay:`${o%20*15}ms`}),onClick:n=>l(`subRowClick`,e.selectedRow,t.label)},[v(`td`,Ae,[v(`div`,je,[v(`div`,Me,[v(`div`,Ne,[e.selectedSubRow===B(t.label)?(a(),C(y(ie),{key:0,size:14})):(a(),C(y(re),{key:1,size:14}))]),v(`span`,Pe,b(t.label),1)]),v(`div`,Fe,[v(`div`,Ie,[r[10]||=v(`span`,{class:`opacity-50`},`↑`,-1),v(`span`,null,b(y(L)(t.upload)),1)]),v(`div`,Le,[r[11]||=v(`span`,{class:`opacity-50`},`↓`,-1),v(`span`,null,b(y(L)(t.download)),1)])])])]),v(`td`,Re,b(y(L)(t.upload)),1),v(`td`,ze,[v(`span`,Be,b(y(L)(t.download)),1)]),v(`td`,Ve,[v(`span`,He,b(y(L)(t.total)),1)])],14,ke),e.selectedSubRow===B(t.label)?(a(),x(`tr`,Ue,[v(`td`,We,[v(`div`,Ge,[(a(!0),x(m,null,i(fe(t.label),e=>(a(),x(`div`,{key:e.label,class:`flex h-full flex-col justify-between gap-1 rounded-lg border border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] bg-base-300/30 p-2 shadow-sm transition-all hover:border-primary/30 sm:rounded-xl sm:p-3`},[v(`span`,{class:`mb-1 truncate border-b border-base-content/5 pb-1 font-mono text-[9px] font-bold text-secondary sm:text-[10px]`,title:e.label},b(e.label),9,Ke),v(`div`,qe,[v(`div`,Je,[v(`div`,Ye,[c(y(te),{size:10}),v(`span`,null,b(e.count),1)]),v(`span`,Xe,b(y(L)(e.total)),1)]),v(`div`,Ze,[v(`span`,Qe,`↑ `+b(y(L)(e.upload)),1),v(`span`,$e,`↓ `+b(y(L)(e.download)),1)])])]))),128))])])])):f(``,!0)],64))),128))])],2),y(R).length?f(``,!0):(a(),x(`div`,et,[v(`span`,null,b(y(w)(`noDetailedData`)),1)]))]),v(`div`,tt,[v(`div`,nt,[s(v(`select`,{"onUpdate:modelValue":r[5]||=e=>h(A)?A.value=e:null,class:`cursor-pointer rounded-md border border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] bg-base-100 px-2.5 py-1.5 text-[0.8125rem] text-base-content transition-colors duration-200 focus:border-primary focus:outline-none`},[(a(),x(m,null,i(se,e=>v(`option`,{key:e,value:e},b(e),9,rt)),64))],512),[[_,y(A),void 0,{number:!0}]]),v(`span`,it,b(y(z)),1)]),c(u,{"current-page":y(k),"total-pages":y(le),"visible-pages":y(de),onGoToPage:r[6]||=e=>k.value=e,onPrevious:r[7]||=e=>k.value--,onNext:r[8]||=e=>k.value++},null,8,[`current-page`,`total-pages`,`visible-pages`])])])}}}),{__name:`TrafficDetailsTable`}),$=e(ue(),1),ot=()=>({getAggregatedData:async(e,t,n)=>{let r=await z.query(t,n),i=new Map;return r.forEach(t=>{let n=``;switch(e){case`sourceIP`:n=t.sourceIP;break;case`host`:n=t.host;break;case`outbound`:n=t.outbound;break;case`process`:n=t.process;break;case`inboundUser`:n=t.inboundUser;break}let r=i.get(n);r?(r.upload+=t.upload,r.download+=t.download,r.total+=t.upload+t.download,r.count+=1):i.set(n,{label:n,upload:t.upload,download:t.download,total:t.upload+t.download,count:1})}),Array.from(i.values())},getSubStatsByHost:async(e,t,n,r)=>{let i=(await z.query(n,r)).filter(n=>{switch(e){case`sourceIP`:return n.sourceIP===t;case`outbound`:return n.outbound===t;case`process`:return n.process===t;case`inboundUser`:return n.inboundUser===t}return!1}),a=new Map;return i.forEach(e=>{let t=e.host,n=a.get(t);n?(n.upload+=e.upload,n.download+=e.download,n.total+=e.upload+e.download,n.count+=1):a.set(t,{label:t,upload:e.upload,download:e.download,total:e.upload+e.download,count:1})}),Array.from(a.values()).sort((e,t)=>t.total-e.total)},getProxyStatsByHost:async(e,t,n,r,i)=>{let a=(await z.query(r,i)).filter(r=>{if(r.host!==n)return!1;switch(e){case`sourceIP`:return r.sourceIP===t;case`process`:return r.process===t;case`outbound`:return r.outbound===t;case`inboundUser`:return r.inboundUser===t}return!1}),o=new Map;return a.forEach(e=>{let t=e.outbound,n=o.get(t);n?(n.upload+=e.upload,n.download+=e.download,n.total+=e.upload+e.download,n.count+=1):o.set(t,{label:t,upload:e.upload,download:e.download,total:e.upload+e.download,count:1})}),Array.from(o.values()).sort((e,t)=>t.total-e.total)},getDevicesByHost:async(e,t,n)=>{let r=(await z.query(t,n)).filter(t=>t.host===e),i=new Map;return r.forEach(e=>{let t=e.sourceIP,n=i.get(t);n?(n.upload+=e.upload,n.download+=e.download,n.total+=e.upload+e.download,n.count+=1):i.set(t,{label:t,upload:e.upload,download:e.download,total:e.upload+e.download,count:1})}),Array.from(i.values()).sort((e,t)=>t.total-e.total)},getDevicesByProxyAndHost:async(e,t,n,r)=>{let i=(await z.query(n,r)).filter(n=>n.outbound===e&&n.host===t),a=new Map;return i.forEach(e=>{let t=e.sourceIP,n=a.get(t);n?(n.upload+=e.upload,n.download+=e.download,n.total+=e.upload+e.download,n.count+=1):a.set(t,{label:t,upload:e.upload,download:e.download,total:e.upload+e.download,count:1})}),Array.from(a.values()).sort((e,t)=>t.total-e.total)},getHostDetailStats:async(e,t,n)=>{let r=(await z.query(t,n)).filter(t=>t.host===e),i=new Map;return r.forEach(e=>{let t=`${e.sourceIP} → ${e.outbound}`,n=i.get(t);n?(n.upload+=e.upload,n.download+=e.download,n.total+=e.upload+e.download,n.count+=1):i.set(t,{label:t,upload:e.upload,download:e.download,total:e.upload+e.download,count:1})}),Array.from(i.values()).sort((e,t)=>t.total-e.total)},getTrafficTrend:async(e,t,n)=>{let r=await z.query(e,t),i=new Map;for(let r=e;r<=t;r+=n){let e=Math.floor(r/n)*n;i.set(e,{upload:0,download:0})}return r.forEach(e=>{let t=Math.floor(e.timestamp/n)*n;if(i.has(t)){let n=i.get(t);n.upload+=e.upload,n.download+=e.download}}),Array.from(i.entries()).map(([e,t])=>({timestamp:e,...t})).sort((e,t)=>e.timestamp-t.timestamp)}}),st={class:`flex h-full flex-col gap-4 overflow-hidden`},ct={class:`animate-fade-slide-in flex shrink-0 flex-wrap items-center justify-between gap-3 px-1`},lt={class:`flex shrink-0 gap-1 rounded-lg border border-[color-mix(in_oklch,var(--color-base-content)_12%,transparent)] bg-base-200/60 p-1`},ut=[`onClick`],dt={class:`hidden sm:inline`},ft={class:`flex items-center gap-2`},pt={key:0,class:`animate-in fade-in zoom-in-95 flex items-center gap-1`},mt={class:`flex items-center gap-1`},ht={class:`hidden text-[0.75rem] text-base-content/50 md:inline`},gt={class:`relative`},_t=[`title`],vt=[`value`],yt={class:`flex items-center gap-1`},bt={class:`hidden text-[0.75rem] text-base-content/50 md:inline`},xt={class:`relative`},St=[`title`],Ct=[`value`],wt=[`title`],Tt={class:`min-h-0 flex-1 overflow-y-auto pr-1`},Et={class:`flex flex-col gap-4`},Dt={class:`grid shrink-0 grid-cols-2 gap-3 xl:grid-cols-4`},Ot={class:`animate-fade-slide-in flex h-16 items-center gap-3 rounded-2xl border border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] bg-base-200/50 p-3 shadow-sm [animation-delay:50ms] xl:h-20`},kt={class:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary xl:h-10 xl:w-10 xl:rounded-xl`},At={class:`flex min-w-0 flex-col`},jt={class:`mb-1 truncate text-[7px] leading-none font-black tracking-widest uppercase opacity-40 xl:text-[9px]`},Mt={class:`text-sm leading-tight font-black xl:text-lg`},Nt={class:`animate-fade-slide-in flex h-16 items-center gap-3 rounded-2xl border border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] bg-base-200/50 p-3 shadow-sm [animation-delay:100ms] xl:h-20`},Pt={class:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-success/10 text-success xl:h-10 xl:w-10 xl:rounded-xl`},Ft={class:`flex min-w-0 flex-col`},It={class:`mb-1 truncate text-[7px] leading-none font-black tracking-widest uppercase opacity-40 xl:text-[9px]`},Lt={class:`text-sm leading-tight font-black xl:text-lg`},Rt={class:`animate-fade-slide-in flex h-16 items-center gap-3 rounded-2xl border border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] bg-base-200/50 p-3 shadow-sm [animation-delay:150ms] xl:h-20`},zt={class:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-info/10 text-info xl:h-10 xl:w-10 xl:rounded-xl`},Bt={class:`flex min-w-0 flex-col`},Vt={class:`mb-1 truncate text-[7px] leading-none font-black tracking-widest uppercase opacity-40 xl:text-[9px]`},Ht={class:`text-sm leading-tight font-black xl:text-lg`},Ut={class:`animate-fade-slide-in relative flex h-16 items-center gap-3 overflow-hidden rounded-2xl border border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] bg-base-200/50 p-3 shadow-sm [animation-delay:200ms] xl:h-20`},Wt={class:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-secondary/10 text-secondary xl:h-10 xl:w-10 xl:rounded-xl`},Gt={class:`flex min-w-0 flex-col`},Kt={class:`mb-1 truncate text-[7px] leading-none font-black tracking-widest uppercase opacity-40 xl:text-[9px]`},qt={class:`text-sm leading-tight font-black text-secondary xl:text-lg`},Jt={class:`absolute top-1 right-2 flex origin-right scale-75 items-center gap-1 opacity-30 xl:top-2 xl:right-3 xl:scale-100`},Yt={class:`text-[8px] font-black tracking-wider uppercase xl:text-[10px]`},Xt={class:`grid h-auto shrink-0 grid-cols-1 gap-4 xl:h-[320px] xl:grid-cols-4`},Zt={class:`animate-fade-slide-in col-span-1 min-h-[300px] w-full overflow-hidden rounded-xl border border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] bg-base-200 p-4 shadow-sm transition-all duration-200 [animation-delay:250ms] hover:border-[color-mix(in_oklch,var(--color-base-content)_20%,transparent)] xl:h-full`},Qt={class:`animate-fade-slide-in col-span-1 min-h-[320px] min-w-0 overflow-hidden rounded-xl border border-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)] bg-base-200 p-2 shadow-sm transition-all duration-200 [animation-delay:300ms] hover:border-[color-mix(in_oklch,var(--color-base-content)_20%,transparent)] xl:col-span-3 xl:h-full`},$t={class:`animate-fade-slide-in [animation-delay:350ms]`},en=r({__name:`traffic`,setup(e){let{t}=D(),n=B(),{getAggregatedData:r,getSubStatsByHost:l,getProxyStatsByHost:E,getTrafficTrend:te,getDevicesByHost:re,getDevicesByProxyAndHost:ie}=ot();k({title:d(()=>t(`dataUsage`))});let ae=g(`total`),oe=g(`desc`),N=T(`traffic_active_view`,`sourceIP`),ce=d(()=>[{label:t(`lastHour`),value:36e5},{label:t(`lastDay`),value:864e5},{label:t(`lastMonth`),value:2592e6},{label:t(`customRange`),value:-1}]),I=T(`traffic_time_range`,36e5),ue=d(()=>[{label:t(`forever`),value:-1},{label:t(`lastHour`),value:36e5},{label:t(`lastDay`),value:864e5},{label:t(`lastMonth`),value:2592e6}]),R=T(`traffic_data_retention`,-1),z=T(`traffic_custom_start`,(0,$.default)().subtract(1,`day`).format(`YYYY-MM-DDTHH:mm`)),V=T(`traffic_custom_end`,(0,$.default)().format(`YYYY-MM-DDTHH:mm`)),H=g([]),U=g([]),W=g(null),G=g(null),K=g({}),q=g({}),J=()=>{if(I.value===-1)return{startTime:(0,$.default)(z.value).valueOf(),endTime:(0,$.default)(V.value).valueOf()};let e=Date.now();return{endTime:e,startTime:e-I.value}},Y=async()=>{let{startTime:e,endTime:t}=J(),n=t-e,i=6e4;i=n<=36e5?6e4:n<=864e5?3e5:n<=6048e5?36e5:864e5;try{let[n,a]=await Promise.all([r(N.value,e,t),te(e,t,i)]);H.value=n,U.value=a;let o=Z.value;!W.value&&o.length>0?_e(o[0].label):W.value&&await ve(W.value)}catch(e){console.error(`Failed to fetch traffic data`,e)}};u([N,I],([e,t],[n,r])=>{if(t===-1&&r!==-1){let{startTime:e,endTime:t}=J();z.value=(0,$.default)(e).format(`YYYY-MM-DDTHH:mm`),V.value=(0,$.default)(t).format(`YYYY-MM-DDTHH:mm`)}W.value=null,G.value=null,K.value={},q.value={},Y()},{immediate:!0}),u(le(),fe(e=>{e&&I.value!==-1&&Y()},3e4));let X=d(()=>[{label:t(`devices`),value:`sourceIP`,icon:w},{label:t(`user`),value:`inboundUser`,icon:A},{label:t(`host`),value:`host`,icon:se},{label:t(`proxies`),value:`outbound`,icon:P},{label:t(`process`),value:`process`,icon:O}]),pe=d(()=>X.value.find(e=>e.value===N.value)),Z=d(()=>{let e=[...H.value],t=ae.value,n=oe.value;return e.sort((e,r)=>{let i=0;return i=t===`label`?e.label.localeCompare(r.label):e[t]-r[t],n===`asc`?i:-i})}),Q=d(()=>{let e=H.value,t=e.reduce((e,t)=>e+t.upload,0),n=e.reduce((e,t)=>e+t.download,0),{startTime:r,endTime:i}=J(),a=de(r,i);return{count:e.length,upload:t,download:n,total:t+n,durationText:a}});async function he(){confirm(t(`confirmClearAll`))&&(await n.clearDataUsage(),await Y())}let _e=async e=>{W.value=e,G.value=null,await ve(e)},ve=async e=>{let{startTime:t,endTime:n}=J();N.value===`host`?K.value[e]=await re(e,t,n):K.value[e]=await l(N.value,e,t,n)},ye=async(e,t)=>{let n=`${e}:${t}`;if(G.value===n){G.value=null;return}G.value=n;let{startTime:r,endTime:i}=J();N.value===`host`?q.value[n]=await E(`sourceIP`,t,e,r,i):N.value===`outbound`?q.value[n]=await ie(e,t,r,i):q.value[n]=await E(N.value,e,t,r,i)},be=d(()=>X.value.find(e=>e.value===N.value)?.label||t(`name`));return(e,n)=>{let r=me,l=ge,u=at;return a(),x(`div`,st,[v(`div`,ct,[v(`div`,lt,[(a(!0),x(m,null,i(y(X),e=>(a(),x(`button`,{key:e.value,class:S([`flex cursor-pointer items-center gap-2 rounded-md border-none bg-transparent px-3 py-1.5 text-[0.8125rem] font-medium text-base-content/60 transition-all duration-200 hover:bg-base-content/5 hover:text-base-content`,{"bg-primary! text-primary-content! shadow-[0_2px_8px_color-mix(in_oklch,var(--color-primary)_30%,transparent)]":y(N)===e.value}]),onClick:t=>N.value=e.value},[(a(),C(o(e.icon),{size:16})),v(`span`,dt,b(e.label),1)],10,ut))),128))]),v(`div`,ft,[y(I)===-1?(a(),x(`div`,pt,[s(v(`input`,{"onUpdate:modelValue":n[0]||=e=>h(z)?z.value=e:null,type:`datetime-local`,class:`rounded-lg border border-[color-mix(in_oklch,var(--color-base-content)_12%,transparent)] bg-base-200/60 px-2 py-1.5 text-[0.75rem] text-base-content focus:border-primary focus:outline-none`,onChange:Y},null,544),[[p,y(z)]]),n[4]||=v(`span`,{class:`text-[10px] opacity-30`},`→`,-1),s(v(`input`,{"onUpdate:modelValue":n[1]||=e=>h(V)?V.value=e:null,type:`datetime-local`,class:`rounded-lg border border-[color-mix(in_oklch,var(--color-base-content)_12%,transparent)] bg-base-200/60 px-2 py-1.5 text-[0.75rem] text-base-content focus:border-primary focus:outline-none`,onChange:Y},null,544),[[p,y(V)]])])):f(``,!0),v(`div`,mt,[v(`span`,ht,b(y(t)(`timeRange`)),1),v(`div`,gt,[s(v(`select`,{"onUpdate:modelValue":n[2]||=e=>h(I)?I.value=e:null,title:y(t)(`timeRange`),class:`cursor-pointer appearance-none rounded-lg border border-[color-mix(in_oklch,var(--color-base-content)_12%,transparent)] bg-base-200/60 py-1.5 pr-8 pl-3 text-[0.8125rem] text-base-content transition-all duration-200 hover:border-[color-mix(in_oklch,var(--color-base-content)_20%,transparent)] focus:border-primary focus:outline-none`,style:{"background-image":`url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E")`,"background-repeat":`no-repeat`,"background-position":`right 0.5rem center`,"background-size":`1rem`}},[(a(!0),x(m,null,i(y(ce),e=>(a(),x(`option`,{key:e.value,value:e.value},b(e.label),9,vt))),128))],8,_t),[[_,y(I),void 0,{number:!0}]])])]),v(`div`,yt,[v(`span`,bt,b(y(t)(`dataRetention`)),1),v(`div`,xt,[s(v(`select`,{"onUpdate:modelValue":n[3]||=e=>h(R)?R.value=e:null,title:y(t)(`dataRetention`),class:`cursor-pointer appearance-none rounded-lg border border-[color-mix(in_oklch,var(--color-base-content)_12%,transparent)] bg-base-200/60 py-1.5 pr-8 pl-3 text-[0.8125rem] text-base-content transition-all duration-200 hover:border-[color-mix(in_oklch,var(--color-base-content)_20%,transparent)] focus:border-primary focus:outline-none`,style:{"background-image":`url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E")`,"background-repeat":`no-repeat`,"background-position":`right 0.5rem center`,"background-size":`1rem`}},[(a(!0),x(m,null,i(y(ue),e=>(a(),x(`option`,{key:e.value,value:e.value},b(e.label),9,Ct))),128))],8,St),[[_,y(R),void 0,{number:!0}]])])]),v(`button`,{class:`flex h-8 w-8 cursor-pointer items-center justify-center rounded-lg border border-[color-mix(in_oklch,var(--color-base-content)_12%,transparent)] bg-base-200/60 text-base-content transition-all duration-200 hover:border-error/30 hover:bg-error/15 hover:text-error`,title:y(t)(`clearAll`),onClick:he},[c(y(F),{size:18})],8,wt)])]),v(`div`,Tt,[v(`div`,Et,[v(`div`,Dt,[v(`div`,Ot,[v(`div`,kt,[(a(),C(o(y(pe)?.icon||y(w)),{size:18}))]),v(`div`,At,[v(`span`,jt,b(y(be)),1),v(`span`,Mt,b(y(Q).count),1)])]),v(`div`,Nt,[v(`div`,Pt,[c(y(M),{size:18})]),v(`div`,Ft,[v(`span`,It,b(y(t)(`upload`)),1),v(`span`,Lt,b(y(L)(y(Q).upload)),1)])]),v(`div`,Rt,[v(`div`,zt,[c(y(ne),{size:18})]),v(`div`,Bt,[v(`span`,Vt,b(y(t)(`download`)),1),v(`span`,Ht,b(y(L)(y(Q).download)),1)])]),v(`div`,Ut,[v(`div`,Wt,[c(y(j),{size:18})]),v(`div`,Gt,[v(`span`,Kt,b(y(t)(`total`)),1),v(`span`,qt,b(y(L)(y(Q).total)),1)]),v(`div`,Jt,[c(y(ee),{size:12}),v(`span`,Yt,b(y(Q).durationText),1)])])]),v(`div`,Xt,[v(`div`,Zt,[c(r,{title:y(t)(`topProxies`).slice(0,2)+y(be),icon:y(pe)?.icon,data:y(Z),"selected-row":y(W),onSelect:_e},null,8,[`title`,`icon`,`data`,`selected-row`])]),v(`div`,Qt,[c(l,{data:y(U),"start-time":J().startTime,"end-time":J().endTime,title:y(t)(`traffic`)},null,8,[`data`,`start-time`,`end-time`,`title`])])]),v(`div`,$t,[y(W)?(a(),C(u,{key:0,"selected-row":y(W),"active-view":y(N),"sub-stats":y(K)[y(W)]||[],"proxy-stats-map":y(q),"selected-sub-row":y(G),onSubRowClick:ye},null,8,[`selected-row`,`active-view`,`sub-stats`,`proxy-stats-map`,`selected-sub-row`])):f(``,!0)])])])])}}});export{en as default};