@dsh-sup/dsh-core-linux-x64 0.1.2-BETA.4 → 0.1.2-BETA.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/dsh-supervisor +0 -0
- package/package.json +1 -1
- package/ui-react/supervisor.html +7 -96
- package/ui-react/assets/InstancesPage-4OWacAkY.js +0 -3
- package/ui-react/assets/LanPage-C-TE6T23.js +0 -4
- package/ui-react/assets/OverviewPage-B_mlgkxf.js +0 -2
- package/ui-react/assets/PluginsPage-D0bs9E1H.js +0 -5
- package/ui-react/assets/RouterPage-DRhjxkNO.js +0 -1
- package/ui-react/assets/SettingsPage-C1yR8ZsG.js +0 -1
- package/ui-react/assets/TasksPage-CYhldFne.js +0 -2
- package/ui-react/assets/external-link-DblibQpb.js +0 -1
- package/ui-react/assets/refresh-cw-Dbn7zlS9.js +0 -1
- package/ui-react/assets/rocket-BDT9yN5c.js +0 -1
- package/ui-react/assets/supervisor-BnpEWxJX.css +0 -2
- package/ui-react/assets/supervisor-C3UXEQbW.js +0 -10
- package/ui-react/assets/supervisor-DEHXL51C.js +0 -41
- package/ui-react/assets/useSupervisorAction-Dj_nAGhv.js +0 -1
- package/ui-react/assets/widgets-C6MCpT1T.js +0 -1
- package/ui-react/ui-react/assets/InstancesPage-4OWacAkY.js +0 -3
- package/ui-react/ui-react/assets/InstancesPage-C_FtBIyq.js +0 -3
- package/ui-react/ui-react/assets/LanPage-C-TE6T23.js +0 -4
- package/ui-react/ui-react/assets/LanPage-Cgg5RPIb.js +0 -4
- package/ui-react/ui-react/assets/OverviewPage-B_mlgkxf.js +0 -2
- package/ui-react/ui-react/assets/OverviewPage-CZfSq0px.js +0 -2
- package/ui-react/ui-react/assets/PluginsPage-D0bs9E1H.js +0 -5
- package/ui-react/ui-react/assets/PluginsPage-DadI4bCs.js +0 -5
- package/ui-react/ui-react/assets/RouterPage-DRhjxkNO.js +0 -1
- package/ui-react/ui-react/assets/RouterPage-dD81cNBC.js +0 -1
- package/ui-react/ui-react/assets/SettingsPage-C1yR8ZsG.js +0 -1
- package/ui-react/ui-react/assets/SettingsPage-C4mUOQJg.js +0 -1
- package/ui-react/ui-react/assets/TasksPage-COzDe_fT.js +0 -2
- package/ui-react/ui-react/assets/TasksPage-CYhldFne.js +0 -2
- package/ui-react/ui-react/assets/external-link-DblibQpb.js +0 -1
- package/ui-react/ui-react/assets/external-link-DfAIHbhS.js +0 -1
- package/ui-react/ui-react/assets/format-QeaTKFhQ.js +0 -1
- package/ui-react/ui-react/assets/inter-400-C38fXH4l.woff2 +0 -0
- package/ui-react/ui-react/assets/inter-500-Cerq10X2.woff2 +0 -0
- package/ui-react/ui-react/assets/inter-600-LgqL8muc.woff2 +0 -0
- package/ui-react/ui-react/assets/inter-700-Yt3aPRUw.woff2 +0 -0
- package/ui-react/ui-react/assets/noto-sans-sc-400-68UKsrZK.woff2 +0 -0
- package/ui-react/ui-react/assets/noto-sans-sc-700-BiGzk9PQ.woff2 +0 -0
- package/ui-react/ui-react/assets/refresh-cw-Dbn7zlS9.js +0 -1
- package/ui-react/ui-react/assets/refresh-cw-Dl1i4xVh.js +0 -1
- package/ui-react/ui-react/assets/rocket-BDT9yN5c.js +0 -1
- package/ui-react/ui-react/assets/rocket-KILE2qPr.js +0 -1
- package/ui-react/ui-react/assets/shield-check-CKBb6VBo.js +0 -1
- package/ui-react/ui-react/assets/supervisor-05X9PT9U.js +0 -41
- package/ui-react/ui-react/assets/supervisor-BnpEWxJX.css +0 -2
- package/ui-react/ui-react/assets/supervisor-C3UXEQbW.js +0 -10
- package/ui-react/ui-react/assets/supervisor-CKm4a1yh.js +0 -10
- package/ui-react/ui-react/assets/supervisor-DEHXL51C.js +0 -41
- package/ui-react/ui-react/assets/supervisor-hG2-v7mV.css +0 -1
- package/ui-react/ui-react/assets/useSupervisorAction-CPqt8YnP.js +0 -1
- package/ui-react/ui-react/assets/useSupervisorAction-Dj_nAGhv.js +0 -1
- package/ui-react/ui-react/assets/widgets-C1m9qxfG.js +0 -1
- package/ui-react/ui-react/assets/widgets-C6MCpT1T.js +0 -1
- package/ui-react/ui-react/dsh-logo.svg +0 -1
- package/ui-react/ui-react/supervisor.html +0 -27
- /package/ui-react/{ui-react/assets → assets}/InstancesPage-DRMrbdTv.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/LanPage-CfDYyjjB.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/OverviewPage-CWZO0NU0.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/PluginsPage-BmsG5jv7.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/RouterPage-B4b4UHFH.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/SettingsPage-Bg-ur2Qq.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/TasksPage-DKg4oZpB.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/external-link-7tHSa1Y1.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/refresh-cw-3BcNWlWU.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/rocket-CT4BqsDO.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/shield-check-TAdrvvOX.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/supervisor-AngOxQui.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/supervisor-DoAb2I7j.css +0 -0
- /package/ui-react/{ui-react/assets → assets}/supervisor-m53cymoX.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/useSupervisorAction-BG3WZkEK.js +0 -0
- /package/ui-react/{ui-react/assets → assets}/widgets-OLyrPchF.js +0 -0
package/README.md
CHANGED
package/bin/dsh-supervisor
CHANGED
|
Binary file
|
package/package.json
CHANGED
package/ui-react/supervisor.html
CHANGED
|
@@ -6,111 +6,22 @@
|
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>dsh-supervisor · 控制面板</title>
|
|
8
8
|
<style>
|
|
9
|
-
/*
|
|
10
|
-
|
|
11
|
-
因此这里不需要任何"自愈/强制刷新"脚本。 */
|
|
9
|
+
/* 内核面板页:纯网页(2026-09-07 定稿,无独立加载页/无窗口逻辑)。
|
|
10
|
+
基础样式仅保证铺满与无色块,具体 UI 由 React 应用渲染。 */
|
|
12
11
|
:root {
|
|
13
12
|
font-family: Inter, "Noto Sans SC", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
14
13
|
color: #171717;
|
|
15
|
-
background: transparent;
|
|
16
14
|
}
|
|
17
15
|
* { box-sizing: border-box; }
|
|
18
16
|
html, body, #root { width: 100%; height: 100%; height: 100dvh; }
|
|
19
|
-
body {
|
|
20
|
-
margin: 0;
|
|
21
|
-
min-width: 320px;
|
|
22
|
-
min-height: 100vh;
|
|
23
|
-
min-height: 100dvh;
|
|
24
|
-
overflow: hidden;
|
|
25
|
-
background: transparent;
|
|
26
|
-
user-select: none;
|
|
27
|
-
-webkit-user-select: none;
|
|
28
|
-
}
|
|
29
|
-
.startup-shell {
|
|
30
|
-
display: grid;
|
|
31
|
-
width: 100%;
|
|
32
|
-
height: 100%;
|
|
33
|
-
place-items: center;
|
|
34
|
-
overflow: hidden;
|
|
35
|
-
background:
|
|
36
|
-
radial-gradient(circle at 50% 38%, rgb(47 84 235 / 10%), transparent 30%),
|
|
37
|
-
#FAFBFC;
|
|
38
|
-
}
|
|
39
|
-
.startup-brand { display: grid; justify-items: center; gap: 18px; width: min(280px, calc(100% - 48px)); }
|
|
40
|
-
.startup-logo {
|
|
41
|
-
position: relative;
|
|
42
|
-
display: grid;
|
|
43
|
-
width: 64px;
|
|
44
|
-
height: 64px;
|
|
45
|
-
place-items: center;
|
|
46
|
-
border: 1px solid rgb(47 84 235 / 14%);
|
|
47
|
-
border-radius: 999px;
|
|
48
|
-
background: linear-gradient(145deg, rgb(255 255 255 / 96%), rgb(239 245 242 / 92%));
|
|
49
|
-
box-shadow: 0 18px 42px rgb(15 23 42 / 10%), inset 0 1px 0 rgb(255 255 255 / 90%);
|
|
50
|
-
color: #2F54EB;
|
|
51
|
-
}
|
|
52
|
-
.startup-logo::after {
|
|
53
|
-
position: absolute;
|
|
54
|
-
inset: -7px;
|
|
55
|
-
content: "";
|
|
56
|
-
border-radius: 999px;
|
|
57
|
-
border: 2px solid rgb(47 84 235 / 10%);
|
|
58
|
-
border-top-color: #2F54EB;
|
|
59
|
-
animation: startup-spin 960ms linear infinite;
|
|
60
|
-
}
|
|
61
|
-
.startup-logo-image {
|
|
62
|
-
width: 42px;
|
|
63
|
-
height: 42px;
|
|
64
|
-
background: currentColor;
|
|
65
|
-
mask: url("/dsh-logo.svg") center / contain no-repeat;
|
|
66
|
-
-webkit-mask: url("/dsh-logo.svg") center / contain no-repeat;
|
|
67
|
-
}
|
|
68
|
-
.startup-copy { display: grid; gap: 7px; justify-items: center; text-align: center; }
|
|
69
|
-
.startup-name { color: #0F1115; font-size: 22px; font-weight: 760; line-height: 1; }
|
|
70
|
-
.startup-status { color: #6b747d; font-size: 13px; line-height: 1.4; }
|
|
71
|
-
.startup-progress {
|
|
72
|
-
position: relative;
|
|
73
|
-
width: 100%;
|
|
74
|
-
height: 3px;
|
|
75
|
-
margin-top: 4px;
|
|
76
|
-
overflow: hidden;
|
|
77
|
-
border-radius: 999px;
|
|
78
|
-
background: #DDE3EC;
|
|
79
|
-
}
|
|
80
|
-
.startup-progress::after {
|
|
81
|
-
display: block;
|
|
82
|
-
width: 42%;
|
|
83
|
-
height: 100%;
|
|
84
|
-
content: "";
|
|
85
|
-
animation: startup-progress 1.15s ease-in-out infinite;
|
|
86
|
-
border-radius: inherit;
|
|
87
|
-
background: #2F54EB;
|
|
88
|
-
}
|
|
89
|
-
@keyframes startup-spin { to { transform: rotate(360deg); } }
|
|
90
|
-
@keyframes startup-progress {
|
|
91
|
-
0% { transform: translateX(-120%); }
|
|
92
|
-
100% { transform: translateX(260%); }
|
|
93
|
-
}
|
|
17
|
+
body { margin: 0; min-width: 320px; min-height: 100vh; min-height: 100dvh; overflow: hidden; background: transparent; }
|
|
94
18
|
</style>
|
|
95
|
-
<script type="module" crossorigin src="/assets/supervisor-
|
|
96
|
-
<link rel="modulepreload" crossorigin href="/assets/supervisor-
|
|
19
|
+
<script type="module" crossorigin src="/assets/supervisor-AngOxQui.js"></script>
|
|
20
|
+
<link rel="modulepreload" crossorigin href="/assets/supervisor-m53cymoX.js">
|
|
97
21
|
<link rel="stylesheet" crossorigin href="/assets/supervisor-hG2-v7mV.css">
|
|
98
|
-
<link rel="stylesheet" crossorigin href="/assets/supervisor-
|
|
22
|
+
<link rel="stylesheet" crossorigin href="/assets/supervisor-DoAb2I7j.css">
|
|
99
23
|
</head>
|
|
100
24
|
<body>
|
|
101
|
-
<div id="root">
|
|
102
|
-
<main class="startup-shell" aria-label="dsh-supervisor 正在启动">
|
|
103
|
-
<section class="startup-brand">
|
|
104
|
-
<div class="startup-logo" aria-hidden="true">
|
|
105
|
-
<span class="startup-logo-image"></span>
|
|
106
|
-
</div>
|
|
107
|
-
<div class="startup-copy">
|
|
108
|
-
<strong class="startup-name">DSH-SUP</strong>
|
|
109
|
-
<span class="startup-status">正在连接守卫服务…</span>
|
|
110
|
-
</div>
|
|
111
|
-
<div class="startup-progress" aria-hidden="true"></div>
|
|
112
|
-
</section>
|
|
113
|
-
</main>
|
|
114
|
-
</div>
|
|
25
|
+
<div id="root"></div>
|
|
115
26
|
</body>
|
|
116
27
|
</html>
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,M as r,S as i,_ as a,a as o,b as s,d as c,f as l,g as u,h as d,m as f,n as p,p as m,r as h,t as g,w as _,y as v}from"./supervisor-DEHXL51C.js";import{t as y}from"./external-link-DblibQpb.js";import{n as b,t as x}from"./rocket-BDT9yN5c.js";import{c as S,f as C,o as w,s as T}from"./supervisor-C3UXEQbW.js";import{t as E}from"./useSupervisorAction-Dj_nAGhv.js";import{c as D,i as O,o as k,r as A,t as j}from"./widgets-C6MCpT1T.js";var M=n(`box`,[[`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`,key:`hh9hay`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`,key:`g66t2b`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}]]),N=n(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),P=n(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),F=n(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),I=r(e(),1),L=i();function R({onRegisterActions:e}){let{snap:n}=g(),{busy:r,run:i}=E(),[R,z]=(0,I.useState)(!1),[B,V]=(0,I.useState)(null),[H,U]=(0,I.useState)(``),[W,G]=(0,I.useState)(``),[K,q]=(0,I.useState)(``),[J,Y]=(0,I.useState)(`4G`),[X,Z]=(0,I.useState)(`150%`),Q=n.instances?.instances??[];(0,I.useEffect)(()=>(e?.({onAdd:()=>z(!0)}),()=>e?.(null)),[e]);let $=(e,t)=>i(e,t);async function ee(){let e=parseInt(W,10);if(!Number.isFinite(e)||e<=0){t.error(`请填写有效端口`);return}let n=K?K.split(/\n/).map(e=>e.trim()).filter(Boolean):[];try{let r=await h.instanceAdd({name:H.trim()||`沙箱 `+e,port:e,command:n,memoryMax:J||`4G`,cpuQuota:X||`150%`});if(r&&r.ok===!1){t.error(r.error||`添加失败`);return}t.success(`已添加实例`),z(!1),U(``),G(``),q(``),Y(`4G`),Z(`150%`),p.refresh()}catch(e){t.error(String(e))}}async function te(e){await i(e.id,async()=>{let n=await h.instanceCheckUpdate(e.id);n.updateAvailable?(t.success(`发现新版 `+n.latest+`,可点「更新」升级`),re(t=>new Map(t).set(e.id,!0))):n.latest?t.info(`已是最新 `+n.latest):t.error(n.error||`版本检测失败`)})}let[ne,re]=(0,I.useState)(new Map);async function ie(e){confirm(`将升级该沙箱实例的 DSH 到最新版(实例会短暂重启,进行中的请求中断)。确定升级?`)&&await i(e.id,()=>h.instanceUpgrade(e.id),{success:`升级已开始…`})}let ae=({it:e})=>{let t=e.state?.running??!1,n=e.state?.lifecyclePhase,i=T(n,t),a=e.updateJob,c=a?.state===`running`,l=e.sandbox?.memoryMax||`—`,u=e.sandbox?.cpuQuota||`—`,d=r===e.id;return(0,L.jsxs)(j,{className:`overflow-visible`,children:[(0,L.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-[minmax(0,5fr)_minmax(0,6fr)]`,children:[(0,L.jsxs)(`div`,{className:`flex flex-col gap-4 border-b border-border px-6 py-5 md:border-b-0 md:border-r`,children:[(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,L.jsx)(`strong`,{className:`truncate text-lg font-semibold tracking-[-0.01em] text-foreground`,children:e.name}),e.version?(0,L.jsxs)(`span`,{className:`font-mono text-sm text-muted-foreground`,children:[`v`,e.version]}):null]}),ne.get(e.id)?(0,L.jsxs)(v,{className:`text-primary-foreground`,onClick:()=>void ie(e),size:`chip`,children:[(0,L.jsx)(N,{className:`size-3`}),`更新`]}):(0,L.jsxs)(v,{className:`bg-primary/10 text-primary hover:bg-primary/15`,disabled:d||c,onClick:()=>void te(e),size:`chip`,variant:`ghost`,children:[(0,L.jsx)(N,{className:s(`size-3`,d&&`animate-spin`)}),`检测更新`]})]}),(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,L.jsx)(D,{tone:i.tone,ping:i.tone===`ok`}),(0,L.jsx)(`span`,{className:`text-base font-semibold leading-none text-foreground`,children:i.label})]}),c?(0,L.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,L.jsx)(o,{className:`size-3`}),`正在升级 DeepSeek Harness(`,a?.step||``,`)…`]}):null,e.state?.installing?(0,L.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,L.jsx)(o,{className:`size-3`}),`正在安装…`]}):null,n===`FAILED`?(0,L.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs text-destructive`,children:[(0,L.jsx)(_,{className:`size-3.5`}),(0,L.jsx)(`span`,{className:`truncate`,children:e.state?.lastError||`失败`})]}):null]}),(0,L.jsx)(`div`,{className:`flex items-center bg-[image:var(--panel-accent-gradient)] px-6 py-5`,children:(0,L.jsxs)(`div`,{className:`grid w-full grid-cols-2 gap-x-6 gap-y-4 sm:grid-cols-4`,children:[(0,L.jsx)(O,{icon:(0,L.jsx)(C,{className:`size-4`}),label:`端口`,value:String(e.port),mono:!0}),(0,L.jsx)(O,{icon:(0,L.jsx)(F,{className:`size-4`}),label:`PID`,value:e.state?.pid?String(e.state.pid):`—`,mono:!0}),(0,L.jsx)(O,{icon:(0,L.jsx)(N,{className:`size-4`}),label:`重启次数`,value:String(e.state?.restartCount??0),mono:!0}),(0,L.jsx)(O,{icon:(0,L.jsx)(_,{className:`size-4`}),label:`最近故障`,value:e.state?.lastFailure?w(e.state.lastFailure):`无`,warn:!!e.state?.lastFailure})]})})]}),(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 border-t border-border/60 px-6 py-3`,children:[(0,L.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-2 text-xs text-muted-foreground`,children:[(0,L.jsx)(A,{domain:`sandbox`}),(0,L.jsx)(k,{tone:e.remoteEnabled?`boot`:`off`,children:e.remoteEnabled?`远程开启`:`远程关闭`}),(0,L.jsxs)(`span`,{className:`whitespace-nowrap`,children:[`内存 `,l,` · CPU `,u]})]}),(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,L.jsxs)(v,{disabled:!t,onClick:()=>void $(e.id,()=>h.instanceOpenWeb(e.id)),size:`sm`,title:`打开 DSH Web(自动带认证连接)`,variant:`outline`,children:[(0,L.jsx)(y,{className:`size-4`}),`DSH Web`]}),(0,L.jsx)(v,{disabled:c,onClick:()=>void $(e.id,()=>t?h.instanceStop(e.id):h.instanceStart(e.id)),size:`sm`,variant:`outline`,children:t?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(b,{className:`size-4 text-status-error`}),`停止实例`]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(x,{className:`size-4 text-primary`}),`启动实例`]})}),(0,L.jsxs)(v,{disabled:d,onClick:()=>void $(e.id,()=>h.instanceUpdate(e.id,{guardian:!e.guardian})),size:`sm`,variant:`outline`,children:[(0,L.jsx)(P,{className:s(`size-4`,e.guardian?`text-status-ok`:`text-muted-foreground`)}),e.guardian?`停止守护`:`启动守护`]}),(0,L.jsx)(`span`,{"aria-hidden":`true`,className:`mx-1 h-5 w-px bg-border`}),(0,L.jsxs)(v,{className:`h-[30px]`,disabled:d,onClick:()=>V(e.id),size:`sm`,variant:`destructive`,children:[(0,L.jsx)(S,{className:`size-4`}),`删除`]})]})]})]})};return(0,L.jsxs)(`div`,{className:`grid content-start gap-4`,children:[Q.length?(0,L.jsx)(`div`,{className:`grid gap-3`,children:Q.map(e=>(0,L.jsx)(ae,{it:e},e.id))}):(0,L.jsx)(`div`,{className:`grid min-h-[220px] place-items-center rounded-lg border border-dashed border-border text-center`,children:(0,L.jsxs)(`div`,{children:[(0,L.jsx)(M,{className:`mx-auto mb-3 size-8 text-muted-foreground`}),(0,L.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:`尚未添加沙箱实例`}),(0,L.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`点击顶部「添加实例」创建沙箱`})]})}),(0,L.jsx)(m,{open:R,onOpenChange:z,children:(0,L.jsxs)(f,{className:`max-w-[440px]`,children:[(0,L.jsx)(u,{children:(0,L.jsx)(a,{children:`添加 DSH 实例`})}),(0,L.jsxs)(`div`,{className:`grid gap-3`,children:[(0,L.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,L.jsx)(c,{children:`实例名称`}),(0,L.jsx)(l,{placeholder:`如 沙箱二开`,value:H,onChange:e=>U(e.target.value)})]}),(0,L.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,L.jsx)(c,{children:`监听端口`}),(0,L.jsx)(l,{inputMode:`numeric`,placeholder:`如 3082`,value:W,onChange:e=>G(e.target.value)})]}),(0,L.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,L.jsx)(c,{children:`启动命令(每项一参数,可留空用默认)`}),(0,L.jsx)(`textarea`,{className:`min-h-[72px] w-full rounded-md border border-input bg-transparent px-3 py-2 font-mono text-sm outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/20`,placeholder:`node
|
|
2
|
-
/home/bowen/.npm-global/bin/dsh
|
|
3
|
-
web`,value:K,onChange:e=>q(e.target.value)})]}),(0,L.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,L.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,L.jsx)(c,{children:`内存限额`}),(0,L.jsx)(l,{placeholder:`如 4G`,value:J,onChange:e=>Y(e.target.value)})]}),(0,L.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,L.jsx)(c,{children:`CPU 配额`}),(0,L.jsx)(l,{placeholder:`如 150%`,value:X,onChange:e=>Z(e.target.value)})]})]})]}),(0,L.jsxs)(d,{children:[(0,L.jsx)(v,{onClick:()=>z(!1),variant:`outline`,children:`取消`}),(0,L.jsx)(v,{onClick:()=>void ee(),children:`添加`})]})]})}),(0,L.jsx)(m,{open:!!B,onOpenChange:e=>!e&&V(null),children:(0,L.jsxs)(f,{className:`max-w-[380px]`,children:[(0,L.jsx)(u,{children:(0,L.jsx)(a,{children:`删除实例?`})}),(0,L.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`将彻底删除该沙箱实例(含配置与运行时数据)。此操作不可恢复。`}),(0,L.jsxs)(d,{children:[(0,L.jsx)(v,{onClick:()=>V(null),variant:`outline`,children:`取消`}),(0,L.jsx)(v,{className:`h-[34px]`,onClick:()=>{B&&$(B,()=>h.instanceRemove(B)),V(null)},variant:`destructive`,children:`删除`})]})]})})]})}export{R as InstancesPage};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{A as e,D as t,M as n,S as r,b as i,d as a,f as o,i as s,j as c,r as l,t as u,y as d}from"./supervisor-DEHXL51C.js";import{t as f}from"./external-link-DblibQpb.js";import{t as p}from"./useSupervisorAction-Dj_nAGhv.js";import{n as m,o as h,r as g,t as _}from"./widgets-C6MCpT1T.js";var v=t(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),y=t(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]),b=c(((e,t)=>{t.exports=`SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED`})),x=c(((e,t)=>{var n=b();function r(){}function i(){}i.resetWarningCache=r,t.exports=function(){function e(e,t,r,i,a,o){if(o!==n){var s=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name=`Invariant Violation`,s}}e.isRequired=e;function t(){return e}var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return a.PropTypes=a,a}})),S=c(((e,t)=>{t.exports=x()()})),C=n(e(),1),w=n(S(),1),T=function(e,t){let n=e,r=D[t],i=null,a=0,o=null,s=[],c={},l=function(e,t){a=n*4+17,i=function(e){let t=Array(e);for(let n=0;n<e;n+=1){t[n]=Array(e);for(let r=0;r<e;r+=1)t[n][r]=null}return t}(a),u(0,0),u(a-7,0),u(0,a-7),p(),f(),h(e,t),n>=7&&m(e),o??=v(n,r,s),g(o,t)},u=function(e,t){for(let n=-1;n<=7;n+=1)if(!(e+n<=-1||a<=e+n))for(let r=-1;r<=7;r+=1)t+r<=-1||a<=t+r||(0<=n&&n<=6&&(r==0||r==6)||0<=r&&r<=6&&(n==0||n==6)||2<=n&&n<=4&&2<=r&&r<=4?i[e+n][t+r]=!0:i[e+n][t+r]=!1)},d=function(){let e=0,t=0;for(let n=0;n<8;n+=1){l(!0,n);let r=k.getLostPoint(c);(n==0||e>r)&&(e=r,t=n)}return t},f=function(){for(let e=8;e<a-8;e+=1)i[e][6]??(i[e][6]=e%2==0);for(let e=8;e<a-8;e+=1)i[6][e]??(i[6][e]=e%2==0)},p=function(){let e=k.getPatternPosition(n);for(let t=0;t<e.length;t+=1)for(let n=0;n<e.length;n+=1){let r=e[t],a=e[n];if(i[r][a]==null)for(let e=-2;e<=2;e+=1)for(let t=-2;t<=2;t+=1)e==-2||e==2||t==-2||t==2||e==0&&t==0?i[r+e][a+t]=!0:i[r+e][a+t]=!1}},m=function(e){let t=k.getBCHTypeNumber(n);for(let n=0;n<18;n+=1){let r=!e&&(t>>n&1)==1;i[Math.floor(n/3)][n%3+a-8-3]=r}for(let n=0;n<18;n+=1){let r=!e&&(t>>n&1)==1;i[n%3+a-8-3][Math.floor(n/3)]=r}},h=function(e,t){let n=r<<3|t,o=k.getBCHTypeInfo(n);for(let t=0;t<15;t+=1){let n=!e&&(o>>t&1)==1;t<6?i[t][8]=n:t<8?i[t+1][8]=n:i[a-15+t][8]=n}for(let t=0;t<15;t+=1){let n=!e&&(o>>t&1)==1;t<8?i[8][a-t-1]=n:t<9?i[8][15-t-1+1]=n:i[8][15-t-1]=n}i[a-8][8]=!e},g=function(e,t){let n=-1,r=a-1,o=7,s=0,c=k.getMaskFunction(t);for(let t=a-1;t>0;t-=2)for(t==6&&--t;;){for(let n=0;n<2;n+=1)if(i[r][t-n]==null){let a=!1;s<e.length&&(a=(e[s]>>>o&1)==1),c(r,t-n)&&(a=!a),i[r][t-n]=a,--o,o==-1&&(s+=1,o=7)}if(r+=n,r<0||a<=r){r-=n,n=-n;break}}},_=function(e,t){let n=0,r=0,i=0,a=Array(t.length),o=Array(t.length);for(let s=0;s<t.length;s+=1){let c=t[s].dataCount,l=t[s].totalCount-c;r=Math.max(r,c),i=Math.max(i,l),a[s]=Array(c);for(let t=0;t<a[s].length;t+=1)a[s][t]=255&e.getBuffer()[t+n];n+=c;let u=k.getErrorCorrectPolynomial(l),d=j(a[s],u.getLength()-1).mod(u);o[s]=Array(u.getLength()-1);for(let e=0;e<o[s].length;e+=1){let t=e+d.getLength()-o[s].length;o[s][e]=t>=0?d.getAt(t):0}}let s=0;for(let e=0;e<t.length;e+=1)s+=t[e].totalCount;let c=Array(s),l=0;for(let e=0;e<r;e+=1)for(let n=0;n<t.length;n+=1)e<a[n].length&&(c[l]=a[n][e],l+=1);for(let e=0;e<i;e+=1)for(let n=0;n<t.length;n+=1)e<o[n].length&&(c[l]=o[n][e],l+=1);return c},v=function(e,t,n){let r=M.getRSBlocks(e,t),i=N();for(let t=0;t<n.length;t+=1){let r=n[t];i.put(r.getMode(),4),i.put(r.getLength(),k.getLengthInBits(r.getMode(),e)),r.write(i)}let a=0;for(let e=0;e<r.length;e+=1)a+=r[e].dataCount;if(i.getLengthInBits()>a*8)throw`code length overflow. (`+i.getLengthInBits()+`>`+a*8+`)`;for(i.getLengthInBits()+4<=a*8&&i.put(0,4);i.getLengthInBits()%8!=0;)i.putBit(!1);for(;!(i.getLengthInBits()>=a*8||(i.put(236,8),i.getLengthInBits()>=a*8));)i.put(17,8);return _(i,r)};c.addData=function(e,t){t||=`Byte`;let n=null;switch(t){case`Numeric`:n=P(e);break;case`Alphanumeric`:n=F(e);break;case`Byte`:n=I(e);break;case`Kanji`:n=L(e);break;default:throw`mode:`+t}s.push(n),o=null},c.isDark=function(e,t){if(e<0||a<=e||t<0||a<=t)throw e+`,`+t;return i[e][t]},c.getModuleCount=function(){return a},c.make=function(){if(n<1){let e=1;for(;e<40;e++){let t=M.getRSBlocks(e,r),n=N();for(let t=0;t<s.length;t++){let r=s[t];n.put(r.getMode(),4),n.put(r.getLength(),k.getLengthInBits(r.getMode(),e)),r.write(n)}let i=0;for(let e=0;e<t.length;e++)i+=t[e].dataCount;if(n.getLengthInBits()<=i*8)break}n=e}l(!1,d())},c.createTableTag=function(e,t){e||=2,t=t===void 0?e*4:t;let n=``;n+=`<table style="`,n+=` border-width: 0px; border-style: none;`,n+=` border-collapse: collapse;`,n+=` padding: 0px; margin: `+t+`px;`,n+=`">`,n+=`<tbody>`;for(let t=0;t<c.getModuleCount();t+=1){n+=`<tr>`;for(let r=0;r<c.getModuleCount();r+=1)n+=`<td style="`,n+=` border-width: 0px; border-style: none;`,n+=` border-collapse: collapse;`,n+=` padding: 0px; margin: 0px;`,n+=` width: `+e+`px;`,n+=` height: `+e+`px;`,n+=` background-color: `,n+=c.isDark(t,r)?`#000000`:`#ffffff`,n+=`;`,n+=`"/>`;n+=`</tr>`}return n+=`</tbody>`,n+=`</table>`,n},c.createSvgTag=function(e,t,n,r){let i={};typeof arguments[0]==`object`&&(i=arguments[0],e=i.cellSize,t=i.margin,n=i.alt,r=i.title),e||=2,t=t===void 0?e*4:t,n=typeof n==`string`?{text:n}:n||{},n.text=n.text||null,n.id=n.text?n.id||`qrcode-description`:null,r=typeof r==`string`?{text:r}:r||{},r.text=r.text||null,r.id=r.text?r.id||`qrcode-title`:null;let a=c.getModuleCount()*e+t*2,o,s,l,u,d=``,f;for(f=`l`+e+`,0 0,`+e+` -`+e+`,0 0,-`+e+`z `,d+=`<svg version="1.1" xmlns="http://www.w3.org/2000/svg"`,d+=i.scalable?``:` width="`+a+`px" height="`+a+`px"`,d+=` viewBox="0 0 `+a+` `+a+`" `,d+=` preserveAspectRatio="xMinYMin meet"`,d+=r.text||n.text?` role="img" aria-labelledby="`+y([r.id,n.id].join(` `).trim())+`"`:``,d+=`>`,d+=r.text?`<title id="`+y(r.id)+`">`+y(r.text)+`</title>`:``,d+=n.text?`<description id="`+y(n.id)+`">`+y(n.text)+`</description>`:``,d+=`<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>`,d+=`<path d="`,l=0;l<c.getModuleCount();l+=1)for(u=l*e+t,o=0;o<c.getModuleCount();o+=1)c.isDark(l,o)&&(s=o*e+t,d+=`M`+s+`,`+u+f);return d+=`" stroke="transparent" fill="black"/>`,d+=`</svg>`,d},c.createDataURL=function(e,t){e||=2,t=t===void 0?e*4:t;let n=c.getModuleCount()*e+t*2,r=t,i=n-t;return H(n,n,function(t,n){if(r<=t&&t<i&&r<=n&&n<i){let i=Math.floor((t-r)/e),a=Math.floor((n-r)/e);return+!c.isDark(a,i)}return 1})},c.createImgTag=function(e,t,n){e||=2,t=t===void 0?e*4:t;let r=c.getModuleCount()*e+t*2,i=``;return i+=`<img`,i+=` src="`,i+=c.createDataURL(e,t),i+=`"`,i+=` width="`,i+=r,i+=`"`,i+=` height="`,i+=r,i+=`"`,n&&(i+=` alt="`,i+=y(n),i+=`"`),i+=`/>`,i};let y=function(e){let t=``;for(let n=0;n<e.length;n+=1){let r=e.charAt(n);switch(r){case`<`:t+=`<`;break;case`>`:t+=`>`;break;case`&`:t+=`&`;break;case`"`:t+=`"`;break;default:t+=r}}return t},b=function(e){e=e===void 0?2:e;let t=c.getModuleCount()*1+e*2,n=e,r=t-e,i,a,o,s,l,u={"██":`█`,"█ ":`▀`," █":`▄`," ":` `},d={"██":`▀`,"█ ":`▀`," █":` `," ":` `},f=``;for(i=0;i<t;i+=2){for(o=Math.floor((i-n)/1),s=Math.floor((i+1-n)/1),a=0;a<t;a+=1)l=`█`,n<=a&&a<r&&n<=i&&i<r&&c.isDark(o,Math.floor((a-n)/1))&&(l=` `),n<=a&&a<r&&n<=i+1&&i+1<r&&c.isDark(s,Math.floor((a-n)/1))?l+=` `:l+=`█`,f+=e<1&&i+1>=r?d[l]:u[l];f+=`
|
|
2
|
-
`}return t%2&&e>0?f.substring(0,f.length-t-1)+Array(t+1).join(`▀`):f.substring(0,f.length-1)};return c.createASCII=function(e,t){if(e||=1,e<2)return b(t);--e,t=t===void 0?e*2:t;let n=c.getModuleCount()*e+t*2,r=t,i=n-t,a,o,s,l,u=Array(e+1).join(`██`),d=Array(e+1).join(` `),f=``,p=``;for(a=0;a<n;a+=1){for(s=Math.floor((a-r)/e),p=``,o=0;o<n;o+=1)l=1,r<=o&&o<i&&r<=a&&a<i&&c.isDark(s,Math.floor((o-r)/e))&&(l=0),p+=l?u:d;for(s=0;s<e;s+=1)f+=p+`
|
|
3
|
-
`}return f.substring(0,f.length-1)},c.renderTo2dContext=function(e,t){t||=2;let n=c.getModuleCount();for(let r=0;r<n;r++)for(let i=0;i<n;i++)e.fillStyle=c.isDark(r,i)?`black`:`white`,e.fillRect(i*t,r*t,t,t)},c};T.stringToBytes=function(e){let t=[];for(let n=0;n<e.length;n+=1){let r=e.charCodeAt(n);t.push(r&255)}return t},T.createStringToBytes=function(e,t){let n=function(){let n=B(e),r=function(){let e=n.read();if(e==-1)throw`eof`;return e},i=0,a={};for(;;){let e=n.read();if(e==-1)break;let t=r(),o=r(),s=r(),c=String.fromCharCode(e<<8|t);a[c]=o<<8|s,i+=1}if(i!=t)throw i+` != `+t;return a}();return function(e){let t=[];for(let r=0;r<e.length;r+=1){let i=e.charCodeAt(r);if(i<128)t.push(i);else{let i=n[e.charAt(r)];typeof i==`number`?(i&255)==i?t.push(i):(t.push(i>>>8),t.push(i&255)):t.push(63)}}return t}};var E={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},D={L:1,M:0,Q:3,H:2},O={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},k=function(){let e=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],t=1335,n=7973,r={},i=function(e){let t=0;for(;e!=0;)t+=1,e>>>=1;return t};return r.getBCHTypeInfo=function(e){let n=e<<10;for(;i(n)-i(t)>=0;)n^=t<<i(n)-i(t);return(e<<10|n)^21522},r.getBCHTypeNumber=function(e){let t=e<<12;for(;i(t)-i(n)>=0;)t^=n<<i(t)-i(n);return e<<12|t},r.getPatternPosition=function(t){return e[t-1]},r.getMaskFunction=function(e){switch(e){case O.PATTERN000:return function(e,t){return(e+t)%2==0};case O.PATTERN001:return function(e,t){return e%2==0};case O.PATTERN010:return function(e,t){return t%3==0};case O.PATTERN011:return function(e,t){return(e+t)%3==0};case O.PATTERN100:return function(e,t){return(Math.floor(e/2)+Math.floor(t/3))%2==0};case O.PATTERN101:return function(e,t){return e*t%2+e*t%3==0};case O.PATTERN110:return function(e,t){return(e*t%2+e*t%3)%2==0};case O.PATTERN111:return function(e,t){return(e*t%3+(e+t)%2)%2==0};default:throw`bad maskPattern:`+e}},r.getErrorCorrectPolynomial=function(e){let t=j([1],0);for(let n=0;n<e;n+=1)t=t.multiply(j([1,A.gexp(n)],0));return t},r.getLengthInBits=function(e,t){if(1<=t&&t<10)switch(e){case E.MODE_NUMBER:return 10;case E.MODE_ALPHA_NUM:return 9;case E.MODE_8BIT_BYTE:return 8;case E.MODE_KANJI:return 8;default:throw`mode:`+e}else if(t<27)switch(e){case E.MODE_NUMBER:return 12;case E.MODE_ALPHA_NUM:return 11;case E.MODE_8BIT_BYTE:return 16;case E.MODE_KANJI:return 10;default:throw`mode:`+e}else if(t<41)switch(e){case E.MODE_NUMBER:return 14;case E.MODE_ALPHA_NUM:return 13;case E.MODE_8BIT_BYTE:return 16;case E.MODE_KANJI:return 12;default:throw`mode:`+e}else throw`type:`+t},r.getLostPoint=function(e){let t=e.getModuleCount(),n=0;for(let r=0;r<t;r+=1)for(let i=0;i<t;i+=1){let a=0,o=e.isDark(r,i);for(let n=-1;n<=1;n+=1)if(!(r+n<0||t<=r+n))for(let s=-1;s<=1;s+=1)i+s<0||t<=i+s||(n!=0||s!=0)&&o==e.isDark(r+n,i+s)&&(a+=1);a>5&&(n+=3+a-5)}for(let r=0;r<t-1;r+=1)for(let i=0;i<t-1;i+=1){let t=0;e.isDark(r,i)&&(t+=1),e.isDark(r+1,i)&&(t+=1),e.isDark(r,i+1)&&(t+=1),e.isDark(r+1,i+1)&&(t+=1),(t==0||t==4)&&(n+=3)}for(let r=0;r<t;r+=1)for(let i=0;i<t-6;i+=1)e.isDark(r,i)&&!e.isDark(r,i+1)&&e.isDark(r,i+2)&&e.isDark(r,i+3)&&e.isDark(r,i+4)&&!e.isDark(r,i+5)&&e.isDark(r,i+6)&&(n+=40);for(let r=0;r<t;r+=1)for(let i=0;i<t-6;i+=1)e.isDark(i,r)&&!e.isDark(i+1,r)&&e.isDark(i+2,r)&&e.isDark(i+3,r)&&e.isDark(i+4,r)&&!e.isDark(i+5,r)&&e.isDark(i+6,r)&&(n+=40);let r=0;for(let n=0;n<t;n+=1)for(let i=0;i<t;i+=1)e.isDark(i,n)&&(r+=1);let i=Math.abs(100*r/t/t-50)/5;return n+=i*10,n},r}(),A=function(){let e=Array(256),t=Array(256);for(let t=0;t<8;t+=1)e[t]=1<<t;for(let t=8;t<256;t+=1)e[t]=e[t-4]^e[t-5]^e[t-6]^e[t-8];for(let n=0;n<255;n+=1)t[e[n]]=n;let n={};return n.glog=function(e){if(e<1)throw`glog(`+e+`)`;return t[e]},n.gexp=function(t){for(;t<0;)t+=255;for(;t>=256;)t-=255;return e[t]},n}(),j=function(e,t){if(e.length===void 0)throw e.length+`/`+t;let n=function(){let n=0;for(;n<e.length&&e[n]==0;)n+=1;let r=Array(e.length-n+t);for(let t=0;t<e.length-n;t+=1)r[t]=e[t+n];return r}(),r={};return r.getAt=function(e){return n[e]},r.getLength=function(){return n.length},r.multiply=function(e){let t=Array(r.getLength()+e.getLength()-1);for(let n=0;n<r.getLength();n+=1)for(let i=0;i<e.getLength();i+=1)t[n+i]^=A.gexp(A.glog(r.getAt(n))+A.glog(e.getAt(i)));return j(t,0)},r.mod=function(e){if(r.getLength()-e.getLength()<0)return r;let t=A.glog(r.getAt(0))-A.glog(e.getAt(0)),n=Array(r.getLength());for(let e=0;e<r.getLength();e+=1)n[e]=r.getAt(e);for(let r=0;r<e.getLength();r+=1)n[r]^=A.gexp(A.glog(e.getAt(r))+t);return j(n,0).mod(e)},r},M=function(){let e=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(e,t){let n={};return n.totalCount=e,n.dataCount=t,n},n={},r=function(t,n){switch(n){case D.L:return e[(t-1)*4+0];case D.M:return e[(t-1)*4+1];case D.Q:return e[(t-1)*4+2];case D.H:return e[(t-1)*4+3];default:return}};return n.getRSBlocks=function(e,n){let i=r(e,n);if(i===void 0)throw`bad rs block @ typeNumber:`+e+`/errorCorrectionLevel:`+n;let a=i.length/3,o=[];for(let e=0;e<a;e+=1){let n=i[e*3+0],r=i[e*3+1],a=i[e*3+2];for(let e=0;e<n;e+=1)o.push(t(r,a))}return o},n}(),N=function(){let e=[],t=0,n={};return n.getBuffer=function(){return e},n.getAt=function(t){let n=Math.floor(t/8);return(e[n]>>>7-t%8&1)==1},n.put=function(e,t){for(let r=0;r<t;r+=1)n.putBit((e>>>t-r-1&1)==1)},n.getLengthInBits=function(){return t},n.putBit=function(n){let r=Math.floor(t/8);e.length<=r&&e.push(0),n&&(e[r]|=128>>>t%8),t+=1},n},P=function(e){let t=E.MODE_NUMBER,n=e,r={};r.getMode=function(){return t},r.getLength=function(e){return n.length},r.write=function(e){let t=n,r=0;for(;r+2<t.length;)e.put(i(t.substring(r,r+3)),10),r+=3;r<t.length&&(t.length-r==1?e.put(i(t.substring(r,r+1)),4):t.length-r==2&&e.put(i(t.substring(r,r+2)),7))};let i=function(e){let t=0;for(let n=0;n<e.length;n+=1)t=t*10+a(e.charAt(n));return t},a=function(e){if(`0`<=e&&e<=`9`)return e.charCodeAt(0)-48;throw`illegal char :`+e};return r},F=function(e){let t=E.MODE_ALPHA_NUM,n=e,r={};r.getMode=function(){return t},r.getLength=function(e){return n.length},r.write=function(e){let t=n,r=0;for(;r+1<t.length;)e.put(i(t.charAt(r))*45+i(t.charAt(r+1)),11),r+=2;r<t.length&&e.put(i(t.charAt(r)),6)};let i=function(e){if(`0`<=e&&e<=`9`)return e.charCodeAt(0)-48;if(`A`<=e&&e<=`Z`)return e.charCodeAt(0)-65+10;switch(e){case` `:return 36;case`$`:return 37;case`%`:return 38;case`*`:return 39;case`+`:return 40;case`-`:return 41;case`.`:return 42;case`/`:return 43;case`:`:return 44;default:throw`illegal char :`+e}};return r},I=function(e){let t=E.MODE_8BIT_BYTE,n=T.stringToBytes(e),r={};return r.getMode=function(){return t},r.getLength=function(e){return n.length},r.write=function(e){for(let t=0;t<n.length;t+=1)e.put(n[t],8)},r},L=function(e){let t=E.MODE_KANJI,n=T.stringToBytes;(function(e,t){let r=n(e);if(r.length!=2||(r[0]<<8|r[1])!=t)throw`sjis not supported.`})(`友`,38726);let r=n(e),i={};return i.getMode=function(){return t},i.getLength=function(e){return~~(r.length/2)},i.write=function(e){let t=r,n=0;for(;n+1<t.length;){let r=(255&t[n])<<8|255&t[n+1];if(33088<=r&&r<=40956)r-=33088;else if(57408<=r&&r<=60351)r-=49472;else throw`illegal char at `+(n+1)+`/`+r;r=(r>>>8&255)*192+(r&255),e.put(r,13),n+=2}if(n<t.length)throw`illegal char at `+(n+1)},i},R=function(){let e=[],t={};return t.writeByte=function(t){e.push(t&255)},t.writeShort=function(e){t.writeByte(e),t.writeByte(e>>>8)},t.writeBytes=function(e,n,r){n||=0,r||=e.length;for(let i=0;i<r;i+=1)t.writeByte(e[i+n])},t.writeString=function(e){for(let n=0;n<e.length;n+=1)t.writeByte(e.charCodeAt(n))},t.toByteArray=function(){return e},t.toString=function(){let t=``;t+=`[`;for(let n=0;n<e.length;n+=1)n>0&&(t+=`,`),t+=e[n];return t+=`]`,t},t},z=function(){let e=0,t=0,n=0,r=``,i={},a=function(e){r+=String.fromCharCode(o(e&63))},o=function(e){if(e<0)throw`n:`+e;if(e<26)return 65+e;if(e<52)return 97+(e-26);if(e<62)return 48+(e-52);if(e==62)return 43;if(e==63)return 47;throw`n:`+e};return i.writeByte=function(r){for(e=e<<8|r&255,t+=8,n+=1;t>=6;)a(e>>>t-6),t-=6},i.flush=function(){if(t>0&&(a(e<<6-t),e=0,t=0),n%3!=0){let e=3-n%3;for(let t=0;t<e;t+=1)r+=`=`}},i.toString=function(){return r},i},B=function(e){let t=e,n=0,r=0,i=0,a={};a.read=function(){for(;i<8;){if(n>=t.length){if(i==0)return-1;throw`unexpected end of file./`+i}let e=t.charAt(n);if(n+=1,e==`=`)return i=0,-1;e.match(/^\s$/)||(r=r<<6|o(e.charCodeAt(0)),i+=6)}let e=r>>>i-8&255;return i-=8,e};let o=function(e){if(65<=e&&e<=90)return e-65;if(97<=e&&e<=122)return e-97+26;if(48<=e&&e<=57)return e-48+52;if(e==43)return 62;if(e==47)return 63;throw`c:`+e};return a},V=function(e,t){let n=e,r=t,i=Array(e*t),a={};a.setPixel=function(e,t,r){i[t*n+e]=r},a.write=function(e){e.writeString(`GIF87a`),e.writeShort(n),e.writeShort(r),e.writeByte(128),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(255),e.writeByte(255),e.writeByte(255),e.writeString(`,`),e.writeShort(0),e.writeShort(0),e.writeShort(n),e.writeShort(r),e.writeByte(0);let t=s(2);e.writeByte(2);let i=0;for(;t.length-i>255;)e.writeByte(255),e.writeBytes(t,i,255),i+=255;e.writeByte(t.length-i),e.writeBytes(t,i,t.length-i),e.writeByte(0),e.writeString(`;`)};let o=function(e){let t=e,n=0,r=0,i={};return i.write=function(e,i){if(e>>>i)throw`length over`;for(;n+i>=8;)t.writeByte(255&(e<<n|r)),i-=8-n,e>>>=8-n,r=0,n=0;r=e<<n|r,n+=i},i.flush=function(){n>0&&t.writeByte(r)},i},s=function(e){let t=1<<e,n=(1<<e)+1,r=e+1,a=c();for(let e=0;e<t;e+=1)a.add(String.fromCharCode(e));a.add(String.fromCharCode(t)),a.add(String.fromCharCode(n));let s=R(),l=o(s);l.write(t,r);let u=0,d=String.fromCharCode(i[u]);for(u+=1;u<i.length;){let e=String.fromCharCode(i[u]);u+=1,a.contains(d+e)?d+=e:(l.write(a.indexOf(d),r),a.size()<4095&&(a.size()==1<<r&&(r+=1),a.add(d+e)),d=e)}return l.write(a.indexOf(d),r),l.write(n,r),l.flush(),s.toByteArray()},c=function(){let e={},t=0,n={};return n.add=function(r){if(n.contains(r))throw`dup key:`+r;e[r]=t,t+=1},n.size=function(){return t},n.indexOf=function(t){return e[t]},n.contains=function(t){return e[t]!==void 0},n};return a},H=function(e,t,n){let r=V(e,t);for(let i=0;i<t;i+=1)for(let t=0;t<e;t+=1)r.setPixel(t,i,n(t,i));let i=R();r.write(i);let a=z(),o=i.toByteArray();for(let e=0;e<o.length;e+=1)a.writeByte(o[e]);return a.flush(),`data:image/gif;base64,`+a};T.stringToBytes;function U(){return U=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},U.apply(null,arguments)}function W(e,t){if(e==null)return{};var n,r,i=G(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function G(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}var K=[`bgColor`,`bgD`,`fgD`,`fgColor`,`size`,`title`,`viewBoxSize`,`xmlns`],q={bgColor:w.default.oneOfType([w.default.object,w.default.string]).isRequired,bgD:w.default.string.isRequired,fgColor:w.default.oneOfType([w.default.object,w.default.string]).isRequired,fgD:w.default.string.isRequired,size:w.default.number.isRequired,title:w.default.string,viewBoxSize:w.default.number.isRequired,xmlns:w.default.string},J=(0,C.forwardRef)(function(e,t){var n=e.bgColor,r=e.bgD,i=e.fgD,a=e.fgColor,o=e.size,s=e.title,c=e.viewBoxSize,l=e.xmlns,u=l===void 0?`http://www.w3.org/2000/svg`:l,d=W(e,K);return C.createElement(`svg`,U({},d,{height:o,ref:t,viewBox:`0 0 ${c} ${c}`,width:o,xmlns:u}),s?C.createElement(`title`,null,s):null,C.createElement(`path`,{d:r,fill:n}),C.createElement(`path`,{d:i,fill:a}))});J.displayName=`QRCodeSvg`,J.propTypes=q;var Y=[`bgColor`,`fgColor`,`level`,`size`,`value`];T.stringToBytes=function(e){return Array.from(new TextEncoder().encode(e))};var X={bgColor:w.default.oneOfType([w.default.object,w.default.string]),fgColor:w.default.oneOfType([w.default.object,w.default.string]),level:w.default.string,size:w.default.number,value:w.default.string.isRequired},Z=(0,C.forwardRef)(function(e,t){var n=e.bgColor,r=n===void 0?`#FFFFFF`:n,i=e.fgColor,a=i===void 0?`#000000`:i,o=e.level,s=o===void 0?`L`:o,c=e.size,l=c===void 0?256:c,u=e.value,d=W(e,Y),f=T(0,s);f.addData(u),f.make();var p=f.getModuleCount(),m=Array.from({length:p},function(e,t){return Array.from({length:p},function(e,n){return f.isDark(t,n)})});return C.createElement(J,U({},d,{bgColor:r,bgD:m.map(function(e,t){return e.map(function(e,n){return e?``:`M ${n} ${t} l 1 0 0 1 -1 0 Z`}).join(` `)}).join(` `),fgColor:a,fgD:m.map(function(e,t){return e.map(function(e,n){return e?`M ${n} ${t} l 1 0 0 1 -1 0 Z`:``}).join(` `)}).join(` `),ref:t,size:l,viewBoxSize:p}))});Z.displayName=`QRCode`,Z.propTypes=X;var Q=r();function $(){let{snap:e}=u(),{busy:t,run:n}=p(),r=[...e.instances?.native?[e.instances.native]:[],...e.instances?.instances??[]],c=e.lan?.items??[],b=(e.lan?.addresses??[])[0]||``,x=e.frp,[S,w]=(0,C.useState)(``),[T,E]=(0,C.useState)(`7000`),[D,O]=(0,C.useState)(``),[k,A]=(0,C.useState)(!1);(0,C.useEffect)(()=>{!x||k||(w(x.settings.serverAddr||``),E(String(x.settings.serverPort||7e3)),O(x.settings.authToken||``),A(!0))},[x,k]);async function j(){await n(`frp-save`,()=>l.frpSettings({serverAddr:S,serverPort:parseInt(T,10)||7e3,authToken:D}),{success:`已保存 FRP 配置`})}return(0,Q.jsx)(`div`,{className:`grid content-start gap-4`,children:(0,Q.jsxs)(`div`,{className:`grid items-start gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,Q.jsxs)(_,{children:[(0,Q.jsx)(m,{title:`局域网远程控制`,subtitle:`为本地 DSH 实例开启局域网反向代理访问(需实例运行中)`}),(0,Q.jsx)(`div`,{className:`grid`,children:r.length?r.map(e=>{let t=e.state?.running??!1,r=c.find(t=>t.dshPort===e.port),a=!!r?.running,o=!!r?.enabled,u=t&&o&&a&&b?`http://`+b+`:`+r?.wanPort+`/`:null,d=t?(0,Q.jsx)(h,{tone:`boot`,children:`实例运行中`}):(0,Q.jsx)(h,{tone:`err`,children:`实例已停止`}),p=t?a?null:o?(0,Q.jsx)(h,{tone:`off`,children:`代理未就绪`}):(0,Q.jsx)(h,{tone:`off`,children:`代理未启用`}):(0,Q.jsx)(h,{tone:`off`,children:`代理停止`}),m=a?r?.inject:null,_=m?m.cookieReady?(0,Q.jsx)(`span`,{title:`DSH 会话 cookie 已注入,远程访问已认证`,children:(0,Q.jsx)(h,{tone:`ok`,children:`远程就绪`})}):m.tokenSet?(0,Q.jsx)(`span`,{title:m.lastError??`正在用令牌换取会话 cookie`,children:(0,Q.jsx)(h,{tone:`warn`,children:`正在注入`})}):(0,Q.jsx)(`span`,{title:`未捕获到 DSH 令牌:远程访问将要求登录`,children:(0,Q.jsx)(h,{tone:`err`,children:`令牌缺失`})}):null;return(0,Q.jsxs)(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)_auto] items-stretch gap-4 border-b border-border/60 px-5 py-4 last:border-b-0`,children:[u?(0,Q.jsx)(`div`,{className:`flex shrink-0 items-center rounded-lg border border-border bg-white p-1.5`,title:`扫码访问该实例远程地址`,children:(0,Q.jsx)(Z,{value:u,size:88})}):(0,Q.jsx)(`div`,{className:`grid size-[96px] shrink-0 place-items-center rounded-lg border border-dashed border-border/70 text-[11px] leading-tight text-muted-foreground/60`,children:t?`代理就绪后生成二维码`:`启动后可用`}),(0,Q.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,Q.jsxs)(`div`,{className:`pt-2.5 flex flex-wrap items-center gap-2`,children:[(0,Q.jsx)(g,{domain:e.domain}),(0,Q.jsx)(`strong`,{className:`truncate text-sm font-semibold text-foreground`,children:e.name}),d,p,_]}),(0,Q.jsxs)(`div`,{className:`mt-auto grid content-end gap-1.5 pb-1`,children:[(0,Q.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`端口 `,e.port,e.remoteEnabled?` · 远程已开`:` · 远程未开`]}),u?(0,Q.jsxs)(`a`,{className:`inline-flex max-w-full items-center gap-1 truncate text-xs text-primary hover:underline`,href:u,target:`_blank`,rel:`noreferrer`,children:[(0,Q.jsx)(f,{className:`size-3 shrink-0`}),u]}):(0,Q.jsx)(`div`,{className:`text-xs text-muted-foreground/70`,children:t?`等待代理就绪…`:`实例未运行,启动后可开启远程`})]})]}),(0,Q.jsxs)(`div`,{className:i(`flex items-center gap-2`,!t&&`pointer-events-none opacity-50`),children:[(0,Q.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:`远程控制`}),(0,Q.jsx)(s,{checked:e.remoteEnabled??!1,disabled:!t,onCheckedChange:t=>void n(e.id,()=>e.domain===`native`?l.nativeSettings({remoteEnabled:t}):l.instanceUpdate(e.id,{remoteEnabled:t}),{success:t?`已开启远程控制`:`已关闭远程控制`})})]})]},e.id)}):(0,Q.jsx)(`div`,{className:`px-5 py-8 text-center text-sm text-muted-foreground`,children:`暂无实例(在「实例管理」添加后将出现在这里)`})})]}),(0,Q.jsxs)(_,{children:[(0,Q.jsx)(m,{title:`公网访问(FRP 内网穿透)`,subtitle:`通过 frpc 暴露本机端口到公网`,actions:(0,Q.jsx)(h,{tone:x?.running?`ok`:x?.installed?`warn`:`off`,children:x?.running?`frpc 运行中`:x?.installed?`已安装 · 未运行`:`未安装`})}),(0,Q.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 px-5 py-4`,children:[(0,Q.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,Q.jsx)(a,{children:`frps 地址`}),(0,Q.jsx)(o,{placeholder:`如 1.2.3.4`,value:S,onChange:e=>w(e.target.value)})]}),(0,Q.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,Q.jsx)(a,{children:`frps 端口`}),(0,Q.jsx)(o,{inputMode:`numeric`,placeholder:`7000`,value:T,onChange:e=>E(e.target.value)})]}),(0,Q.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,Q.jsx)(a,{children:`auth token`}),(0,Q.jsx)(o,{placeholder:`frps 的 auth.token`,value:D,onChange:e=>O(e.target.value)})]})]}),(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2 px-5 pb-4`,children:[(0,Q.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[x?.installed?``:`需安装 frpc`,(x?.instancesExposed?.length??0)>0?` · 公网暴露 `+x?.instancesExposed?.length+` 个实例`:` · 无公网暴露实例`]}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsxs)(d,{disabled:t===`frp-inst`,onClick:()=>void n(`frp-inst`,()=>l.frpInstall(),{success:`frpc 安装完成`}),variant:`outline`,children:[(0,Q.jsx)(y,{className:`size-4`}),`安装 frpc`]}),(0,Q.jsxs)(d,{disabled:t===`frp-save`,onClick:()=>void j(),children:[(0,Q.jsx)(v,{className:`size-4`}),`保存并应用`]})]})]}),x?.logTail?.length?(0,Q.jsx)(`pre`,{className:`mx-5 mb-4 max-h-[160px] overflow-auto whitespace-pre-wrap break-all rounded-md bg-muted/70 p-3 font-mono text-xs leading-relaxed text-muted-foreground`,children:x.logTail.join(`
|
|
4
|
-
`)}):null]})]})})}export{$ as LanPage};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,M as r,S as i,_ as a,b as o,g as s,h as c,m as l,p as u,r as d,t as f,w as p,y as m}from"./supervisor-DEHXL51C.js";import{t as h}from"./external-link-DblibQpb.js";import{n as g,t as _}from"./rocket-BDT9yN5c.js";import{t as v}from"./refresh-cw-Dbn7zlS9.js";import{c as y,f as b,n as x,o as S,t as C}from"./supervisor-C3UXEQbW.js";import{t as w}from"./useSupervisorAction-Dj_nAGhv.js";import{c as T,i as E,n as D,o as O,t as k}from"./widgets-C6MCpT1T.js";import{t as A}from"./format-QeaTKFhQ.js";var j=n(`arrow-up-right`,[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]),M=n(`circle-dot`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),N=n(`square-terminal`,[[`path`,{d:`m7 11 2-2-2-2`,key:`1lz0vl`}],[`path`,{d:`M11 13h4`,key:`1p7l4v`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}]]),P=r(e(),1),F=i();function I(e,t){return e===`dsh-main`||e===`supervisor-api`?`boot`:t.startsWith(`inst:`)?`ok`:e===`relay`?`warn`:`off`}function L(e){return{"dsh-main":`DSH 主实例`,"supervisor-api":`管家 API`,relay:`隧道`,user:`用户实例`}[e.role]??e.role}function R(e,t){let n=e.owner||``;if(e.role===`proxyInstance`){let e=(n.split(`:`).pop()||``).slice(-4),r=(t??[]).find(t=>(t.accounts??[]).some(t=>(t.maskedKey||``).endsWith(e)));return r?r.name:`反代`}return n.startsWith(`inst:`)?`沙箱实例`:n.startsWith(`system:`)?`系统`:n.startsWith(`relay:`)?`主隧道`:n.startsWith(`dynamic:`)?`动态`:n.startsWith(`providerApi:`)?`供应商`:n.startsWith(`oauth:`)||e.role===`oauthCallback`?`登录回调`:e.role}function z({providers:e=[]}){let{snap:t}=f(),n=t.ports?.records??null,r=(0,P.useMemo)(()=>n?[...n].sort((e,t)=>!!e.active==!!t.active?e.port-t.port:e.active?-1:1):null,[n]);return(0,F.jsxs)(k,{className:`flex min-h-0 flex-col overflow-hidden`,children:[(0,F.jsx)(D,{title:`端口管理`,subtitle:`对接后端全部已注册端口`,actions:r?(0,F.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:r.length}):null}),r?(0,F.jsxs)(`div`,{className:`flex min-h-0 flex-col`,children:[(0,F.jsxs)(`div`,{className:`grid grid-cols-[56px_minmax(0,1fr)_auto_66px] items-center gap-2 border-b border-border/60 bg-muted/60 px-4 py-1.5 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:[(0,F.jsx)(`span`,{children:`端口`}),(0,F.jsx)(`span`,{children:`角色`}),(0,F.jsx)(`span`,{className:`text-right`,children:`归属`}),(0,F.jsx)(`span`,{className:`text-right`,children:`状态`})]}),(0,F.jsx)(`div`,{className:`max-h-[340px] overflow-y-auto overscroll-contain`,children:r.map((t,n)=>(0,F.jsxs)(`div`,{className:o(`grid grid-cols-[56px_minmax(0,1fr)_auto_66px] items-center gap-2 px-4 py-2 hover:bg-muted/40`,n>0&&`border-t border-border/50`),children:[(0,F.jsx)(`code`,{className:`font-mono text-sm tabular-nums text-foreground`,children:t.port}),(0,F.jsx)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:(0,F.jsx)(`span`,{className:`truncate text-xs text-foreground`,children:L(t)})}),(0,F.jsx)(`div`,{className:`flex justify-end`,children:(0,F.jsx)(O,{tone:I(t.role,t.owner),children:R(t,e)})}),(0,F.jsx)(`div`,{className:`flex justify-end`,children:t.active===!0?(0,F.jsxs)(`span`,{className:`inline-flex items-center gap-1 whitespace-nowrap text-[11px] text-status-ok`,children:[(0,F.jsx)(M,{className:`size-3`}),`激活`]}):t.active===!1?(0,F.jsxs)(`span`,{className:`inline-flex items-center gap-1 whitespace-nowrap text-[11px] text-muted-foreground`,children:[(0,F.jsx)(M,{className:`size-3 opacity-50`}),`停用`]}):(0,F.jsxs)(`span`,{className:`inline-flex items-center gap-1 whitespace-nowrap text-[11px] text-muted-foreground`,children:[(0,F.jsx)(M,{className:`size-3 opacity-40`}),`状态未知`]})})]},t.port+`-`+t.owner))})]}):(0,F.jsx)(`div`,{className:`px-5 py-6 text-center text-xs text-muted-foreground`,children:`加载中…`})]})}var B=new Set([`dist_registry_selected`,`gui_autostart_changed`,`autostart_changed`,`lan_panel_changed`,`lan_dsh_token_updated`]);function V(){let{snap:e}=f(),{busy:n,run:r}=w(),[i,o]=(0,P.useState)(!1),p=e.status,C=p?.native,D=C?.installed??!1,O=C?.state||(D?`installed`:`uninstalled`),A=O===`installing`,M=A||O===`uninstalling`,I=p?.version,L=p?.upgrade,R=x[p?.phase??``]??{label:p?.phase||`未知`,tone:`off`},V=!!p?.dshPid,W=L?.state===`running`,G=(0,P.useMemo)(()=>e.events.filter(e=>!B.has(e.type)),[e.events]);async function K(){await r(`dsh`,()=>V?d.lifecycleStop(`dsh`):d.lifecycleStart(`dsh`),{success:V?`正在停止 DSH…`:`正在启动 DSH…`})}async function q(){await r(`web`,()=>d.instanceOpenWeb(`main`))}async function J(){await r(`chk`,async()=>{let e=await d.nativeCheckUpdate();if(e?.ok===!1){t.error(e.error||`检测失败`);return}e?.updateAvailable&&e.latest?t.success(`发现新版本 `+e.latest+(e.installed?`(当前 `+e.installed+`),可一键升级`:``)):t.success(`已是最新版本`+(e.installed?`(`+e.installed+`)`:``))})}async function Y(){o(!1),await r(`upg`,()=>d.nativeUpgrade(),{success:`升级已开始,请耐心等待…`})}async function X(){confirm(`将在线安装最新版 DeepSeek Harness(需数分钟,自动适配最快镜像源)。确定继续?`)&&await r(`inst`,()=>d.nativeInstall(),{success:`开始安装 DeepSeek Harness…`})}async function Z(){confirm(`将彻底卸载 DeepSeek Harness:删除全部文件、数据、缓存与日志,不留残留。确定继续?`)&&await r(`uni`,()=>d.nativeUninstall(),{success:`开始卸载…`})}let Q=D&&(C?.version||I?.installed)||`—`;return(0,F.jsxs)(`div`,{className:`grid content-start gap-4`,children:[(0,F.jsxs)(k,{children:[(0,F.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-[minmax(0,5fr)_minmax(0,6fr)]`,children:[(0,F.jsxs)(`div`,{className:`flex flex-col gap-5 border-b border-border px-6 py-5 md:border-b-0 md:border-r`,children:[(0,F.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,F.jsxs)(`div`,{className:`flex min-w-0 items-baseline gap-2`,children:[(0,F.jsx)(`h3`,{className:`truncate text-xl font-semibold tracking-[-0.01em] text-foreground`,children:`DeepSeek Harness`}),(0,F.jsxs)(`span`,{className:`shrink-0 font-mono text-sm text-muted-foreground`,children:[`v`,Q]})]}),n===`chk`?(0,F.jsxs)(m,{size:`chip`,disabled:!0,children:[(0,F.jsx)(v,{className:`size-3 animate-spin`}),`检测中…`]}):I?.updateAvailable&&I.latest?(0,F.jsxs)(m,{className:`text-primary-foreground`,size:`chip`,onClick:()=>o(!0),children:[(0,F.jsx)(j,{className:`size-3`}),`升级到 v`,I.latest]}):W?(0,F.jsxs)(m,{size:`chip`,disabled:!0,children:[(0,F.jsx)(v,{className:`size-3 animate-spin`}),`升级中…`]}):(0,F.jsxs)(m,{className:`bg-primary/10 text-primary hover:bg-primary/15`,onClick:()=>void J(),size:`chip`,variant:`ghost`,children:[(0,F.jsx)(v,{className:`size-3`}),`检测更新`]})]}),M?(0,F.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,F.jsx)(T,{tone:`boot`,ping:!0}),(0,F.jsx)(`span`,{className:`text-base font-semibold leading-none text-foreground`,children:A?`正在安装 DeepSeek Harness…`:`正在卸载 DeepSeek Harness…`})]}):(0,F.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,F.jsx)(T,{tone:R.tone,ping:R.tone===`ok`}),(0,F.jsx)(`span`,{className:`text-base font-semibold leading-none text-foreground`,children:R.label})]}),W&&L?(0,F.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,F.jsx)(`span`,{className:`size-1.5 animate-pulse rounded-full bg-primary`}),`正在升级(`,L.step||L.targetVersion||``,`)…`]}):null,L?.state===`failed`?(0,F.jsxs)(`p`,{className:`text-xs text-destructive`,children:[`升级失败:`,L.lastError||`未知原因`,L.rolledBack?`(已回滚)`:``]}):null,M&&(C?.installLog??[]).length?(0,F.jsx)(`pre`,{className:`max-h-[120px] overflow-auto whitespace-pre-wrap break-all rounded-md bg-muted/70 p-3 font-mono text-xs leading-relaxed text-muted-foreground`,children:(C?.installLog??[]).slice(-6).join(`
|
|
2
|
-
`)}):null]}),(0,F.jsx)(`div`,{className:`flex items-center bg-[image:var(--panel-accent-gradient)] px-6 py-5`,children:(0,F.jsxs)(`div`,{className:`grid w-full grid-cols-2 gap-x-6 gap-y-4 sm:grid-cols-4`,children:[(0,F.jsx)(E,{icon:(0,F.jsx)(b,{className:`size-4`}),label:`DSH 端口`,value:p?.dshPort?String(p.dshPort):`—`,mono:!0}),(0,F.jsx)(E,{icon:(0,F.jsx)(N,{className:`size-4`}),label:`DSH 进程`,value:p?.dshPid?String(p.dshPid):`—`,mono:!0}),(0,F.jsx)(E,{icon:(0,F.jsx)(v,{className:`size-4`}),label:`重启次数`,value:String(p?.restartCount??0),mono:!0}),(0,F.jsx)(E,{icon:(0,F.jsx)(j,{className:`size-4`}),label:`最近故障`,value:p?.lastFailure?S(p?.lastFailure):`无`,warn:!!p?.lastFailure})]})})]}),(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 border-t border-border/60 px-6 py-3`,children:[(0,F.jsx)(H,{}),(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[!D&&!M?(0,F.jsxs)(m,{size:`sm`,disabled:n===`inst`,onClick:()=>void X(),children:[(0,F.jsx)(_,{className:`size-4`}),`安装 DSH`]}):D&&!M&&!W?(0,F.jsxs)(F.Fragment,{children:[(0,F.jsxs)(m,{disabled:!V,onClick:()=>void q(),size:`sm`,variant:`outline`,children:[(0,F.jsx)(h,{className:`size-4`}),`进入 DSH Web`]}),(0,F.jsx)(m,{disabled:n===`dsh`,onClick:()=>void K(),size:`sm`,variant:`outline`,children:V?(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(g,{className:`size-4 text-status-error`}),`停止 DSH`]}):(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(_,{className:`size-4 text-primary`}),`启动 DSH`]})})]}):null,D&&!M?(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(`span`,{"aria-hidden":`true`,className:`mx-1 h-5 w-px bg-border`}),(0,F.jsxs)(m,{className:`h-[30px]`,disabled:n===`uni`,onClick:()=>void Z(),size:`sm`,variant:`destructive`,children:[(0,F.jsx)(y,{className:`size-4`}),`卸载 DSH`]})]}):null]})]})]}),(0,F.jsxs)(`div`,{className:`grid items-start gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,F.jsx)(U,{events:G}),(0,F.jsx)(z,{providers:e.providers?.providers??[]})]}),(0,F.jsx)(u,{open:i,onOpenChange:o,children:(0,F.jsxs)(l,{className:`max-w-[420px]`,children:[(0,F.jsx)(s,{children:(0,F.jsx)(a,{children:`升级 DeepSeek Harness`})}),(0,F.jsxs)(`div`,{className:`grid gap-3`,children:[(0,F.jsxs)(`div`,{className:`flex items-center justify-center gap-3 rounded-md bg-muted px-4 py-3`,children:[(0,F.jsxs)(`div`,{className:`text-center`,children:[(0,F.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`当前版本`}),(0,F.jsx)(`strong`,{className:`font-mono text-base text-foreground`,children:I?.installed||Q})]}),(0,F.jsx)(j,{className:`size-4 text-muted-foreground`}),(0,F.jsxs)(`div`,{className:`text-center`,children:[(0,F.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`新版本`}),(0,F.jsx)(`strong`,{className:`font-mono text-base text-primary`,children:I?.latest||`—`})]})]}),(0,F.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:`升级将先停止 DSH、安装新版本后自动拉起(需数分钟)。期间进行中的请求会中断,失败会自动回滚到当前版本。`})]}),(0,F.jsxs)(c,{children:[(0,F.jsx)(m,{onClick:()=>o(!1),variant:`outline`,children:`取消`}),(0,F.jsx)(m,{disabled:n===`upg`||W,onClick:()=>void Y(),children:n===`upg`||W?`升级中…`:`开始升级`})]})]})})]})}function H(){let[e,t]=(0,P.useState)(null);return(0,P.useEffect)(()=>{let e=!0,n=async()=>{let n=await d.nodeLts().catch(()=>null);e&&t(n)};n();let r=setInterval(n,6e5);return()=>{e=!1,clearInterval(r)}},[]),e?.current?(0,F.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,F.jsxs)(`span`,{className:`whitespace-nowrap`,children:[`环境检测 · Node v`,e.current]}),e.updateAvailable&&e.latestLts?(0,F.jsxs)(`span`,{className:`inline-flex items-center gap-1 whitespace-nowrap rounded-full bg-warning-background px-2 py-0.5 font-semibold text-warning`,children:[(0,F.jsx)(p,{className:`size-3`}),`可更新到 v`,e.latestLts,e.ltsName?` LTS`:``]}):e.latestLts?(0,F.jsxs)(`span`,{className:`hidden whitespace-nowrap text-muted-foreground/70 sm:inline`,children:[`最新 LTS v`,e.latestLts]}):null]}):(0,F.jsx)(`span`,{className:`min-w-[120px] text-xs text-muted-foreground`,children:`环境检测…`})}function U({events:e}){let[t,n]=(0,P.useState)(12),r=e.length;(0,P.useEffect)(()=>{n(12)},[e]);let i=(0,P.useRef)(null),a=(0,P.useRef)(!1);(0,P.useEffect)(()=>{let e=i.current;if(!e)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(a.current||(a.current=!0,n(e=>Math.min(e+12,r)),setTimeout(()=>{a.current=!1},80)))},{rootMargin:`120px 0px`});return t.observe(e),()=>t.disconnect()},[r]);let o=e.slice(0,t),s=t<r;return(0,F.jsxs)(k,{className:`flex min-h-0 flex-col overflow-hidden`,children:[(0,F.jsx)(D,{title:`事件日志`,subtitle:`核心运行状态遥测`,actions:(0,F.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:r})}),r?(0,F.jsxs)(`div`,{className:`flex max-h-[450px] min-h-0 flex-col overflow-y-auto overscroll-contain`,children:[o.map((e,t)=>(0,F.jsx)(W,{e},e.seq??t)),(0,F.jsx)(`div`,{ref:i,className:`px-5 py-2 text-center text-[11px] text-muted-foreground`,children:s?`下滑加载更多…`:`已加载全部`})]}):(0,F.jsx)(`div`,{className:`px-5 py-6 text-center text-xs text-muted-foreground`,children:`暂无核心运行状态事件`})]})}function W({e}){let t=K[e.type]??`boot`,n=C[e.type]??e.type,r=G(e);return(0,F.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[64px_auto_minmax(0,1fr)] items-center gap-2.5 border-b border-border/60 px-5 py-2 last:border-b-0 max-[640px]:grid-cols-[56px_auto_minmax(0,1fr)] max-[640px]:gap-2`,children:[(0,F.jsx)(`span`,{className:`text-xs tabular-nums text-muted-foreground`,children:A(e.ts)}),(0,F.jsx)(O,{tone:t,children:n}),(0,F.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:r})]})}function G(e){let t=e.data;if(!t)return``;let n=e=>Number(e??0).toLocaleString(`en-US`);if(typeof t.message==`string`)return t.message;if(typeof t.reason==`string`)return S(t.reason);if(typeof t.desired==`string`)return`期望 `+t.desired;if(e.type===`router_usage`)return(t.model||``)+(t.model?` · `:``)+n(t.tokens)+` tokens`;if(e.type===`router_pick`)return[t.provider||``,t.key||``].filter(Boolean).join(` · `);if(e.type===`account_ready`||e.type===`account_frozen`||e.type===`account_banned`||e.type===`account_recovered`||e.type===`account_review`||e.type===`account_exhausted`)return(t.key||``)+(t.key?` · `:``)+(t.provider||``);if(e.type===`provider_quota_refreshed`)return(t.provider||``)+` 额度已刷新`;if(e.type===`proxy_update_available`)return[t.pkg||``,t.from||``,t.to||``].filter(Boolean).join(` → `);if(e.type===`proxy_instance_started`)return`port=`+(t.port??``)+(t.pid?` pid=`+t.pid:``);let r=[];return t.pid!==void 0&&r.push(`pid=`+t.pid),t.port!==void 0&&r.push(`port=`+String(t.port)),t.version!==void 0&&r.push(`v`+String(t.version)),t.model&&t.tokens!==void 0&&r.push(n(t.tokens)+` tok`),t.ms!==void 0&&r.push(n(t.ms)+`ms`),r.join(` · `)}var K={running:`ok`,adopted:`ok`,spawned:`ok`,main_instance_registered:`ok`,upgrade_installed:`ok`,upgrade_done:`ok`,api_listening:`ok`,account_ready:`ok`,account_confirmed:`ok`,account_recovered:`ok`,proxy_instance_started:`ok`,proxy_update_applied:`ok`,router_provider_activated:`ok`,router_provider_endpoint:`ok`,inst_running:`ok`,inst_added:`ok`,inst_started:`ok`,lan_instance_started:`ok`,frpc_installed:`ok`,frpc_started:`ok`,plugin_install_done:`ok`,native_installed:`ok`,inst_upgraded:`ok`,plugin_update_done:`ok`,account_frozen:`err`,account_banned:`err`,dsh_exited:`err`,unhealthy:`err`,spawn_failed:`err`,spawn_error:`err`,upgrade_failed:`err`,api_error:`err`,proxy_instance_failed:`err`,inst_failed:`err`,inst_start_failed:`err`,native_install_failed:`err`,native_uninstall_failed:`err`,plugin_install_job_failed:`err`,plugin_update_job_failed:`err`,plugin_uninstall_job_failed:`err`,frpc_install_failed:`err`,router_stream_aborted:`err`,sigkill_sent:`err`,start_timeout:`err`,crash_loop_entered:`err`,guard_exit:`warn`,version_check_failed:`warn`,restart_triggered:`warn`,dsh_not_installed:`warn`,sigterm_sent:`warn`,account_review:`warn`,proxy_update_available:`warn`,upgrade_started:`warn`,upgrade_stopping_dsh:`warn`,inst_restarted:`warn`,lan_frp_changed:`warn`,native_uninstall_started:`warn`,account_discarded:`off`,router_stopped:`off`,proxy_instance_stopped:`off`,inst_stopped:`off`,inst_removed:`off`,lan_instance_removed:`off`,frpc_stopped:`off`,plugin_uninstall_done:`off`,native_uninstalled:`off`,upgrade_skipped:`off`,router_provider_deactivated:`off`,stop:`off`};export{V as OverviewPage};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,M as r,S as i,_ as a,b as o,c as s,f as c,g as l,l as u,m as d,o as f,p,r as m,s as h,u as g,v as _,y as v}from"./supervisor-DEHXL51C.js";import{n as y,t as b}from"./rocket-BDT9yN5c.js";import{t as x}from"./refresh-cw-Dbn7zlS9.js";import{c as S,u as C}from"./supervisor-C3UXEQbW.js";import{t as w}from"./useSupervisorAction-Dj_nAGhv.js";import{n as T,o as E,t as D}from"./widgets-C6MCpT1T.js";var O=n(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),k=n(`store`,[[`path`,{d:`M15 21v-5a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v5`,key:`slp6dd`}],[`path`,{d:`M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244`,key:`o0xfot`}],[`path`,{d:`M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05`,key:`wn3emo`}]]),A=r(e(),1);function j(e){return e>=1073741824?`${(e/1024/1024/1024).toFixed(1)} GB`:e>=1048576?`${(e/1024/1024).toFixed(0)} MB`:e>=1024?`${(e/1024).toFixed(0)} KB`:`${e} B`}var M=i(),N=24;function P(){let[e,t]=(0,A.useState)(`market`);return(0,M.jsxs)(`div`,{className:`grid content-start gap-4`,children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,M.jsx)(`div`,{className:`flex gap-1 rounded-lg bg-muted p-1`,children:[`market`,`installed`].map(n=>(0,M.jsxs)(v,{className:o(`font-medium`,e===n?`bg-card text-foreground shadow-sm`:`bg-transparent text-muted-foreground hover:bg-card/60 hover:text-foreground`),onClick:()=>t(n),size:`sm`,variant:`ghost`,children:[n===`market`?(0,M.jsx)(k,{className:`size-3.5`}):(0,M.jsx)(C,{className:`size-3.5`}),n===`market`?`插件商店`:`已安装`]},n))}),e===`market`?(0,M.jsx)(F,{}):null]}),e===`market`?(0,M.jsx)(I,{}):(0,M.jsx)(z,{})]})}function F(){let[e,n]=(0,A.useState)(!1);async function r(){n(!0);try{await m.market(!0),t.success(`插件索引已刷新`)}catch(e){t.error(String(e))}n(!1)}return(0,M.jsxs)(v,{disabled:e,onClick:()=>void r(),size:`chip`,variant:`outline`,children:[(0,M.jsx)(x,{className:o(`size-3.5`,e&&`animate-spin`)}),`刷新`]})}function I(){let[e,n]=(0,A.useState)(null),[r,i]=(0,A.useState)(``),[_,y]=(0,A.useState)(`all`),[b,x]=(0,A.useState)(`all`),[S,C]=(0,A.useState)(0),[w,T]=(0,A.useState)(null),[D,k]=(0,A.useState)([]),[j,P]=(0,A.useState)(`native`);(0,A.useEffect)(()=>{let e=!0;return m.market().then(t=>{e&&(n(t),C(N))}).catch(()=>void 0),()=>{e=!1}},[]);let F=(0,A.useMemo)(()=>{if(!e)return[];let t=r.trim().toLowerCase();return e.plugins.filter(e=>(_===`all`||e.category===_)&&(b===`all`||e.source===b)&&(!t||(e.name+` `+(e.description||``)).toLowerCase().includes(t)))},[e,r,_,b]),I=(0,A.useMemo)(()=>{let t={};for(let n of e?.plugins??[])t[n.category]=(t[n.category]||0)+1;return Object.entries(t).sort((e,t)=>t[1]-e[1])},[e]);async function z(e){T(e),P(`native`);try{let e=await m.instances();k((e.instances??[]).filter(e=>e.domain===`sandbox`).map(e=>({id:e.id,name:e.name})))}catch{k([])}}async function B(){if(w)try{let e=await m.pluginInstall(w.name,j);if(e.ok===!1){t.error(e.error||`安装失败`);return}t.success(`安装任务已提交`+(e.jobId?`(job `+e.jobId+`)`:``)),T(null)}catch(e){t.error(String(e))}}return(0,M.jsxs)(`div`,{className:`grid content-start gap-3`,children:[(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,M.jsxs)(`div`,{className:`relative min-w-[220px] flex-1`,children:[(0,M.jsx)(O,{className:`absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground`}),(0,M.jsx)(c,{className:`pl-8`,placeholder:`搜索插件名称、描述…`,value:r,onChange:e=>i(e.target.value)})]}),(0,M.jsxs)(f,{value:_,onValueChange:y,children:[(0,M.jsx)(u,{className:`h-9 w-[150px] shrink-0`,children:(0,M.jsx)(g,{placeholder:`全部分类`})}),(0,M.jsxs)(h,{children:[(0,M.jsx)(s,{value:`all`,children:`全部分类`}),I.map(([e,t])=>(0,M.jsxs)(s,{value:e,children:[e,` (`,t,`)`]},e))]})]}),(0,M.jsxs)(f,{value:b,onValueChange:x,children:[(0,M.jsx)(u,{className:`h-9 w-[130px] shrink-0`,children:(0,M.jsx)(g,{placeholder:`全部来源`})}),(0,M.jsxs)(h,{children:[(0,M.jsx)(s,{value:`all`,children:`全部来源`}),(0,M.jsx)(s,{value:`npm`,children:`npm`}),(0,M.jsx)(s,{value:`github`,children:`GitHub`}),(0,M.jsx)(s,{value:`community`,children:`社区`}),(0,M.jsx)(s,{value:`official`,children:`官方`})]})]})]}),e?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`共 `,e.plugins.length,` 个插件 · 更新 `,e.indexedAt?new Date(e.indexedAt).toLocaleString():`—`,` · npm `,e.sources?.npm||0,` · GitHub `,e.sources?.github||0,` · 社区 `,e.sources?.community||0]}),F.length?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-3`,children:F.slice(0,S).map(e=>(0,M.jsxs)(`div`,{className:`flex min-h-[150px] flex-col rounded-lg border border-border bg-card p-4`,children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,M.jsx)(`strong`,{className:`truncate font-mono text-sm text-foreground`,children:e.name}),(0,M.jsx)(E,{tone:R(e.source),children:L(e.source)})]}),(0,M.jsx)(`p`,{className:`mt-2 line-clamp-3 min-h-[36px] text-xs leading-relaxed text-muted-foreground`,children:e.description||`(无描述)`}),(0,M.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,M.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5`,children:e.category}),e.version?(0,M.jsxs)(`span`,{className:`font-mono`,children:[`v`,e.version]}):null,e.stars?(0,M.jsxs)(`span`,{children:[`⭐`,e.stars]}):null]}),(0,M.jsxs)(`div`,{className:`mt-auto flex items-center justify-between gap-2 pt-3`,children:[(0,M.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:e.author||``}),(0,M.jsx)(v,{onClick:()=>void z(e),size:`chip`,children:`安装`})]})]},e.name))}),S<F.length?(0,M.jsxs)(v,{className:`justify-self-center`,onClick:()=>C(e=>e+N),variant:`outline`,children:[`加载更多(`,S,`/`,F.length,`)`]}):null]}):(0,M.jsx)(`div`,{className:`grid place-items-center rounded-lg border border-dashed border-border py-16 text-sm text-muted-foreground`,children:`无匹配插件`})]}):(0,M.jsx)(`div`,{className:`grid place-items-center py-20 text-sm text-muted-foreground`,children:`加载插件索引…`}),(0,M.jsx)(p,{open:!!w,onOpenChange:e=>!e&&T(null),children:(0,M.jsxs)(d,{className:`max-w-[400px]`,children:[(0,M.jsx)(l,{children:(0,M.jsxs)(a,{children:[`安装插件 — `,w?.name]})}),(0,M.jsx)(`div`,{className:`grid gap-2`,children:[[`native`,`原生实例`],[`all`,`所有实例(含原生)`]].concat(D.map(e=>[`id:`+e.id,e.name+`(`+e.id.slice(0,8)+`…)`])).map(([e,t])=>(0,M.jsxs)(`label`,{className:o(`flex cursor-pointer items-center gap-2 rounded-md border px-3 py-2 text-sm`,j===e?`border-primary/40 bg-primary/[0.05] text-foreground`:`border-border text-muted-foreground hover:bg-muted`),children:[(0,M.jsx)(`input`,{type:`radio`,className:`accent-primary`,name:`pTarget`,checked:j===e,onChange:()=>P(e)}),t]},e))}),(0,M.jsxs)(`div`,{className:`mt-3 flex justify-end gap-2`,children:[(0,M.jsx)(v,{onClick:()=>T(null),variant:`outline`,children:`取消`}),(0,M.jsx)(v,{onClick:()=>void B(),children:`开始安装`})]})]})})]})}var L=e=>({npm:`npm`,github:`GitHub`,community:`社区`,official:`官方`})[e]??e,R=e=>e===`official`?`boot`:e===`npm`?`ok`:e===`github`?`warn`:`off`;function z(){let[e,n]=(0,A.useState)(null),[r,i]=(0,A.useState)(`all`),[a,s]=(0,A.useState)(new Set),[c,l]=(0,A.useState)(new Map),[u,d]=(0,A.useState)(!1),{busy:f,run:p}=w(),h=async()=>{let e=await m.pluginsInstalled().catch(()=>null);n(e)};(0,A.useEffect)(()=>{h()},[]);let g=e?.thirdParty??[],O=e=>e.targets&&e.targets.length?e.targets:[`native`],k=g.filter(e=>r===`all`||O(e).includes(r)),N=e=>s(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),P=k.length>0&&k.every(e=>a.has(e.name)),F=()=>s(P?new Set:new Set(k.map(e=>e.name))),I=k.filter(e=>a.has(e.name)),L=I.some(e=>c.has(e.name)),R=I.filter(e=>e.enabled),z=I.filter(e=>!e.enabled);async function B(){d(!0);try{let e=await m.pluginsCheckUpdates(!0),n=new Map;for(let t of e.plugins??[]){if(!t.updateAvailable)continue;let e=t.targets?.find(e=>e.latest)?.latest||``;n.set(t.name,e)}l(n),t.success(n.size?`发现 `+n.size+` 个可更新插件`:`全部插件已是最新`),await h()}catch(e){t.error(String(e))}d(!1)}async function V(){let e=I.filter(e=>c.has(e.name)).map(e=>e.name);if(!e.length){t.info(`所选插件均无可用更新`);return}s(new Set),l(t=>{let n=new Map(t);for(let t of e)n.delete(t);return n}),await p(`upd-sel`,async()=>{for(let t of e)try{await m.pluginUpdate(t)}catch{}},{success:`已提交 `+e.length+` 个插件的更新任务`,refresh:!1,onDone:()=>void h()})}async function H(){let e=I.map(e=>e.name);confirm(`将卸载所选 `+e.length+` 个插件:
|
|
2
|
-
`+e.join(`
|
|
3
|
-
`)+`
|
|
4
|
-
|
|
5
|
-
确定继续?`)&&(s(new Set),await p(`uni-sel`,async()=>{for(let t of e)try{await m.pluginUninstall(t)}catch{}},{success:`已提交 `+e.length+` 个插件的卸载任务`,refresh:!1,onDone:()=>void h()}))}async function U(){let e=R.map(e=>e.name);s(new Set),await p(`stop-sel`,async()=>{for(let t of e)try{await m.pluginDisable(t)}catch{}},{success:`已停止 `+e.length+` 个插件`,refresh:!1,onDone:()=>void h()})}async function W(){let e=z.map(e=>e.name);s(new Set),await p(`start-sel`,async()=>{for(let t of e)try{await m.pluginEnable(t)}catch{}},{success:`已启动 `+e.length+` 个插件`,refresh:!1,onDone:()=>void h()})}let G=`grid grid-cols-[88px_minmax(0,1fr)_120px_84px_36px] items-center gap-3`;return(0,M.jsxs)(D,{className:`overflow-hidden`,children:[(0,M.jsx)(T,{title:`已安装插件`+(e?`(`+k.length+`)`:``),subtitle:r===`all`?`全部实例`:`实例:`+((e?.targets??[]).find(e=>e.id===r)?.name??r),actions:(0,M.jsxs)(M.Fragment,{children:[L?(0,M.jsxs)(v,{disabled:f===`upd-sel`,onClick:()=>void V(),size:`sm`,children:[(0,M.jsx)(x,{className:`size-3.5`}),`更新(`,I.filter(e=>c.has(e.name)).length,`)`]}):(0,M.jsxs)(v,{disabled:u,onClick:()=>void B(),size:`sm`,variant:`outline`,children:[(0,M.jsx)(x,{className:o(`size-3.5`,u&&`animate-spin`)}),u?`检查中…`:`检查更新`]}),I.length>0?(0,M.jsxs)(M.Fragment,{children:[R.length>0?(0,M.jsxs)(v,{disabled:f===`stop-sel`,onClick:()=>void U(),size:`sm`,variant:`outline`,children:[(0,M.jsx)(y,{className:`size-3.5`}),`停用(`,R.length,`)`]}):null,z.length>0?(0,M.jsxs)(v,{disabled:f===`start-sel`,onClick:()=>void W(),size:`sm`,variant:`outline`,children:[(0,M.jsx)(b,{className:`size-3.5`}),`启动(`,z.length,`)`]}):null,(0,M.jsxs)(v,{className:`h-[30px]`,disabled:f===`uni-sel`,onClick:()=>void H(),size:`sm`,variant:`destructive`,children:[(0,M.jsx)(S,{className:`size-3.5`}),`卸载(`,I.length,`)`]})]}):null]})}),(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 border-b border-border/60 px-5 py-2.5`,children:[(0,M.jsx)(v,{className:o(r===`all`?`bg-primary/10 text-primary hover:bg-primary/15`:`text-muted-foreground hover:bg-muted hover:text-foreground`),onClick:()=>i(`all`),size:`sm`,variant:`ghost`,children:`全部实例`}),(e?.targets??[]).map(e=>(0,M.jsx)(v,{className:o(r===e.id?`bg-primary/10 text-primary hover:bg-primary/15`:`text-muted-foreground hover:bg-muted hover:text-foreground`),onClick:()=>i(e.id),size:`sm`,variant:`ghost`,children:e.name},e.id))]}),e?k.length?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:o(G,`border-b border-border/70 bg-muted px-5 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`),children:[(0,M.jsx)(`span`,{children:`来源`}),(0,M.jsx)(`span`,{children:`插件`}),(0,M.jsx)(`span`,{children:`版本`}),(0,M.jsx)(`span`,{className:`text-right`,children:`大小`}),(0,M.jsx)(`span`,{className:`flex justify-end`,children:(0,M.jsx)(_,{"aria-label":`全选`,checked:P,onChange:F})})]}),(0,M.jsx)(`div`,{className:`max-h-[560px] overflow-auto`,children:k.map(e=>{let t=a.has(e.name),n=c.get(e.name);return(0,M.jsxs)(`label`,{className:o(G,`min-h-[46px] w-full cursor-pointer border-b border-border/50 px-5 py-2 text-left transition-colors last:border-b-0 hover:bg-muted/40`,t&&`bg-muted/70 shadow-[inset_3px_0_0_var(--primary)]`),children:[(0,M.jsx)(`span`,{className:`inline-flex w-fit min-w-0 items-center`,children:(0,M.jsx)(E,{tone:e.bundle?`boot`:e.source?.includes(`github`)?`warn`:e.source===`npm`?`ok`:`off`,children:e.bundle?`bundle`:e.source===`npm`?`npm`:e.source?.includes(`github`)?`GitHub`:e.source&&e.source!==e.name?`本地`:`—`})}),(0,M.jsx)(`span`,{className:`grid min-w-0 grid-cols-[minmax(0,1fr)_auto] items-center gap-2`,children:(0,M.jsxs)(`span`,{className:`grid min-w-0 gap-0.5`,children:[(0,M.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,M.jsx)(`strong`,{className:`truncate font-mono text-[13px] font-semibold leading-tight text-foreground`,children:e.name}),(0,M.jsx)(E,{tone:e.enabled?`ok`:`off`,children:e.enabled?`已启用`:`已停用`})]}),e.description?(0,M.jsx)(`span`,{className:`truncate text-xs leading-tight text-muted-foreground`,children:e.description}):null]})}),(0,M.jsx)(`span`,{className:`min-w-0`,children:n?(0,M.jsxs)(`span`,{className:`inline-flex flex-wrap items-center gap-1.5`,children:[(0,M.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:e.version?`v`+e.version:`—`}),(0,M.jsx)(E,{tone:`warn`,children:`可更新`})]}):(0,M.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.version?`v`+e.version:`—`})}),(0,M.jsx)(`span`,{className:`text-right font-mono text-xs tabular-nums text-foreground`,children:e.size?j(e.size):`—`}),(0,M.jsx)(`span`,{className:`flex justify-end`,children:(0,M.jsx)(_,{"aria-label":`选择 `+e.name,checked:t,onChange:()=>N(e.name)})})]},e.name)})})]}):(0,M.jsxs)(`div`,{className:`grid place-items-center rounded-lg border-0 py-16 text-center`,children:[(0,M.jsx)(C,{className:`mx-auto mb-3 size-8 text-muted-foreground`}),(0,M.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`当前实例均未安装第三方插件`})]}):(0,M.jsx)(`div`,{className:`py-16 text-center text-sm text-muted-foreground`,children:`加载中…`})]})}export{P as PluginsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,M as r,S as i,T as a,_ as o,b as s,c,g as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v,y}from"./supervisor-DEHXL51C.js";import{n as b,t as x}from"./rocket-BDT9yN5c.js";import{t as S}from"./refresh-cw-Dbn7zlS9.js";import{c as C,f as w,l as T}from"./supervisor-C3UXEQbW.js";import{t as E}from"./useSupervisorAction-Dj_nAGhv.js";import{a as D,c as O,i as k,o as A,s as j,t as M}from"./widgets-C6MCpT1T.js";import{n as N}from"./format-QeaTKFhQ.js";var P=n(`ban`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M4.929 4.929 19.07 19.071`,key:`196cmz`}]]),F=n(`circle-x`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),I=n(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),L=n(`repeat`,[[`path`,{d:`m17 2 4 4-4 4`,key:`nntrym`}],[`path`,{d:`M3 11v-1a4 4 0 0 1 4-4h14`,key:`84bu3i`}],[`path`,{d:`m7 22-4-4 4-4`,key:`1wqhfi`}],[`path`,{d:`M21 13v1a4 4 0 0 1-4 4H3`,key:`1rx37r`}]]),R=n(`terminal`,[[`path`,{d:`M12 19h8`,key:`baeox8`}],[`path`,{d:`m4 17 6-6-6-6`,key:`1yngyt`}]]),z=r(e(),1),B=i();function V(e){if(!e)return!1;let t=e=>!!(e&&(e.status===`rate-limited`||Number(e.percent)>=100));return t(e.rolling)||t(e.weekly)||t(e.monthly)}function H(e){return!e||!Number.isFinite(e)?``:new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}function U(e){return[...e].sort((e,t)=>{let n=e=>e.selected?0:e.usable&&!V(e.quota)?1:2;return n(e)-n(t)})}var W=`grid-cols-[minmax(0,1fr)_230px_84px]`;function G({onRegisterActions:e}){let{snap:t}=_(),{busy:n,run:r}=E(),[i,o]=(0,z.useState)(!1),[c,l]=(0,z.useState)(!1),u=t.router,d=t.providers;(0,z.useEffect)(()=>(e?.({onAdd:()=>o(!0),onDelete:()=>l(!0)}),()=>e?.(null)),[e]);function p(e,t,n){return r(e,t,{success:n})}let m=d?.providers??[];return(0,B.jsxs)(`div`,{className:`grid content-start gap-4`,children:[(0,B.jsxs)(M,{children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 border-b border-border/70 px-5 py-3.5`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(O,{tone:u?.running?`ok`:u?.conflict?`warn`:`off`,ping:!!u?.running}),(0,B.jsx)(`strong`,{className:`text-xl font-semibold tracking-[-0.01em] text-foreground`,children:u?.running?`路由运行中`:u?.conflict?`端口被占`:`路由已停止`}),u?.autostart?(0,B.jsx)(A,{tone:`boot`,children:`自动启动`}):null]}),(0,B.jsx)(y,{"aria-label":u?.running?`停止路由`:`启动路由`,className:s(`px-1`,u?.running?`text-status-error`:`text-primary`),disabled:n===`sw`,onClick:()=>void p(`sw`,()=>u?.running?h.lifecycleStop(`router`):h.lifecycleStart(`router`),u?.running?`路由已停止`:`路由已启动`),title:u?.running?`停止路由`:`启动路由`,variant:`ghost`,children:u?.running?(0,B.jsx)(b,{className:`size-6`}):(0,B.jsx)(x,{className:`size-6`})})]}),(0,B.jsxs)(`div`,{className:`grid grid-cols-1 divide-y divide-border/60 sm:grid-cols-2 sm:divide-y-0 lg:grid-cols-4 lg:divide-x lg:divide-border/60`,children:[(0,B.jsx)(`div`,{className:`px-5 py-3.5`,children:(0,B.jsx)(k,{icon:(0,B.jsx)(w,{className:`size-4`}),label:`总请求 / 失败`,value:N(u?.usage.requests)+` / `+N(u?.usage.errors),mono:!0})}),(0,B.jsx)(`div`,{className:`px-5 py-3.5`,children:(0,B.jsx)(k,{icon:(0,B.jsx)(a,{className:`size-4`}),label:`总 Tokens`,value:N(u?.usage.totalTokens),mono:!0})}),(0,B.jsx)(`div`,{className:`px-5 py-3.5`,children:(0,B.jsx)(k,{icon:(0,B.jsx)(R,{className:`size-4`}),label:`Prompt / Completion`,value:N(u?.usage.promptTokens)+` / `+N(u?.usage.completionTokens),mono:!0})}),(0,B.jsx)(`div`,{className:`px-5 py-3.5`,children:(0,B.jsx)(k,{icon:(0,B.jsx)(F,{className:`size-4`}),label:`估算费用`,value:u?.usage.costUsd?`$`+Number(u.usage.costUsd).toFixed(4):`—`,mono:!0,warn:!u?.usage.costUsd})})]})]}),m.length?(0,B.jsx)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:m.map(e=>(0,B.jsx)(q,{p:e,proxyApps:d?.proxyApps??[],busy:n===e.id,onAction:p},e.id))}):(0,B.jsx)(`div`,{className:`grid min-h-[200px] place-items-center rounded-lg border border-dashed border-border text-center`,children:(0,B.jsxs)(`div`,{children:[(0,B.jsx)(w,{className:`mx-auto mb-3 size-8 text-muted-foreground`}),(0,B.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:`尚未添加供应商`}),(0,B.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`点击「添加供应商」录入 API Key / Command Code`})]})}),(0,B.jsx)(Q,{open:i,onOpenChange:o,presets:d?.presets??[],proxyApps:d?.proxyApps??[],onDone:()=>f.refresh()}),(0,B.jsx)(K,{open:c,onOpenChange:l,providers:m})]})}function K({open:e,onOpenChange:n,providers:r}){let[i,a]=(0,z.useState)(null);async function s(e){if(confirm(`删除供应商「`+e.name+`」?其下全部账号与 Key 将被移除,不可恢复。`)){a(e.id);try{await h.providerRemove(e.id),t.success(`已删除供应商「`+e.name+`」`),await f.refresh()}catch(e){t.error(String(e))}finally{a(null)}}}return(0,B.jsx)(m,{open:e,onOpenChange:n,children:(0,B.jsxs)(d,{className:`max-w-[440px]`,children:[(0,B.jsx)(l,{children:(0,B.jsx)(o,{children:`删除供应商`})}),(0,B.jsx)(`div`,{className:`grid gap-1.5`,children:r.length?r.map(e=>(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-md border border-border/70 bg-muted/40 px-3 py-2`,children:[(0,B.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,B.jsx)(`strong`,{className:`truncate text-sm font-medium text-foreground`,children:e.name}),(0,B.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[e.kind===`proxy`?`反代`:`直连`,` · `,(e.accounts??[]).length,` 账号`]})]}),(0,B.jsxs)(y,{disabled:i===e.id,onClick:()=>void s(e),size:`chip`,variant:`destructive`,children:[i===e.id?(0,B.jsx)(S,{className:`size-3 animate-spin`}):(0,B.jsx)(C,{className:`size-3`}),`删除`]})]},e.id)):(0,B.jsx)(`p`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`暂无供应商`})}),(0,B.jsx)(`div`,{className:`mt-3 flex justify-end`,children:(0,B.jsx)(y,{onClick:()=>n(!1),variant:`outline`,children:`关闭`})})]})})}function q({p:e,proxyApps:n,busy:r,onAction:i}){let a=U(e.accounts??[]),o=a.find(e=>e.selected)||a.find(e=>e.usable&&!V(e.quota))||a[0],[c,l]=(0,z.useState)(!1),u=e.kind===`proxy`?(n??[]).find(t=>t.id===e.proxyAppId)??null:null,d=e.apiBase||(e.apiPort?`http://127.0.0.1:`+e.apiPort+`/v1`:null);return(0,B.jsxs)(M,{className:`flex min-h-0 flex-col overflow-hidden`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2 border-b border-border/70 bg-muted px-5 py-3`,children:[(0,B.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,B.jsx)(`strong`,{className:`truncate text-sm font-semibold text-foreground`,children:e.name}),e.kind===`proxy`&&u&&u.installed?u.updateAvailable?(0,B.jsxs)(y,{className:`gap-1 rounded-full px-2.5 text-xs text-warning`,disabled:r,onClick:()=>void i(`proxy-upd-`+e.id,()=>h.proxyUpdateApply(e.proxyAppId).then(()=>void 0),`已提交更新,所有实例将依次更新并重启`),size:`chip`,title:`检测到新版本,点击更新该应用全部实例`,variant:`outline`,children:[(0,B.jsx)(S,{className:`size-3`}),`更新 v`,u.latest]}):(0,B.jsxs)(y,{className:`gap-1 rounded-full px-2.5 text-xs font-mono text-muted-foreground`,disabled:r,onClick:()=>{i(`proxy-chk-`+e.id,async()=>{let n=await h.proxyUpdateCheck();if(await f.refresh(),!n.ok){t.error(n.error||`版本检测失败`);return}let r=n.versions?.[e.proxyAppId||``]||null,i=u.installed;t.info(r&&r!==i?`发现新版本 v`+r+`,点击版本胶囊更新`:`已是最新版本 v`+i)},void 0)},size:`chip`,title:`检测是否有新版本`,variant:`outline`,children:[`v`,u.installed,(0,B.jsx)(S,{className:s(`size-3`,r&&`animate-spin`)})]}):null]}),(0,B.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-1.5`,children:[(0,B.jsxs)(y,{disabled:r,onClick:()=>l(!0),size:`sm`,variant:`outline`,children:[(0,B.jsx)(T,{className:`size-3.5`}),`添加`]}),e.activated?(0,B.jsxs)(y,{disabled:r,onClick:()=>void i(`deact`,()=>h.providerDeactivate(e.id).then(()=>void 0),`已停用供应商(资源已回收)`),size:`sm`,variant:`outline`,children:[(0,B.jsx)(b,{className:`size-3.5`}),`停用`]}):(0,B.jsxs)(y,{disabled:r,onClick:()=>void i(`act`,()=>h.providerActivate(e.id).then(()=>void 0),`已启用供应商`),size:`sm`,variant:`outline`,children:[(0,B.jsx)(x,{className:`size-3.5`}),`启用`]})]})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border/60 px-5 py-2.5`,children:[(0,B.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`API 地址`}),(0,B.jsx)(`div`,{className:`flex h-8 min-w-0 flex-1 items-center gap-2 rounded-md border border-border bg-card px-2.5`,children:e.activated&&d?(0,B.jsx)(`code`,{className:`min-w-0 flex-1 truncate font-mono text-xs text-foreground`,children:d}):(0,B.jsx)(`span`,{className:`truncate text-xs text-muted-foreground/70`,children:`服务未启用`})}),e.activated&&d?(0,B.jsxs)(y,{onClick:()=>void navigator.clipboard.writeText(d||``).then(()=>t.success(`已复制 API 地址`)),size:`sm`,title:`复制该供应商 API 地址`,variant:`outline`,children:[(0,B.jsx)(I,{className:`size-3.5`}),`复制`]}):null]}),o?(0,B.jsx)(Y,{acc:o,busy:r,p:e,onAction:i}):(0,B.jsx)(`div`,{className:`px-5 py-3 text-xs text-muted-foreground`,children:`暂无账号数据`}),a.length?(0,B.jsxs)(`div`,{className:`flex min-h-0 flex-col border-t border-border/60`,children:[(0,B.jsxs)(`div`,{className:s(`grid items-center gap-2 border-b border-border/60 bg-muted/60 px-5 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,W),children:[(0,B.jsx)(`span`,{children:e.kind===`proxy`?`账号实例`:`API Key`}),(0,B.jsx)(`span`,{className:`text-center`,children:`用量`}),(0,B.jsx)(`span`,{className:`text-center`,children:`操作`})]}),(0,B.jsx)(`div`,{className:`max-h-[288px] min-h-0 overflow-y-auto overscroll-contain`,children:a.map((t,n)=>(0,B.jsx)(`div`,{className:s(n>0&&`border-t border-border/50`),children:(0,B.jsx)(X,{a:t,p:e,busy:r,onAction:i})},t.keyId))})]}):(0,B.jsx)(`p`,{className:`border-t border-border/60 px-5 py-3 text-xs text-muted-foreground`,children:`暂无 Keys — 点「添加」录入`}),(0,B.jsx)(J,{open:c,onOpenChange:l,p:e})]})}function J({open:e,onOpenChange:n,p:r}){let i=r.accounts??[],[a,s]=(0,z.useState)(``),[c,u]=(0,z.useState)(!1),[p,g]=(0,z.useState)(!1),_=r.kind===`proxy`;async function v(){g(!0);try{let e=await h.proxyLoginStart();if(!e.ok){t.error(e.error||`登录发起失败`);return}t.info(`已打开浏览器,请在 Command Code 页面完成授权…`,{duration:4e3});let i=await h.proxyLoginWait(e.waitMs??18e4);if(!i.ok||!i.apiKey){t.error(i.error||`登录未完成`);return}await h.proxyAddKey(r.id,i.apiKey),t.success(`已通过登录添加账号 `+(i.userName||i.keyName||``)),n(!1),await f.refresh()}catch(e){t.error(String(e))}finally{g(!1)}}async function b(){let e=a.split(/[,;s]+/).map(e=>e.trim()).filter(Boolean);if(!e.length){t.error(`请输入至少一个 Key`);return}u(!0);try{if(_)for(let n of e){let e=await h.proxyAddKey(r.id,n);if(e&&e.limited===`credits`){let n=e.account?.limit?.recovery;t.warning(`已添加:该账号额度用尽`+(n?.type===`at`&&n.at?`(预计 ${H(n.at)} 自动恢复)`:`(等待月度重置后自动恢复)`))}}else{let n=await h.providerKeysSet(r.id,{add:e});if(n.ok===!1){t.error(n.error||`添加失败`);return}}t.success(`已添加 `+e.length+` 个 Key(`+(_?`反代账号`:`API Key`)+`)`),s(``),n(!1),await f.refresh()}catch(e){t.error(String(e))}finally{u(!1)}}async function x(e){if(confirm(`移除 Key `+e+`?`)){u(!0);try{if(_){let t=i.find(t=>t.maskedKey===e||e.startsWith(t.maskedKey));t&&await h.proxyRemoveKey(r.id,t.keyId)}else{let n=await h.providerKeysSet(r.id,{removeMasked:[e]});if(n.ok===!1){t.error(n.error||`移除失败`);return}}t.success(`已移除`),n(!1),await f.refresh()}catch(e){t.error(String(e))}finally{u(!1)}}}return(0,B.jsx)(m,{open:e,onOpenChange:n,children:(0,B.jsxs)(d,{className:`max-w-[440px]`,children:[(0,B.jsx)(l,{children:(0,B.jsxs)(o,{children:[`添加 / 管理 Key — `,r.name]})}),(0,B.jsxs)(`div`,{className:`grid gap-3`,children:[_?(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border border-border/70 bg-muted/40 px-3 py-2.5`,children:[(0,B.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,B.jsx)(`span`,{className:`text-xs font-medium text-foreground`,children:`一键登录`}),(0,B.jsx)(`span`,{className:`text-[11px] leading-tight text-muted-foreground`,children:`浏览器打开 Command Code 授权,自动添加账号`})]}),(0,B.jsx)(y,{disabled:p||c,onClick:()=>void v(),size:`sm`,children:p?`等待授权…`:`一键登录`})]}):null,(0,B.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,B.jsxs)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:[_?`已录入账号(反代)`:`已录入 API Key`,`(`,i.length,`)`]}),i.length?(0,B.jsx)(`div`,{className:`grid max-h-[180px] gap-1 overflow-auto`,children:i.map(e=>(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-md border border-border/70 bg-muted/40 px-2.5 py-1.5`,children:[(0,B.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,B.jsx)(`code`,{className:`truncate font-mono text-xs`,children:e.maskedKey}),e.selected?(0,B.jsx)(A,{tone:`ok`,children:`当前`}):null]}),(0,B.jsx)(y,{size:`chip`,variant:`ghost`,className:`text-destructive`,disabled:c,onClick:()=>void x(e.maskedKey),title:`移除该 Key`,children:(0,B.jsx)(C,{className:`size-3.5`})})]},e.keyId))}):(0,B.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`尚未录入 `,_?`账号`:`Key`]})]}),(0,B.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,B.jsxs)(`label`,{className:`text-xs font-medium text-muted-foreground`,children:[`添加 `,_?`账号 Key / Command Code`:`API Key`,`(每行一个,支持逗号/分号分隔)`]}),(0,B.jsx)(`textarea`,{className:`h-20 w-full resize-none rounded-md border border-input bg-transparent px-3 py-2 font-mono text-xs outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/20`,placeholder:_?`sk-... 或 Command Code,每行一个`:`sk-... 每行一个`,value:a,onChange:e=>s(e.target.value)})]})]}),(0,B.jsxs)(`div`,{className:`mt-3 flex justify-end gap-2`,children:[(0,B.jsx)(y,{onClick:()=>n(!1),variant:`outline`,children:`取消`}),(0,B.jsx)(y,{disabled:c||!a.trim(),onClick:()=>void b(),children:c?`保存中…`:`添加`})]})]})})}function Y({acc:e,busy:t,p:n,onAction:r}){let i=e.quota,o=!!e.selected,c=!!e.locked,l=i&&i.monthlyRemaining,u=i?.monthly?.percent,d=Number.isFinite(Number(u))?u+`%`:Number.isFinite(Number(l))?`$ `+Number(l).toFixed(2):`—`;return(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4 px-5 py-3`,children:[(0,B.jsxs)(`div`,{className:`grid min-w-[180px] content-center gap-1`,children:[(0,B.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:o?c?`当前账号(锁定)`:`当前在用账号`:`选择账号`}),(0,B.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,B.jsx)(D,{className:`max-w-[150px]`,children:e.maskedKey}),o?(0,B.jsxs)(y,{className:`gap-1 px-2`,disabled:t,onClick:()=>r(`refresh`,()=>h.providerRefresh(n.id).then(()=>void 0),`额度已刷新`),size:`chip`,variant:`outline`,children:[(0,B.jsx)(S,{className:s(`size-3`,t&&`animate-spin`)}),`刷新`]}):null]})]}),(0,B.jsxs)(`div`,{className:`grid min-w-0 flex-1 grid-cols-3 items-stretch gap-2`,children:[(0,B.jsx)(j,{icon:(0,B.jsx)(S,{className:`size-3.5`}),label:`5小时`,value:(i?.rolling?.percent??0)+`%`,danger:i?.rolling?.status===`rate-limited`}),(0,B.jsx)(j,{icon:(0,B.jsx)(a,{className:`size-3.5`}),label:`每周`,value:(i?.weekly?.percent??0)+`%`,danger:i?.weekly?.status===`rate-limited`}),(0,B.jsx)(j,{icon:(0,B.jsx)(w,{className:`size-3.5`}),label:`每月`,value:d,danger:i?.monthly?.status===`rate-limited`||Number(i?.monthly?.percent??0)>=100})]})]})}function X({a:e,p:t,busy:n,onAction:r}){let i=!!e.selected,a=e.instanceStatus===`frozen`?`frozen`:e.status||``,o=e.limit?.kind,c=a===`frozen`||!!o||!i&&V(e.quota),l=o===`credits`?e.limit?.recovery?.type===`at`&&e.limit?.recovery?.at?`额度用尽(预计 ${H(e.limit.recovery.at)} 月度重置后自动恢复)`:`额度用尽(待月度重置后自动恢复)`:o===`window`?e.limit?.reason??`时间窗额度已用尽(到 resetAt 自动恢复)`:o===`banned`?`账号被封禁`:null,u=N(e.requests||0)+` 次 · `+N(e.totalTokens||0)+` tok`,[d,f]=(0,z.useState)(!1),p;return p=a===`review`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(y,{disabled:n,onClick:()=>void r(`in`,()=>h.providerAccountConfirm(t.id,e.keyId).then(()=>void 0),`已入池`),size:`chip`,variant:`outline`,children:`入池`}),(0,B.jsx)(y,{className:`h-[26px]`,disabled:n,onClick:()=>void r(`out`,()=>h.providerAccountDiscard(t.id,e.keyId).then(()=>void 0),`已作废`),size:`chip`,variant:`destructive`,children:`作废`})]}):c&&!i?(0,B.jsxs)(y,{size:`chip`,variant:`outline`,className:`w-[70px] gap-1 px-1.5`,onClick:()=>f(!0),title:l??`查看该账号限额情况`,children:[(0,B.jsx)(P,{className:`size-3.5`}),`限额`]}):i?(0,B.jsxs)(y,{disabled:n,onClick:()=>r(`refresh`,()=>h.providerRefresh(t.id).then(()=>void 0),`额度已刷新`),size:`chip`,variant:`outline`,className:`w-[70px] gap-1 px-1.5`,children:[(0,B.jsx)(S,{className:s(`size-3.5`,n&&`animate-spin`)}),`刷新`]}):(0,B.jsxs)(y,{disabled:n,size:`chip`,variant:`outline`,className:`w-[70px] gap-1 px-1.5`,onClick:()=>{t.kind===`proxy`?r(`sel`,()=>h.proxySelect(t.id,e.keyId).then(()=>void 0),`已切换账号`):r(`use`,()=>h.providerKeyUse(t.id,e.keyId).then(()=>void 0),`已锁定 Key`)},children:[(0,B.jsx)(L,{className:`size-3.5`}),`切换`]}),(0,B.jsxs)(`div`,{className:s(`grid items-center gap-2 px-5 py-2.5 hover:bg-muted/40`,W,i&&`bg-muted/60 shadow-[inset_3px_0_0_var(--primary)]`),children:[(0,B.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,B.jsx)(D,{children:e.maskedKey}),a===`registering`?(0,B.jsx)(A,{tone:`off`,children:`检测中…`}):null,a===`banned`?(0,B.jsx)(A,{tone:`err`,children:`封号`}):null,o===`credits`?(0,B.jsx)(`span`,{title:e.limit?.reason??`额度用尽`,children:(0,B.jsx)(A,{tone:`err`,children:`额度用尽`})}):null,o===`window`?(0,B.jsx)(`span`,{title:e.limit?.reason??`时间窗额度已用尽`,children:(0,B.jsx)(A,{tone:`warn`,children:`窗口用尽`})}):null]}),(0,B.jsx)(`span`,{className:`truncate text-right text-xs tabular-nums text-muted-foreground`,title:u,children:u}),(0,B.jsx)(`div`,{className:`flex justify-end`,children:p}),(0,B.jsx)(Z,{open:d,onOpenChange:f,a:e,p:t})]})}function Z({open:e,onOpenChange:t,a:n,p:r}){let i=n.quota,a=(()=>{let e=i?.monthly?.percent;if(e!=null&&Number.isFinite(Number(e)))return Number(e);let t=Number(i?.credits?.monthlyCredits??i?.monthlyRemaining);return Number.isFinite(t)&&t>=0?Math.min(100,Math.round((10-t)/10*100)):0})(),s=i?.monthly?.status?{...i.monthly,percent:a}:{status:`ok`,percent:a,resetsAt:i?.monthly?.resetsAt},c=(()=>{let e=i?.credits?.monthlyCredits,t=i?.monthlyRemaining,n=e!=null&&Number.isFinite(Number(e))?Number(e):t!=null&&Number.isFinite(Number(t))?Number(t):null;return n===null?null:`剩余 $`+n.toFixed(2)})(),u=(e,t,n)=>(0,B.jsxs)(`div`,{className:`grid gap-1 rounded-md border border-border/70 bg-muted/40 px-3 py-2.5`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsx)(`span`,{className:`text-xs font-medium text-foreground`,children:t}),(0,B.jsx)(A,{tone:e?.status===`rate-limited`||Number(e?.percent)>=100?`err`:`ok`,children:e?.status===`rate-limited`||Number(e?.percent)>=100?`已限额`:`正常`})]}),(0,B.jsxs)(`strong`,{className:`text-xl font-semibold tabular-nums text-foreground`,children:[e?.percent??0,`%`]}),n?(0,B.jsx)(`span`,{className:`text-[11px] leading-tight text-muted-foreground`,children:n}):null,e?.resetsAt?(0,B.jsxs)(`span`,{className:`text-[11px] leading-tight text-muted-foreground`,children:[`重置:`,new Date(e.resetsAt).toLocaleString(`zh-CN`,{month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})]}):null]});return(0,B.jsx)(m,{open:e,onOpenChange:t,children:(0,B.jsxs)(d,{className:`max-w-[420px]`,children:[(0,B.jsx)(l,{children:(0,B.jsx)(o,{children:`限额详情`})}),(0,B.jsxs)(`div`,{className:`grid gap-1`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,B.jsx)(`span`,{children:`账号`}),(0,B.jsx)(`code`,{className:`font-mono`,children:n.maskedKey}),(0,B.jsx)(`span`,{className:`ml-auto text-xs`,children:r.name})]}),i?(0,B.jsxs)(`div`,{className:`grid grid-cols-3 gap-2`,children:[u(i.rolling,`5小时`),u(i.weekly,`每周`),u(s,`每月`),i.credits||i.monthlyRemaining!=null?(0,B.jsxs)(`div`,{className:`col-span-3 flex flex-col gap-1 rounded-md border border-border/70 bg-muted/40 px-3 py-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,B.jsx)(`span`,{className:`text-xs font-medium text-foreground`,children:`月度额度(Command)`}),i.credits?.belowThreshold?(0,B.jsx)(A,{tone:`warn`,children:`低于充值线`}):i.credits&&Number.isFinite(Number(i.credits.monthlyCredits))&&Number(i.credits.monthlyCredits)<=0?(0,B.jsx)(A,{tone:`err`,children:`额度用尽`}):(0,B.jsx)(A,{tone:`ok`,children:`正常`})]}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,B.jsx)(`span`,{className:`text-[11px] leading-tight text-muted-foreground`,children:Number(i.monthlyResetAt)>Date.now()?`月度额度预计 ${H(Number(i.monthlyResetAt))} 重置(随订阅续期)`:`月度额度已于 ${H(Number(i.monthlyResetAt))} 重置`}),c?(0,B.jsx)(`span`,{className:`text-sm font-semibold tabular-nums text-foreground`,children:c}):null]})]}):null]}):(0,B.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:`暂无额度数据 — 点「刷新」获取`}),i?(0,B.jsxs)(`p`,{className:`mt-1 text-xs leading-relaxed text-muted-foreground`,children:[`当前用量统计:`,N(n.requests||0),` 次请求 · `,N(n.totalTokens||0),` tokens`,i.monthly?.resetsAt?`。最迟限额将于月窗口重置后自动解除。`:``]}):null]}),(0,B.jsx)(`div`,{className:`mt-3 flex justify-end`,children:(0,B.jsx)(y,{onClick:()=>t(!1),variant:`outline`,children:`关闭`})})]})})}function Q({open:e,onOpenChange:n,presets:r,proxyApps:i,onDone:a}){let[f,_]=(0,z.useState)(``),[b,x]=(0,z.useState)(``),[S,C]=(0,z.useState)(``),[w,T]=(0,z.useState)(`preset`),[E,D]=(0,z.useState)(!1);async function O(){if(w===`preset`&&!f){t.error(`请选择供应商`);return}if(w===`proxy`&&!b){t.error(`请选择反代应用`);return}D(!0);try{let e=w===`preset`?await h.providerAdd({presetId:f,name:S||void 0,keys:[]}):await h.providerAdd({kind:`proxy`,appId:b,name:S||void 0,keys:[]});if(e.ok===!1){t.error(e.error||`添加失败`);return}t.success(`已添加供应商,请在卡片上点「添加」录入 Key`),n(!1),C(``),_(``),x(``),a()}catch(e){t.error(String(e))}finally{D(!1)}}let k=(r??[]).find(e=>e.id===f);return(0,B.jsx)(m,{open:e,onOpenChange:n,children:(0,B.jsxs)(d,{className:`max-w-[420px]`,children:[(0,B.jsx)(l,{children:(0,B.jsx)(o,{children:`添加供应商`})}),(0,B.jsxs)(`div`,{className:`grid gap-3`,children:[(0,B.jsx)(`div`,{className:`flex gap-1.5 rounded-lg bg-muted p-1`,children:[`preset`,`proxy`].map(e=>(0,B.jsx)(y,{className:s(`flex-1 rounded-md font-medium`,w===e?`bg-card text-foreground shadow-sm`:`bg-transparent text-muted-foreground hover:bg-card/60 hover:text-foreground`),onClick:()=>T(e),size:`sm`,variant:`ghost`,children:e===`preset`?`直连预设`:`反代应用`},e))}),w===`preset`?(0,B.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,B.jsx)(`label`,{className:`text-sm font-medium text-foreground`,children:`供应商`}),(0,B.jsxs)(p,{value:f,onValueChange:_,children:[(0,B.jsx)(u,{className:`w-full`,children:(0,B.jsx)(v,{placeholder:`-- 选择供应商 --`})}),(0,B.jsx)(g,{children:(r??[]).map(e=>(0,B.jsx)(c,{value:e.id,children:e.name},e.id))})]}),k?.note?(0,B.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:k.note}):null]}):(0,B.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,B.jsx)(`label`,{className:`text-sm font-medium text-foreground`,children:`反代应用`}),(0,B.jsxs)(p,{value:b,onValueChange:x,children:[(0,B.jsx)(u,{className:`w-full`,children:(0,B.jsx)(v,{placeholder:`-- 选择应用 --`})}),(0,B.jsx)(g,{children:(i??[]).map(e=>(0,B.jsx)(c,{value:e.id,children:e.name},e.id))})]})]}),(0,B.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,B.jsx)(`label`,{className:`text-sm font-medium text-foreground`,children:`供应商名称(可选)`}),(0,B.jsx)(`input`,{className:`h-9 w-full rounded-md border border-input bg-transparent px-3 text-sm outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/20`,placeholder:`自定义名称,如:Open Code ZEN`,value:S,onChange:e=>C(e.target.value)})]}),(0,B.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:`只添加供应商不填 Key;添加后在供应商卡片上点「添加」录入 API Key。`})]}),(0,B.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2`,children:[(0,B.jsx)(y,{onClick:()=>n(!1),variant:`outline`,children:`取消`}),(0,B.jsx)(y,{disabled:E,onClick:()=>void O(),children:E?`添加中…`:`添加供应商`})]})]})})}export{G as RouterPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,C as t,E as n,M as r,S as i,b as a,f as o,i as s,r as c,y as l}from"./supervisor-DEHXL51C.js";import{t as u}from"./refresh-cw-Dbn7zlS9.js";import{c as d,l as f}from"./supervisor-C3UXEQbW.js";import{t as p}from"./useSupervisorAction-Dj_nAGhv.js";import{n as m,o as h,t as g}from"./widgets-C6MCpT1T.js";var _=r(e(),1),v=i();function y({checked:e,disabled:t,onChange:n,label:r}){return(0,v.jsx)(`span`,{className:a(`inline-flex items-center`,t&&`pointer-events-none opacity-50`),title:r,children:(0,v.jsx)(s,{checked:e,disabled:t,onCheckedChange:n})})}function b(){let[e,r]=(0,_.useState)(null),[i,s]=(0,_.useState)(null),[b,S]=(0,_.useState)(null),[C,w]=(0,_.useState)(``),[T,E]=(0,_.useState)(`—`),[D,O]=(0,_.useState)(null),[k,A]=(0,_.useState)(null),[j,M]=(0,_.useState)(null),{busy:N,run:P}=p(),F=(0,_.useCallback)(async()=>{let[e,t,n,i,a,o,l]=await Promise.all([c.autostart().catch(()=>null),c.lanPanel().catch(()=>null),c.accessKey().catch(()=>null),c.guardVersion().catch(()=>null),c.selfUpdateStatus().catch(()=>null),c.envStatus().catch(()=>null),c.registry().catch(()=>null)]);e&&r(e.on),t&&s(t.enabled),n&&S(n),i&&E(i.version||`—`),O(a),A(o),M(l)},[]);(0,_.useEffect)(()=>{F()},[F]);async function I(e){r(e);try{let n=await c.setAutostart(e);n.ok===!1?(t.error(n.error||`设置失败`),r(!e)):t.success(e?`已开启开机自启(整条服务链)`:`已关闭开机自启`)}catch(n){t.error(String(n)),r(!e)}}async function L(e){s(e);try{let n=await c.setLanPanel(e);if(n.ok===!1){t.error(n.error||`设置失败`),s(!e);return}t.success(e?`已开启局域网访问(0.0.0.0)`:`已关闭局域网访问(仅本机)`)}catch(n){t.error(String(n)),s(!e)}}async function R(){let e=C.trim();if(e&&e.length<8){t.error(`访问密钥至少 8 位(建议 16+ 位随机串)`);return}await P(`akk`,()=>c.setAccessKey(e),{success:e?`访问密钥已设置(出回环通道需携带)`:`访问密钥已清除(仅回环可访问)`,refresh:!1,onDone:()=>{w(``),F()}})}let z=async()=>{await P(`gchk`,async()=>{let e=await c.guardVersionCheck();e.updateAvailable?t.success(`检测到管家新版本 `+e.latest):t.success(`管家已是最新(`+(e.version||`—`)+`)`);let n=await c.guardVersion();E(n.version||`—`)})},B=async()=>{await P(`su`,async()=>{let e=await c.selfUpdateApply();e.ok?t.success(`已更新到 v`+e.installed+(e.restartRequired?`,重启守卫生效`:``)):t.error(e.error||`应用失败`)},{refresh:!1,onDone:()=>void F()})},[V,H]=(0,_.useState)(`auto`),[U,W]=(0,_.useState)([]),[G,K]=(0,_.useState)(``),[q,J]=(0,_.useState)(``);(0,_.useEffect)(()=>{j&&(H(j.mode||`auto`),W((j.candidates??[]).map(e=>e.origin)),K(j.manualOrigin||``))},[j]);let Y=()=>{let e=q.trim();if(!/^https?:\/\//.test(e)){t.error(`请输入合法的镜像 URL`);return}if(U.includes(e)){t.info(`已在列表中`);return}W(t=>[...t,e]),J(``)};async function X(){let e={mode:V,origins:U};if(V===`manual`){if(!/^https?:\/\//.test(G.trim())){t.error(`手动模式需提供合法镜像 URL`);return}e.manualOrigin=G.trim()}await P(`reg`,()=>c.registrySet(e),{success:`已保存镜像配置`,refresh:!1,onDone:()=>void F()})}async function Z(){await P(`regr`,()=>c.registryRefresh(),{success:`已探测镜像`,refresh:!1,onDone:()=>void F()})}let Q=k?.catalog?.items;return(0,v.jsxs)(`div`,{className:`grid content-start gap-4`,children:[(0,v.jsxs)(g,{children:[(0,v.jsx)(m,{title:`启动`,subtitle:`开机行为与偏好`}),(0,v.jsx)(`div`,{className:`grid gap-4 px-5 py-4`,children:(0,v.jsxs)(`div`,{className:`flex items-start justify-between gap-6`,children:[(0,v.jsxs)(`div`,{className:`min-w-0`,children:[(0,v.jsx)(`strong`,{className:`block text-sm font-medium text-foreground`,children:`开机自动启动管家`}),(0,v.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed text-muted-foreground`,children:`开机登录后自动启动 DeepSeek Harness 管家(本程序)。不会自动启动任何单个实例——实例是否被自动拉起,由各自「进程守护」开关决定。`})]}),e===null?(0,v.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`…`}):(0,v.jsx)(y,{checked:e,onChange:e=>void I(e),label:`开机自启`})]})})]}),(0,v.jsxs)(g,{children:[(0,v.jsx)(m,{title:`访问`}),(0,v.jsxs)(`div`,{className:`grid gap-4 px-5 py-4`,children:[(0,v.jsxs)(`div`,{className:`flex items-start justify-between gap-6`,children:[(0,v.jsxs)(`div`,{className:`min-w-0`,children:[(0,v.jsx)(`strong`,{className:`block text-sm font-medium text-foreground`,children:`管家局域网访问`}),(0,v.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed text-muted-foreground`,children:`开启后,局域网内设备可通过 http://<本机IP>:3100 访问本面板与 API(仅限局域网/本机主机名);关闭后仅本机 127.0.0.1 可访问。`})]}),i===null?(0,v.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`…`}):(0,v.jsx)(y,{checked:i,onChange:e=>void L(e),label:`局域网访问`})]}),(0,v.jsx)(`div`,{className:`flex items-start justify-between gap-6 border-t border-border/60 pt-4`,children:(0,v.jsxs)(`div`,{className:`min-w-0`,children:[(0,v.jsx)(`strong`,{className:`block text-sm font-medium text-foreground`,children:`出回环访问密钥(apiAccessKey)`}),(0,v.jsxs)(`p`,{className:`mt-1 text-xs leading-relaxed text-muted-foreground`,children:[`设置后,局域网 / 公网通道(0.0.0.0 或 FRP 暴露)访问本 API 必须携带`,(0,v.jsx)(`code`,{className:`mx-1 font-mono`,children:`Authorization: Bearer <key>`}),`或`,(0,v.jsx)(`code`,{className:`mx-1 font-mono`,children:`?access_key=<key>`}),`,否则 401; 本机回环(127.0.0.1)请求不受影响。留空保存 = 清除密钥。`,b?.configured?(0,v.jsx)(`span`,{className:`mt-1 block text-status-ok`,children:`当前:已设置(未回显明文)`}):(0,v.jsx)(`span`,{className:`mt-1 block text-muted-foreground`,children:`当前:未设置(仅受局域网白名单约束)`})]})]})}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(o,{type:`password`,autoComplete:`new-password`,placeholder:`输入 ≥8 位访问密钥(建议随机长串)`,value:C,onChange:e=>w(e.target.value),onKeyDown:e=>{e.key===`Enter`&&R()},className:`flex-1`}),(0,v.jsx)(l,{variant:`outline`,onClick:()=>w(``),disabled:!C&&!b?.configured,children:`清除`}),(0,v.jsx)(l,{disabled:N===`akk`,onClick:()=>void R(),children:b?.configured?`更新密钥`:`设置密钥`})]})]})]}),(0,v.jsxs)(g,{children:[(0,v.jsx)(m,{title:`版本与环境`,subtitle:`管家自身版本/更新与运行环境`,actions:(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(l,{size:`sm`,disabled:N===`gchk`,onClick:()=>void z(),variant:`outline`,children:`检测更新`}),D?.ok&&D.updateAvailable?(0,v.jsx)(l,{size:`sm`,disabled:N===`su`,onClick:()=>void B(),children:`应用更新`}):null]})}),(0,v.jsxs)(`div`,{className:`grid gap-3 px-5 py-4`,children:[(0,v.jsxs)(`div`,{className:`grid grid-cols-[150px_minmax(0,1fr)] items-center gap-3`,children:[(0,v.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`管家当前版本`}),(0,v.jsx)(`strong`,{className:`font-mono text-sm text-foreground`,children:T})]}),D?(0,v.jsxs)(`div`,{className:`grid grid-cols-[150px_minmax(0,1fr)] items-center gap-3`,children:[(0,v.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`守卫自更新`}),(0,v.jsx)(`span`,{className:`text-sm text-foreground`,children:D.ok?(0,v.jsxs)(v.Fragment,{children:[`当前 v`,D.installed,D.updateAvailable?(0,v.jsxs)(h,{tone:`warn`,className:`ml-2`,children:[`可更新 v`,D.latest]}):(0,v.jsx)(h,{tone:`ok`,className:`ml-2`,children:`已是最新`})]}):(0,v.jsx)(`span`,{className:`text-muted-foreground`,children:D.error||`未配置自更新源`})})]}):null,Q?(0,v.jsx)(`div`,{className:`mt-1 grid gap-2 border-t border-border/60 pt-3`,children:Object.entries(Q).map(([e,t])=>(0,v.jsxs)(`div`,{className:`grid grid-cols-[150px_minmax(0,1fr)] items-center gap-3`,children:[(0,v.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t.label}),(0,v.jsxs)(`span`,{className:`flex items-center gap-2 text-sm text-foreground`,children:[(0,v.jsx)(h,{tone:t.state===`ok`?`ok`:t.state===`unconfigured`?`off`:`warn`,children:t.state}),(0,v.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:t.detail})]})]},e))}):null]})]}),(0,v.jsxs)(g,{children:[(0,v.jsx)(m,{title:`镜像源`,subtitle:`DSH 升级与反代应用的更新检测 / npx 安装会共用这套镜像源,自动探测可达且延迟最低的镜像,也可手动固定。此配置全局生效。`}),(0,v.jsxs)(`div`,{className:`grid gap-3 px-5 py-4`,children:[(0,v.jsx)(`div`,{className:`flex gap-3`,children:[`auto`,`manual`].map(e=>(0,v.jsxs)(`label`,{className:`inline-flex cursor-pointer items-center gap-1.5 text-sm`,children:[(0,v.jsx)(`input`,{type:`radio`,className:`accent-primary`,checked:V===e,onChange:()=>H(e)}),e===`auto`?`自动(按延迟选最快)`:`手动(固定指定)`]},e))}),V===`manual`?(0,v.jsx)(`div`,{className:`grid gap-1.5`,children:(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(o,{placeholder:`https://registry.npmmirror.com`,value:G,onChange:e=>K(e.target.value),className:`flex-1`}),(0,v.jsx)(l,{variant:`outline`,onClick:()=>void x(G),children:`测试`})]})}):null,(0,v.jsxs)(`div`,{className:`grid gap-1`,children:[(0,v.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`候选镜像列表:`}),(0,v.jsx)(`div`,{className:`max-h-[180px] overflow-auto rounded-md border border-border/70`,children:U.map((e,t)=>(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b border-border/50 px-3 py-1.5 last:border-b-0`,children:[(0,v.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[j?.origin===e?(0,v.jsx)(h,{tone:`ok`,children:`当前`}):null,(0,v.jsx)(`code`,{className:`truncate font-mono text-xs text-muted-foreground`,children:e})]}),(0,v.jsx)(l,{size:`chip`,variant:`ghost`,onClick:()=>W(t=>t.filter(t=>t!==e)),children:(0,v.jsx)(d,{className:`size-3.5 text-destructive`})})]},t))})]}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(o,{placeholder:`https://… 添加自定义镜像`,value:q,onChange:e=>J(e.target.value),className:`flex-1`,onKeyDown:e=>{e.key===`Enter`&&Y()}}),(0,v.jsxs)(l,{variant:`outline`,onClick:Y,children:[(0,v.jsx)(f,{className:`size-4`}),`添加`]})]}),(0,v.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[(0,v.jsx)(`span`,{className:`w-full text-xs text-muted-foreground`,children:`常用预设:`}),(j?.presets??[]).map(e=>(0,v.jsxs)(l,{size:`chip`,variant:`outline`,className:`text-muted-foreground hover:bg-muted hover:text-foreground`,disabled:U.includes(e.origin),onClick:()=>W(t=>[...t,e.origin]),type:`button`,children:[e.label,U.includes(e.origin)?(0,v.jsx)(n,{className:`ml-1 size-3 text-success`}):null]},e.origin))]}),(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,v.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[j?.origin?(0,v.jsxs)(v.Fragment,{children:[`当前使用: `,(0,v.jsx)(`code`,{className:`font-mono`,children:j.origin}),j.manual?`(手动固定)`:`(自动)`]}):null,j?.latencyMs?(0,v.jsxs)(`span`,{className:`ml-2`,children:[`延迟 `,j.latencyMs,`ms`]}):null]}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsxs)(l,{size:`sm`,disabled:N===`regr`,onClick:()=>void Z(),variant:`outline`,children:[(0,v.jsx)(u,{className:a(`size-3.5`,N===`regr`&&`animate-spin`)}),`重新探测`]}),(0,v.jsx)(l,{disabled:N===`reg`,onClick:()=>void X(),children:`保存`})]})]})]})]})]})}async function x(e){if(!/^https?:\/\//.test(e)){t.error(`请输入合法镜像 URL`);return}t.info(`测试中…`);try{let n=Date.now(),r=await fetch(e.replace(/\/+$/,``)+`/-/ping`,{signal:AbortSignal.timeout(4e3)}),i=Date.now()-n;r.ok?t.success(`可达,延迟 `+i+` ms`):t.error(`不可达`)}catch{t.error(`探测失败`)}}export{b as SettingsPage};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{A as e,C as t,M as n,S as r,b as i,r as a,y as o}from"./supervisor-DEHXL51C.js";import{t as s}from"./refresh-cw-Dbn7zlS9.js";import{a as c,d as l,i as u,r as d}from"./supervisor-C3UXEQbW.js";import{o as f,t as p}from"./widgets-C6MCpT1T.js";import{r as m}from"./format-QeaTKFhQ.js";var h=n(e(),1),g=r();function _(){let[e,n]=(0,h.useState)(null),[r,_]=(0,h.useState)(!1),[v,y]=(0,h.useState)(``);async function b(){try{let e=await a.tasks();n(e.tasks)}catch(e){t.error(String(e))}}(0,h.useEffect)(()=>{b()},[]);async function x(){_(!0);try{await b(),t.success(`任务中心已刷新`)}catch{}finally{_(!1)}}let S=[`native`,`instance`,`plugin`,`proxy-app`],C=(e??[]).filter(e=>!v||e.kind===v);return(0,g.jsxs)(`div`,{className:`grid content-start gap-4`,children:[(0,g.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,g.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,g.jsx)(o,{className:i(v?`text-muted-foreground hover:bg-muted hover:text-foreground`:`bg-primary/10 text-primary hover:bg-primary/15`),onClick:()=>y(``),size:`sm`,variant:`ghost`,children:`全部`}),S.map(e=>(0,g.jsx)(o,{className:i(v===e?`bg-primary/10 text-primary hover:bg-primary/15`:`text-muted-foreground hover:bg-muted hover:text-foreground`),onClick:()=>y(e),size:`sm`,variant:`ghost`,children:u[e]||e},e))]}),(0,g.jsxs)(o,{onClick:()=>void x(),variant:`outline`,children:[(0,g.jsx)(s,{className:i(`size-4`,r&&`animate-spin`)}),`刷新`]})]}),e?C.length?(0,g.jsx)(`div`,{className:`grid gap-3`,children:C.map(e=>{let t=c[e.state]||{label:e.state,tone:`off`},n=e.from&&e.to&&e.from!==e.to?e.from+` → `+e.to:e.to?`→ `+e.to:``,r=e.steps||[];return(0,g.jsxs)(p,{className:`p-4`,children:[(0,g.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,g.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,g.jsx)(`span`,{className:`text-sm font-semibold text-foreground`,children:u[e.kind]||e.kind}),(0,g.jsx)(f,{tone:`boot`,children:d[e.action]||e.action}),(0,g.jsx)(`strong`,{className:`truncate text-sm text-foreground`,children:e.target.name}),n?(0,g.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:n}):null]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,g.jsx)(f,{tone:t.tone,children:t.label}),(0,g.jsxs)(`span`,{className:`whitespace-nowrap`,children:[m(e.startedAt),e.finishedAt?` ~ `+m(e.finishedAt):``]})]})]}),e.error?(0,g.jsx)(`p`,{className:`mt-2 truncate text-xs text-destructive`,title:e.error,children:e.error}):null,r.length?(0,g.jsx)(`div`,{className:`mt-3 flex flex-wrap items-center gap-1.5`,children:r.map((e,t)=>(0,g.jsxs)(`span`,{className:i(`inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-xs leading-tight`,e.state===`done`&&`bg-success-background text-success`,e.state===`running`&&`bg-primary/10 text-primary`,e.state===`failed`&&`bg-careful-background text-careful`,(!e.state||e.state===`pending`)&&`bg-muted text-muted-foreground`),children:[e.state===`running`?(0,g.jsx)(`span`,{className:`size-1.5 animate-pulse rounded-full bg-primary`}):null,e.name]},t))}):null,e.logTail?.length?(0,g.jsxs)(`details`,{className:`mt-3`,children:[(0,g.jsxs)(`summary`,{className:`cursor-pointer text-xs text-muted-foreground hover:text-foreground`,children:[`日志(`,e.logTail.length,`)`]}),(0,g.jsx)(`pre`,{className:`mt-2 max-h-[180px] overflow-auto whitespace-pre-wrap break-all rounded-md bg-muted/70 p-3 font-mono text-xs leading-relaxed text-muted-foreground`,children:e.logTail.join(`
|
|
2
|
-
`)})]}):null]},e.id)})}):(0,g.jsxs)(`div`,{className:`grid place-items-center rounded-lg border border-dashed border-border py-16 text-center`,children:[(0,g.jsx)(l,{className:`mx-auto mb-3 size-8 text-muted-foreground`}),(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`暂无任务记录。安装 / 升级 / 卸载 / 更新操作完成后会在此显示状态与历史。`})]}):(0,g.jsx)(`div`,{className:`grid place-items-center py-16 text-sm text-muted-foreground`,children:`加载中…`})]})}export{_ as TasksPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{D as e}from"./supervisor-DEHXL51C.js";var t=e(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]);export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{D as e}from"./supervisor-DEHXL51C.js";var t=e(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]);export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{D as e}from"./supervisor-DEHXL51C.js";var t=e(`power`,[[`path`,{d:`M12 2v10`,key:`mnfbl`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`,key:`obofu9`}]]),n=e(`rocket`,[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]);export{t as n,n as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-divide-x-reverse:0}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-normal:0em;--tracking-wide:.025em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.top-0{top:0}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.top-\[50\%\]{top:50%}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-\[50\%\]{left:50%}.z-10{z-index:10}.z-50{z-index:50}.col-span-3{grid-column:span 3/span 3}.col-span-full{grid-column:1/-1}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-1{margin-inline:var(--spacing)}.mx-5{margin-inline:calc(var(--spacing) * 5)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-auto{margin-top:auto}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-\[18px\]{width:18px;height:18px}.size-\[23px\]{width:23px;height:23px}.size-\[96px\]{width:96px;height:96px}.size-full{width:100%;height:100%}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-20{height:calc(var(--spacing) * 20)}.h-\[18px\]{height:18px}.h-\[22px\]{height:22px}.h-\[26px\]{height:26px}.h-\[30px\]{height:30px}.h-\[34px\]{height:34px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-\[120px\]{max-height:120px}.max-h-\[160px\]{max-height:160px}.max-h-\[180px\]{max-height:180px}.max-h-\[288px\]{max-height:288px}.max-h-\[340px\]{max-height:340px}.max-h-\[450px\]{max-height:450px}.max-h-\[560px\]{max-height:560px}.max-h-\[min\(24rem\,var\(--radix-select-content-available-height\)\)\]{max-height:min(24rem, var(--radix-select-content-available-height))}.min-h-0{min-height:0}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-\[36px\]{min-height:36px}.min-h-\[40px\]{min-height:40px}.min-h-\[46px\]{min-height:46px}.min-h-\[52px\]{min-height:52px}.min-h-\[72px\]{min-height:72px}.min-h-\[76px\]{min-height:76px}.min-h-\[78px\]{min-height:78px}.min-h-\[150px\]{min-height:150px}.min-h-\[200px\]{min-height:200px}.min-h-\[220px\]{min-height:220px}.min-h-\[320px\]{min-height:320px}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-\[70px\]{width:70px}.w-\[130px\]{width:130px}.w-\[150px\]{width:150px}.w-\[190px\]{width:190px}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\[82px\]{max-width:82px}.max-w-\[150px\]{max-width:150px}.max-w-\[180px\]{max-width:180px}.max-w-\[380px\]{max-width:380px}.max-w-\[400px\]{max-width:400px}.max-w-\[420px\]{max-width:420px}.max-w-\[440px\]{max-width:440px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:0}.min-w-\[8rem\]{min-width:8rem}.min-w-\[120px\]{min-width:120px}.min-w-\[180px\]{min-width:180px}.min-w-\[220px\]{min-width:220px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.scroll-my-1{scroll-margin-block:var(--spacing)}.scrollbar-none{scrollbar-width:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[56px_minmax\(0\,1fr\)_auto_66px\]{grid-template-columns:56px minmax(0,1fr) auto 66px}.grid-cols-\[64px_auto_minmax\(0\,1fr\)\]{grid-template-columns:64px auto minmax(0,1fr)}.grid-cols-\[88px_minmax\(0\,1fr\)_120px_84px_36px\]{grid-template-columns:88px minmax(0,1fr) 120px 84px 36px}.grid-cols-\[150px_minmax\(0\,1fr\)\]{grid-template-columns:150px minmax(0,1fr)}.grid-cols-\[auto_minmax\(0\,1fr\)\]{grid-template-columns:auto minmax(0,1fr)}.grid-cols-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_230px_84px\]{grid-template-columns:minmax(0,1fr) 230px 84px}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-rows-\[40px_minmax\(0\,1fr\)\]{grid-template-rows:40px minmax(0,1fr)}.grid-rows-\[minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr)}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.content-center{align-content:center}.content-end{align-content:flex-end}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-items-center{justify-items:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-\[7px\]{gap:7px}.gap-\[18px\]{gap:18px}.gap-x-1\.5{column-gap:calc(var(--spacing) * 1.5)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border\/60>:not(:last-child)){border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){:where(.divide-border\/60>:not(:last-child)){border-color:color-mix(in oklab, var(--border) 60%, transparent)}}.justify-self-center{justify-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-black\/5{border-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.border-black\/5{border-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.border-black\/10{border-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.border-black\/10{border-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}.border-border,.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab, var(--border) 50%, transparent)}}.border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab, var(--border) 60%, transparent)}}.border-border\/70{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/70{border-color:color-mix(in oklab, var(--border) 70%, transparent)}}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-primary\/40{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/40{border-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.border-transparent{border-color:#0000}.border-t-primary{border-top-color:var(--primary)}.bg-background{background-color:var(--background)}.bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab, red, red)){.bg-black\/45{background-color:color-mix(in oklab, var(--color-black) 45%, transparent)}}.bg-border{background-color:var(--border)}.bg-card,.bg-card\/80{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/80{background-color:color-mix(in oklab, var(--card) 80%, transparent)}}.bg-careful-background{background-color:var(--careful-background)}.bg-destructive{background-color:var(--destructive)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/40{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\/40{background-color:color-mix(in oklab, var(--muted-foreground) 40%, transparent)}}.bg-muted-foreground\/50{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\/50{background-color:color-mix(in oklab, var(--muted-foreground) 50%, transparent)}}.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/40{background-color:color-mix(in oklab, var(--muted) 40%, transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/60{background-color:color-mix(in oklab, var(--muted) 60%, transparent)}}.bg-muted\/70{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/70{background-color:color-mix(in oklab, var(--muted) 70%, transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-primary-foreground{background-color:var(--primary-foreground)}.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.bg-primary\/\[0\.05\]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/\[0\.05\]{background-color:color-mix(in oklab, var(--primary) 5%, transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-status-brand{background-color:var(--status-brand)}.bg-status-error{background-color:var(--status-error)}.bg-status-ok{background-color:var(--status-ok)}.bg-status-ok-soft{background-color:var(--status-ok-soft)}.bg-success-background{background-color:var(--success-background)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--warning)}.bg-warning-background{background-color:var(--warning-background)}.bg-white{background-color:var(--color-white)}.bg-\[image\:var\(--panel-accent-gradient\)\]{background-image:var(--panel-accent-gradient)}.bg-\[image\:var\(--primary-btn-grad\)\]{background-image:var(--primary-btn-grad)}.bg-\[length\:100\%_100\%\]{background-size:100% 100%}.bg-center{background-position:50%}.bg-no-repeat{background-repeat:no-repeat}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-7{padding-inline:calc(var(--spacing) * 7)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-1{padding-bottom:var(--spacing)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-\[18px\]{padding-bottom:18px}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:1.5rem;line-height:var(--tw-leading,2rem)}.text-base{font-size:1rem;line-height:var(--tw-leading,1.5rem)}.text-lg{font-size:1.125rem;line-height:var(--tw-leading,1.75rem)}.text-sm{font-size:.875rem;line-height:var(--tw-leading,1.25rem)}.text-xl{font-size:1.25rem;line-height:var(--tw-leading,1.75rem)}.text-xs{font-size:.75rem;line-height:var(--tw-leading,1rem)}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[22px\]{font-size:22px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.01em\]{--tw-tracking:-.01em;letter-spacing:-.01em}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-card-foreground{color:var(--card-foreground)}.text-careful{color:var(--careful)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-foreground{color:var(--foreground)}.text-muted-foreground,.text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/60{color:color-mix(in oklab, var(--muted-foreground) 60%, transparent)}}.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/70{color:color-mix(in oklab, var(--muted-foreground) 70%, transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground{color:var(--sidebar-foreground)}.text-status-error{color:var(--status-error)}.text-status-ok{color:var(--status-ok)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.accent-primary{accent-color:var(--primary)}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow-\[0_0_6px_2px_var\(--status-brand-ring\)\]{--tw-shadow:0 0 6px 2px var(--tw-shadow-color,var(--status-brand-ring));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_6px_2px_var\(--status-error-ring\)\]{--tw-shadow:0 0 6px 2px var(--tw-shadow-color,var(--status-error-ring));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_6px_2px_var\(--status-ok-ring\)\]{--tw-shadow:0 0 6px 2px var(--tw-shadow-color,var(--status-ok-ring));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_1px_2px_rgba\(15\,23\,42\,0\.04\)\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#0f172a0a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_1px_2px_rgba\(15\,23\,42\,0\.06\)\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#0f172a0f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_1px_3px_rgba\(0\,0\,0\,0\.22\)\]{--tw-shadow:0 1px 3px var(--tw-shadow-color,#00000038);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_18px_48px_rgba\(0\,0\,0\,0\.18\)\]{--tw-shadow:0 18px 48px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_24px_80px_rgba\(15\,23\,42\,0\.16\)\]{--tw-shadow:0 24px 80px var(--tw-shadow-color,#0f172a29);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[inset_3px_0_0_var\(--primary\)\]{--tw-shadow:inset 3px 0 0 var(--tw-shadow-color,var(--primary));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--primary-btn-shadow\)\]{--tw-shadow:var(--primary-btn-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.\!filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing) * 7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:var(--tw-leading,1.25rem)}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-card\/60:hover{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-card\/60:hover{background-color:color-mix(in oklab, var(--card) 60%, transparent)}}.hover\:bg-card\/70:hover{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-card\/70:hover{background-color:color-mix(in oklab, var(--card) 70%, transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/40:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/40:hover{background-color:color-mix(in oklab, var(--muted) 40%, transparent)}}.hover\:bg-primary\/15:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/15:hover{background-color:color-mix(in oklab, var(--primary) 15%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.hover\:bg-\[image\:var\(--primary-btn-grad-hover\)\]:hover{background-image:var(--primary-btn-grad-hover)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-ring\/20:focus{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus\:ring-ring\/20:focus{--tw-ring-color:color-mix(in oklab, var(--ring) 20%, transparent)}}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring\/20:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 20%, transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:translate-x-3\.5[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 3.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:translate-x-\[18px\][data-state=checked]{--tw-translate-x:18px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}@media not all and (width>=980px){.max-\[980px\]\:px-6{padding-inline:calc(var(--spacing) * 6)}.max-\[980px\]\:pt-2{padding-top:calc(var(--spacing) * 2)}.max-\[980px\]\:pb-6{padding-bottom:calc(var(--spacing) * 6)}}@media not all and (width>=640px){.max-\[640px\]\:block{display:block}.max-\[640px\]\:hidden{display:none}.max-\[640px\]\:h-auto{height:auto}.max-\[640px\]\:min-h-\[52px\]{min-height:52px}.max-\[640px\]\:min-h-\[64px\]{min-height:64px}.max-\[640px\]\:min-h-dvh{min-height:100dvh}.max-\[640px\]\:grid-cols-\[56px_auto_minmax\(0\,1fr\)\]{grid-template-columns:56px auto minmax(0,1fr)}.max-\[640px\]\:grid-rows-\[40px_auto\]{grid-template-rows:40px auto}.max-\[640px\]\:grid-rows-\[auto\]{grid-template-rows:auto}.max-\[640px\]\:flex-col{flex-direction:column}.max-\[640px\]\:items-stretch{align-items:stretch}.max-\[640px\]\:gap-2{gap:calc(var(--spacing) * 2)}.max-\[640px\]\:gap-2\.5{gap:calc(var(--spacing) * 2.5)}.max-\[640px\]\:overflow-visible{overflow:visible}.max-\[640px\]\:overflow-x-clip{overflow-x:clip}.max-\[640px\]\:overflow-y-visible{overflow-y:visible}.max-\[640px\]\:rounded-none{border-radius:0}.max-\[640px\]\:border-0{border-style:var(--tw-border-style);border-width:0}.max-\[640px\]\:px-3{padding-inline:calc(var(--spacing) * 3)}.max-\[640px\]\:px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.max-\[640px\]\:pb-\[18px\]{padding-bottom:18px}.max-\[640px\]\:text-base{font-size:1rem;line-height:var(--tw-leading,1.5rem)}.max-\[640px\]\:font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.max-\[640px\]\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}@media (width>=40rem){.sm\:inline{display:inline}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:divide-y-0>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px * var(--tw-divide-y-reverse));border-bottom-width:calc(0px * calc(1 - var(--tw-divide-y-reverse)))}.sm\:text-left{text-align:left}}@media (width>=48rem){.md\:grid-cols-\[minmax\(0\,5fr\)_minmax\(0\,6fr\)\]{grid-template-columns:minmax(0,5fr) minmax(0,6fr)}.md\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.md\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.md\:text-sm{font-size:.875rem;line-height:var(--tw-leading,1.25rem)}}@media (width>=64rem){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}:where(.lg\:divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.lg\:divide-border\/60>:not(:last-child)){border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){:where(.lg\:divide-border\/60>:not(:last-child)){border-color:color-mix(in oklab, var(--border) 60%, transparent)}}}@media (width>=80rem){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,1fr\)_420px\]{grid-template-columns:minmax(0,1fr) 420px}}@media not all and (width>=640px){.max-\[640px\]\:\[\&_button\]\:h-7 button{height:calc(var(--spacing) * 7)}.max-\[640px\]\:\[\&_button\]\:px-2\.5 button{padding-inline:calc(var(--spacing) * 2.5)}.max-\[640px\]\:\[\&_button\]\:text-xs button{font-size:.75rem;line-height:var(--tw-leading,1rem)}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}:root{--panel-accent-gradient:linear-gradient(135deg, #4176e60f, #4176e604 60%, transparent);--radius:.5rem;--background:#fff;--foreground:#0f1115;--card:#fff;--card-foreground:#0f1115;--popover:#fff;--popover-foreground:#0f1115;--primary:#4176e6;--primary-foreground:#fff;--primary-btn-grad:linear-gradient(180deg, #3d5ef0 0%, #2f54eb 100%);--primary-btn-grad-hover:linear-gradient(180deg, #4f7bf0 0%, #2f54eb 100%);--primary-btn-shadow:0 1px 2px #0f172a29, inset 0 1px 0 #ffffff38;--secondary:#f9fafb;--secondary-foreground:#0f1115;--muted:#f1f3f5;--muted-foreground:#81858c;--accent:#ebeef2;--accent-foreground:#0f1115;--destructive:#b42318;--destructive-foreground:#fff;--border:#00000014;--input:#0000001f;--ring:#4176e6;--success:#166534;--success-background:#e7f6ed;--status-ok:#10b981;--status-ok-soft:#34d399;--status-ok-ring:#10b9818c;--status-error:#ef4444;--status-error-ring:#ef444466;--status-brand:#4176e6;--status-brand-ring:#4176e666;--warning:#92400e;--warning-background:#fef3c7;--careful:#991b1b;--careful-background:#fee2e2;--chart-1:#4176e6;--chart-2:#81858c;--chart-3:#8a6f2a;--chart-4:#5686fe;--chart-5:#b42318;--sidebar:#f9fafb;--sidebar-foreground:#61666b;--sidebar-primary:#4176e6;--sidebar-primary-foreground:#fff;--sidebar-accent:#ebeef2;--sidebar-accent-foreground:#0f1115;--sidebar-border:#0000000d;--sidebar-ring:#4176e6;color:#171717;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;background:0 0;font-family:Inter,Noto Sans SC,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.dark{--panel-accent-gradient:linear-gradient(135deg, #6b83ff14, #6b83ff05 60%, transparent);--background:#0f1115;--foreground:#f1f4f9;--card:#16191f;--card-foreground:#f1f4f9;--popover:#16191f;--popover-foreground:#f1f4f9;--primary:#6b83ff;--primary-foreground:#fff;--primary-btn-grad:linear-gradient(180deg, #4f6ef2 0%, #3a56e0 100%);--primary-btn-grad-hover:linear-gradient(180deg, #6484f5 0%, #4f6ef2 100%);--primary-btn-shadow:0 1px 2px #00000059, inset 0 1px 0 #ffffff24;--secondary:#1e222b;--secondary-foreground:#f1f4f9;--muted:#1e222b;--muted-foreground:#a7afb7;--accent:#1b2230;--accent-foreground:#f1f4f9;--destructive:#f97066;--destructive-foreground:#fff;--border:#ffffff24;--input:#ffffff29;--ring:#6b83ff;--success:#86efac;--success-background:#123622;--status-ok:#34d399;--status-ok-soft:#10b981;--status-ok-ring:#34d39980;--status-error:#f87171;--status-error-ring:#f8717166;--status-brand:#6b83ff;--status-brand-ring:#6b83ff66;--warning:#facc15;--warning-background:#3a2f12;--careful:#fca5a5;--careful-background:#3a1515;--chart-1:#6b83ff;--chart-2:#a7afb7;--chart-3:#facc15;--chart-4:#8ea0ff;--chart-5:#f97066;--sidebar:#16191f;--sidebar-foreground:#f1f4f9;--sidebar-primary:#6b83ff;--sidebar-primary-foreground:#fff;--sidebar-accent:#1b2230;--sidebar-accent-foreground:#f1f4f9;--sidebar-border:#ffffff1f;--sidebar-ring:#6b83ff}*{box-sizing:border-box}html{font-size:16px}html,body,#root{background:0 0;width:100%;height:100dvh;overflow:hidden}body{min-width:320px;min-height:100dvh;color:var(--foreground);-webkit-user-select:none;user-select:none;background:0 0;margin:0;font-family:inherit;font-size:.875rem;line-height:1.25rem;overflow:hidden}#root{background:0 0;border-radius:1rem}#root[data-system-titlebar=true]{border-radius:0}input,textarea,[contenteditable=true]{-webkit-user-select:text;user-select:text}button{cursor:pointer}button:disabled{cursor:not-allowed}p,h1,h2{margin:0}@media (width<=640px){body{overflow:hidden auto}#root{border-radius:0;overflow:visible}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}html,body{overflow-x:hidden}.fw-shell{overflow-x:clip}.fw-layout{grid-template-rows:minmax(0,1fr);grid-template-columns:232px minmax(0,1fr)}.fw-layout[data-mode=wide-sidebar]{grid-template-rows:minmax(0,1fr);grid-template-columns:clamp(320px,28vw,560px) minmax(0,1fr)}.fw-system-titlebar{--fw-left-column:232px;background:linear-gradient(90deg, #f4f6fa 0, #f4f6fa var(--fw-left-column), #fafbfc var(--fw-left-column), #fafbfc 100%)}.fw-system-titlebar[data-mode=wide-sidebar]{--fw-left-column:clamp(320px, 28vw, 560px)}.fw-system-titlebar .fw-sidebar,.fw-system-titlebar .fw-space-sidebar{padding-top:18px}.fw-system-titlebar .fw-toolbar{background:linear-gradient(#f3f5f7bd 0%,#f7f8f6fa 54%,#fafbfc 100%);border-bottom-color:#0000000a;min-height:82px;box-shadow:inset 0 1px #ffffffb3}@media (width>=641px){.fw-layout .fw-sidebar{min-height:0;position:static;overflow-y:auto;transform:none}.fw-layout .fw-space-sidebar{min-height:0;overflow-y:auto}}@media (width<=640px){.fw-layout,.fw-layout[data-mode=wide-sidebar]{grid-template-columns:minmax(0,1fr)}.fw-layout .fw-sidebar{z-index:60;border-right:1px solid #00000014;width:min(280px,85vw);transition:transform .22s cubic-bezier(.2,.8,.2,1);position:fixed;top:0;bottom:0;left:0;transform:translate(-102%);box-shadow:0 0 40px #0f172a2e}.fw-layout[data-sidebar-open=true] .fw-sidebar{transform:translate(0)}.fw-layout .fw-space-sidebar{z-index:60;width:min(320px,88vw);transition:transform .22s cubic-bezier(.2,.8,.2,1);position:fixed;top:0;bottom:0;left:0;transform:translate(-102%)}.fw-layout[data-sidebar-open=true] .fw-space-sidebar{transform:translate(0)}.fw-system-titlebar{background:#fafbfc}}.fw-layout .fw-drawer-scrim{z-index:55;background:#0f172a73;display:none;position:fixed;inset:0}@media (width<=640px){.fw-layout .fw-drawer-scrim{opacity:0;pointer-events:none;transition:opacity .22s;display:block}.fw-layout[data-sidebar-open=true] .fw-drawer-scrim{opacity:1;pointer-events:auto}}.fw-shell{--fw-glow:47 84 235;--fw-flare:56 189 248;isolation:isolate;position:relative}.fw-shell[data-mode=classic]{--fw-glow:47 84 235;--fw-flare:250 204 21}.fw-shell:before,.fw-shell:after{z-index:50;pointer-events:none;content:"";position:absolute;inset:0}.fw-shell:before{background:radial-gradient(circle at 50% 50%, #ffffff94 0 8%, rgb(var(--fw-glow) / 18%) 18%, rgb(var(--fw-glow) / 0%) 46%), linear-gradient(90deg, rgb(var(--fw-glow) / 0%) 0%, rgb(var(--fw-glow) / 13%) 36%, #ffffffbd 50%, rgb(var(--fw-flare) / 16%) 64%, rgb(var(--fw-glow) / 0%) 100%);mix-blend-mode:screen;opacity:0;transform-origin:50%;animation:.64s cubic-bezier(.16,1,.3,1) both fw-shell-light-open;transform:scaleX(.04)}.fw-shell:after{background:linear-gradient(90deg, transparent 0%, #fff0 42%, #ffffff9e 50%, #fff0 58%, transparent 100%), repeating-linear-gradient(0deg, rgb(var(--fw-glow) / 0%) 0 26px, rgb(var(--fw-glow) / 8%) 27px 28px);mix-blend-mode:screen;opacity:0;animation:.64s cubic-bezier(.16,1,.3,1) both fw-shell-scan;transform:translate(-38%)}@keyframes fw-shell-light-open{0%{opacity:0;transform:scaleX(.04)}18%{opacity:.95}52%{opacity:.62;transform:scaleX(1)}to{opacity:0;transform:scaleX(1.08)}}@keyframes fw-shell-scan{0%{opacity:0;transform:translate(-38%)}26%{opacity:.46}78%{opacity:0;transform:translate(38%)}to{opacity:0;transform:translate(38%)}}@media (prefers-reduced-motion:reduce){.fw-shell:before,.fw-shell:after{display:none}}@keyframes fw-sweep{0%{transform:translate(-110%)}50%{transform:translate(92%)}to{transform:translate(250%)}}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/inter-400-C38fXH4l.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/inter-500-Cerq10X2.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(/assets/inter-600-LgqL8muc.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(/assets/inter-700-Yt3aPRUw.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Noto Sans SC;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/noto-sans-sc-400-68UKsrZK.woff2)format("woff2")}@font-face{font-family:Noto Sans SC;font-style:normal;font-weight:700;font-display:swap;src:url(/assets/noto-sans-sc-700-BiGzk9PQ.woff2)format("woff2")}.scrollbar-none{scrollbar-width:none;-ms-overflow-style:none}.scrollbar-none::-webkit-scrollbar{width:0;height:0;display:none}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#78808c59;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#78808c8c}*{scrollbar-width:thin;scrollbar-color:#78808c59 transparent}
|