1 line
35 KiB
JavaScript
1 line
35 KiB
JavaScript
import{B as e,Ct as t,D as n,G as r,H as i,J as a,K as o,L as s,P as c,Q as l,T as u,V as d,Y as f,Z as p,_ as m,b as h,d as g,l as _,lt as v,m as y,n as b,ot as x,tt as S,u as C,v as w,vt as T,wt as E,x as D,xt as O,y as k}from"./CaGtQlYh.js";import{s as A}from"./B794cfQr.js";import{$ as j,A as M,At as N,B as P,C as F,F as ee,It as I,J as te,Kt as L,L as ne,Lt as re,Nt as R,O as ie,Ot as z,P as ae,Pt as oe,R as B,Rt as V,a as se,at as H,h as U,k as ce,kt as W,nt as G,q as K,qt as q,t as J,y as Y}from"#entry";import{h as X}from"./CIa-1CJu.js";import{t as Z}from"./CJgAejf_.js";import{t as le}from"./Ce_uH7zp.js";import{a as Q,i as ue,n as de,o as fe,r as pe}from"./DNKnP_p9.js";import{a as me,i as he,n as ge,o as _e,r as ve,t as ye}from"./CqOBGK95.js";import{_ as $,y as be}from"./DohEsvF1.js";import{u as xe,x as Se}from"./CsU6pgHx.js";import{t as Ce}from"./DhTvfVif.js";import{t as we}from"./DIJlUfKz.js";import{t as Te}from"./CxiWMChH.js";var Ee={class:`flex min-w-0 items-center gap-1 text-sm font-bold whitespace-nowrap uppercase sm:text-xl`},De=Object.assign(n({__name:`LogoText`,setup(e){let t=N(),n=m(()=>!!t.currentEndpoint);return(e,t)=>{let r=W;return i(),D(`div`,Ee,[u(r,{class:`bg-linear-to-br from-primary to-secondary bg-clip-text text-transparent no-underline`,to:n.value?`/`:`/setup`},{default:p(()=>[...t[0]||=[w(`span`,null,`metacube`,-1)]]),_:1},8,[`to`]),t[1]||=w(`span`,{class:`hidden text-base-content min-[400px]:inline`},`(`,-1),t[2]||=w(`a`,{class:`hidden text-primary no-underline transition-transform duration-300 ease-in-out hover:scale-125 hover:rotate-90 min-[400px]:inline-block`,href:`https://github.com/metacubex/metacubexd`,target:`_blank`},` xd `,-1),t[3]||=w(`span`,{class:`hidden text-base-content min-[400px]:inline`},`)`,-1)])}}}),{__name:`LogoText`}),Oe={class:`relative`},ke={class:`m-0 list-none p-1.5`},Ae=[`onClick`],je={key:0,class:`flex h-4 w-4 items-center justify-center text-primary`},Me=Object.assign(n({__name:`LangSwitcher`,setup(n){let{locale:a,locales:o,setLocale:s}=z(),c=m(()=>o.value.map(e=>typeof e==`string`?{code:e,name:e}:e)),l=v(null),f=v(null),_=v(!1),{floatingStyles:x}=de(l,f,{placement:`top`,middleware:[Q(10),ue(),fe({padding:8})],whileElementsMounted:pe});function S(){_.value=!_.value}function A(e){s(e),_.value=!1}function j(e){let t=e.target;!l.value?.contains(t)&&!f.value?.contains(t)&&(_.value=!1)}return e(()=>{document.addEventListener(`click`,j)}),d(()=>{document.removeEventListener(`click`,j)}),(e,n)=>(i(),D(`div`,Oe,[w(`button`,{ref_key:`reference`,ref:l,class:O([`flex h-8 w-8 cursor-pointer items-center justify-center rounded-full border-none bg-transparent text-base-content/70 transition-all duration-200 ease-in-out hover:bg-base-content/10 hover:text-base-content`,{"bg-primary/15 text-primary":T(_)}]),"aria-label":`Change language`,onClick:C(S,[`stop`])},[u(T(ae),{size:18})],2),(i(),k(y,{to:`body`},[u(b,{"enter-active-class":`transition-opacity duration-150`,"leave-active-class":`transition-opacity duration-100`,"enter-from-class":`opacity-0`,"leave-to-class":`opacity-0`},{default:p(()=>[T(_)?(i(),D(`div`,{key:0,ref_key:`floating`,ref:f,style:t(T(x)),class:`z-70 w-40 overflow-hidden rounded-xl border border-base-content/10 bg-base-300/98 shadow-[0_10px_40px_var(--color-base-content)/20,0_0_0_1px_var(--color-base-content)/5] backdrop-blur-[12px]`},[n[1]||=w(`div`,{class:`flex items-center border-b border-base-content/8 bg-base-200/60 px-3 py-2.5`},[w(`span`,{class:`text-[0.6875rem] font-semibold tracking-[0.05em] text-base-content/50 uppercase`},`Language`)],-1),w(`ul`,ke,[(i(!0),D(g,null,r(T(c),e=>(i(),D(`li`,{key:e.code},[w(`button`,{class:O([`flex w-full cursor-pointer items-center justify-between rounded-lg border-none bg-transparent px-2.5 py-2 transition-all duration-150 ease-in-out hover:bg-base-content/8`,{"bg-primary/15 hover:bg-primary/20":T(a)===e.code}]),onClick:t=>A(e.code)},[w(`span`,{class:O([`text-[0.8125rem] font-medium text-base-content`,{"text-primary":T(a)===e.code}])},E(e.name),3),T(a)===e.code?(i(),D(`div`,je,[...n[0]||=[w(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,class:`h-full w-full`},[w(`path`,{"fill-rule":`evenodd`,d:`M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z`,"clip-rule":`evenodd`})],-1)]])):h(``,!0)],10,Ae)]))),128))])],4)):h(``,!0)]),_:1})]))]))}}),{__name:`LangSwitcher`}),Ne={class:`relative`},Pe=Object.assign(n({__name:`ThemeSwitcher`,setup(n){let r=Z(),a=v(null),o=v(null),s=v(!1),{floatingStyles:c}=de(a,o,{placement:`top`,middleware:[Q(10),ue(),fe({padding:8})],whileElementsMounted:pe});function l(){s.value=!s.value}function f(e){r.curTheme=e,document.documentElement.setAttribute(`data-theme`,e),s.value=!1}function m(e){let t=e.target;!a.value?.contains(t)&&!o.value?.contains(t)&&(s.value=!1)}return e(()=>{document.addEventListener(`click`,m)}),d(()=>{document.removeEventListener(`click`,m)}),(e,n)=>{let d=_e;return i(),D(`div`,Ne,[w(`button`,{ref_key:`reference`,ref:a,class:O([`flex h-8 w-8 cursor-pointer items-center justify-center rounded-full border-none bg-primary text-primary-content transition-all duration-200 ease-in-out hover:scale-110 hover:shadow-[0_4px_12px_oklch(var(--p)/0.4)]`,{"scale-110 rotate-[15deg]":T(s)}]),onClick:C(l,[`stop`])},[u(T(ie),{size:18})],2),(i(),k(y,{to:`body`},[u(b,{"enter-active-class":`transition-opacity duration-150`,"leave-active-class":`transition-opacity duration-100`,"enter-from-class":`opacity-0`,"leave-to-class":`opacity-0`},{default:p(()=>[T(s)?(i(),D(`div`,{key:0,ref_key:`floating`,ref:o,style:t(T(c)),class:`z-70 w-60 overflow-visible rounded-xl shadow-lg`},[n[0]||=w(`div`,{class:`flex items-center border-b border-gray-700 bg-gray-800/90 px-3 py-2`},[w(`span`,{class:`text-[0.6875rem] font-semibold tracking-[0.05em] text-gray-400 uppercase`},` Theme `)],-1),u(d,{"model-value":T(r).curTheme,"max-height":420,"onUpdate:modelValue":f},null,8,[`model-value`])],4)):h(``,!0)]),_:1})]))])}}}),{__name:`ThemeSwitcher`}),Fe={key:0,class:`fixed inset-x-0 bottom-[4.5rem] z-50 mx-auto w-max lg:hidden`},Ie={class:`mx-auto flex w-max flex-col overflow-hidden rounded-2xl shadow-xl backdrop-blur-[16px]`,style:{border:`1px solid color-mix(in oklch, var(--color-base-content) 12%, transparent)`,background:`color-mix(in oklch, var(--color-base-300) 95%, transparent)`}},Le={key:0,class:`ml-auto h-1.5 w-1.5 rounded-full bg-primary`},Re={class:`mx-1 mb-2 overflow-visible rounded-2xl shadow-lg backdrop-blur-[12px] sm:mx-2`,style:{border:`1px solid color-mix(in oklch, var(--color-base-content) 10%, transparent)`,background:`color-mix(in oklch, var(--color-base-300) 90%, transparent)`}},ze={class:`grid h-16 w-full grid-cols-5`},Be={class:`sr-only`},Ve={class:`relative flex items-center justify-center`},He={key:0,class:`absolute -top-0.5 -right-0.5 h-2.5 w-2.5 rounded-full border-2 border-base-300 bg-primary`},Ue={class:`sr-only`},We=Object.assign(J(n({__name:`MobileBottomNav`,setup(n){let{t:o}=z(),s=L(),c=m(()=>[{href:`/overview`,name:o(`overview`),icon:ee},{href:`/proxies`,name:o(`proxies`),icon:B},{href:`/rules`,name:o(`rules`),icon:Y},{href:`/connections`,name:o(`connections`),icon:ce}]),l=m(()=>c.value.slice(0,2)),d=m(()=>c.value.slice(2,4)),_=m(()=>[{href:`/traffic`,name:o(`dataUsage`),icon:j},{href:`/logs`,name:o(`logs`),icon:P},{href:`/config`,name:o(`config`),icon:U}]),y=e=>s.path===e,x=v(!1),S=()=>{x.value=!x.value},C=()=>{x.value=!1};f(()=>s.path,C);let A=m(()=>_.value.some(e=>e.href===s.path)),M=v(!1);return e(()=>{requestAnimationFrame(()=>{M.value=!0})}),(e,n)=>{let s=W;return i(),D(g,null,[u(b,{name:`fade`},{default:p(()=>[T(x)?(i(),D(`div`,{key:0,class:`fixed inset-0 z-40 lg:hidden`,"aria-hidden":`true`,onClick:C})):h(``,!0)]),_:1}),u(b,{name:`slide-up`},{default:p(()=>[T(x)?(i(),D(`div`,Fe,[w(`div`,Ie,[(i(!0),D(g,null,r(T(_),e=>(i(),k(s,{key:e.href,to:e.href,class:O([`flex items-center gap-3 px-5 py-3 text-sm font-medium no-underline transition-colors duration-200`,y(e.href)?`bg-primary/10 text-primary`:`text-base-content/70 hover:bg-base-content/5 hover:text-base-content`])},{default:p(()=>[(i(),k(a(e.icon),{class:`h-5 w-5 shrink-0`})),w(`span`,null,E(e.name),1),y(e.href)?(i(),D(`span`,Le)):h(``,!0)]),_:2},1032,[`to`,`class`]))),128))])])):h(``,!0)]),_:1}),w(`nav`,{"aria-label":`Mobile bottom navigation`,class:O([`fixed inset-x-0 bottom-0 z-50 transition-all duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] lg:hidden`,T(M)?`translate-y-0 opacity-100`:`translate-y-full opacity-0`])},[w(`div`,Re,[w(`div`,ze,[(i(!0),D(g,null,r(T(l),e=>(i(),k(s,{key:e.href,to:e.href,class:O([`group relative flex flex-col items-center justify-center gap-0.5 no-underline transition-all duration-200 ease-in-out active:scale-90`,y(e.href)?`text-primary`:`text-base-content/60 hover:text-base-content`])},{default:p(()=>[w(`div`,{class:O([`absolute inset-1 rounded-xl transition-all duration-300 ease-in-out`,y(e.href)?`bg-primary/10`:`bg-transparent group-hover:bg-base-content/5`])},null,2),w(`div`,{class:O([`absolute top-1 h-1 rounded-full bg-primary transition-all duration-300 ease-in-out`,y(e.href)?`w-8 opacity-100`:`w-0 opacity-0`])},null,2),w(`div`,{class:O([`relative z-10 transition-transform duration-300 ease-in-out group-hover:scale-105`,y(e.href)?`scale-110`:`scale-100`])},[(i(),k(a(e.icon),{class:`h-5 w-5`}))],2),w(`span`,Be,E(`Navigate to ${e.name}`),1),w(`span`,{"aria-hidden":`true`,class:O([`relative z-10 truncate px-0.5 text-[9px] font-medium transition-all duration-300 sm:text-[10px]`,y(e.href)?`opacity-100`:`opacity-80`])},E(e.name),3)]),_:2},1032,[`to`,`class`]))),128)),w(`div`,Ve,[w(`button`,{class:O([`group relative -top-3 flex h-14 w-14 flex-col items-center justify-center rounded-2xl shadow-lg transition-all duration-300 ease-[cubic-bezier(0.34,1.56,0.64,1)] active:scale-90`,T(x)||T(A)?`bg-primary text-primary-content shadow-primary/40`:`bg-base-content/10 text-base-content hover:bg-base-content/15`]),style:t(T(x)||T(A)?`box-shadow: 0 4px 20px color-mix(in oklch, var(--color-primary) 40%, transparent)`:``),"aria-label":`More menu`,onClick:S},[u(b,{name:`icon-spin`,mode:`out-in`},{default:p(()=>[T(x)?(i(),k(T(se),{key:0,class:`h-6 w-6`})):(i(),k(T(F),{key:1,class:`h-6 w-6`}))]),_:1}),T(A)&&!T(x)?(i(),D(`span`,He)):h(``,!0)],6),w(`span`,{"aria-hidden":`true`,class:O([`absolute bottom-1 text-[9px] font-medium transition-all duration-300 sm:text-[10px]`,T(x)||T(A)?`text-primary opacity-100`:`text-base-content/60 opacity-80`])},E(T(o)(`more`)),3)]),(i(!0),D(g,null,r(T(d),e=>(i(),k(s,{key:e.href,to:e.href,class:O([`group relative flex flex-col items-center justify-center gap-0.5 no-underline transition-all duration-200 ease-in-out active:scale-90`,y(e.href)?`text-primary`:`text-base-content/60 hover:text-base-content`])},{default:p(()=>[w(`div`,{class:O([`absolute inset-1 rounded-xl transition-all duration-300 ease-in-out`,y(e.href)?`bg-primary/10`:`bg-transparent group-hover:bg-base-content/5`])},null,2),w(`div`,{class:O([`absolute top-1 h-1 rounded-full bg-primary transition-all duration-300 ease-in-out`,y(e.href)?`w-8 opacity-100`:`w-0 opacity-0`])},null,2),w(`div`,{class:O([`relative z-10 transition-transform duration-300 ease-in-out group-hover:scale-105`,y(e.href)?`scale-110`:`scale-100`])},[(i(),k(a(e.icon),{class:`h-5 w-5`}))],2),w(`span`,Ue,E(`Navigate to ${e.name}`),1),w(`span`,{"aria-hidden":`true`,class:O([`relative z-10 truncate px-0.5 text-[9px] font-medium transition-all duration-300 sm:text-[10px]`,y(e.href)?`opacity-100`:`opacity-80`])},E(e.name),3)]),_:2},1032,[`to`,`class`]))),128))])])],2)],64)}}}),[[`__scopeId`,`data-v-83e46dcf`]]),{__name:`MobileBottomNav`}),Ge={class:`drawer-content flex h-full flex-col`},Ke={class:`z-50 flex h-14 items-center gap-2 border-b border-[var(--sidebar-border)] bg-[color-mix(in_oklch,var(--color-base-300)_95%,transparent)] px-2 shadow-[0_4px_20px_color-mix(in_oklch,var(--color-base-content)_5%,transparent)] backdrop-blur-[12px] sm:px-4 lg:hidden`},qe={key:0,for:`main-drawer`,class:`press-tactile flex h-9 w-9 cursor-pointer items-center justify-center rounded-lg bg-transparent text-base-content hover:bg-[var(--sidebar-hover)]`,"aria-label":`open sidebar`},Je={class:`min-w-0 shrink`},Ye={class:`ml-auto flex shrink-0 items-center gap-1`},Xe={class:`flex min-h-0 flex-1 flex-col p-2 sm:p-4`},Ze={class:`flex min-h-0 flex-1 flex-col`},Qe={key:0,class:`h-20 shrink-0 lg:hidden`,"aria-hidden":`true`},$e={key:0,class:`drawer-side z-[60]`},et={class:`flex shrink-0 flex-col gap-2 border-b border-[var(--sidebar-border)] p-3`},tt={class:`flex-1 overflow-y-auto p-2`},nt={class:`m-0 flex list-none flex-col gap-1 p-0`},rt={key:0,"aria-hidden":`true`,class:`nav-link__indicator absolute top-1/2 left-0 -translate-y-1/2 rounded-r-full bg-primary`},it={class:`nav-link__icon relative z-1 flex shrink-0 items-center justify-center`},at=Object.assign(J(n({__name:`Sidebar`,setup(e){let n=L(),{t:s}=z(),c=Z(),d=m(()=>[{href:`/overview`,name:s(`overview`),icon:ee},{href:`/proxies`,name:s(`proxies`),icon:B},{href:`/rules`,name:s(`rules`),icon:Y},{href:`/connections`,name:s(`connections`),icon:ce},{href:`/traffic`,name:s(`dataUsage`),icon:j},{href:`/logs`,name:s(`logs`),icon:P},{href:`/config`,name:s(`config`),icon:U}]),y=e=>n.path===e,b=v(null);f(()=>n.path,()=>{b.value&&(b.value.checked=!1)});let x=()=>{c.sidebarExpanded=!c.sidebarExpanded};return(e,f)=>{let m=De,v=Me,S=Pe,C=W,A=me,j=We;return i(),D(`div`,{class:O([`drawer h-full [--sidebar-border:color-mix(in_oklch,var(--color-base-content)_10%,transparent)] [--sidebar-hover:color-mix(in_oklch,var(--color-base-content)_5%,transparent)]`,{"lg:drawer-open":T(n).path!==`/setup`}])},[w(`input`,{id:`main-drawer`,ref_key:`drawerCheckbox`,ref:b,type:`checkbox`,class:`drawer-toggle`},null,512),w(`div`,Ge,[w(`header`,Ke,[T(n).path!==`/setup`&&!T(c).useMobileBottomNav?(i(),D(`label`,qe,[u(T(M),{class:`h-5 w-5`})])):h(``,!0),w(`div`,Je,[u(m)]),w(`div`,Ye,[f[0]||=w(`div`,{id:`header-traffic-indicator`,class:`flex items-center`},null,-1),u(v),u(S)])]),w(`div`,Xe,[w(`div`,Ze,[o(e.$slots,`default`,{},void 0,!0)]),T(c).useMobileBottomNav&&T(n).path!==`/setup`?(i(),D(`div`,Qe)):h(``,!0)])]),T(n).path===`/setup`?h(``,!0):(i(),D(`div`,$e,[f[2]||=w(`label`,{for:`main-drawer`,"aria-label":`close sidebar`,class:`drawer-overlay bg-[color-mix(in_oklch,var(--color-base-content)_40%,transparent)] backdrop-blur-[4px]`},null,-1),w(`div`,{class:O([`flex h-full w-52 flex-col border-r border-[var(--sidebar-border)] bg-[linear-gradient(180deg,color-mix(in_oklch,var(--color-base-200)_98%,transparent)_0%,var(--color-base-200)_100%)] backdrop-blur-[12px] transition-[width] duration-300 ease-[var(--ease-spring-soft)]`,T(c).sidebarExpanded?``:`lg:w-16`])},[w(`div`,et,[w(`div`,{class:O([`flex items-center lg:min-h-7`,T(c).sidebarExpanded?``:`lg:justify-center`])},[l(u(m,{class:`hidden lg:block`},null,512),[[_,T(c).sidebarExpanded]]),u(m,{class:`block lg:hidden`})],2),w(`button`,{class:O([`press-tactile hidden cursor-pointer items-center justify-center gap-2 rounded-lg border border-[var(--sidebar-border)] bg-transparent p-2 text-sm text-base-content hover:border-[color-mix(in_oklch,var(--color-base-content)_20%,transparent)] hover:bg-[var(--sidebar-hover)] lg:flex`,T(c).sidebarExpanded?`w-full`:`aspect-square w-9 self-center`]),onClick:x},[T(c).sidebarExpanded?(i(),k(T(te),{key:1,class:`h-5 w-5`})):(i(),k(T(K),{key:0,class:`h-5 w-5`})),w(`span`,{class:O(T(c).sidebarExpanded?``:`lg:hidden`)},E(T(s)(`collapse`)),3)],2)]),w(`nav`,tt,[w(`ul`,nt,[(i(!0),D(g,null,r(T(d),(e,n)=>(i(),D(`li`,{key:e.href,class:`nav-stagger`,style:t({animationDelay:`${n*45}ms`})},[u(C,{to:e.href,class:O([`nav-link group relative flex w-full items-center gap-3 overflow-hidden rounded-lg px-3 py-2.5 text-sm font-medium text-[color-mix(in_oklch,var(--color-base-content)_70%,transparent)] no-underline hover:text-base-content`,[y(e.href)?`is-active`:``,T(c).sidebarExpanded?``:`lg:justify-center lg:px-0`]]),title:T(c).sidebarExpanded?void 0:e.name},{default:p(()=>[f[1]||=w(`span`,{"aria-hidden":`true`,class:`nav-link__glow pointer-events-none absolute inset-0 rounded-lg`},null,-1),y(e.href)?(i(),D(`span`,rt)):h(``,!0),w(`div`,it,[(i(),k(a(e.icon),{class:`h-5 w-5`}))]),w(`span`,{class:O([`relative z-1 flex-1 overflow-hidden text-ellipsis whitespace-nowrap`,T(c).sidebarExpanded?``:`lg:hidden`])},E(e.name),3)]),_:2},1032,[`to`,`class`,`title`])],4))),128))])]),w(`div`,{class:O([`shrink-0 border-t border-[var(--sidebar-border)] p-2`,T(c).sidebarExpanded?``:`lg:flex lg:flex-col lg:items-center`])},[w(`div`,{id:`sidebar-traffic-expanded`,class:O([`mb-2 hidden w-full`,T(c).sidebarExpanded?`lg:block`:``])},null,2),w(`div`,{id:`sidebar-traffic-indicator`,class:O([`mb-2 hidden w-full lg:block`,T(c).sidebarExpanded?`lg:!hidden`:``])},null,2),w(`div`,{class:O([`mb-2 hidden items-center gap-1 lg:flex`,T(c).sidebarExpanded?`flex-row`:`flex-col`])},[u(v),u(S)],2),u(A,{collapsed:!T(c).sidebarExpanded},null,8,[`collapsed`])],2)],2)])),T(c).useMobileBottomNav&&T(n).path!==`/setup`?(i(),k(j,{key:1})):h(``,!0)],2)}}}),[[`__scopeId`,`data-v-2cafba74`]]),{__name:`Sidebar`}),ot={key:0,class:`fixed top-0 right-0 left-0 z-[100] flex items-center justify-between gap-2 bg-error/90 px-4 py-2 text-error-content backdrop-blur-sm`},st={class:`flex min-w-0 items-center gap-2`},ct={class:`truncate text-sm font-medium`},lt={class:`hidden truncate text-xs opacity-80 sm:inline`},ut={class:`flex shrink-0 items-center gap-2`},dt=[`disabled`],ft={key:0,class:`loading loading-xs loading-spinner`},pt={key:1},mt=Object.assign(n({__name:`ConnectionErrorBanner`,setup(e){let{t}=z(),n=q(),r=N(),{isError:a,refetch:o,isFetching:s}=A();function c(){r.setSelectedEndpoint(``),n.push(`/setup`)}return(e,n)=>T(a)?(i(),D(`div`,ot,[w(`div`,st,[n[1]||=w(`svg`,{xmlns:`http://www.w3.org/2000/svg`,class:`size-5 shrink-0`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[w(`path`,{d:`M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0zM12 9v4M12 17h.01`})],-1),w(`span`,ct,E(T(t)(`connectionError`)),1),w(`span`,lt,E(T(r).currentEndpoint?.url),1)]),w(`div`,ut,[w(`button`,{class:`btn text-error-content btn-ghost btn-xs hover:bg-error-content/20`,disabled:T(s),onClick:n[0]||=()=>T(o)()},[T(s)?(i(),D(`span`,ft)):(i(),D(`span`,pt,E(T(t)(`retry`)),1))],8,dt),w(`button`,{class:`btn bg-error-content/20 text-error-content btn-xs hover:bg-error-content/30`,onClick:c},E(T(t)(`switchEndpoint`)),1)])])):h(``,!0)}}),{__name:`ConnectionErrorBanner`}),ht=globalThis.setInterval,gt=3e3;function _t(){let e=N(),t=Ce(),n=le(),r=we(),i=Z(),a=null,o=null,s=null,c=null,l=null,u=null,d=e=>{e&&(e.onclose=null,e.close())},f=()=>{$()||u||e.currentEndpoint&&(u=setTimeout(()=>{u=null,m()},gt))},p=(t,n)=>{let r=e.currentEndpoint;if(!r)return null;let i=e.wsEndpointURL,a=r.secret,o=new URLSearchParams;a&&o.set(`token`,a);let s=new WebSocket(`${i}/${t}?${o.toString()}`);return s.onmessage=e=>{try{n(JSON.parse(e.data))}catch{}},s.onerror=e=>{console.error(`WebSocket error for ${t}:`,e)},s.onclose=()=>{f()},s},m=()=>{if(h(),$()){let e=be();t.updateFromWsMsg({connections:e.mockConnections,uploadTotal:e.mockTrafficStats.up,downloadTotal:e.mockTrafficStats.down}),n.setLatestTraffic(e.mockTrafficStats),n.setLatestMemory(e.mockMemory);let i=Date.now(),a=e.mockConnections.length;for(let t=30;t>=0;t--){let r=i-t*1e3,o=e.mockTrafficStats.down+Math.floor(Math.random()*1e5)-5e4,s=e.mockTrafficStats.up+Math.floor(Math.random()*2e4)-1e4,c=e.mockMemory.inuse+Math.floor(Math.random()*5e6)-25e5,l=a+Math.floor(Math.random()*10)-5;n.addTrafficDataPoint(r,o,s),n.addMemoryDataPoint(r,c),n.addConnectionCountDataPoint(r,l)}e.mockLogs.forEach(e=>{r.addLog(e)}),l=ht(()=>{let t=Date.now(),r={up:e.mockTrafficStats.up+Math.floor(Math.random()*1e4),down:e.mockTrafficStats.down+Math.floor(Math.random()*5e4)};n.setLatestTraffic(r),n.addTrafficDataPoint(t,r.down,r.up);let i={inuse:e.mockMemory.inuse+Math.floor(Math.random()*5e6)-25e5,oslimit:e.mockMemory.oslimit};n.setLatestMemory(i),n.addMemoryDataPoint(t,i.inuse);let a=e.mockConnections.length+Math.floor(Math.random()*10)-5;n.addConnectionCountDataPoint(t,a)},1e3);return}a=p(`connections`,e=>{let r=e;if(t.updateFromWsMsg(r),r){let e=r.connections?.length??0;n.addConnectionCountDataPoint(Date.now(),e)}}),o=p(`traffic`,e=>{let t=e;n.setLatestTraffic(t),n.addTrafficDataPoint(Date.now(),t.down,t.up)}),s=p(`memory`,e=>{let t=e;n.setLatestMemory(t),n.addMemoryDataPoint(Date.now(),t.inuse)}),c=g()},h=()=>{u&&=(clearTimeout(u),null),l&&=(clearInterval(l),null),d(a),d(o),d(s),d(c),a=null,o=null,s=null,c=null},g=()=>{let t=e.currentEndpoint;if(!t)return null;let n=e.wsEndpointURL,a=new URLSearchParams;t.secret&&a.set(`token`,t.secret),a.set(`level`,i.logLevel);let o=new WebSocket(`${n}/logs?${a.toString()}`);return o.onmessage=e=>{try{let t=JSON.parse(e.data);r.addLog(t)}catch{}},o.onclose=()=>{f()},o};return S()&&x(h),{connect:m,disconnect:h,reconnectLogs:()=>{d(c),c=$()?null:g()}}}var vt={class:`hidden`},yt=Object.assign(n({__name:`ProtectedResources`,setup(t){let{connect:n,disconnect:r,reconnectLogs:a}=_t(),o=Z();return e(()=>{n()}),d(()=>{r()}),f(()=>o.logLevel,()=>{a()}),(e,t)=>(i(),D(`div`,vt))}}),{__name:`ProtectedResources`}),bt={class:`flex items-center gap-1`},xt={class:`font-mono text-xs`},St={class:`flex items-center gap-1`},Ct={class:`font-mono text-xs`},wt={class:`flex w-full flex-col items-center gap-2 overflow-hidden py-1`},Tt={class:`flex flex-col items-center gap-0.5`},Et={class:`font-mono text-[9px] font-medium tracking-tighter whitespace-nowrap`},Dt={class:`flex flex-col items-center gap-0.5`},Ot={class:`font-mono text-[9px] font-medium tracking-tighter whitespace-nowrap`},kt={key:0,class:`w-full rounded-lg bg-[color-mix(in_oklch,var(--color-base-100)_50%,transparent)] p-2`},At={class:`grid grid-cols-2 gap-1 text-xs`},jt={class:`flex items-center gap-1`},Mt={class:`truncate font-mono text-xs`},Nt={class:`flex items-center gap-1`},Pt={class:`truncate font-mono text-xs`},Ft={class:`flex items-center gap-1`},It={class:`font-mono text-xs`},Lt={class:`flex items-center gap-1`},Rt={class:`font-mono text-xs`},zt=[`title`],Bt={class:`flex flex-col gap-2 p-3`},Vt={class:`flex items-center justify-between gap-2`},Ht={class:`text-xs font-semibold uppercase opacity-60`},Ut={class:`flex items-center gap-1`},Wt=[`title`],Gt=[`title`],Kt={class:`grid grid-cols-2 gap-x-4 gap-y-1 text-xs`},qt={class:`flex items-center gap-1`},Jt={class:`font-mono text-xs font-medium`},Yt={class:`flex items-center gap-1`},Xt={class:`font-mono text-xs font-medium`},Zt={class:`flex items-center gap-1 opacity-70`},Qt={class:`font-mono text-xs`},$t={class:`flex items-center gap-1 opacity-70`},en={class:`font-mono text-xs`},tn=Object.assign(J(n({__name:`GlobalTrafficIndicator`,setup(n){let r=le(),a=Ce(),o=Z(),l=oe(),d=I(`globalTrafficIndicatorVisible`,!0),_=I(`globalTrafficIndicatorCollapsed`,!0),x=I(`globalTrafficIndicatorPosition`,{x:-1,y:-1}),S=v(!1),C=v({x:0,y:0}),A=v(null),j=v(null),M,N,P=m(()=>r.latestTraffic?.down??0),F=m(()=>r.latestTraffic?.up??0),ee=m(()=>r.latestMemory?.inuse??0),te=m(()=>a.latestConnectionMsg?.connections?.length??0),L=e=>Se(e).toString(),re=m(()=>x.value.x===-1||x.value.y===-1?{right:`16px`,bottom:`16px`}:{left:`${x.value.x}px`,top:`${x.value.y}px`});function R(){d.value=!d.value}function ie(){_.value=!_.value}function z(){_.value=!1,x.value={x:-1,y:-1}}function ae(e){if(!A.value)return;S.value=!0;let t=A.value.getBoundingClientRect(),n=`touches`in e?e.touches[0].clientX:e.clientX,r=`touches`in e?e.touches[0].clientY:e.clientY;C.value={x:n-t.left,y:r-t.top},x.value.x===-1&&(x.value.x=t.left,x.value.y=t.top),document.addEventListener(`mousemove`,B),document.addEventListener(`mouseup`,V),document.addEventListener(`touchmove`,B),document.addEventListener(`touchend`,V)}function B(e){if(!S.value)return;let t=`touches`in e?e.touches[0].clientX:e.clientX,n=`touches`in e?e.touches[0].clientY:e.clientY,r=t-C.value.x,i=n-C.value.y,a=A.value?.getBoundingClientRect(),o=a?.width||200,s=a?.height||150;r=Math.max(0,Math.min(window.innerWidth-o,r)),i=Math.max(0,Math.min(window.innerHeight-s,i)),x.value.x=r,x.value.y=i}function V(){S.value&&(S.value=!1,document.removeEventListener(`mousemove`,B),document.removeEventListener(`mouseup`,V),document.removeEventListener(`touchmove`,B),document.removeEventListener(`touchend`,V))}function U(){if(!j.value||!N)return;M&&=(M.destroy(),void 0);let e=xe(),t=j.value.offsetWidth||200;M=N.chart(j.value,{chart:{type:`areaspline`,backgroundColor:`transparent`,spacing:[0,0,0,0],margin:[0,0,0,0],animation:!1,width:t,height:48},credits:{enabled:!1},accessibility:{enabled:!1},title:{text:void 0},legend:{enabled:!1},xAxis:{visible:!1,type:`datetime`},yAxis:{visible:!1,min:0},tooltip:{enabled:!1},plotOptions:{areaspline:{lineWidth:1.5,marker:{enabled:!1},fillOpacity:.2,animation:!1}},series:[{type:`areaspline`,name:`Upload`,color:e.seriesColors[0],data:r.trafficChartHistory.upload.length>0?[...r.trafficChartHistory.upload].slice(-30):[[Date.now(),0]]},{type:`areaspline`,name:`Download`,color:e.seriesColors[1],data:r.trafficChartHistory.download.length>0?[...r.trafficChartHistory.download].slice(-30):[[Date.now(),0]]}]})}function ce(){if(!M)return;let e=[...r.trafficChartHistory.download].slice(-30),t=[...r.trafficChartHistory.upload].slice(-30);M.series[0]?.setData(t,!1),M.series[1]?.setData(e,!0)}function W(){if(!Q)return;let e=[...r.trafficChartHistory.download].slice(-30),t=[...r.trafficChartHistory.upload].slice(-30);Q.series[0]?.setData(t,!1),Q.series[1]?.setData(e,!0)}function K(){if(!X.value||!N)return;Q&&=(Q.destroy(),void 0);let e=xe();Q=N.chart(X.value,{chart:{type:`areaspline`,backgroundColor:`transparent`,spacing:[0,0,0,0],margin:[0,0,0,0],animation:!1,height:40},credits:{enabled:!1},accessibility:{enabled:!1},title:{text:void 0},legend:{enabled:!1},xAxis:{visible:!1,type:`datetime`},yAxis:{visible:!1,min:0},tooltip:{enabled:!1},plotOptions:{areaspline:{lineWidth:1.5,marker:{enabled:!1},fillOpacity:.2,animation:!1}},series:[{type:`areaspline`,name:`Upload`,color:e.seriesColors[0],data:r.trafficChartHistory.upload.length>0?[...r.trafficChartHistory.upload].slice(-30):[[Date.now(),0]]},{type:`areaspline`,name:`Download`,color:e.seriesColors[1],data:r.trafficChartHistory.download.length>0?[...r.trafficChartHistory.download].slice(-30):[[Date.now(),0]]}]})}f(()=>r.latestTraffic,e=>{e&&l.value!==`hidden`&&(M?ce():j.value&&d.value&&!_.value&&U(),Q?W():X.value&&K())}),f(()=>o.curTheme,()=>{j.value&&!_.value&&d.value&&U(),X.value&&K()}),f(_,e=>{!e&&d.value?c(()=>{setTimeout(()=>{j.value&&r.latestTraffic&&U()},50)}):e&&M&&(M.destroy(),M=void 0)}),f(d,e=>{e&&!_.value?c(()=>{setTimeout(()=>{j.value&&r.latestTraffic&&U()},50)}):!e&&M&&(M.destroy(),M=void 0)}),f(()=>o.sidebarExpanded,e=>{e&&c(()=>{setTimeout(()=>{X.value&&r.latestTraffic&&K()},100)})});let q=v(!1),J=v(!1),Y=v(!1),X=v(null),Q;return e(async()=>{c(()=>{q.value=!!document.getElementById(`header-traffic-indicator`),J.value=!!document.getElementById(`sidebar-traffic-indicator`),Y.value=!!document.getElementById(`sidebar-traffic-expanded`)}),N=await Te(),d.value&&!_.value&&r.latestTraffic&&setTimeout(()=>{j.value&&U()},100),r.latestTraffic&&setTimeout(()=>{X.value&&K()},150)}),s(()=>{M&&=(M.destroy(),void 0),Q&&=(Q.destroy(),void 0)}),(e,n)=>(i(),D(g,null,[T(q)?(i(),k(y,{key:0,to:`#header-traffic-indicator`},[T(d)&&T(_)&&T(r).latestTraffic?(i(),D(`div`,{key:0,class:`flex cursor-pointer items-center gap-2 rounded-lg bg-[color-mix(in_oklch,var(--color-base-100)_50%,transparent)] px-2 py-1 transition-[background] duration-200 ease-in-out hover:bg-[var(--color-base-100)]`,onClick:z},[w(`div`,bt,[u(T(H),{class:`size-3 shrink-0 text-[var(--color-success)]`}),w(`span`,xt,E(L(T(P)))+`/s`,1)]),n[0]||=w(`div`,{class:`h-3 w-px bg-[color-mix(in_oklch,var(--color-base-content)_20%,transparent)]`},null,-1),w(`div`,St,[u(T(G),{class:`size-3 shrink-0 text-[var(--color-info)]`}),w(`span`,Ct,E(L(T(F)))+`/s`,1)])])):h(``,!0)])):h(``,!0),T(J)?(i(),k(y,{key:1,to:`#sidebar-traffic-indicator`},[T(r).latestTraffic?(i(),D(`div`,{key:0,class:`w-full cursor-pointer rounded-lg bg-[color-mix(in_oklch,var(--color-base-100)_50%,transparent)] p-2 transition-[background] duration-200 ease-in-out hover:bg-[var(--color-base-100)]`,onClick:z},[w(`div`,wt,[w(`div`,Tt,[u(T(H),{class:`size-3 shrink-0 text-[var(--color-success)]`}),w(`span`,Et,E(L(T(P)).replace(` `,``))+`/s`,1)]),w(`div`,Dt,[u(T(G),{class:`size-3 shrink-0 text-[var(--color-info)]`}),w(`span`,Ot,E(L(T(F)).replace(` `,``))+`/s`,1)])])])):h(``,!0)])):h(``,!0),T(Y)?(i(),k(y,{key:2,to:`#sidebar-traffic-expanded`},[T(r).latestTraffic?(i(),D(`div`,kt,[w(`div`,{ref_key:`sidebarChartContainer`,ref:X,class:`mb-2 h-10 w-full`},null,512),w(`div`,At,[w(`div`,jt,[u(T(H),{class:`size-3 shrink-0 text-[var(--color-success)]`}),w(`span`,Mt,E(L(T(P)))+`/s`,1)]),w(`div`,Nt,[u(T(G),{class:`size-3 shrink-0 text-[var(--color-info)]`}),w(`span`,Pt,E(L(T(F)))+`/s`,1)])])])):h(``,!0)])):h(``,!0),T(d)&&T(_)&&T(r).latestTraffic&&!T(q)&&!T(J)?(i(),D(`div`,{key:3,class:`fixed right-4 bottom-4 z-50 flex cursor-pointer items-center gap-2 rounded-xl bg-[var(--color-base-200)] px-3 py-2 shadow-lg`,onClick:z},[w(`div`,Ft,[u(T(H),{class:`size-3 shrink-0 text-[var(--color-success)]`}),w(`span`,It,E(L(T(P)))+`/s`,1)]),n[1]||=w(`div`,{class:`h-3 w-px bg-[color-mix(in_oklch,var(--color-base-content)_20%,transparent)]`},null,-1),w(`div`,Lt,[u(T(G),{class:`size-3 shrink-0 text-[var(--color-info)]`}),w(`span`,Rt,E(L(T(F)))+`/s`,1)])])):h(``,!0),T(d)?h(``,!0):(i(),D(`button`,{key:4,class:`fixed right-4 bottom-4 z-50 flex size-8 cursor-pointer items-center justify-center rounded-full border-none bg-[var(--color-primary)] text-[var(--color-primary-content)] shadow-lg transition-all duration-200 ease-in-out hover:scale-110`,title:e.$t(`showTrafficIndicator`),onClick:R},[u(T(G),{class:`size-4`})],8,zt)),u(b,{name:`traffic-expand`},{default:p(()=>[T(d)&&!T(_)&&T(r).latestTraffic?(i(),D(`div`,{key:0,ref_key:`containerRef`,ref:A,class:O([`fixed z-50 min-w-56 rounded-xl bg-[var(--color-base-200)] shadow-lg select-none`,{"cursor-grabbing":T(S)}]),style:t(T(re))},[w(`div`,Bt,[w(`div`,Vt,[w(`div`,{class:`flex cursor-grab items-center gap-1 active:cursor-grabbing`,onMousedown:ae,onTouchstart:ae},[u(T(ne),{class:`size-4 opacity-40`}),w(`span`,Ht,E(e.$t(`traffic`)),1)],32),w(`div`,Ut,[w(`button`,{class:`flex size-6 cursor-pointer items-center justify-center rounded-full border-none bg-transparent text-[var(--color-base-content)] transition-[background] duration-200 ease-in-out hover:bg-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)]`,title:e.$t(`hideTrafficIndicator`),onClick:ie},[...n[2]||=[w(`span`,{class:`text-xs`},`−`,-1)]],8,Wt),w(`button`,{class:`flex size-6 cursor-pointer items-center justify-center rounded-full border-none bg-transparent text-[var(--color-base-content)] transition-[background] duration-200 ease-in-out hover:bg-[color-mix(in_oklch,var(--color-base-content)_10%,transparent)]`,title:e.$t(`hideTrafficIndicator`),onClick:R},[u(T(se),{class:`size-3`})],8,Gt)])]),w(`div`,{ref_key:`chartContainer`,ref:j,class:`h-12 w-full`},null,512),w(`div`,Kt,[w(`div`,qt,[u(T(H),{class:`size-3 shrink-0 text-[var(--color-success)]`}),w(`span`,Jt,E(L(T(P)))+`/s `,1)]),w(`div`,Yt,[u(T(G),{class:`size-3 shrink-0 text-[var(--color-info)]`}),w(`span`,Xt,E(L(T(F)))+`/s `,1)]),w(`div`,Zt,[w(`span`,null,E(e.$t(`memory`))+`:`,1),w(`span`,Qt,E(L(T(ee))),1)]),w(`div`,$t,[w(`span`,null,E(e.$t(`connections`))+`:`,1),w(`span`,en,E(T(te)),1)])])])],6)):h(``,!0)]),_:1})],64))}}),[[`__scopeId`,`data-v-e0caab42`]]),{__name:`GlobalTrafficIndicator`}),nn={class:`modal-box max-w-lg`},rn={class:`flex items-center justify-between border-b border-base-300 pb-3`},an={class:`text-lg font-bold`},on={class:`mt-4 space-y-6`},sn={class:`mb-2 text-sm font-semibold text-base-content/70`},cn={class:`space-y-1`},ln={class:`text-sm`},un={class:`kbd kbd-sm`},dn={class:`mt-6 text-center text-xs text-base-content/50`},fn=Object.assign(n({__name:`ShortcutsHelpModal`,setup(e){let t=ye(),{t:n}=z(),a=re(`(max-width: 768px)`),o=()=>{t.closeHelpModal()};return(e,s)=>T(a)?h(``,!0):(i(),D(`dialog`,{key:0,class:O([`modal`,{"modal-open":T(t).isHelpModalOpen}]),onClick:C(o,[`self`])},[w(`div`,nn,[w(`div`,rn,[w(`h3`,an,E(T(n)(`shortcuts.title`,`Keyboard Shortcuts`)),1),w(`button`,{class:`btn btn-circle btn-ghost btn-sm`,onClick:o},[...s[0]||=[w(`span`,{class:`i-tabler-x size-5`},null,-1)]])]),w(`div`,on,[(i(!0),D(g,null,r(T(ge),e=>(i(),D(`div`,{key:e.id},[w(`h4`,sn,E(T(n)(e.labelKey,e.id)),1),w(`div`,cn,[(i(!0),D(g,null,r(e.shortcuts,e=>(i(),D(`div`,{key:e,class:`flex items-center justify-between rounded px-2 py-1.5 hover:bg-base-200`},[w(`span`,ln,E(T(n)(T(ve)[e],e)),1),w(`kbd`,un,E(T(he)(T(t).shortcuts[e])),1)]))),128))])]))),128))]),w(`div`,dn,E(T(n)(`shortcuts.pressEscToClose`,`Press Esc to close`)),1)]),w(`form`,{method:`dialog`,class:`modal-backdrop`,onClick:o},[...s[1]||=[w(`button`,null,`close`,-1)]])],2))}}),{__name:`ShortcutsHelpModal`});function pn(){let e=q(),t=ye(),n=R(),r=m(()=>{let e=n.value;if(!e)return!1;let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||e.getAttribute(`contenteditable`)===`true`}),i=v(!1),a=v(null),o=!1,s=()=>{i.value=!1,a.value&&=(clearTimeout(a.value),null)},c=()=>{i.value=!0,a.value&&clearTimeout(a.value),a.value=setTimeout(s,1500)},l={goToOverview:()=>e.push(X.Overview),goToProxies:()=>e.push(X.Proxies),goToConnections:()=>e.push(X.Conns),goToRules:()=>e.push(X.Rules),goToLogs:()=>e.push(X.Log),goToConfig:()=>e.push(X.Config),refresh:()=>{window.location.reload()},closeModal:()=>{t.isHelpModalOpen&&t.closeHelpModal(),window.dispatchEvent(new CustomEvent(`shortcut:close-modal`))},showHelp:()=>{t.toggleHelpModal()}},u=e=>{let t=l[e];t&&t()},f={o:`goToOverview`,p:`goToProxies`,c:`goToConnections`,u:`goToRules`,l:`goToLogs`,s:`goToConfig`},p=e=>{if(r.value)return;let t=e.key.toLowerCase();if(t===`escape`){u(`closeModal`);return}if(e.shiftKey&&(t===`/`||t===`?`)){e.preventDefault(),u(`showHelp`);return}if(t===`g`&&!i.value){c();return}if(i.value){if(e.metaKey||e.ctrlKey){s();return}let n=f[t];if(n){e.preventDefault(),u(n),s();return}s();return}t===`r`&&!e.metaKey&&!e.ctrlKey&&(e.preventDefault(),u(`refresh`))};return d(()=>{typeof window<`u`&&(window.removeEventListener(`keydown`,p),o=!1),s()}),{isInputFocused:r,gPrefixActive:i,setupKeyboardListeners:()=>{typeof window<`u`&&!o&&(o=!0,window.addEventListener(`keydown`,p))},executeAction:u}}var mn=[`data-theme`],hn=n({__name:`default`,setup(t){let n=Z(),r=N(),a=le(),{setupKeyboardListeners:s}=pn();e(()=>{s()});let c=v(null);f(c,e=>{e&&(a.rootElement=e)}),f([()=>n.autoSwitchTheme,V()],([e,t])=>{e&&(n.curTheme=t?n.favNightTheme:n.favDayTheme)},{immediate:!0}),f(()=>n.curTheme,e=>{document.documentElement.setAttribute(`data-theme`,e)},{immediate:!0});let l=m(()=>$()||!!r.currentEndpoint);return(e,t)=>{let r=at,a=mt,s=yt,d=tn,f=fn;return i(),D(`div`,{ref_key:`rootElement`,ref:c,class:O([`relative h-screen overscroll-y-none bg-base-100 antialiased`,T(n).enableTwemoji?`font-twemoji`:`font-default`]),"data-theme":T(n).curTheme},[u(r,null,{default:p(()=>[o(e.$slots,`default`)]),_:3}),T(l)?(i(),k(a,{key:0})):h(``,!0),T(l)?(i(),k(s,{key:1})):h(``,!0),T(l)?(i(),k(d,{key:2})):h(``,!0),u(f)],10,mn)}}});export{hn as default}; |