@kitecd/cli 1.0.0
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/bin/kite.js +2 -0
- package/dist/home.js +114 -0
- package/dist/index.js +603 -0
- package/dist/local-server.js +434 -0
- package/dist/local-store.js +142 -0
- package/dist/pack.js +137 -0
- package/dist/serve.js +208 -0
- package/dist/server/index.js +30043 -0
- package/dist/upload.js +84 -0
- package/dist/web/assets/Dashboard-pjIWWLub.js +1 -0
- package/dist/web/assets/DefaultLayout-Bj8fPWym.css +1 -0
- package/dist/web/assets/DefaultLayout-DelfwTTT.js +1 -0
- package/dist/web/assets/FileExplorer-xY5ejhhN.js +1 -0
- package/dist/web/assets/LogBoard-DzW-cEqH.css +1 -0
- package/dist/web/assets/LogBoard-tT61QjOx.js +6 -0
- package/dist/web/assets/Login-B4C149oC.js +1 -0
- package/dist/web/assets/ProjectDetail-Z8cZoqr5.js +1 -0
- package/dist/web/assets/ProjectList-9rbMuJeY.js +1 -0
- package/dist/web/assets/Settings-CtCNDUXY.js +1 -0
- package/dist/web/assets/activity-DItEGOtI.js +1 -0
- package/dist/web/assets/circle-alert-Bfrn_ovD.js +1 -0
- package/dist/web/assets/clock-BPXGSCIV.js +1 -0
- package/dist/web/assets/constants-C4Zrkm2g.js +1 -0
- package/dist/web/assets/createLucideIcon-Cgv1AIRL.js +1 -0
- package/dist/web/assets/folder-open-jX-_Q7bA.js +1 -0
- package/dist/web/assets/index-C615tnMi.js +2 -0
- package/dist/web/assets/index-C9LiRc31.css +1 -0
- package/dist/web/assets/project-BFuaDcvV.js +1 -0
- package/dist/web/assets/refresh-cw-DWmqwQRn.js +1 -0
- package/dist/web/assets/save-BkiMrL9q.js +1 -0
- package/dist/web/assets/server-C33taHNn.js +1 -0
- package/dist/web/assets/settings-CrCWmNyB.js +1 -0
- package/dist/web/assets/square-terminal-C8toRwjx.js +1 -0
- package/dist/web/favicon.svg +5 -0
- package/dist/web/icons.svg +24 -0
- package/dist/web/index.html +15 -0
- package/package.json +40 -0
package/dist/upload.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
export async function uploadZip(options) {
|
|
3
|
+
const { serverUrl, token, zipFilePath, projectId, preDeploy, postDeploy } = options;
|
|
4
|
+
const fileData = await fs.promises.readFile(zipFilePath);
|
|
5
|
+
const blob = new Blob([fileData], { type: 'application/zip' });
|
|
6
|
+
const form = new FormData();
|
|
7
|
+
form.append('projectId', projectId);
|
|
8
|
+
form.append('file', blob, 'archive.zip');
|
|
9
|
+
if (preDeploy)
|
|
10
|
+
form.append('preDeploy', preDeploy);
|
|
11
|
+
if (postDeploy)
|
|
12
|
+
form.append('postDeploy', postDeploy);
|
|
13
|
+
const endpoint = `${serverUrl.replace(/\/$/, '')}/api/deploy/upload`;
|
|
14
|
+
try {
|
|
15
|
+
const response = await fetch(endpoint, {
|
|
16
|
+
method: 'POST',
|
|
17
|
+
headers: {
|
|
18
|
+
'Authorization': `Bearer ${token}`,
|
|
19
|
+
},
|
|
20
|
+
body: form,
|
|
21
|
+
});
|
|
22
|
+
if (!response.ok) {
|
|
23
|
+
const errorText = await response.text();
|
|
24
|
+
let message = errorText;
|
|
25
|
+
try {
|
|
26
|
+
const data = JSON.parse(errorText);
|
|
27
|
+
message = data.error || data.message || errorText;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
message = errorText;
|
|
31
|
+
}
|
|
32
|
+
throw new Error(`[${response.status}] ${message}`);
|
|
33
|
+
}
|
|
34
|
+
// Stream NDJSON response — print log lines in real-time
|
|
35
|
+
const reader = response.body.getReader();
|
|
36
|
+
const decoder = new TextDecoder();
|
|
37
|
+
let buffer = '';
|
|
38
|
+
let result = { success: false };
|
|
39
|
+
while (true) {
|
|
40
|
+
const { done, value } = await reader.read();
|
|
41
|
+
if (done)
|
|
42
|
+
break;
|
|
43
|
+
buffer += decoder.decode(value, { stream: true });
|
|
44
|
+
const lines = buffer.split('\n');
|
|
45
|
+
buffer = lines.pop();
|
|
46
|
+
for (const line of lines) {
|
|
47
|
+
if (!line.trim())
|
|
48
|
+
continue;
|
|
49
|
+
try {
|
|
50
|
+
const event = JSON.parse(line);
|
|
51
|
+
if (event.event === 'log') {
|
|
52
|
+
process.stdout.write(event.data + '\n');
|
|
53
|
+
}
|
|
54
|
+
else if (event.event === 'status') {
|
|
55
|
+
result = {
|
|
56
|
+
success: event.status === 'success',
|
|
57
|
+
deployId: event.deployId,
|
|
58
|
+
duration: event.duration,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Skip malformed lines
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Process remaining buffer
|
|
68
|
+
if (buffer.trim()) {
|
|
69
|
+
try {
|
|
70
|
+
const event = JSON.parse(buffer);
|
|
71
|
+
if (event.event === 'log')
|
|
72
|
+
process.stdout.write(event.data + '\n');
|
|
73
|
+
if (event.event === 'status') {
|
|
74
|
+
result = { success: event.status === 'success', deployId: event.deployId, duration: event.duration };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch { }
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new Error(`Upload failed: ${error.message}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,D as t,F as n,T as r,_ as i,c as a,d as o,et as s,f as c,h as l,l as u,nt as d,o as f,t as p,u as m,x as h}from"./project-BFuaDcvV.js";import{t as g}from"./activity-DItEGOtI.js";import{t as _}from"./circle-alert-Bfrn_ovD.js";import{t as v}from"./clock-BPXGSCIV.js";import{t as y}from"./server-C33taHNn.js";import{t as b}from"./constants-C4Zrkm2g.js";var x={class:`space-y-6 max-w-7xl mx-auto`},S={class:`flex justify-between items-center mb-8`},C={class:`text-sm text-textMuted bg-panel px-3 py-1 rounded-full border border-border`},w={class:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6`},T={class:`ml-4`},E={class:`text-sm font-medium text-textMuted`},D={class:`text-3xl font-bold text-textMain mt-1 font-mono`},O={class:`mt-8`},k={class:`bg-panel border border-border rounded-xl overflow-hidden shadow-sm`},A={class:`divide-y divide-border`},j={key:0,class:`px-6 py-8 text-center text-textMuted`},M={class:`flex items-center space-x-4`},N={class:`text-sm font-medium text-textMain`},P={class:`font-mono text-primary ml-1`},F={class:`text-xs text-textMuted mt-1`},I={class:`text-right`},L={class:`text-sm text-textMuted font-mono`},R=i({__name:`Dashboard`,setup(i){let R=p();h(()=>{R.fetchProjects(),R.fetchLogs()});let z=a(()=>R.logs.slice(0,5)),B=a(()=>[{label:`总计项目数`,value:R.projects.length,icon:y,color:`text-primary`},{label:`成功部署`,value:R.logs.filter(e=>e.status===`success`).length,icon:g,color:`text-success`},{label:`失败任务`,value:R.logs.filter(e=>e.status===`failed`).length,icon:_,color:`text-danger`},{label:`平均耗时`,value:`-`,icon:v,color:`text-blue-400`}]);return(i,a)=>(e(),c(`div`,x,[u(`div`,S,[a[0]||=u(`h1`,{class:`text-2xl font-bold text-textMain tracking-tight`},`Kite 概览`,-1),u(`div`,C,` 当前版本:v`+d(n(b)),1)]),u(`div`,w,[(e(!0),c(f,null,r(B.value,n=>(e(),c(`div`,{key:n.label,class:`bg-panel border border-border rounded-xl p-6 flex items-center shadow-sm hover:border-primary/50 transition-colors`},[u(`div`,{class:s([`w-12 h-12 rounded-lg bg-base flex items-center justify-center border border-border`,n.color])},[(e(),m(t(n.icon),{class:`w-6 h-6`}))],2),u(`div`,T,[u(`p`,E,d(n.label),1),u(`p`,D,d(n.value),1)])]))),128))]),u(`div`,O,[a[1]||=u(`h2`,{class:`text-lg font-semibold text-textMain mb-4`},`最近部署活动`,-1),u(`div`,k,[u(`ul`,A,[z.value.length===0?(e(),c(`li`,j,`暂无部署活动`)):o(``,!0),(e(!0),c(f,null,r(z.value,t=>(e(),c(`li`,{key:t.id,class:`px-6 py-4 flex items-center justify-between dark:hover:bg-white/5 hover:bg-black/5 transition-colors cursor-pointer`},[u(`div`,M,[u(`div`,{class:s([`w-2 h-2 rounded-full shadow-[0_0_8px_currentColor]`,t.status===`success`?`bg-success text-success`:t.status===`failed`?`bg-danger text-danger`:`bg-primary text-primary`])},null,2),u(`div`,null,[u(`p`,N,[l(`部署`+d(t.status===`success`?`完成`:t.status===`failed`?`失败`:`中`)+`: `,1),u(`span`,P,d(t.projectName),1)]),u(`p`,F,`触发源: `+d(t.triggerSource),1)])]),u(`div`,I,[u(`p`,L,d(new Date(t.startTime).toLocaleString()),1),u(`p`,{class:s([`text-xs mt-1`,t.status===`success`?`text-success`:`text-danger`])},d(t.duration||`-`),3)])]))),128))])])])]))}});export{R as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.fade-enter-active[data-v-a9b15df0],.fade-leave-active[data-v-a9b15df0]{transition:opacity .2s,transform .2s}.fade-enter-from[data-v-a9b15df0],.fade-leave-to[data-v-a9b15df0]{opacity:0;transform:translateY(10px)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,D as t,E as n,F as r,T as i,_ as a,et as o,f as s,g as c,h as l,k as u,l as d,nt as f,o as p,t as m,u as h}from"./project-BFuaDcvV.js";import{a as g,i as _,r as v,t as y}from"./index-C615tnMi.js";import{t as b}from"./createLucideIcon-Cgv1AIRL.js";import{t as x}from"./settings-CrCWmNyB.js";import{t as S}from"./square-terminal-C8toRwjx.js";import{t as C}from"./constants-C4Zrkm2g.js";var w=b(`folder-archive`,[[`circle`,{cx:`15`,cy:`19`,r:`2`,key:`u2pros`}],[`path`,{d:`M20.9 19.8A2 2 0 0 0 22 18V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h5.1`,key:`1jj40k`}],[`path`,{d:`M15 11v-1`,key:`cntcp`}],[`path`,{d:`M15 17v-2`,key:`1279jj`}]]),T=b(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),E=b(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),D=`data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='32'%20height='32'%20rx='8'%20fill='%2309090B'/%3e%3cpath%20d='M7%2022L16%205L25%2022L16%2018L7%2022Z'%20fill='%233B82F6'/%3e%3cpath%20d='M16%2018L12%2027L16%2024L20%2027L16%2018Z'%20fill='%2310B981'/%3e%3c/svg%3e`,O={class:`min-h-screen bg-base flex`},k={class:`w-64 border-r border-border bg-panel flex flex-col hidden md:flex`},A={class:`h-16 flex items-center px-6 border-b border-border`},j=[`src`],M={class:`ml-2 text-xs bg-primary/20 text-primary px-2 py-0.5 rounded-full`},N={class:`flex-1 py-6 px-3 space-y-1`},P={class:`font-medium text-sm`},F={class:`p-4 border-t border-border space-y-1`},I={class:`flex-1 flex flex-col h-screen overflow-hidden`},L={class:`h-16 border-b border-border bg-panel flex items-center px-4 md:hidden`},R=[`src`],z={class:`flex-1 overflow-auto p-6 md:p-8`},B=y(a({__name:`DefaultLayout`,setup(a){let y=v(),b=_(),B=m(),V=[{name:`概览`,path:`/`,icon:T},{name:`项目管理`,path:`/projects`,icon:w},{name:`部署日志`,path:`/logs`,icon:S}],H=()=>{B.logout(),b.push(`/login`)};return(a,m)=>{let _=n(`router-link`),v=n(`router-view`);return e(),s(`div`,O,[d(`aside`,k,[d(`div`,A,[d(`img`,{src:r(D),alt:`Kite Logo`,class:`w-6 h-6 mr-2`},null,8,j),m[0]||=d(`span`,{class:`text-lg font-bold text-textMain tracking-wide`},`KITE`,-1),d(`span`,M,`v`+f(r(C)),1)]),d(`nav`,N,[(e(),s(p,null,i(V,n=>c(_,{key:n.path,to:n.path,class:o([`flex items-center px-3 py-2.5 rounded-md transition-all duration-200 group`,[r(y).path===n.path||n.path!==`/`&&r(y).path.startsWith(n.path)?`bg-primary/10 text-primary shadow-[inset_2px_0_0_0_#3b82f6]`:`text-textMuted dark:hover:bg-white/5 hover:bg-black/5 hover:text-textMain`]])},{default:u(()=>[(e(),h(t(n.icon),{class:o([`w-5 h-5 mr-3`,r(y).path===n.path||n.path!==`/`&&r(y).path.startsWith(n.path)?`text-primary`:`text-textMuted group-hover:text-textMain`])},null,8,[`class`])),d(`span`,P,f(n.name),1)]),_:2},1032,[`to`,`class`])),64))]),d(`div`,F,[c(_,{to:`/settings`,class:o([`flex items-center w-full px-3 py-2 text-sm rounded-md transition-colors`,r(y).path===`/settings`?`bg-primary/10 text-primary shadow-[inset_2px_0_0_0_#3b82f6]`:`text-textMuted hover:text-textMain dark:hover:bg-white/5 hover:bg-black/5`])},{default:u(()=>[c(r(x),{class:o([`w-5 h-5 mr-3`,r(y).path===`/settings`?`text-primary`:`text-textMuted`])},null,8,[`class`]),m[1]||=l(` 系统设置 `,-1)]),_:1},8,[`class`]),d(`button`,{onClick:H,class:`flex items-center w-full px-3 py-2 text-sm text-danger hover:bg-danger/10 rounded-md transition-colors`},[c(r(E),{class:`w-5 h-5 mr-3`}),m[2]||=l(` 退出登录 `,-1)])])]),d(`main`,I,[d(`header`,L,[d(`img`,{src:r(D),alt:`Kite Logo`,class:`w-6 h-6 mr-2`},null,8,R),m[3]||=d(`span`,{class:`text-lg font-bold text-textMain`},`KITE`,-1)]),d(`div`,z,[c(v,null,{default:u(({Component:n})=>[c(g,{name:`fade`,mode:`out-in`},{default:u(()=>[(e(),h(t(n)))]),_:2},1024)]),_:1})])])])}}}),[[`__scopeId`,`data-v-a9b15df0`]]);export{B as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,D as t,E as n,F as r,M as i,T as a,_ as o,c as s,d as c,et as l,f as u,g as d,h as f,l as p,nt as m,o as h,t as g,tt as _,u as v,x as y}from"./project-BFuaDcvV.js";import{i as b,r as x}from"./index-C615tnMi.js";import{t as S}from"./createLucideIcon-Cgv1AIRL.js";import{n as ee,t as C}from"./folder-open-jX-_Q7bA.js";var w=S(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),T=S(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),E=S(`file-code`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12.5 8 15l2 2.5`,key:`1tg20x`}],[`path`,{d:`m14 12.5 2 2.5-2 2.5`,key:`yinavb`}]]),D=S(`file-cog`,[[`path`,{d:`M15 8a1 1 0 0 1-1-1V2a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8z`,key:`1ckgky`}],[`path`,{d:`M20 8v12a2 2 0 0 1-2 2h-4.182`,key:`1726p0`}],[`path`,{d:`m3.305 19.53.923-.382`,key:`ao1pio`}],[`path`,{d:`M4 10.592V4a2 2 0 0 1 2-2h8`,key:`1foop0`}],[`path`,{d:`m4.228 16.852-.924-.383`,key:`1fv9zy`}],[`path`,{d:`m5.852 15.228-.383-.923`,key:`1a9hc2`}],[`path`,{d:`m5.852 20.772-.383.924`,key:`1sh9ke`}],[`path`,{d:`m8.148 15.228.383-.923`,key:`4yu6lf`}],[`path`,{d:`m8.53 21.696-.382-.924`,key:`18b0s9`}],[`path`,{d:`m9.773 16.852.922-.383`,key:`ti6xop`}],[`path`,{d:`m9.773 19.148.922.383`,key:`rws47d`}],[`circle`,{cx:`7`,cy:`18`,r:`3`,key:`lvkj7j`}]]),O=S(`file-image`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`circle`,{cx:`10`,cy:`12`,r:`2`,key:`737tya`}],[`path`,{d:`m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22`,key:`wt3hpn`}]]),k=S(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),A=S(`file`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}]]),j=S(`folder`,[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),te=S(`house`,[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]]),M=S(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),N={key:1,class:`w-3.5 mr-1`},P={class:`truncate`},F={key:0},I=o({__name:`FileTreeNode`,props:{node:{},depth:{},selectedFile:{}},emits:[`toggle`,`select`],setup(i,{emit:o}){let s=o;function g(e,t,n){if(t)return n?C:j;let r=e.split(`.`).pop()?.toLowerCase()||``;return[`json`,`jsonc`].includes(r)?T:[`js`,`ts`,`jsx`,`tsx`,`vue`,`svelte`,`py`,`rb`,`go`,`rs`,`java`,`c`,`cpp`,`h`].includes(r)?E:[`png`,`jpg`,`jpeg`,`gif`,`svg`,`webp`,`ico`].includes(r)?O:[`yml`,`yaml`,`toml`,`ini`,`cfg`,`conf`,`env`].includes(r)?D:k}return(o,y)=>{let b=n(`FileTreeNode`,!0);return e(),u(`div`,null,[p(`button`,{class:l([`w-full flex items-center py-1.5 text-sm hover:bg-primary/5 transition-colors`,i.selectedFile===i.node.path&&!i.node.isDir?`bg-primary/10 text-primary`:`text-textMain`]),style:_({paddingLeft:i.depth*16+12+`px`}),onClick:y[0]||=e=>i.node.isDir?s(`toggle`,i.node):s(`select`,i.node)},[i.node.isDir?(e(),v(r(w),{key:0,class:l([`w-3.5 h-3.5 mr-1 shrink-0 transition-transform`,i.node.expanded?`rotate-90`:``])},null,8,[`class`])):(e(),u(`span`,N)),(e(),v(t(g(i.node.name,i.node.isDir,i.node.expanded)),{class:l([`w-4 h-4 mr-1.5 shrink-0`,i.node.isDir?`text-primary/70`:`text-textMuted`])},null,8,[`class`])),p(`span`,P,m(i.node.name),1)],6),i.node.isDir&&i.node.expanded?(e(),u(`div`,F,[i.node.loading?(e(),u(`div`,{key:0,class:`py-1 text-textMuted text-xs flex items-center`,style:_({paddingLeft:i.depth*16+28+`px`})},[d(r(M),{class:`w-3 h-3 animate-spin mr-1`}),y[3]||=f(` 加载中... `,-1)],4)):i.node.children?(e(!0),u(h,{key:1},a(i.node.children,t=>(e(),v(b,{key:t.path,node:t,depth:i.depth+1,"selected-file":i.selectedFile,onToggle:y[1]||=e=>s(`toggle`,e),onSelect:y[2]||=e=>s(`select`,e)},null,8,[`node`,`depth`,`selected-file`]))),128)):c(``,!0)])):c(``,!0)])}}}),L={class:`h-[calc(100vh-4rem)] flex flex-col`},R={class:`flex items-center space-x-4 mb-4`},z={class:`text-xl font-bold text-textMain tracking-tight`},B={class:`flex-1 flex border border-border rounded-xl overflow-hidden bg-panel min-h-0`},V={class:`w-64 border-r border-border overflow-auto bg-base/50 shrink-0`},H={key:0,class:`flex items-center justify-center py-8 text-textMuted`},U={key:1,class:`py-8 text-center text-textMuted text-sm`},W={key:2,class:`py-2`},G={class:`flex-1 flex flex-col min-w-0`},K={key:0,class:`flex items-center px-4 py-2 border-b border-border text-sm bg-base/30`},q={class:`flex-1 overflow-auto`},J={key:0,class:`h-full flex items-center justify-center text-textMuted`},Y={class:`text-center`},X={key:1,class:`h-full flex items-center justify-center text-textMuted`},Z={key:2,class:`h-full flex items-center justify-center text-textMuted`},ne={class:`text-center`},re={key:0,class:`text-xs mt-1`},ie={key:3,class:`p-4 text-sm font-mono text-textMain leading-relaxed whitespace-pre-wrap break-all overflow-x-auto`},Q=o({__name:`FileExplorer`,setup(t){let n=x(),o=b(),_=g(),S=n.params.id,C=s(()=>_.getProjectById(S)),T=i([]),E=i(``),D=i(null),O=i(!1),k=i(!0);y(async()=>{if(await _.fetchProjects(),!C.value){o.replace(`/projects`);return}await j(``)});async function j(e){k.value=!0,T.value=(await _.fetchFiles(S,e)).map(e=>({...e,expanded:!1,children:void 0,loading:!1})),k.value=!1}async function N(e){if(e.isDir){if(e.expanded){e.expanded=!1;return}e.expanded=!0,e.children||(e.loading=!0,e.children=(await _.fetchFiles(S,e.path)).map(e=>({...e,expanded:!1,children:void 0,loading:!1})),e.loading=!1)}}async function P(e){e.isDir||(E.value=e.path,O.value=!0,D.value=null,D.value=await _.fetchFileContent(S,e.path),O.value=!1)}function F(e){return e<1024?e+` B`:e<1024*1024?(e/1024).toFixed(1)+` KB`:(e/(1024*1024)).toFixed(1)+` MB`}function Q(e){return e?e.split(`/`).map((e,t,n)=>({name:e,path:n.slice(0,t+1).join(`/`)})):[]}let $=s(()=>Q(E.value));return(t,n)=>(e(),u(`div`,L,[p(`div`,R,[p(`button`,{onClick:n[0]||=e=>r(o).push(`/projects/${r(S)}`),class:`p-2 dark:hover:bg-white/10 hover:bg-black/10 rounded-full transition-colors text-textMuted hover:text-textMain`},[d(r(ee),{class:`w-5 h-5`})]),p(`div`,null,[p(`h1`,z,[f(m(C.value?.name||`项目`)+` `,1),n[1]||=p(`span`,{class:`text-textMuted font-normal`},`/ 文件浏览`,-1)])])]),p(`div`,B,[p(`aside`,V,[k.value?(e(),u(`div`,H,[d(r(M),{class:`w-5 h-5 animate-spin mr-2`}),n[2]||=p(`span`,{class:`text-sm`},`加载中...`,-1)])):T.value.length===0?(e(),u(`div`,U,` 暂无文件 `)):(e(),u(`div`,W,[(e(!0),u(h,null,a(T.value,t=>(e(),v(I,{key:t.path,node:t,depth:0,"selected-file":E.value,onToggle:N,onSelect:P},null,8,[`node`,`selected-file`]))),128))]))]),p(`div`,G,[E.value?(e(),u(`div`,K,[d(r(te),{class:`w-3.5 h-3.5 text-textMuted mr-1`}),(e(!0),u(h,null,a($.value,(t,n)=>(e(),u(`span`,{key:t.path,class:`flex items-center`},[d(r(w),{class:`w-3 h-3 text-textMuted mx-1`}),p(`span`,{class:l(n===$.value.length-1?`text-textMain font-medium`:`text-textMuted`)},m(t.name),3)]))),128))])):c(``,!0),p(`div`,q,[E.value?O.value?(e(),u(`div`,X,[d(r(M),{class:`w-6 h-6 animate-spin`})])):D.value?.type===`binary`?(e(),u(`div`,Z,[p(`div`,ne,[d(r(A),{class:`w-12 h-12 mx-auto mb-3 opacity-30`}),n[4]||=p(`p`,{class:`text-sm`},`二进制文件,无法预览`,-1),D.value.size?(e(),u(`p`,re,`大小: `+m(F(D.value.size)),1)):c(``,!0)])])):D.value?.type===`text`?(e(),u(`pre`,ie,[p(`code`,null,m(D.value.content),1)])):c(``,!0):(e(),u(`div`,J,[p(`div`,Y,[d(r(A),{class:`w-12 h-12 mx-auto mb-3 opacity-30`}),n[3]||=p(`p`,{class:`text-sm`},`选择左侧文件查看内容`,-1)])]))])])])]))}});export{Q as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.overflow-y-auto[data-v-48133efa]::-webkit-scrollbar{width:10px}.overflow-y-auto[data-v-48133efa]::-webkit-scrollbar-track{background:#09090b}.overflow-y-auto[data-v-48133efa]::-webkit-scrollbar-thumb{background:#27272a;border:2px solid #09090b;border-radius:5px}.overflow-y-auto[data-v-48133efa]::-webkit-scrollbar-thumb:hover{background:#3f3f46}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{C as e,F as t,M as n,O as r,S as i,T as a,_ as o,c as s,d as c,et as l,f as u,g as d,h as f,l as p,nt as m,o as h,t as g,u as _,x as v}from"./project-BFuaDcvV.js";import{t as y}from"./index-C615tnMi.js";import{t as b}from"./createLucideIcon-Cgv1AIRL.js";import{t as x}from"./circle-alert-Bfrn_ovD.js";import{n as S,t as C}from"./refresh-cw-DWmqwQRn.js";import{t as w}from"./clock-BPXGSCIV.js";var ee=b(`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`}]]),T=b(`terminal`,[[`path`,{d:`M12 19h8`,key:`baeox8`}],[`path`,{d:`m4 17 6-6-6-6`,key:`1yngyt`}]]),E={30:`#1e1e1e`,31:`#e06c75`,32:`#98c379`,33:`#e5c07b`,34:`#61afef`,35:`#c678dd`,36:`#56b6c2`,37:`#abb2bf`,90:`#5c6370`,91:`#e06c75`,92:`#98c379`,93:`#e5c07b`,94:`#61afef`,95:`#c678dd`,96:`#56b6c2`,97:`#ffffff`},D={40:`#1e1e1e`,41:`#e06c75`,42:`#98c379`,43:`#e5c07b`,44:`#61afef`,45:`#c678dd`,46:`#56b6c2`,47:`#abb2bf`},O=/\x1b\[([0-9;]*)m/g;function k(e){let t=``,n=0,r=0;e=e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`);let i;for(O.lastIndex=0;(i=O.exec(e))!==null;){t+=e.slice(r,i.index),r=i.index+i[0].length;let a=i[1].split(`;`).map(Number);if(a.length===0||a.length===1&&a[0]===0){for(;n>0;)t+=`</span>`,n--;continue}for(let e of a)if(e===0)for(;n>0;)t+=`</span>`,n--;else e===1?(t+=`<span style="font-weight:bold">`,n++):e===2?(t+=`<span style="opacity:0.7">`,n++):e===3?(t+=`<span style="font-style:italic">`,n++):e===4?(t+=`<span style="text-decoration:underline">`,n++):E[e]?(t+=`<span style="color:${E[e]}">`,n++):D[e]&&(t+=`<span style="background-color:${D[e]}">`,n++)}for(t+=e.slice(r);n>0;)t+=`</span>`,n--;return t}function A(e,t){let a=n([]),o=n(``),s=null,c=!1;async function l(e){u(),a.value=[],o.value=``,c=!1,s=new AbortController;try{let n=await fetch(`/api/logs/${e}/stream`,{headers:{Authorization:`Bearer ${t.value}`},signal:s.signal});if(!n.ok||!n.body)return;let r=n.body.getReader(),i=new TextDecoder,l=``;for(;;){let{done:e,value:t}=await r.read();if(e)break;l+=i.decode(t,{stream:!0});let n=l.split(`
|
|
2
|
+
|
|
3
|
+
`);l=n.pop();for(let e of n){if(!e.trim())continue;let t=`message`,n=``;for(let r of e.split(`
|
|
4
|
+
`))r.startsWith(`event: `)?t=r.slice(7):r.startsWith(`data: `)&&(n=r.slice(6));if(t===`log`){let e=JSON.parse(n);c?a.value.push(e):(a.value=e.split(`
|
|
5
|
+
`),c=!0)}else if(t===`status`){o.value=JSON.parse(n).status,u();return}}}}catch(e){e.name!==`AbortError`&&console.error(`SSE connection error:`,e)}}function u(){s&&=(s.abort(),null)}return r(e,e=>{e?l(e):u()}),i(u),{lines:a,status:o,disconnect:u}}var j={class:`h-full flex flex-col space-y-6 max-w-7xl mx-auto`},M={class:`flex justify-between items-center shrink-0`},N={class:`flex-1 flex flex-col lg:flex-row gap-6 min-h-0`},P={class:`w-full lg:w-1/3 bg-panel border border-border rounded-xl shadow-sm overflow-hidden flex flex-col h-[400px] lg:h-auto`},F={class:`flex-1 overflow-y-auto p-2 space-y-1`},I=[`onClick`],L={class:`mt-0.5`},R={class:`flex-1 min-w-0`},z={class:`flex justify-between items-center mb-1`},te={class:`font-medium text-textMain text-sm truncate`},B={class:`text-xs text-textMuted font-mono shrink-0`},V={class:`flex items-center text-xs text-textMuted space-x-3`},H={class:`flex items-center`},U={class:`flex items-center`},W={class:`flex-1 bg-[#09090b] border border-border rounded-xl shadow-sm flex flex-col overflow-hidden h-[500px] lg:h-auto font-mono text-sm`},G={class:`h-10 bg-panel border-b border-border flex items-center px-4 shrink-0`},K={class:`flex-1 text-center text-textMuted text-xs font-sans truncate`},q={class:`flex-1 p-4 overflow-y-auto bg-[#09090b] text-[#f4f4f5] leading-relaxed selection:bg-primary/30`},J={key:0,class:`space-y-1 whitespace-pre-wrap break-all`},Y={class:`w-8 text-right mr-4 text-textMuted/30 select-none group-hover:text-textMuted/50 transition-colors`},X=[`innerHTML`],Z={key:0,class:`flex px-2 -mx-2 mt-2`},Q={class:`w-8 text-right mr-4 text-textMuted/30 select-none`},ne={key:1,class:`h-full flex flex-col items-center justify-center text-textMuted font-sans`},$=y(o({__name:`LogBoard`,setup(i){let o=g();v(()=>{o.fetchLogs()});let y=s(()=>o.logs),b=n(null),E=s(()=>b.value?.status===`running`),{lines:D,status:O}=A(s(()=>E.value?b.value?.id:null),s(()=>o.adminToken));r(O,e=>{e&&o.fetchLogs().then(()=>{if(b.value){let e=o.logs.find(e=>e.id===b.value.id);e&&(b.value=e)}})});let $=s(()=>E.value&&D.value.length>0?D.value:b.value?.output?.split(`
|
|
6
|
+
`)||[]),re=e=>{b.value=e},ie=async()=>{await o.fetchLogs(),b.value&&=y.value.find(e=>e.id===b.value.id)||null};function ae(e){return k(e)}return(n,r)=>(e(),u(`div`,j,[p(`div`,M,[r[1]||=p(`div`,null,[p(`h1`,{class:`text-2xl font-bold text-textMain tracking-tight`},`部署日志`),p(`p`,{class:`text-textMuted text-sm mt-1`},`实时查看所有项目的自动化部署过程及终端输出`)],-1),p(`button`,{onClick:ie,class:`flex items-center px-4 py-2 bg-panel dark:hover:bg-white/5 hover:bg-black/5 border border-border text-textMain rounded-md transition-colors text-sm font-medium shadow-sm`},[d(t(C),{class:`w-4 h-4 mr-2`}),r[0]||=f(` 刷新 `,-1)])]),p(`div`,N,[p(`div`,P,[r[2]||=p(`div`,{class:`p-4 border-b border-border bg-base/50 shrink-0`},[p(`input`,{type:`text`,placeholder:`搜索项目或记录 ID...`,class:`w-full bg-base border border-border rounded-md px-3 py-2 text-sm text-textMain focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all`})],-1),p(`div`,F,[(e(!0),u(h,null,a(y.value,n=>(e(),u(`div`,{key:n.id,onClick:e=>re(n),class:l([`p-3 rounded-lg cursor-pointer transition-all border border-transparent flex items-start space-x-3`,b.value?.id===n.id?`bg-primary/10 border-primary/20 shadow-[inset_2px_0_0_0_#3b82f6]`:`dark:hover:bg-white/5 hover:bg-black/5`])},[p(`div`,L,[n.status===`success`?(e(),_(t(S),{key:0,class:`w-5 h-5 text-success`})):n.status===`failed`?(e(),_(t(ee),{key:1,class:`w-5 h-5 text-danger`})):(e(),_(t(C),{key:2,class:`w-5 h-5 text-primary animate-spin`}))]),p(`div`,R,[p(`div`,z,[p(`span`,te,m(n.projectName),1),p(`span`,B,m(new Date(n.startTime).toLocaleString()),1)]),p(`div`,V,[p(`span`,H,[d(t(T),{class:`w-3 h-3 mr-1`}),f(` `+m(n.triggerSource),1)]),p(`span`,U,[d(t(w),{class:`w-3 h-3 mr-1`}),f(` `+m(n.duration),1)])])])],10,I))),128))])]),p(`div`,W,[p(`div`,G,[r[3]||=p(`div`,{class:`flex space-x-2 mr-4`},[p(`div`,{class:`w-3 h-3 rounded-full bg-danger/80`}),p(`div`,{class:`w-3 h-3 rounded-full bg-yellow-500/80`}),p(`div`,{class:`w-3 h-3 rounded-full bg-success/80`})],-1),p(`div`,K,[b.value?(e(),u(h,{key:0},[f(`bash - `+m(b.value.projectName)+` (`+m(b.value.id)+`)`,1)],64)):(e(),u(h,{key:1},[f(`等待选择...`)],64))])]),p(`div`,q,[b.value?(e(),u(`div`,J,[(e(!0),u(h,null,a($.value,(t,n)=>(e(),u(`div`,{key:n,class:`flex dark:hover:bg-white/5 hover:bg-black/5 px-2 -mx-2 rounded transition-colors group`},[p(`span`,Y,m(Number(n)+1),1),p(`span`,{innerHTML:ae(t)},null,8,X)]))),128)),b.value.status===`running`?(e(),u(`div`,Z,[p(`span`,Q,m($.value.length+1),1),r[4]||=p(`span`,{class:`w-2 h-4 bg-textMain animate-pulse inline-block align-middle`},null,-1)])):c(``,!0)])):(e(),u(`div`,ne,[d(t(x),{class:`w-12 h-12 mb-4 opacity-50`}),r[5]||=p(`p`,null,`请选择左侧部署记录以查看详细终端输出`,-1)]))])])])]))}}),[[`__scopeId`,`data-v-48133efa`]]);export{$ as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,C as t,F as n,M as r,_ as i,d as a,et as o,f as s,g as c,h as l,l as u,nt as d,t as f,u as p,x as m}from"./project-BFuaDcvV.js";import{c as h,i as g,s as _}from"./index-C615tnMi.js";import{t as v}from"./createLucideIcon-Cgv1AIRL.js";var y=v(`log-in`,[[`path`,{d:`m10 17 5-5-5-5`,key:`1bsop3`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,key:`u53s6r`}]]),b=v(`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`}]]),x={class:`min-h-screen bg-base flex flex-col items-center justify-center p-4`},S={class:`w-full max-w-md`},C={class:`flex flex-col items-center justify-center mb-8`},w={class:`w-16 h-16 bg-primary/10 border border-primary/20 rounded-2xl flex items-center justify-center mb-4 shadow-[0_0_30px_rgba(59,130,246,0.15)]`},T={class:`bg-panel border border-border rounded-2xl p-8 shadow-xl`},E={key:0,class:`text-danger text-xs mt-2 flex items-center`},D=[`disabled`],O={key:1,class:`animate-spin -ml-1 mr-3 h-5 w-5 text-white`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`},k=i({__name:`Login`,setup(i){let v=g(),k=f(),A=r(``),j=r(!1),M=r(``);m(()=>{k.adminToken&&v.replace(`/`)});let N=async()=>{if(A.value){j.value=!0,M.value=``;try{await k.login(A.value)?v.replace(`/`):M.value=`Token 校验失败,请检查配置。`}catch(e){M.value=e.message||`登录异常,请稍后重试。`}finally{j.value=!1}}};return(r,i)=>(t(),s(`div`,x,[u(`div`,S,[u(`div`,C,[u(`div`,w,[c(n(b),{class:`w-8 h-8 text-primary`})]),i[1]||=u(`h1`,{class:`text-3xl font-bold text-textMain tracking-tight`},`Kite Deploy`,-1),i[2]||=u(`p`,{class:`text-textMuted text-sm mt-2`},`云原生极简部署管理面板`,-1)]),u(`div`,T,[i[5]||=u(`h2`,{class:`text-lg font-medium text-textMain mb-6`},`管理员登录`,-1),u(`form`,{onSubmit:h(N,[`prevent`]),class:`space-y-5`},[u(`div`,null,[i[3]||=u(`label`,{class:`block text-sm font-medium text-textMuted mb-2`},`Admin Token`,-1),e(u(`input`,{"onUpdate:modelValue":i[0]||=e=>A.value=e,type:`password`,placeholder:`请输入服务端生成的 ADMIN_TOKEN`,class:o([`w-full bg-base border border-border rounded-lg px-4 py-3 text-textMain font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all placeholder:text-textMuted/50 placeholder:font-sans`,{"border-danger focus:border-danger focus:ring-danger/50":M.value}])},null,2),[[_,A.value]]),M.value?(t(),s(`p`,E,d(M.value),1)):a(``,!0)]),u(`button`,{type:`submit`,disabled:!A.value||j.value,class:`w-full flex items-center justify-center px-4 py-3 bg-primary text-white rounded-lg font-medium transition-all hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed shadow-[0_0_15px_rgba(59,130,246,0.3)]`},[j.value?(t(),s(`svg`,O,[...i[4]||=[u(`circle`,{class:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,"stroke-width":`4`},null,-1),u(`path`,{class:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z`},null,-1)]])):(t(),p(n(y),{key:0,class:`w-5 h-5 mr-2`})),l(` `+d(j.value?`验证中...`:`进入控制台`),1)],8,D)],32),i[6]||=u(`div`,{class:`mt-6 text-center`},[u(`p`,{class:`text-xs text-textMuted`},[l(` Token 可以在服务端启动目录的 `),u(`code`,{class:`font-mono bg-base px-1 py-0.5 rounded border border-border`},`.env.local`),l(` 文件中找到。 `)])],-1)])])]))}});export{k as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,C as t,E as ee,F as n,M as r,T as te,_ as i,c as a,d as o,et as s,f as c,g as l,h as u,k as ne,l as d,m as re,nt as f,o as ie,t as ae,u as p,x as oe}from"./project-BFuaDcvV.js";import{i as se,r as ce,s as m}from"./index-C615tnMi.js";import{t as h}from"./createLucideIcon-Cgv1AIRL.js";import{n as le,t as ue}from"./folder-open-jX-_Q7bA.js";import{n as de,t as fe}from"./refresh-cw-DWmqwQRn.js";import{n as pe,r as me,t as he}from"./save-BkiMrL9q.js";import{t as g}from"./square-terminal-C8toRwjx.js";var ge=h(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),_e={key:0,class:`max-w-4xl mx-auto space-y-6 pb-12`},ve={class:`flex items-center space-x-4 mb-8`},ye={class:`flex items-center space-x-3`},_={class:`text-2xl font-bold text-textMain tracking-tight`},v={class:`text-sm text-textMuted mt-1 font-mono`},y={class:`grid grid-cols-1 gap-8`},b={class:`bg-panel border border-border rounded-xl shadow-sm overflow-hidden`},x={class:`px-6 py-5 border-b border-border dark:bg-white/[0.02] bg-black/[0.02]`},S={class:`text-lg font-semibold text-textMain flex items-center`},C={class:`p-6`},w={class:`flex flex-col sm:flex-row items-stretch sm:items-center space-y-4 sm:space-y-0 sm:space-x-4`},T={class:`relative flex-1`},E=[`type`,`value`],D={class:`flex items-center space-x-2`},O=[`disabled`],k={class:`bg-panel border border-border rounded-xl shadow-sm overflow-hidden`},A={class:`px-6 py-5 border-b border-border dark:bg-white/[0.02] bg-black/[0.02]`},j={class:`text-lg font-semibold text-textMain flex items-center`},M={class:`p-6 space-y-5`},N={class:`rounded-lg border border-primary/20 bg-primary/5 p-4`},P={class:`flex items-center gap-3`},be={class:`text-xs text-textMuted mt-2`},xe={class:`font-mono text-textMain`},Se={class:`rounded-lg border border-border bg-base p-4`},Ce={class:`flex items-center gap-2`},we={class:`rounded-lg border border-border bg-base p-4`},Te={class:`flex items-center gap-2 mb-4`},Ee={class:`flex-1 text-xs text-success font-mono break-all`},De={class:`text-xs text-textMuted mb-3`},Oe={class:`font-mono text-textMain bg-panel px-1 py-0.5 rounded border border-border`},ke={class:`text-xs text-success font-mono whitespace-pre-wrap overflow-x-auto bg-panel rounded-md p-3 border border-border mb-3`},Ae={class:`space-y-2 text-xs text-textMuted`},je={class:`pl-3 space-y-1`},Me={class:`text-textMuted w-24 shrink-0`},Ne={class:`text-success font-mono`},Pe={class:`grid grid-cols-1 md:grid-cols-2 gap-4`},Fe={class:`rounded-lg border border-border bg-base p-4`},Ie={class:`flex items-center gap-2`},Le={class:`flex-1 text-xs text-success font-mono break-all`},Re={class:`rounded-lg border border-border bg-base p-4 space-y-3`},ze={class:`flex items-center gap-2`},Be={class:`flex-1 text-xs text-success font-mono break-all`},Ve={class:`flex items-center gap-2`},He={class:`flex-1 text-xs text-success font-mono break-all`},Ue={class:`bg-panel border border-border rounded-xl shadow-sm overflow-hidden`},We={class:`px-6 py-5 border-b border-border dark:bg-white/[0.02] bg-black/[0.02]`},Ge={class:`text-lg font-semibold text-textMain flex items-center`},Ke={class:`p-6 space-y-6`},qe={class:`relative`},Je={class:`relative`},Ye={class:`pt-4 border-t border-border flex justify-end`},Xe={class:`bg-panel border border-danger/20 rounded-xl shadow-sm overflow-hidden`},Ze={class:`px-6 py-4`},Qe={class:`text-danger font-medium flex items-center`},F=`npm install -g @kitecd/cli`,I=i({__name:`ProjectDetail`,setup(i){let h=ce(),I=se(),L=ae(),R=h.params.id,z=a(()=>L.getProjectById(R)),B=r({destPath:``,preDeploy:``,postDeploy:``}),V=r(!1),H=r(!1),U=r(``),W=r(`http://127.0.0.1:3000`),G=r(``);oe(async()=>{W.value=window.location.origin,await L.fetchProjects(),z.value?(B.value.destPath=z.value.destPath||``,B.value.preDeploy=z.value.preDeploy||``,B.value.postDeploy=z.value.postDeploy||``,G.value=z.value.env||``):I.replace(`/projects`)});let $e=async()=>{await L.updateProject(R,B.value),alert(`配置已保存`)},K=()=>{z.value?.token&&(navigator.clipboard.writeText(z.value.token),H.value=!0,setTimeout(()=>H.value=!1,2e3))},q=(e,t)=>{navigator.clipboard.writeText(t),U.value=e,setTimeout(()=>U.value=``,2e3)},J=a(()=>G.value.trim()?` --env ${G.value.trim()}`:``),Y=a(()=>G.value.trim()?`kite.config.${G.value.trim()}.json`:`kite.config.json`),X=a(()=>`kite init --project ${R}${J.value} --out ./dist --server ${W.value} --token ${z.value?.token||`<DEPLOY_TOKEN>`}`),Z=a(()=>`kite push${J.value}`),Q=a(()=>`kite push --server ${W.value} --project ${R}${J.value} --out ./dist`),$=a(()=>`kite push --server ${W.value} --project ${R} --token ${z.value?.token||`<DEPLOY_TOKEN>`}${J.value} --out ./dist`),et=a(()=>JSON.stringify({projectId:R,outputDir:`./dist`,files:[`**/*`],postDeploy:z.value?.postDeploy||`pm2 restart your-service`},null,2)),tt=[{label:`打包所有文件`,files:[`**/*`]},{label:`只上传 dist 目录`,files:[`dist/**/*`]},{label:`指定多个目录`,files:[`dist/**/*`,`public/**/*`]},{label:`单个文件`,files:[`index.html`]},{label:`混合配置`,files:[`dist/**/*`,`server.js`,`config/*.json`]}],nt=async()=>{confirm(`重新生成 Token 将导致旧 Token 立即失效,是否继续?`)&&(await L.generateToken(R),V.value=!0)},rt=async()=>{confirm(`确定要永久删除项目 ${z.value?.name} 吗?此操作不可恢复。`)&&(await L.removeProject(R)?I.replace(`/projects`):alert(`删除失败,请稍后重试`))};return(r,i)=>{let a=ee(`router-link`);return z.value?(t(),c(`div`,_e,[d(`div`,ve,[d(`button`,{onClick:i[0]||=e=>n(I).back(),class:`p-2 dark:hover:bg-white/10 hover:bg-black/10 rounded-full transition-colors text-textMuted hover:text-textMain`},[l(n(le),{class:`w-5 h-5`})]),d(`div`,null,[d(`div`,ye,[d(`h1`,_,f(z.value.name),1),d(`span`,{class:s([`px-2.5 py-0.5 text-xs rounded-md border`,z.value.status===`success`?`bg-success/10 border-success/20 text-success`:`bg-primary/10 border-primary/20 text-primary`])},f(z.value.status),3),l(a,{to:`/projects/${n(R)}/files`,class:`inline-flex items-center px-3 py-1.5 text-xs font-medium bg-base border border-border hover:border-primary/50 hover:text-primary text-textMuted rounded-md transition-all`},{default:ne(()=>[l(n(ue),{class:`w-3.5 h-3.5 mr-1.5`}),i[11]||=u(` 查看文件 `,-1)]),_:1},8,[`to`])]),d(`p`,v,f(z.value.id),1)])]),d(`div`,y,[d(`div`,b,[d(`div`,x,[d(`h2`,S,[l(n(pe),{class:`w-5 h-5 mr-2 text-primary`}),i[12]||=u(` 鉴权 Token 管理 `,-1)]),i[13]||=d(`p`,{class:`text-sm text-textMuted mt-1`},`用于 CLI 或 Webhook 触发自动化部署的专属凭证。`,-1)]),d(`div`,C,[d(`div`,w,[d(`div`,T,[d(`input`,{type:V.value?`text`:`password`,readonly:``,value:z.value.token||`暂无 Token,请生成`,class:s([`w-full bg-base border border-border rounded-md pl-4 pr-12 py-3 text-textMain font-mono text-sm focus:outline-none focus:border-primary/50 transition-colors`,{"opacity-50 blur-[2px] select-none":!V.value&&z.value.token}])},null,10,E),z.value.token?(t(),c(`button`,{key:0,onClick:i[1]||=e=>V.value=!V.value,class:`absolute right-3 top-1/2 -translate-y-1/2 text-textMuted hover:text-textMain text-xs font-medium px-2 py-1 rounded transition-colors`},f(V.value?`隐藏`:`显示`),1)):o(``,!0)]),d(`div`,D,[d(`button`,{onClick:K,disabled:!z.value.token,class:`flex items-center justify-center px-4 py-3 bg-base border border-border hover:border-primary/50 hover:text-primary text-textMain rounded-md transition-all disabled:opacity-50 disabled:cursor-not-allowed w-full sm:w-auto`},[H.value?(t(),p(n(de),{key:0,class:`w-4 h-4 mr-2 text-success`})):(t(),p(n(me),{key:1,class:`w-4 h-4 mr-2`})),u(` `+f(H.value?`已复制`:`复制`),1)],8,O),d(`button`,{onClick:nt,class:`flex items-center justify-center px-4 py-3 bg-primary/10 text-primary border border-primary/20 hover:bg-primary hover:text-white rounded-md transition-all w-full sm:w-auto font-medium shadow-[0_0_10px_rgba(59,130,246,0.1)] hover:shadow-[0_0_15px_rgba(59,130,246,0.4)]`},[l(n(fe),{class:`w-4 h-4 mr-2`}),i[14]||=u(` 重新生成 `,-1)])])]),i[15]||=d(`div`,{class:`mt-4 p-4 rounded-md bg-primary/5 border border-primary/10 text-sm`},[d(`p`,{class:`text-textMuted leading-relaxed`},[d(`strong`,{class:`text-primary font-medium`},`CLI 用法:`),u(` 将此 Token 保存到全局配置后,`),d(`code`,{class:`bg-base px-1 py-0.5 rounded font-mono text-xs text-textMain border border-border`},`kite push`),u(` 时无需再传。 `)])],-1)])]),d(`div`,k,[d(`div`,A,[d(`h2`,j,[l(n(g),{class:`w-5 h-5 mr-2 text-primary`}),i[16]||=u(` CLI 快速部署指引 `,-1)]),i[17]||=d(`p`,{class:`text-sm text-textMuted mt-1`},`三步完成部署:安装 CLI、初始化配置、推送部署。`,-1)]),d(`div`,M,[d(`div`,N,[i[22]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`部署环境 (可选)`,-1),d(`div`,P,[e(d(`input`,{"onUpdate:modelValue":i[2]||=e=>G.value=e,type:`text`,class:`flex-1 bg-base border border-border rounded-md px-3 py-2 text-textMain font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all`,placeholder:`留空为默认环境,或输入如 test、staging、prod`},null,512),[[m,G.value]])]),d(`p`,be,[i[18]||=u(` 填写后下方所有指令将自动带上 `,-1),i[19]||=d(`code`,{class:`font-mono text-textMain`},`--env`,-1),i[20]||=u(` 参数,生成的配置文件为 `,-1),d(`code`,xe,f(Y.value),1),i[21]||=u(`。 适用于同一项目需要部署到不同环境(测试/预发/生产)的场景。 `,-1)])]),d(`div`,Se,[i[23]||=d(`p`,{class:`text-sm font-medium text-textMain mb-2`},`1. 安装 CLI`,-1),d(`div`,Ce,[d(`code`,{class:`flex-1 text-xs text-success font-mono break-all`},f(F)),d(`button`,{onClick:i[3]||=e=>q(`install`,F),class:`text-xs text-primary hover:text-textMain`},f(U.value===`install`?`已复制`:`复制`),1)])]),d(`div`,we,[i[30]||=d(`p`,{class:`text-sm font-medium text-textMain mb-2`},`2. 初始化项目配置`,-1),d(`div`,Te,[d(`code`,Ee,f(X.value),1),d(`button`,{onClick:i[4]||=e=>q(`init`,X.value),class:`text-xs text-primary hover:text-textMain`},f(U.value===`init`?`已复制`:`复制`),1)]),d(`p`,De,[i[24]||=u(`执行后会在当前目录生成 `,-1),d(`code`,Oe,f(Y.value),1),i[25]||=u(`,请确认生成的配置:`,-1)]),d(`pre`,ke,f(et.value),1),d(`div`,Ae,[i[26]||=d(`p`,null,[d(`code`,{class:`font-mono text-textMain`},`projectId`),u(` — 项目唯一标识,由服务端分配`)],-1),i[27]||=d(`p`,null,[d(`code`,{class:`font-mono text-textMain`},`outputDir`),u(` — 本地打包输出目录,默认 `),d(`code`,{class:`font-mono`},`./dist`)],-1),i[28]||=d(`p`,null,[d(`code`,{class:`font-mono text-textMain`},`files`),u(` — 要打包上传的文件 glob 模式列表,示例:`)],-1),d(`div`,je,[(t(),c(ie,null,te(tt,e=>d(`div`,{key:e.label,class:`flex items-center gap-2`},[d(`span`,Me,f(e.label),1),d(`code`,Ne,`"files": `+f(JSON.stringify(e.files)),1)])),64))]),i[29]||=d(`p`,null,[d(`code`,{class:`font-mono text-textMain`},`postDeploy`),u(` — 服务端解压后执行的命令,如重启服务`)],-1)])]),d(`div`,Pe,[d(`div`,Fe,[i[31]||=d(`p`,{class:`text-sm font-medium text-textMain mb-2`},`3. 部署 — 使用已保存的配置`,-1),d(`div`,Ie,[d(`code`,Le,f(Z.value),1),d(`button`,{onClick:i[5]||=e=>q(`push`,Z.value),class:`text-xs text-primary hover:text-textMain`},f(U.value===`push`?`已复制`:`复制`),1)]),i[32]||=d(`p`,{class:`text-xs text-textMuted mt-2`},[u(`需先通过 `),d(`code`,{class:`font-mono`},`kite config:set token`),u(` 或 `),d(`code`,{class:`font-mono`},`--token-store global`),u(` 保存过 Token。`)],-1)]),d(`div`,Re,[i[35]||=d(`p`,{class:`text-sm font-medium text-textMain mb-2`},`3. 部署 — CLI 覆盖配置`,-1),d(`div`,ze,[i[33]||=d(`span`,{class:`text-xs text-textMuted w-20 shrink-0`},`使用全局 Token`,-1),d(`code`,Be,f(Q.value),1),d(`button`,{onClick:i[6]||=e=>q(`direct-push`,Q.value),class:`text-xs text-primary hover:text-textMain`},f(U.value===`direct-push`?`已复制`:`复制`),1)]),d(`div`,Ve,[i[34]||=d(`span`,{class:`text-xs text-textMuted w-20 shrink-0`},`指定项目 Token`,-1),d(`code`,He,f($.value),1),d(`button`,{onClick:i[7]||=e=>q(`direct-push-token`,$.value),class:`text-xs text-primary hover:text-textMain`},f(U.value===`direct-push-token`?`已复制`:`复制`),1)])])]),i[36]||=re(`<div class="rounded-lg border border-primary/20 bg-primary/5 p-4 space-y-2"><p class="text-sm text-textMuted leading-relaxed"><strong class="text-primary font-medium">Token 设置方式:</strong><code class="font-mono text-xs bg-base px-1 py-0.5 rounded border border-border">kite config:set token <token></code> 按项目保存, <code class="font-mono text-xs bg-base px-1 py-0.5 rounded border border-border">kite config:set token <token> --global</code> 设置全局 fallback。 也可在 <code class="font-mono">.env.local</code> 中写入 <code class="font-mono">KITE_DEPLOY_TOKEN=<token></code>。 </p><p class="text-sm text-textMuted leading-relaxed"> 配置优先级:<strong class="text-primary">CLI 参数</strong> > <strong class="text-primary">.env.local</strong> > <strong class="text-primary">项目级 Token</strong> > <strong class="text-primary">全局 Token</strong>。未在 CLI 传入的部署脚本,会回退到本页保存的云端默认脚本。 </p></div>`,1)])]),d(`div`,Ue,[d(`div`,We,[d(`h2`,Ge,[l(n(g),{class:`w-5 h-5 mr-2 text-primary`}),i[37]||=u(` 部署脚本配置 (云端默认) `,-1)]),i[38]||=d(`p`,{class:`text-sm text-textMuted mt-1`},`配置此项目在服务端接收到文件后,默认执行的 Shell 指令。可被 CLI 参数覆盖。`,-1)]),d(`div`,Ke,[d(`div`,null,[i[39]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`部署目录 (Destination Path)`,-1),e(d(`input`,{"onUpdate:modelValue":i[8]||=e=>B.value.destPath=e,type:`text`,class:`w-full bg-base border border-border rounded-md px-4 py-3 text-textMain font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all`,placeholder:`e.g. /var/www/my-project`},null,512),[[m,B.value.destPath]]),i[40]||=d(`p`,{class:`text-xs text-textMuted mt-2`},`在服务端解压和部署该项目文件的绝对路径。`,-1)]),d(`div`,null,[i[42]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`前置脚本 (Pre-Deploy)`,-1),d(`div`,qe,[i[41]||=d(`div`,{class:`absolute left-0 top-0 bottom-0 w-8 bg-base border-r border-border rounded-l-md flex flex-col items-center py-3 text-textMuted font-mono text-xs select-none`},[d(`span`,null,`1`)],-1),e(d(`textarea`,{"onUpdate:modelValue":i[9]||=e=>B.value.preDeploy=e,class:`w-full bg-base border border-border rounded-md pl-11 pr-4 py-3 text-success font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all min-h-[100px] resize-y`,placeholder:`# e.g. npm install && npm run build`,spellcheck:`false`},null,512),[[m,B.value.preDeploy]])]),i[43]||=d(`p`,{class:`text-xs text-textMuted mt-2`},`在打包上传之前,于本地执行的构建命令(通常配置在本地 CLI,此处作为备用参考)。`,-1)]),d(`div`,null,[i[45]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`后置脚本 (Post-Deploy)`,-1),d(`div`,Je,[i[44]||=d(`div`,{class:`absolute left-0 top-0 bottom-0 w-8 bg-base border-r border-border rounded-l-md flex flex-col items-center py-3 text-textMuted font-mono text-xs select-none`},[d(`span`,null,`1`)],-1),e(d(`textarea`,{"onUpdate:modelValue":i[10]||=e=>B.value.postDeploy=e,class:`w-full bg-base border border-border rounded-md pl-11 pr-4 py-3 text-success font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all min-h-[100px] resize-y`,placeholder:`# e.g. pm2 restart api-server`,spellcheck:`false`},null,512),[[m,B.value.postDeploy]])]),i[46]||=d(`p`,{class:`text-xs text-textMuted mt-2`},`服务端解压文件后,在目标目录执行的重启或服务加载命令。`,-1)]),d(`div`,Ye,[d(`button`,{onClick:$e,class:`flex items-center px-6 py-2.5 bg-primary hover:bg-primary/90 text-white rounded-md transition-all font-medium shadow-[0_0_15px_rgba(59,130,246,0.3)]`},[l(n(he),{class:`w-4 h-4 mr-2`}),i[47]||=u(` 保存配置 `,-1)])])])]),d(`div`,Xe,[d(`div`,Ze,[d(`h3`,Qe,[l(n(ge),{class:`w-4 h-4 mr-2`}),i[48]||=u(` 危险操作区 `,-1)]),d(`div`,{class:`mt-4 flex items-center justify-between`},[i[49]||=d(`p`,{class:`text-sm text-textMuted`},`删除该项目将清空所有配置与日志,且不可恢复。`,-1),d(`button`,{onClick:rt,class:`px-4 py-2 bg-danger/10 hover:bg-danger text-danger hover:text-white border border-danger/20 hover:border-danger rounded-md transition-colors text-sm font-medium`},` 删除项目 `)])])])])])):o(``,!0)}}});export{I as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,C as t,F as n,M as r,T as i,_ as a,d as o,et as s,f as c,g as l,h as u,l as d,nt as f,o as p,t as m,x as h}from"./project-BFuaDcvV.js";import{c as g,i as _,s as v}from"./index-C615tnMi.js";import{t as y}from"./createLucideIcon-Cgv1AIRL.js";import{t as b}from"./clock-BPXGSCIV.js";import{t as x}from"./server-C33taHNn.js";var S=y(`ellipsis-vertical`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}]]),C=y(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),w={class:`max-w-7xl mx-auto space-y-6`},T={class:`flex justify-between items-center mb-8`},E={class:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6`},D=[`onClick`],O={class:`flex justify-between items-start mb-4`},k={class:`flex items-center space-x-3`},A={class:`p-2 rounded-lg bg-base border border-border group-hover:border-primary/30 transition-colors`},j={class:`font-semibold text-textMain text-base`},M={class:`text-xs text-textMuted font-mono mt-0.5`},N={class:`text-sm text-textMuted mb-5 line-clamp-2 min-h-[40px]`},P={class:`flex items-center justify-between border-t border-border pt-4 text-xs text-textMuted`},F={class:`flex items-center`},I={class:`flex items-center space-x-2`},L={key:0,class:`fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm`},R={class:`bg-panel border border-border rounded-xl w-full max-w-md p-6 shadow-2xl transform transition-all`},z={class:`space-y-4`},B={class:`mt-8 flex justify-end space-x-3`},V=[`disabled`],H=a({__name:`ProjectList`,setup(a){let y=m(),H=_();h(()=>{y.fetchProjects()});let U=r(!1),W=r({name:``,description:``,destPath:``,env:``}),G=async()=>{!W.value.name||!W.value.destPath||(await y.addProject(W.value)?(U.value=!1,W.value={name:``,description:``,destPath:``,env:``}):alert(`创建失败,请稍后重试`))},K=e=>{H.push(`/projects/${e}`)};return(r,a)=>(t(),c(`div`,w,[d(`div`,T,[a[8]||=d(`div`,null,[d(`h1`,{class:`text-2xl font-bold text-textMain tracking-tight`},`项目管理`),d(`p`,{class:`text-textMuted text-sm mt-1`},`管理所有可部署的应用服务与脚本配置`)],-1),d(`button`,{onClick:a[0]||=e=>U.value=!0,class:`flex items-center px-4 py-2 bg-primary hover:bg-primary/90 text-white rounded-md shadow-[0_0_15px_rgba(59,130,246,0.3)] transition-all font-medium text-sm`},[l(n(C),{class:`w-4 h-4 mr-2`}),a[7]||=u(` 新建项目 `,-1)])]),d(`div`,E,[(t(!0),c(p,null,i(n(y).projects,e=>(t(),c(`div`,{key:e.id,class:`group bg-panel border border-border rounded-xl p-5 hover:border-primary/50 transition-all shadow-sm cursor-pointer relative overflow-hidden`,onClick:t=>K(e.id)},[d(`div`,{class:s([`absolute top-0 left-0 w-1 h-full`,e.status===`success`?`bg-success`:e.status===`failed`?`bg-danger`:`bg-primary`])},null,2),d(`div`,O,[d(`div`,k,[d(`div`,A,[l(n(x),{class:`w-5 h-5 text-textMain group-hover:text-primary transition-colors`})]),d(`div`,null,[d(`h3`,j,f(e.name),1),d(`p`,M,f(e.id),1)])]),d(`button`,{class:`p-1 dark:hover:bg-white/10 hover:bg-black/10 rounded-md transition-colors text-textMuted hover:text-textMain`,onClick:a[1]||=g(()=>{},[`stop`])},[l(n(S),{class:`w-4 h-4`})])]),d(`p`,N,f(e.description||`暂无描述`),1),d(`div`,P,[d(`div`,F,[l(n(b),{class:`w-3.5 h-3.5 mr-1.5`}),d(`span`,null,f(new Date(e.updatedAt).toLocaleDateString()),1)]),d(`div`,I,[d(`span`,{class:s([`flex items-center`,e.status===`success`?`text-success`:e.status===`failed`?`text-danger`:`text-primary`])},[d(`span`,{class:s([`w-2 h-2 rounded-full mr-1.5`,e.status===`success`?`bg-success shadow-[0_0_8px_#10b981]`:e.status===`failed`?`bg-danger`:`bg-primary`])},null,2),u(` `+f(e.status===`success`?`正常`:e.status===`failed`?`异常`:`空闲`),1)],2)])])],8,D))),128))]),U.value?(t(),c(`div`,L,[d(`div`,R,[a[14]||=d(`h2`,{class:`text-xl font-bold text-textMain mb-6`},`新建部署项目`,-1),d(`div`,z,[d(`div`,null,[a[9]||=d(`label`,{class:`block text-sm font-medium text-textMuted mb-1.5`},`项目名称`,-1),e(d(`input`,{"onUpdate:modelValue":a[2]||=e=>W.value.name=e,type:`text`,class:`w-full bg-base border border-border rounded-md px-3 py-2 text-textMain focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all text-sm`,placeholder:`e.g. Kite Web Frontend`},null,512),[[v,W.value.name]])]),d(`div`,null,[a[10]||=d(`label`,{class:`block text-sm font-medium text-textMuted mb-1.5`},`部署目录绝对路径 (Destination Path)`,-1),e(d(`input`,{"onUpdate:modelValue":a[3]||=e=>W.value.destPath=e,type:`text`,class:`w-full bg-base border border-border rounded-md px-3 py-2 text-textMain font-mono focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all text-sm`,placeholder:`e.g. /var/www/my-project`},null,512),[[v,W.value.destPath]])]),d(`div`,null,[a[11]||=d(`label`,{class:`block text-sm font-medium text-textMuted mb-1.5`},`部署环境标识 (可选)`,-1),e(d(`input`,{"onUpdate:modelValue":a[4]||=e=>W.value.env=e,type:`text`,class:`w-full bg-base border border-border rounded-md px-3 py-2 text-textMain font-mono focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all text-sm`,placeholder:`e.g. test, staging, prod`},null,512),[[v,W.value.env]]),a[12]||=d(`p`,{class:`text-xs text-textMuted mt-1.5`},[u(` 用于区分同一项目的不同部署环境。设置后,CLI 会生成 `),d(`code`,{class:`font-mono text-textMain`},"kite.config.{`{env}`}.json"),u(` 配置文件, `),d(`code`,{class:`font-mono text-textMain`},"kite push --env {`{name}`}"),u(` 可精准推送到对应环境。 `),d(`span`,{class:`text-primary/80`},`常见场景:同一项目部署到测试/预发/生产等不同机器。`)],-1)]),d(`div`,null,[a[13]||=d(`label`,{class:`block text-sm font-medium text-textMuted mb-1.5`},`描述 (可选)`,-1),e(d(`textarea`,{"onUpdate:modelValue":a[5]||=e=>W.value.description=e,class:`w-full bg-base border border-border rounded-md px-3 py-2 text-textMain focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all text-sm h-24 resize-none`,placeholder:`简要描述项目的用途...`},null,512),[[v,W.value.description]])])]),d(`div`,B,[d(`button`,{onClick:a[6]||=e=>U.value=!1,class:`px-4 py-2 text-sm font-medium text-textMuted hover:text-textMain dark:hover:bg-white/5 hover:bg-black/5 rounded-md transition-colors`},` 取消 `),d(`button`,{onClick:G,disabled:!W.value.name||!W.value.destPath,class:`px-4 py-2 text-sm font-medium bg-primary text-white rounded-md hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors`},` 确认创建 `,8,V)])])])):o(``,!0)]))}});export{H as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,C as t,D as ee,F as n,M as r,T as i,_ as a,d as o,et as s,f as c,g as l,h as u,l as d,nt as f,o as p,t as te,u as m,x as ne}from"./project-BFuaDcvV.js";import{n as re,o as h,s as g}from"./index-C615tnMi.js";import{t as _}from"./createLucideIcon-Cgv1AIRL.js";import{t as ie}from"./activity-DItEGOtI.js";import{n as v,t as ae}from"./refresh-cw-DWmqwQRn.js";import{n as y,r as oe,t as se}from"./save-BkiMrL9q.js";import{t as ce}from"./server-C33taHNn.js";import{t as le}from"./settings-CrCWmNyB.js";var ue=_(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),de=_(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),b=_(`hard-drive`,[[`path`,{d:`M10 16h.01`,key:`1bzywj`}],[`path`,{d:`M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`18tbho`}],[`path`,{d:`M21.946 12.013H2.054`,key:`zqlbp7`}],[`path`,{d:`M6 16h.01`,key:`1pmjb7`}]]),x=_(`monitor`,[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]),S=_(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),C=_(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),w=_(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),T=_(`webhook`,[[`path`,{d:`M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2`,key:`q3hayz`}],[`path`,{d:`m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06`,key:`1go1hn`}],[`path`,{d:`m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8`,key:`qlwsc0`}]]),E={class:`max-w-4xl mx-auto space-y-6 pb-12`},D={class:`flex items-center space-x-3 mb-8`},O={class:`bg-panel border border-border rounded-xl shadow-sm overflow-hidden`},k={class:`px-6 py-5 border-b border-border dark:bg-white/[0.02] bg-black/[0.02]`},A={class:`text-lg font-semibold text-textMain flex items-center`},j={class:`p-6`},M={key:0,class:`grid grid-cols-2 md:grid-cols-4 gap-4`},N={class:`bg-base border border-border rounded-lg p-4 text-center`},P={class:`text-2xl font-bold text-primary`},F={class:`bg-base border border-border rounded-lg p-4 text-center`},I={class:`text-2xl font-bold text-textMain`},L={class:`bg-base border border-border rounded-lg p-4 text-center`},R={class:`text-2xl font-bold text-textMain`},z={class:`bg-base border border-border rounded-lg p-4 text-center`},B={class:`text-2xl font-bold text-textMain`},V={class:`bg-base border border-border rounded-lg p-4 text-center`},H={class:`text-2xl font-bold text-success`},fe={class:`bg-base border border-border rounded-lg p-4 text-center`},pe={class:`text-2xl font-bold text-danger`},me={class:`bg-base border border-border rounded-lg p-4 text-center col-span-2`},he={class:`flex items-center justify-center space-x-2`},ge={class:`text-2xl font-bold text-textMain`},_e={key:1,class:`text-textMuted text-sm py-4 text-center`},ve={class:`bg-panel border border-border rounded-xl shadow-sm overflow-hidden`},ye={class:`px-6 py-5 border-b border-border dark:bg-white/[0.02] bg-black/[0.02]`},be={class:`text-lg font-semibold text-textMain flex items-center`},xe={class:`p-6`},U={class:`grid grid-cols-1 sm:grid-cols-3 gap-3`},Se=[`onClick`],Ce={class:`text-xs text-textMuted mt-1`},we={class:`bg-panel border border-border rounded-xl shadow-sm overflow-hidden`},Te={class:`px-6 py-5 border-b border-border dark:bg-white/[0.02] bg-black/[0.02]`},Ee={class:`text-lg font-semibold text-textMain flex items-center`},De={class:`p-6 space-y-4`},Oe={class:`pt-2 flex justify-end`},ke={class:`bg-panel border border-border rounded-xl shadow-sm overflow-hidden`},Ae={class:`px-6 py-5 border-b border-border dark:bg-white/[0.02] bg-black/[0.02]`},je={class:`text-lg font-semibold text-textMain flex items-center`},Me={class:`p-6 space-y-4`},Ne={class:`flex gap-2`},Pe={class:`relative flex-1`},Fe=[`type`],Ie=[`disabled`],Le={class:`bg-panel border border-border rounded-xl shadow-sm overflow-hidden`},Re={class:`px-6 py-5 border-b border-border dark:bg-white/[0.02] bg-black/[0.02]`},ze={class:`text-lg font-semibold text-textMain flex items-center`},Be={class:`p-6 space-y-4`},Ve={class:`flex flex-wrap gap-3`},He=[`onClick`],Ue={class:`flex items-center justify-end space-x-4 pt-4`},We=[`disabled`],W=a({__name:`Settings`,setup(a){let _=te(),W=re(),Ge=[{value:`light`,label:`浅色模式`,icon:C,desc:`始终使用浅色主题`},{value:`dark`,label:`深色模式`,icon:S,desc:`始终使用深色主题`},{value:`system`,label:`跟随系统`,icon:x,desc:`自动匹配系统外观设置`}],G=r(null),K=r({webhook_url:``,webhook_events:[],default_deploy_path:``,max_upload_size:`50`,global_deploy_token:``}),q=r(!1),J=r(!1),Ke=()=>{K.value.global_deploy_token&&(navigator.clipboard.writeText(K.value.global_deploy_token),J.value=!0,setTimeout(()=>J.value=!1,2e3))},Y=r({oldToken:``,newToken:``,confirmPassword:``}),X=r(``),Z=r(`success`),Q=r(!1),$=r(``),qe=[{key:`deploy_success`,label:`部署成功`},{key:`deploy_failure`,label:`部署失败`}];ne(async()=>{let[e,t]=await Promise.all([_.fetchSettings(),_.fetchSystemStatus()]);G.value=t,e&&(K.value.webhook_url=e.webhook_url||``,K.value.webhook_events=e.webhook_events?e.webhook_events.split(`,`):[],K.value.default_deploy_path=e.default_deploy_path||``,K.value.max_upload_size=e.max_upload_size||`50`,K.value.global_deploy_token=e.global_deploy_token||``)});let Je=async()=>{Q.value=!0,$.value=``,$.value=await _.updateSettings({webhook_url:K.value.webhook_url,webhook_events:K.value.webhook_events.join(`,`),default_deploy_path:K.value.default_deploy_path,max_upload_size:K.value.max_upload_size,global_deploy_token:K.value.global_deploy_token})?`保存成功`:`保存失败`,Q.value=!1,setTimeout(()=>$.value=``,3e3)},Ye=async()=>{if(X.value=``,Y.value.newToken!==Y.value.confirmPassword){X.value=`两次输入的新 Token 不一致`,Z.value=`error`;return}if(Y.value.newToken.length<8){X.value=`新 Token 长度不能少于 8 位`,Z.value=`error`;return}let e=await _.changeAdminToken(Y.value.oldToken,Y.value.newToken);e.success?(X.value=e.message||`Token 已更新`,Z.value=`success`,Y.value={oldToken:``,newToken:``,confirmPassword:``}):(X.value=e.error||`修改失败`,Z.value=`error`)},Xe=()=>{let e=crypto.randomUUID().replace(/-/g,``);K.value.global_deploy_token=`kt_${e}`},Ze=e=>{let t=K.value.webhook_events.indexOf(e);t>=0?K.value.webhook_events.splice(t,1):K.value.webhook_events.push(e)};return(r,a)=>(t(),c(`div`,E,[d(`div`,D,[l(n(le),{class:`w-7 h-7 text-primary`}),a[8]||=d(`h1`,{class:`text-2xl font-bold text-textMain tracking-tight`},`系统设置`,-1)]),d(`div`,O,[d(`div`,k,[d(`h2`,A,[l(n(ce),{class:`w-5 h-5 mr-2 text-primary`}),a[9]||=u(` 系统信息 `,-1)])]),d(`div`,j,[G.value?(t(),c(`div`,M,[d(`div`,N,[d(`p`,P,f(G.value.version),1),a[10]||=d(`p`,{class:`text-xs text-textMuted mt-1`},`版本号`,-1)]),d(`div`,F,[d(`p`,I,f(G.value.uptime),1),a[11]||=d(`p`,{class:`text-xs text-textMuted mt-1`},`运行时间`,-1)]),d(`div`,L,[d(`p`,R,f(G.value.projectCount),1),a[12]||=d(`p`,{class:`text-xs text-textMuted mt-1`},`项目总数`,-1)]),d(`div`,z,[d(`p`,B,f(G.value.deploymentCount),1),a[13]||=d(`p`,{class:`text-xs text-textMuted mt-1`},`部署总次数`,-1)]),d(`div`,V,[d(`p`,H,f(G.value.successCount),1),a[14]||=d(`p`,{class:`text-xs text-textMuted mt-1`},`成功部署`,-1)]),d(`div`,fe,[d(`p`,pe,f(G.value.failedCount),1),a[15]||=d(`p`,{class:`text-xs text-textMuted mt-1`},`失败次数`,-1)]),d(`div`,me,[d(`div`,he,[l(n(ie),{class:`w-5 h-5 text-primary`}),d(`p`,ge,f(G.value.successRate)+`%`,1)]),a[16]||=d(`p`,{class:`text-xs text-textMuted mt-1`},`部署成功率`,-1)])])):(t(),c(`div`,_e,`加载中...`))])]),d(`div`,ve,[d(`div`,ye,[d(`h2`,be,[l(n(C),{class:`w-5 h-5 mr-2 text-primary`}),a[17]||=u(` 外观设置 `,-1)]),a[18]||=d(`p`,{class:`text-sm text-textMuted mt-1`},`选择界面的色彩方案,或跟随系统自动切换。`,-1)]),d(`div`,xe,[d(`div`,U,[(t(),c(p,null,i(Ge,e=>d(`button`,{key:e.value,onClick:t=>n(W).setMode(e.value),class:s([`relative flex flex-col items-center p-4 rounded-lg border-2 transition-all`,n(W).mode===e.value?`border-primary bg-primary/5 shadow-[0_0_12px_rgba(59,130,246,0.15)]`:`border-border hover:border-textMuted/50 bg-base`])},[(t(),m(ee(e.icon),{class:s([`w-6 h-6 mb-2`,n(W).mode===e.value?`text-primary`:`text-textMuted`])},null,8,[`class`])),d(`span`,{class:s([`text-sm font-medium`,n(W).mode===e.value?`text-primary`:`text-textMain`])},f(e.label),3),d(`span`,Ce,f(e.desc),1),n(W).mode===e.value?(t(),m(n(v),{key:0,class:`absolute top-2 right-2 w-4 h-4 text-primary`})):o(``,!0)],10,Se)),64))])])]),d(`div`,we,[d(`div`,Te,[d(`h2`,Ee,[l(n(y),{class:`w-5 h-5 mr-2 text-primary`}),a[19]||=u(` 管理员 Token `,-1)]),a[20]||=d(`p`,{class:`text-sm text-textMuted mt-1`},`修改管理后台的登录凭证。修改后需使用新 Token 重新登录。`,-1)]),d(`div`,De,[d(`div`,null,[a[21]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`当前 Token`,-1),e(d(`input`,{"onUpdate:modelValue":a[0]||=e=>Y.value.oldToken=e,type:`password`,class:`w-full bg-base border border-border rounded-md px-4 py-3 text-textMain font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all`,placeholder:`请输入当前 Token`},null,512),[[g,Y.value.oldToken]])]),d(`div`,null,[a[22]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`新 Token`,-1),e(d(`input`,{"onUpdate:modelValue":a[1]||=e=>Y.value.newToken=e,type:`password`,class:`w-full bg-base border border-border rounded-md px-4 py-3 text-textMain font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all`,placeholder:`请输入新 Token(至少 8 位)`},null,512),[[g,Y.value.newToken]])]),d(`div`,null,[a[23]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`确认新 Token`,-1),e(d(`input`,{"onUpdate:modelValue":a[2]||=e=>Y.value.confirmPassword=e,type:`password`,class:`w-full bg-base border border-border rounded-md px-4 py-3 text-textMain font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all`,placeholder:`请再次输入新 Token`},null,512),[[g,Y.value.confirmPassword]])]),X.value?(t(),c(`div`,{key:0,class:s([`flex items-center space-x-2 text-sm`,Z.value===`success`?`text-success`:`text-danger`])},[Z.value===`success`?(t(),m(n(v),{key:0,class:`w-4 h-4`})):(t(),m(n(w),{key:1,class:`w-4 h-4`})),d(`span`,null,f(X.value),1)],2)):o(``,!0),d(`div`,Oe,[d(`button`,{onClick:Ye,class:`flex items-center px-6 py-2.5 bg-primary hover:bg-primary/90 text-white rounded-md transition-all font-medium shadow-[0_0_15px_rgba(59,130,246,0.3)]`},[l(n(y),{class:`w-4 h-4 mr-2`}),a[24]||=u(` 修改 Token `,-1)])])])]),d(`div`,ke,[d(`div`,Ae,[d(`h2`,je,[l(n(b),{class:`w-5 h-5 mr-2 text-primary`}),a[25]||=u(` 全局部署配置 `,-1)]),a[26]||=d(`p`,{class:`text-sm text-textMuted mt-1`},`设置全局默认的部署参数,可在项目级别覆盖。`,-1)]),d(`div`,Me,[d(`div`,null,[a[27]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`全局部署 Token`,-1),d(`div`,Ne,[d(`div`,Pe,[e(d(`input`,{"onUpdate:modelValue":a[3]||=e=>K.value.global_deploy_token=e,type:q.value?`text`:`password`,class:`w-full bg-base border border-border rounded-md px-4 py-3 pr-10 text-textMain font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all`,placeholder:`留空则不启用全局 Token`},null,8,Fe),[[h,K.value.global_deploy_token]]),d(`button`,{onClick:a[4]||=e=>q.value=!q.value,class:`absolute right-3 top-1/2 -translate-y-1/2 text-textMuted hover:text-textMain transition-colors`,type:`button`},[q.value?(t(),m(n(ue),{key:0,class:`w-4 h-4`})):(t(),m(n(de),{key:1,class:`w-4 h-4`}))])]),d(`button`,{onClick:Xe,class:`flex items-center px-3 bg-base border border-border rounded-md text-textMuted hover:text-textMain hover:border-primary/50 transition-all`,title:`生成随机 Token`,type:`button`},[l(n(ae),{class:`w-4 h-4`})]),d(`button`,{onClick:Ke,disabled:!K.value.global_deploy_token,class:`flex items-center px-3 bg-base border border-border rounded-md text-textMuted hover:text-textMain hover:border-primary/50 transition-all disabled:opacity-50 disabled:cursor-not-allowed`,title:`复制 Token`,type:`button`},[J.value?(t(),m(n(v),{key:0,class:`w-4 h-4 text-success`})):(t(),m(n(oe),{key:1,class:`w-4 h-4`}))],8,Ie)]),a[28]||=d(`p`,{class:`text-xs text-textMuted mt-2`},`所有项目共用的部署 Token。CLI 使用全局 Token 时,配合 --project 指定项目即可部署,无需为每个项目单独配置 Token。留空则禁用。`,-1)]),d(`div`,null,[a[29]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`默认部署路径`,-1),e(d(`input`,{"onUpdate:modelValue":a[5]||=e=>K.value.default_deploy_path=e,type:`text`,class:`w-full bg-base border border-border rounded-md px-4 py-3 text-textMain font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all`,placeholder:`e.g. .deployments`},null,512),[[g,K.value.default_deploy_path]]),a[30]||=d(`p`,{class:`text-xs text-textMuted mt-2`},`新项目创建时的默认部署目录(相对于工作目录)。`,-1)]),d(`div`,null,[a[31]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`最大上传大小 (MB)`,-1),e(d(`input`,{"onUpdate:modelValue":a[6]||=e=>K.value.max_upload_size=e,type:`number`,min:`1`,max:`500`,class:`w-full bg-base border border-border rounded-md px-4 py-3 text-textMain font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all`,placeholder:`50`},null,512),[[g,K.value.max_upload_size]]),a[32]||=d(`p`,{class:`text-xs text-textMuted mt-2`},`单次部署上传的 ZIP 文件大小上限。`,-1)])])]),d(`div`,Le,[d(`div`,Re,[d(`h2`,ze,[l(n(T),{class:`w-5 h-5 mr-2 text-primary`}),a[33]||=u(` Webhook 通知 `,-1)]),a[34]||=d(`p`,{class:`text-sm text-textMuted mt-1`},`部署事件发生时,向指定 URL 发送 POST 通知。`,-1)]),d(`div`,Be,[d(`div`,null,[a[35]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-2`},`Webhook URL`,-1),e(d(`input`,{"onUpdate:modelValue":a[7]||=e=>K.value.webhook_url=e,type:`url`,class:`w-full bg-base border border-border rounded-md px-4 py-3 text-textMain font-mono text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary/50 transition-all`,placeholder:`https://example.com/webhook`},null,512),[[g,K.value.webhook_url]]),a[36]||=d(`p`,{class:`text-xs text-textMuted mt-2`},`留空则不发送通知。支持飞书、钉钉、Slack 等标准 Webhook。`,-1)]),d(`div`,null,[a[37]||=d(`label`,{class:`block text-sm font-medium text-textMain mb-3`},`触发事件`,-1),d(`div`,Ve,[(t(),c(p,null,i(qe,e=>d(`button`,{key:e.key,onClick:t=>Ze(e.key),class:s([`flex items-center px-4 py-2 rounded-md text-sm font-medium border transition-all`,K.value.webhook_events.includes(e.key)?`bg-primary/10 border-primary/30 text-primary`:`bg-base border-border text-textMuted hover:border-primary/30 hover:text-textMain`])},[K.value.webhook_events.includes(e.key)?(t(),m(n(v),{key:0,class:`w-4 h-4 mr-2`})):o(``,!0),u(` `+f(e.label),1)],10,He)),64))])])])]),d(`div`,Ue,[$.value?(t(),c(`span`,{key:0,class:s([`text-sm`,$.value===`保存成功`?`text-success`:`text-danger`])},f($.value),3)):o(``,!0),d(`button`,{onClick:Je,disabled:Q.value,class:`flex items-center px-6 py-2.5 bg-primary hover:bg-primary/90 text-white rounded-md transition-all font-medium shadow-[0_0_15px_rgba(59,130,246,0.3)] disabled:opacity-50`},[l(n(se),{class:`w-4 h-4 mr-2`}),u(` `+f(Q.value?`保存中...`:`保存配置`),1)],8,We)])]))}});export{W as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-Cgv1AIRL.js";var t=e(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-Cgv1AIRL.js";var t=e(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-Cgv1AIRL.js";var t=e(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`0.0.0`;export{e as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{v as e}from"./project-BFuaDcvV.js";var t=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},n=e=>e===``,r=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),i=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),a=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),o=e=>{let t=a(e);return t.charAt(0).toUpperCase()+t.slice(1)},s={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`},c=({name:a,iconNode:c,absoluteStrokeWidth:l,"absolute-stroke-width":u,strokeWidth:d,"stroke-width":f,size:p=s.width,color:m=s.stroke,...h},{slots:g})=>e(`svg`,{...s,...h,width:p,height:p,stroke:m,"stroke-width":n(l)||n(u)||l===!0||u===!0?Number(d||f||s[`stroke-width`])*24/Number(p):d||f||s[`stroke-width`],class:r(`lucide`,h.class,...a?[`lucide-${i(o(a))}-icon`,`lucide-${i(a)}`]:[`lucide-icon`]),...!g.default&&!t(h)&&{"aria-hidden":`true`}},[...c.map(t=>e(...t)),...g.default?[g.default()]:[]]),l=(t,n)=>(r,{slots:i,attrs:a})=>e(c,{...a,...r,iconNode:n,name:t},i);export{l as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-Cgv1AIRL.js";var t=e(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),n=e(`folder-open`,[[`path`,{d:`m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2`,key:`usdka0`}]]);export{t as n,n as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-B4C149oC.js","assets/project-BFuaDcvV.js","assets/createLucideIcon-Cgv1AIRL.js","assets/DefaultLayout-DelfwTTT.js","assets/constants-C4Zrkm2g.js","assets/settings-CrCWmNyB.js","assets/square-terminal-C8toRwjx.js","assets/DefaultLayout-Bj8fPWym.css","assets/Dashboard-pjIWWLub.js","assets/activity-DItEGOtI.js","assets/circle-alert-Bfrn_ovD.js","assets/clock-BPXGSCIV.js","assets/server-C33taHNn.js","assets/ProjectList-9rbMuJeY.js","assets/FileExplorer-xY5ejhhN.js","assets/folder-open-jX-_Q7bA.js","assets/ProjectDetail-Z8cZoqr5.js","assets/refresh-cw-DWmqwQRn.js","assets/save-BkiMrL9q.js","assets/LogBoard-tT61QjOx.js","assets/LogBoard-DzW-cEqH.css","assets/Settings-CtCNDUXY.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{$ as e,B as t,C as n,E as r,F as i,G as a,H as o,I as s,J as c,K as l,L as u,M as d,N as f,O as p,P as ee,Q as m,R as te,U as ne,V as re,W as ie,X as h,Y as g,Z as _,_ as v,a as ae,b as oe,c as y,i as b,j as se,n as ce,p as le,q as x,r as ue,rt as S,s as de,t as fe,u as pe,v as C,w,y as T,z as E}from"./project-BFuaDcvV.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var D=void 0,O=typeof window<`u`&&window.trustedTypes;if(O)try{D=O.createPolicy(`vue`,{createHTML:e=>e})}catch{}var k=D?e=>D.createHTML(e):e=>e,A=`http://www.w3.org/2000/svg`,j=`http://www.w3.org/1998/Math/MathML`,M=typeof document<`u`?document:null,me=M&&M.createElement(`template`),he={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{let i=t===`svg`?M.createElementNS(A,e):t===`mathml`?M.createElementNS(j,e):n?M.createElement(e,{is:n}):M.createElement(e);return e===`select`&&r&&r.multiple!=null&&i.setAttribute(`multiple`,r.multiple),i},createText:e=>M.createTextNode(e),createComment:e=>M.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>M.querySelector(e),setScopeId(e,t){e.setAttribute(t,``)},insertStaticContent(e,t,n,r,i,a){let o=n?n.previousSibling:t.lastChild;if(i&&(i===a||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===a||!(i=i.nextSibling)););else{me.innerHTML=k(r===`svg`?`<svg>${e}</svg>`:r===`mathml`?`<math>${e}</math>`:e);let i=me.content;if(r===`svg`||r===`mathml`){let e=i.firstChild;for(;e.firstChild;)i.appendChild(e.firstChild);i.removeChild(e)}t.insertBefore(i,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},N=`transition`,ge=`animation`,_e=Symbol(`_vtc`),ve={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ye=te({},ae,ve),be=(e=>(e.displayName=`Transition`,e.props=ye,e))((e,{slots:t})=>C(b,Se(e),t)),P=(e,t=[])=>{o(e)?e.forEach(e=>e(...t)):e&&e(...t)},xe=e=>e?o(e)?e.some(e=>e.length>1):e.length>1:!1;function Se(e){let t={};for(let n in e)n in ve||(t[n]=e[n]);if(e.css===!1)return t;let{name:n=`v`,type:r,duration:i,enterFromClass:a=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:c=a,appearActiveClass:l=o,appearToClass:u=s,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=e,ee=Ce(i),m=ee&&ee[0],ne=ee&&ee[1],{onBeforeEnter:re,onEnter:ie,onEnterCancelled:h,onLeave:g,onLeaveCancelled:_,onBeforeAppear:v=re,onAppear:ae=ie,onAppearCancelled:oe=h}=t,y=(e,t,n,r)=>{e._enterCancelled=r,I(e,t?u:s),I(e,t?l:o),n&&n()},b=(e,t)=>{e._isLeaving=!1,I(e,d),I(e,p),I(e,f),t&&t()},se=e=>(t,n)=>{let i=e?ae:ie,o=()=>y(t,e,n);P(i,[t,o]),Te(()=>{I(t,e?c:a),F(t,e?u:s),xe(i)||De(t,r,m,o)})};return te(t,{onBeforeEnter(e){P(re,[e]),F(e,a),F(e,o)},onBeforeAppear(e){P(v,[e]),F(e,c),F(e,l)},onEnter:se(!1),onAppear:se(!0),onLeave(e,t){e._isLeaving=!0;let n=()=>b(e,t);F(e,d),e._enterCancelled?(F(e,f),je(e)):(je(e),F(e,f)),Te(()=>{e._isLeaving&&(I(e,d),F(e,p),xe(g)||De(e,r,ne,n))}),P(g,[e,n])},onEnterCancelled(e){y(e,!1,void 0,!0),P(h,[e])},onAppearCancelled(e){y(e,!0,void 0,!0),P(oe,[e])},onLeaveCancelled(e){b(e),P(_,[e])}})}function Ce(e){if(e==null)return null;if(a(e))return[we(e.enter),we(e.leave)];{let t=we(e);return[t,t]}}function we(e){return S(e)}function F(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.add(t)),(e[_e]||(e[_e]=new Set)).add(t)}function I(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.remove(t));let n=e[_e];n&&(n.delete(t),n.size||(e[_e]=void 0))}function Te(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}var Ee=0;function De(e,t,n,r){let i=e._endId=++Ee,a=()=>{i===e._endId&&r()};if(n!=null)return setTimeout(a,n);let{type:o,timeout:s,propCount:c}=Oe(e,t);if(!o)return r();let l=o+`end`,u=0,d=()=>{e.removeEventListener(l,f),a()},f=t=>{t.target===e&&++u>=c&&d()};setTimeout(()=>{u<c&&d()},s+1),e.addEventListener(l,f)}function Oe(e,t){let n=window.getComputedStyle(e),r=e=>(n[e]||``).split(`, `),i=r(`${N}Delay`),a=r(`${N}Duration`),o=ke(i,a),s=r(`${ge}Delay`),c=r(`${ge}Duration`),l=ke(s,c),u=null,d=0,f=0;t===N?o>0&&(u=N,d=o,f=a.length):t===ge?l>0&&(u=ge,d=l,f=c.length):(d=Math.max(o,l),u=d>0?o>l?N:ge:null,f=u?u===N?a.length:c.length:0);let p=u===N&&/\b(?:transform|all)(?:,|$)/.test(r(`${N}Property`).toString());return{type:u,timeout:d,propCount:f,hasTransform:p}}function ke(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((t,n)=>Ae(t)+Ae(e[n])))}function Ae(e){return e===`auto`?0:Number(e.slice(0,-1).replace(`,`,`.`))*1e3}function je(e){return(e?e.ownerDocument:document).body.offsetHeight}function Me(e,t,n){let r=e[_e];r&&(t=(t?[t,...r]:[...r]).join(` `)),t==null?e.removeAttribute(`class`):n?e.setAttribute(`class`,t):e.className=t}var Ne=Symbol(`_vod`),Pe=Symbol(`_vsh`),Fe=Symbol(``),Ie=/(?:^|;)\s*display\s*:/;function Le(e,t,n){let r=e.style,i=g(n),a=!1;if(n&&!i){if(t)if(g(t))for(let e of t.split(`;`)){let t=e.slice(0,e.indexOf(`:`)).trim();n[t]??ze(r,t,``)}else for(let e in t)n[e]??ze(r,e,``);for(let e in n)e===`display`&&(a=!0),ze(r,e,n[e])}else if(i){if(t!==n){let e=r[Fe];e&&(n+=`;`+e),r.cssText=n,a=Ie.test(n)}}else t&&e.removeAttribute(`style`);Ne in e&&(e[Ne]=a?r.display:``,e[Pe]&&(r.display=`none`))}var Re=/\s*!important$/;function ze(e,t,n){if(o(n))n.forEach(n=>ze(e,t,n));else if(n??=``,t.startsWith(`--`))e.setProperty(t,n);else{let r=He(e,t);Re.test(n)?e.setProperty(E(r),n.replace(Re,``),`important`):e[r]=n}}var Be=[`Webkit`,`Moz`,`ms`],Ve={};function He(e,t){let n=Ve[t];if(n)return n;let r=s(t);if(r!==`filter`&&r in e)return Ve[t]=r;r=u(r);for(let n=0;n<Be.length;n++){let i=Be[n]+r;if(i in e)return Ve[t]=i}return t}var Ue=`http://www.w3.org/1999/xlink`;function We(e,n,r,i,a,o=c(n)){i&&n.startsWith(`xlink:`)?r==null?e.removeAttributeNS(Ue,n.slice(6,n.length)):e.setAttributeNS(Ue,n,r):r==null||o&&!t(r)?e.removeAttribute(n):e.setAttribute(n,o?``:h(r)?String(r):r)}function Ge(e,n,r,i,a){if(n===`innerHTML`||n===`textContent`){r!=null&&(e[n]=n===`innerHTML`?k(r):r);return}let o=e.tagName;if(n===`value`&&o!==`PROGRESS`&&!o.includes(`-`)){let t=o===`OPTION`?e.getAttribute(`value`)||``:e.value,i=r==null?e.type===`checkbox`?`on`:``:String(r);(t!==i||!(`_value`in e))&&(e.value=i),r??e.removeAttribute(n),e._value=r;return}let s=!1;if(r===``||r==null){let i=typeof e[n];i===`boolean`?r=t(r):r==null&&i===`string`?(r=``,s=!0):i===`number`&&(r=0,s=!0)}try{e[n]=r}catch{}s&&e.removeAttribute(a||n)}function L(e,t,n,r){e.addEventListener(t,n,r)}function Ke(e,t,n,r){e.removeEventListener(t,n,r)}var qe=Symbol(`_vei`);function Je(e,t,n,r,i=null){let a=e[qe]||(e[qe]={}),o=a[t];if(r&&o)o.value=r;else{let[n,s]=Xe(t);r?L(e,n,a[t]=et(r,i),s):o&&(Ke(e,n,o,s),a[t]=void 0)}}var Ye=/(?:Once|Passive|Capture)$/;function Xe(e){let t;if(Ye.test(e)){t={};let n;for(;n=e.match(Ye);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[e[2]===`:`?e.slice(3):E(e.slice(2)),t]}var Ze=0,Qe=Promise.resolve(),$e=()=>Ze||=(Qe.then(()=>Ze=0),Date.now());function et(e,t){let n=e=>{if(!e._vts)e._vts=Date.now();else if(e._vts<=n.attached)return;de(tt(e,n.value),t,5,[e])};return n.value=e,n.attached=$e(),n}function tt(e,t){if(o(t)){let n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(e=>t=>!t._stopped&&e&&e(t))}else return t}var nt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,rt=(e,t,n,r,i,a)=>{let o=i===`svg`;t===`class`?Me(e,r,o):t===`style`?Le(e,n,r):l(t)?ie(t)||Je(e,t,n,r,a):(t[0]===`.`?(t=t.slice(1),!0):t[0]===`^`?(t=t.slice(1),!1):it(e,t,r,o))?(Ge(e,t,r),!e.tagName.includes(`-`)&&(t===`value`||t===`checked`||t===`selected`)&&We(e,t,r,o,a,t!==`value`)):e._isVueCE&&(at(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!g(r)))?Ge(e,s(t),r,a,t):(t===`true-value`?e._trueValue=r:t===`false-value`&&(e._falseValue=r),We(e,t,r,o))};function it(e,t,n,r){if(r)return!!(t===`innerHTML`||t===`textContent`||t in e&&nt(t)&&ne(n));if(t===`spellcheck`||t===`draggable`||t===`translate`||t===`autocorrect`||t===`sandbox`&&e.tagName===`IFRAME`||t===`form`||t===`list`&&e.tagName===`INPUT`||t===`type`&&e.tagName===`TEXTAREA`)return!1;if(t===`width`||t===`height`){let t=e.tagName;if(t===`IMG`||t===`VIDEO`||t===`CANVAS`||t===`SOURCE`)return!1}return nt(t)&&g(n)?!1:t in e}function at(e,t){let n=e._def.props;if(!n)return!1;let r=s(t);return Array.isArray(n)?n.some(e=>s(e)===r):Object.keys(n).some(e=>s(e)===r)}var R=e=>{let t=e.props[`onUpdate:modelValue`]||!1;return o(t)?e=>re(t,e):t};function ot(e){e.target.composing=!0}function st(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event(`input`)))}var z=Symbol(`_assign`);function ct(t,n,r){return n&&(t=t.trim()),r&&(t=e(t)),t}var lt={created(e,{modifiers:{lazy:t,trim:n,number:r}},i){e[z]=R(i);let a=r||i.props&&i.props.type===`number`;L(e,t?`change`:`input`,t=>{t.target.composing||e[z](ct(e.value,n,a))}),(n||a)&&L(e,`change`,()=>{e.value=ct(e.value,n,a)}),t||(L(e,`compositionstart`,ot),L(e,`compositionend`,st),L(e,`change`,st))},mounted(e,{value:t}){e.value=t??``},beforeUpdate(t,{value:n,oldValue:r,modifiers:{lazy:i,trim:a,number:o}},s){if(t[z]=R(s),t.composing)return;let c=(o||t.type===`number`)&&!/^0\d/.test(t.value)?e(t.value):t.value,l=n??``;if(c===l)return;let u=t.getRootNode();(u instanceof Document||u instanceof ShadowRoot)&&u.activeElement===t&&t.type!==`range`&&(i&&n===r||a&&t.value.trim()===l)||(t.value=l)}},ut={deep:!0,created(e,t,n){e[z]=R(n),L(e,`change`,()=>{let t=e._modelValue,n=B(e),r=e.checked,i=e[z];if(o(t)){let e=m(t,n),a=e!==-1;if(r&&!a)i(t.concat(n));else if(!r&&a){let n=[...t];n.splice(e,1),i(n)}}else if(x(t)){let e=new Set(t);r?e.add(n):e.delete(n),i(e)}else i(ht(e,r))})},mounted:dt,beforeUpdate(e,t,n){e[z]=R(n),dt(e,t,n)}};function dt(e,{value:t,oldValue:n},r){e._modelValue=t;let i;if(o(t))i=m(t,r.props.value)>-1;else if(x(t))i=t.has(r.props.value);else{if(t===n)return;i=_(t,ht(e,!0))}e.checked!==i&&(e.checked=i)}var ft={created(e,{value:t},n){e.checked=_(t,n.props.value),e[z]=R(n),L(e,`change`,()=>{e[z](B(e))})},beforeUpdate(e,{value:t,oldValue:n},r){e[z]=R(r),t!==n&&(e.checked=_(t,r.props.value))}},pt={deep:!0,created(t,{value:n,modifiers:{number:r}},i){let a=x(n);L(t,`change`,()=>{let n=Array.prototype.filter.call(t.options,e=>e.selected).map(t=>r?e(B(t)):B(t));t[z](t.multiple?a?new Set(n):n:n[0]),t._assigning=!0,oe(()=>{t._assigning=!1})}),t[z]=R(i)},mounted(e,{value:t}){mt(e,t)},beforeUpdate(e,t,n){e[z]=R(n)},updated(e,{value:t}){e._assigning||mt(e,t)}};function mt(e,t){let n=e.multiple,r=o(t);if(!(n&&!r&&!x(t))){for(let i=0,a=e.options.length;i<a;i++){let a=e.options[i],o=B(a);if(n)if(r){let e=typeof o;e===`string`||e===`number`?a.selected=t.some(e=>String(e)===String(o)):a.selected=m(t,o)>-1}else a.selected=t.has(o);else if(_(B(a),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function B(e){return`_value`in e?e._value:e.value}function ht(e,t){let n=t?`_trueValue`:`_falseValue`;return n in e?e[n]:t}var gt={created(e,t,n){vt(e,t,n,null,`created`)},mounted(e,t,n){vt(e,t,n,null,`mounted`)},beforeUpdate(e,t,n,r){vt(e,t,n,r,`beforeUpdate`)},updated(e,t,n,r){vt(e,t,n,r,`updated`)}};function _t(e,t){switch(e){case`SELECT`:return pt;case`TEXTAREA`:return lt;default:switch(t){case`checkbox`:return ut;case`radio`:return ft;default:return lt}}}function vt(e,t,n,r,i){let a=_t(e.tagName,n.props&&n.props.type)[i];a&&a(e,t,n,r)}var yt=[`ctrl`,`shift`,`alt`,`meta`],bt={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>`button`in e&&e.button!==0,middle:e=>`button`in e&&e.button!==1,right:e=>`button`in e&&e.button!==2,exact:(e,t)=>yt.some(n=>e[`${n}Key`]&&!t.includes(n))},xt=(e,t)=>{if(!e)return e;let n=e._withMods||={},r=t.join(`.`);return n[r]||(n[r]=((n,...r)=>{for(let e=0;e<t.length;e++){let r=bt[t[e]];if(r&&r(n,t))return}return e(n,...r)}))},St=te({patchProp:rt},he),Ct;function wt(){return Ct||=le(St)}var Tt=((...e)=>{let t=wt().createApp(...e),{mount:n}=t;return t.mount=e=>{let r=Dt(e);if(!r)return;let i=t._component;!ne(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent=``);let a=n(r,!1,Et(r));return r instanceof Element&&(r.removeAttribute(`v-cloak`),r.setAttribute(`data-v-app`,``)),a},t});function Et(e){if(e instanceof SVGElement)return`svg`;if(typeof MathMLElement==`function`&&e instanceof MathMLElement)return`mathml`}function Dt(e){return g(e)?document.querySelector(e):e}var V=typeof document<`u`;function Ot(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function kt(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&Ot(e.default)}var H=Object.assign;function At(e,t){let n={};for(let r in t){let i=t[r];n[r]=U(i)?i.map(e):e(i)}return n}var jt=()=>{},U=Array.isArray;function Mt(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var W=function(e){return e[e.MATCHER_NOT_FOUND=1]=`MATCHER_NOT_FOUND`,e[e.NAVIGATION_GUARD_REDIRECT=2]=`NAVIGATION_GUARD_REDIRECT`,e[e.NAVIGATION_ABORTED=4]=`NAVIGATION_ABORTED`,e[e.NAVIGATION_CANCELLED=8]=`NAVIGATION_CANCELLED`,e[e.NAVIGATION_DUPLICATED=16]=`NAVIGATION_DUPLICATED`,e}({}),Nt=Symbol(``);W.MATCHER_NOT_FOUND,W.NAVIGATION_GUARD_REDIRECT,W.NAVIGATION_ABORTED,W.NAVIGATION_CANCELLED,W.NAVIGATION_DUPLICATED;function G(e,t){return H(Error(),{type:e,[Nt]:!0},t)}function K(e,t){return e instanceof Error&&Nt in e&&(t==null||!!(e.type&t))}var Pt=Symbol(``),Ft=Symbol(``),It=Symbol(``),Lt=Symbol(``),Rt=Symbol(``);function zt(){return T(It)}function Bt(e){return T(Lt)}var Vt=/#/g,Ht=/&/g,Ut=/\//g,Wt=/=/g,Gt=/\?/g,Kt=/\+/g,qt=/%5B/g,Jt=/%5D/g,Yt=/%5E/g,Xt=/%60/g,Zt=/%7B/g,Qt=/%7C/g,$t=/%7D/g,en=/%20/g;function tn(e){return e==null?``:encodeURI(``+e).replace(Qt,`|`).replace(qt,`[`).replace(Jt,`]`)}function nn(e){return tn(e).replace(Zt,`{`).replace($t,`}`).replace(Yt,`^`)}function rn(e){return tn(e).replace(Kt,`%2B`).replace(en,`+`).replace(Vt,`%23`).replace(Ht,`%26`).replace(Xt,"`").replace(Zt,`{`).replace($t,`}`).replace(Yt,`^`)}function an(e){return rn(e).replace(Wt,`%3D`)}function on(e){return tn(e).replace(Vt,`%23`).replace(Gt,`%3F`)}function sn(e){return on(e).replace(Ut,`%2F`)}function cn(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var ln=/\/$/,un=e=>e.replace(ln,``);function dn(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=vn(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:cn(o)}}function fn(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function pn(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function mn(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&q(t.matched[r],n.matched[i])&&hn(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function q(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function hn(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!gn(e[n],t[n]))return!1;return!0}function gn(e,t){return U(e)?_n(e,t):U(t)?_n(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function _n(e,t){return U(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function vn(e,t){if(e.startsWith(`/`))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o<r.length;o++)if(s=r[o],s!==`.`)if(s===`..`)a>1&&a--;else break;return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var J={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0},yn=function(e){return e.pop=`pop`,e.push=`push`,e}({}),bn=function(e){return e.back=`back`,e.forward=`forward`,e.unknown=``,e}({});function xn(e){if(!e)if(V){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^\/]+/,``)}else e=`/`;return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),un(e)}var Sn=/^[^#]+#/;function Cn(e,t){return e.replace(Sn,`#`)+t}function wn(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var Tn=()=>({left:window.scrollX,top:window.scrollY});function En(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=wn(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function Dn(e,t){return(history.state?history.state.position-t:-1)+e}var On=new Map;function kn(e,t){On.set(e,t)}function An(e){let t=On.get(e);return On.delete(e),t}function jn(e){return typeof e==`string`||e&&typeof e==`object`}function Mn(e){return typeof e==`string`||typeof e==`symbol`}function Nn(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;e<n.length;++e){let r=n[e].replace(Kt,` `),i=r.indexOf(`=`),a=cn(i<0?r:r.slice(0,i)),o=i<0?null:cn(r.slice(i+1));if(a in t){let e=t[a];U(e)||(e=t[a]=[e]),e.push(o)}else t[a]=o}return t}function Pn(e){let t=``;for(let n in e){let r=e[n];if(n=an(n),r==null){r!==void 0&&(t+=(t.length?`&`:``)+n);continue}(U(r)?r.map(e=>e&&rn(e)):[r&&rn(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function Fn(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=U(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}function In(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Y(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(G(W.NAVIGATION_ABORTED,{from:n,to:t})):e instanceof Error?c(e):jn(e)?c(G(W.NAVIGATION_GUARD_REDIRECT,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function Ln(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(!(t!==`beforeRouteEnter`&&!o.instances[e]))if(Ot(s)){let c=(s.__vccOpts||s)[t];c&&a.push(Y(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=kt(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&Y(c,n,r,o,e,i)()}))}}return a}function Rn(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;o<a;o++){let a=t.matched[o];a&&(e.matched.find(e=>q(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>q(e,s))||i.push(s))}return[n,r,i]}var zn=()=>location.protocol+`//`+location.host;function Bn(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),pn(n,``)}return pn(n,e)+r+i}function Vn(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=Bn(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:yn.pop,direction:u?u>0?bn.forward:bn.back:bn.unknown})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){if(document.visibilityState===`hidden`){let{history:e}=window;if(!e.state)return;e.replaceState(H({},e.state,{scroll:Tn()}),``)}}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u),document.removeEventListener(`visibilitychange`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),document.addEventListener(`visibilitychange`,u),{pauseListeners:c,listen:l,destroy:d}}function Hn(e,t,n,r=!1,i=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:i?Tn():null}}function Un(e){let{history:t,location:n}=window,r={value:Bn(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:zn()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,H({},t.state,Hn(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=H({},i.value,t.state,{forward:e,scroll:Tn()});a(o.current,o,!0),a(e,H({},Hn(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function Wn(e){e=xn(e);let t=Un(e),n=Vn(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=H({location:``,base:e,go:r,createHref:Cn.bind(null,e)},t,n);return Object.defineProperty(i,`location`,{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,`state`,{enumerable:!0,get:()=>t.state.value}),i}var X=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.Group=2]=`Group`,e}({}),Z=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.ParamRegExp=2]=`ParamRegExp`,e[e.ParamRegExpEnd=3]=`ParamRegExpEnd`,e[e.EscapeNext=4]=`EscapeNext`,e}(Z||{}),Gn={type:X.Static,value:``},Kn=/[a-zA-Z0-9_]/;function qn(e){if(!e)return[[]];if(e===`/`)return[[Gn]];if(!e.startsWith(`/`))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=Z.Static,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===Z.Static?a.push({type:X.Static,value:l}):n===Z.Param||n===Z.ParamRegExp||n===Z.ParamRegExpEnd?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:X.Param,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;s<e.length;){if(c=e[s++],c===`\\`&&n!==Z.ParamRegExp){r=n,n=Z.EscapeNext;continue}switch(n){case Z.Static:c===`/`?(l&&d(),o()):c===`:`?(d(),n=Z.Param):f();break;case Z.EscapeNext:f(),n=r;break;case Z.Param:c===`(`?n=Z.ParamRegExp:Kn.test(c)?f():(d(),n=Z.Static,c!==`*`&&c!==`?`&&c!==`+`&&s--);break;case Z.ParamRegExp:c===`)`?u[u.length-1]==`\\`?u=u.slice(0,-1)+c:n=Z.ParamRegExpEnd:u+=c;break;case Z.ParamRegExpEnd:d(),n=Z.Static,c!==`*`&&c!==`?`&&c!==`+`&&s--,u=``;break;default:t(`Unknown state`);break}}return n===Z.ParamRegExp&&t(`Unfinished custom RegExp for param "${l}"`),d(),o(),i}var Jn=`[^/]+?`,Yn={sensitive:!1,strict:!1,start:!0,end:!0},Q=function(e){return e[e._multiplier=10]=`_multiplier`,e[e.Root=90]=`Root`,e[e.Segment=40]=`Segment`,e[e.SubSegment=30]=`SubSegment`,e[e.Static=40]=`Static`,e[e.Dynamic=20]=`Dynamic`,e[e.BonusCustomRegExp=10]=`BonusCustomRegExp`,e[e.BonusWildcard=-50]=`BonusWildcard`,e[e.BonusRepeatable=-20]=`BonusRepeatable`,e[e.BonusOptional=-8]=`BonusOptional`,e[e.BonusStrict=.7000000000000001]=`BonusStrict`,e[e.BonusCaseSensitive=.25]=`BonusCaseSensitive`,e}(Q||{}),Xn=/[.+*?^${}()[\]/\\]/g;function Zn(e,t){let n=H({},Yn,t),r=[],i=n.start?`^`:``,a=[];for(let t of e){let e=t.length?[]:[Q.Root];n.strict&&!t.length&&(i+=`/`);for(let r=0;r<t.length;r++){let o=t[r],s=Q.Segment+(n.sensitive?Q.BonusCaseSensitive:0);if(o.type===X.Static)r||(i+=`/`),i+=o.value.replace(Xn,`\\$&`),s+=Q.Static;else if(o.type===X.Param){let{value:e,repeatable:n,optional:c,regexp:l}=o;a.push({name:e,repeatable:n,optional:c});let u=l||Jn;if(u!==Jn){s+=Q.BonusCustomRegExp;try{RegExp(`(${u})`)}catch(t){throw Error(`Invalid custom RegExp for param "${e}" (${u}): `+t.message)}}let d=n?`((?:${u})(?:/(?:${u}))*)`:`(${u})`;r||(d=c&&t.length<2?`(?:/${d})`:`/`+d),c&&(d+=`?`),i+=d,s+=Q.Dynamic,c&&(s+=Q.BonusOptional),n&&(s+=Q.BonusRepeatable),u===`.*`&&(s+=Q.BonusWildcard)}e.push(s)}r.push(e)}if(n.strict&&n.end){let e=r.length-1;r[e][r[e].length-1]+=Q.BonusStrict}n.strict||(i+=`/?`),n.end?i+=`$`:n.strict&&!i.endsWith(`/`)&&(i+=`(?:/|$)`);let o=new RegExp(i,n.sensitive?``:`i`);function s(e){let t=e.match(o),n={};if(!t)return null;for(let e=1;e<t.length;e++){let r=t[e]||``,i=a[e-1];n[i.name]=r&&i.repeatable?r.split(`/`):r}return n}function c(t){let n=``,r=!1;for(let i of e){(!r||!n.endsWith(`/`))&&(n+=`/`),r=!1;for(let e of i)if(e.type===X.Static)n+=e.value;else if(e.type===X.Param){let{value:a,repeatable:o,optional:s}=e,c=a in t?t[a]:``;if(U(c)&&!o)throw Error(`Provided param "${a}" is an array but it is not repeatable (* or + modifiers)`);let l=U(c)?c.join(`/`):c;if(!l)if(s)i.length<2&&(n.endsWith(`/`)?n=n.slice(0,-1):r=!0);else throw Error(`Missing required param "${a}"`);n+=l}}return n||`/`}return{re:o,score:r,keys:a,parse:s,stringify:c}}function Qn(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===Q.Static+Q.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===Q.Static+Q.Segment?1:-1:0}function $n(e,t){let n=0,r=e.score,i=t.score;for(;n<r.length&&n<i.length;){let e=Qn(r[n],i[n]);if(e)return e;n++}if(Math.abs(i.length-r.length)===1){if(er(r))return 1;if(er(i))return-1}return i.length-r.length}function er(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var tr={strict:!1,end:!0,sensitive:!1};function nr(e,t,n){let r=H(Zn(qn(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function rr(e,t){let n=[],r=new Map;t=Mt(tr,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=ar(e);s.aliasOf=r&&r.record;let l=Mt(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push(ar(H({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&u[0]!==`/`){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=nr(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!sr(d)&&o(e.name)),dr(d)&&c(d),s.children){let e=s.children;for(let t=0;t<e.length;t++)a(e[t],d,r&&r.children[t])}r||=d}return f?()=>{o(f)}:jt}function o(e){if(Mn(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=lr(e,n);n.splice(t,0,e),e.record.name&&!sr(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw G(W.MATCHER_NOT_FOUND,{location:e});s=i.record.name,a=H(ir(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&ir(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name);else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw G(W.MATCHER_NOT_FOUND,{location:e,currentLocation:t});s=i.record.name,a=H({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:cr(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function ir(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function ar(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:or(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,`mods`,{value:{}}),t}function or(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function sr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function cr(e){return e.reduce((e,t)=>H(e,t.meta),{})}function lr(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;$n(e,t[i])<0?r=i:n=i+1}let i=ur(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function ur(e){let t=e;for(;t=t.parent;)if(dr(t)&&$n(e,t)===0)return t}function dr({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function fr(e){let t=T(It),n=T(Lt),r=y(()=>{let n=i(e.to);return t.resolve(n)}),a=y(()=>{let{matched:e}=r.value,{length:t}=e,i=e[t-1],a=n.matched;if(!i||!a.length)return-1;let o=a.findIndex(q.bind(null,i));if(o>-1)return o;let s=_r(e[t-2]);return t>1&&_r(i)===s&&a[a.length-1].path!==s?a.findIndex(q.bind(null,e[t-2])):o}),o=y(()=>a.value>-1&&gr(n.params,r.value.params)),s=y(()=>a.value>-1&&a.value===n.matched.length-1&&hn(n.params,r.value.params));function c(n={}){if(hr(n)){let n=t[i(e.replace)?`replace`:`push`](i(e.to)).catch(jt);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}return{route:r,href:y(()=>r.value.href),isActive:o,isExactActive:s,navigate:c}}function pr(e){return e.length===1?e[0]:e}var mr=v({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:fr,setup(e,{slots:t}){let n=se(fr(e)),{options:r}=T(It),i=y(()=>({[vr(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[vr(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&pr(t.default(n));return e.custom?r:C(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function hr(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function gr(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!U(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}return!0}function _r(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var vr=(e,t,n)=>e??t??n,yr=v({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let r=T(Rt),a=y(()=>e.route||r.value),o=T(Ft,0),s=y(()=>{let e=i(o),{matched:t}=a.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),c=y(()=>a.value.matched[s.value]);w(Ft,y(()=>s.value+1)),w(Pt,c),w(Rt,a);let l=d();return p(()=>[l.value,c.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!q(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let r=a.value,i=e.name,o=c.value,s=o&&o.components[i];if(!s)return br(n.default,{Component:s,route:r});let u=o.props[i],d=C(s,H({},u?u===!0?r.params:typeof u==`function`?u(r):u:null,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(o.instances[i]=null)},ref:l}));return br(n.default,{Component:d,route:r})||d}}});function br(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var xr=yr;function Sr(e){let t=rr(e.routes,e),n=e.parseQuery||Nn,r=e.stringifyQuery||Pn,a=e.history,o=In(),s=In(),c=In(),l=ee(J),u=J;V&&e.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let d=At.bind(null,e=>``+e),p=At.bind(null,sn),m=At.bind(null,cn);function te(e,n){let r,i;return Mn(e)?(r=t.getRecordMatcher(e),i=n):i=e,t.addRoute(i,r)}function ne(e){let n=t.getRecordMatcher(e);n&&t.removeRoute(n)}function re(){return t.getRoutes().map(e=>e.record)}function ie(e){return!!t.getRecordMatcher(e)}function h(e,i){if(i=H({},i||l.value),typeof e==`string`){let r=dn(n,e,i.path),o=t.resolve({path:r.path},i),s=a.createHref(r.fullPath);return H(r,o,{params:m(o.params),hash:cn(r.hash),redirectedFrom:void 0,href:s})}let o;if(e.path!=null)o=H({},e,{path:dn(n,e.path,i.path).path});else{let t=H({},e.params);for(let e in t)t[e]??delete t[e];o=H({},e,{params:p(t)}),i.params=p(i.params)}let s=t.resolve(o,i),c=e.hash||``;s.params=d(m(s.params));let u=fn(r,H({},e,{hash:nn(c),path:s.path})),f=a.createHref(u);return H({fullPath:u,hash:c,query:r===Pn?Fn(e.query):e.query||{}},s,{redirectedFrom:void 0,href:f})}function g(e){return typeof e==`string`?dn(n,e,l.value.path):H({},e)}function _(e,t){if(u!==e)return G(W.NAVIGATION_CANCELLED,{from:t,to:e})}function v(e){return b(e)}function ae(e){return v(H(g(e),{replace:!0}))}function y(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=g(i):{path:i},i.params={}),H({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function b(e,t){let n=u=h(e),i=l.value,a=e.state,o=e.force,s=e.replace===!0,c=y(n,i);if(c)return b(H(g(c),{state:typeof c==`object`?H({},a,c.state):a,force:o,replace:s}),t||n);let d=n;d.redirectedFrom=t;let f;return!o&&mn(r,i,n)&&(f=G(W.NAVIGATION_DUPLICATED,{to:d,from:i}),D(i,i,!0,!1)),(f?Promise.resolve(f):le(d,i)).catch(e=>K(e)?K(e,W.NAVIGATION_GUARD_REDIRECT)?e:E(e):w(e,d,i)).then(e=>{if(e){if(K(e,W.NAVIGATION_GUARD_REDIRECT))return b(H({replace:s},g(e.to),{state:typeof e.to==`object`?H({},a,e.to.state):a,force:o}),t||d)}else e=ue(d,i,!0,s,a);return x(d,i,e),e})}function se(e,t){let n=_(e,t);return n?Promise.reject(n):Promise.resolve()}function ce(e){let t=A.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function le(e,t){let n,[r,i,a]=Rn(e,t);n=Ln(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(Y(r,e,t))});let c=se.bind(null,e,t);return n.push(c),M(n).then(()=>{n=[];for(let r of o.list())n.push(Y(r,e,t));return n.push(c),M(n)}).then(()=>{n=Ln(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(Y(r,e,t))});return n.push(c),M(n)}).then(()=>{n=[];for(let r of a)if(r.beforeEnter)if(U(r.beforeEnter))for(let i of r.beforeEnter)n.push(Y(i,e,t));else n.push(Y(r.beforeEnter,e,t));return n.push(c),M(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=Ln(a,`beforeRouteEnter`,e,t,ce),n.push(c),M(n))).then(()=>{n=[];for(let r of s.list())n.push(Y(r,e,t));return n.push(c),M(n)}).catch(e=>K(e,W.NAVIGATION_CANCELLED)?e:Promise.reject(e))}function x(e,t,n){c.list().forEach(r=>ce(()=>r(e,t,n)))}function ue(e,t,n,r,i){let o=_(e,t);if(o)return o;let s=t===J,c=V?history.state:{};n&&(r||s?a.replace(e.fullPath,H({scroll:s&&c&&c.scroll},i)):a.push(e.fullPath,i)),l.value=e,D(e,t,n,s),E()}let S;function de(){S||=a.listen((e,t,n)=>{if(!j.listening)return;let r=h(e),i=y(r,j.currentRoute.value);if(i){b(H(i,{replace:!0,force:!0}),r).catch(jt);return}u=r;let o=l.value;V&&kn(Dn(o.fullPath,n.delta),Tn()),le(r,o).catch(e=>K(e,W.NAVIGATION_ABORTED|W.NAVIGATION_CANCELLED)?e:K(e,W.NAVIGATION_GUARD_REDIRECT)?(b(H(g(e.to),{force:!0}),r).then(e=>{K(e,W.NAVIGATION_ABORTED|W.NAVIGATION_DUPLICATED)&&!n.delta&&n.type===yn.pop&&a.go(-1,!1)}).catch(jt),Promise.reject()):(n.delta&&a.go(-n.delta,!1),w(e,r,o))).then(e=>{e||=ue(r,o,!1),e&&(n.delta&&!K(e,W.NAVIGATION_CANCELLED)?a.go(-n.delta,!1):n.type===yn.pop&&K(e,W.NAVIGATION_ABORTED|W.NAVIGATION_DUPLICATED)&&a.go(-1,!1)),x(r,o,e)}).catch(jt)})}let fe=In(),pe=In(),C;function w(e,t,n){E(e);let r=pe.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function T(){return C&&l.value!==J?Promise.resolve():new Promise((e,t)=>{fe.add([e,t])})}function E(e){return C||(C=!e,de(),fe.list().forEach(([t,n])=>e?n(e):t()),fe.reset()),e}function D(t,n,r,i){let{scrollBehavior:a}=e;if(!V||!a)return Promise.resolve();let o=!r&&An(Dn(t.fullPath,0))||(i||!r)&&history.state&&history.state.scroll||null;return oe().then(()=>a(t,n,o)).then(e=>e&&En(e)).catch(e=>w(e,t,n))}let O=e=>a.go(e),k,A=new Set,j={currentRoute:l,listening:!0,addRoute:te,removeRoute:ne,clearRoutes:t.clearRoutes,hasRoute:ie,getRoutes:re,resolve:h,options:e,push:v,replace:ae,go:O,back:()=>O(-1),forward:()=>O(1),beforeEach:o.add,beforeResolve:s.add,afterEach:c.add,onError:pe.add,isReady:T,install(e){e.component(`RouterLink`,mr),e.component(`RouterView`,xr),e.config.globalProperties.$router=j,Object.defineProperty(e.config.globalProperties,`$route`,{enumerable:!0,get:()=>i(l)}),V&&!k&&l.value===J&&(k=!0,v(a.location).catch(e=>{}));let t={};for(let e in J)Object.defineProperty(t,e,{get:()=>l.value[e],enumerable:!0});e.provide(It,j),e.provide(Lt,f(t)),e.provide(Rt,l);let n=e.unmount;A.add(e),e.unmount=function(){A.delete(e),A.size<1&&(u=J,S&&S(),S=null,l.value=J,k=!1,C=!1),n()}}};function M(e){return e.reduce((e,t)=>e.then(()=>ce(t)),Promise.resolve())}return j}var Cr=`modulepreload`,wr=function(e){return`/`+e},Tr={},$=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=wr(t,n),t in Tr)return;Tr[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:Cr,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Er=Sr({history:Wn(),routes:[{path:`/login`,name:`Login`,component:()=>$(()=>import(`./Login-B4C149oC.js`),__vite__mapDeps([0,1,2]))},{path:`/`,component:()=>$(()=>import(`./DefaultLayout-DelfwTTT.js`),__vite__mapDeps([3,4,1,2,5,6,7])),meta:{requiresAuth:!0},children:[{path:``,name:`Dashboard`,component:()=>$(()=>import(`./Dashboard-pjIWWLub.js`),__vite__mapDeps([8,4,1,9,2,10,11,12]))},{path:`projects`,name:`ProjectList`,component:()=>$(()=>import(`./ProjectList-9rbMuJeY.js`),__vite__mapDeps([13,1,2,11,12]))},{path:`projects/:id/files`,name:`ProjectFiles`,component:()=>$(()=>import(`./FileExplorer-xY5ejhhN.js`),__vite__mapDeps([14,1,2,15]))},{path:`projects/:id`,name:`ProjectDetail`,component:()=>$(()=>import(`./ProjectDetail-Z8cZoqr5.js`),__vite__mapDeps([16,1,2,15,17,18,6]))},{path:`logs`,name:`LogBoard`,component:()=>$(()=>import(`./LogBoard-tT61QjOx.js`),__vite__mapDeps([19,1,2,10,17,11,20]))},{path:`settings`,name:`Settings`,component:()=>$(()=>import(`./Settings-CtCNDUXY.js`),__vite__mapDeps([21,1,2,9,17,18,12,5]))}]}]});Er.beforeEach((e,t,n)=>{let r=fe();e.meta.requiresAuth&&!r.adminToken?n(`/login`):e.path===`/login`&&r.adminToken?n(`/`):n()});var Dr=`kite-theme`,Or=ue(`theme`,()=>{let e=d(localStorage.getItem(Dr)||`dark`),t=()=>window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`,n=d(e.value===`system`?t():e.value),r=e=>{n.value=e,document.documentElement.classList.toggle(`dark`,e===`dark`)};return window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{e.value===`system`&&r(t())}),r(e.value===`system`?t():e.value),{mode:e,resolvedTheme:n,setMode:n=>{e.value=n,localStorage.setItem(Dr,n),r(n===`system`?t():n)}}}),kr=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},Ar={};function jr(e,t){let i=r(`router-view`);return n(),pe(i)}var Mr=Tt(kr(Ar,[[`render`,jr]])),Nr=ce();Mr.use(Nr),Mr.use(Er),Or(Nr),Mr.mount(`#app`);export{be as a,xt as c,zt as i,Or as n,gt as o,Bt as r,lt as s,kr as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:Inter,system-ui,sans-serif;line-height:1.5}body{line-height:inherit;margin:0}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:JetBrains Mono,Fira Code,monospace;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}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}body{background-color:var(--color-base);color:var(--color-text-main);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;padding:0;font-family:Inter,system-ui,sans-serif;overflow-x:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.bottom-0{bottom:0}.left-0{left:0}.right-2{right:.5rem}.right-3{right:.75rem}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:.5rem}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-\[400px\]{height:400px}.h-\[500px\]{height:500px}.h-\[calc\(100vh-4rem\)\]{height:calc(100vh - 4rem)}.h-full{height:100%}.h-screen{height:100vh}.min-h-0{min-height:0}.min-h-\[100px\]{min-height:100px}.min-h-\[40px\]{min-height:40px}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0}.max-w-4xl{max-width:56rem}.max-w-7xl{max-width:80rem}.max-w-md{max-width:28rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:var(--color-border)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-border{border-color:var(--color-border)}.border-danger{border-color:var(--color-danger)}.border-primary{border-color:var(--color-primary)}.border-transparent{border-color:#0000}.bg-\[\#09090b\]{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.bg-base{background-color:var(--color-base)}.bg-black\/60{background-color:#0009}.bg-black\/\[0\.02\]{background-color:#00000005}.bg-danger{background-color:var(--color-danger)}.bg-panel{background-color:var(--color-panel)}.bg-primary{background-color:var(--color-primary)}.bg-success{background-color:var(--color-success)}.bg-textMain{background-color:var(--color-text-main)}.bg-yellow-500\/80{background-color:#eab308cc}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-12{padding-bottom:3rem}.pl-11{padding-left:2.75rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pr-10{padding-right:2.5rem}.pr-12{padding-right:3rem}.pr-4{padding-right:1rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,Fira Code,monospace}.font-sans{font-family:Inter,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-\[\#f4f4f5\]{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity,1))}.text-base{color:var(--color-base)}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-danger{color:var(--color-danger)}.text-primary{color:var(--color-primary)}.text-success{color:var(--color-success)}.text-textMain{color:var(--color-text-main)}.text-textMuted{color:var(--color-text-muted)}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_10px_rgba\(59\,130\,246\,0\.1\)\]{--tw-shadow:0 0 10px #3b82f61a;--tw-shadow-colored:0 0 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(59\,130\,246\,0\.15\)\]{--tw-shadow:0 0 12px #3b82f626;--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_15px_rgba\(59\,130\,246\,0\.3\)\]{--tw-shadow:0 0 15px #3b82f64d;--tw-shadow-colored:0 0 15px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_30px_rgba\(59\,130\,246\,0\.15\)\]{--tw-shadow:0 0 30px #3b82f626;--tw-shadow-colored:0 0 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_8px_\#10b981\]{--tw-shadow:0 0 8px #10b981;--tw-shadow-colored:0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_8px_currentColor\]{--tw-shadow:0 0 8px currentColor;--tw-shadow-colored:0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[inset_2px_0_0_0_\#3b82f6\]{--tw-shadow:inset 2px 0 0 0 #3b82f6;--tw-shadow-colored:inset 2px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.blur-\[2px\]{--tw-blur:blur(2px);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)}.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)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}:root{--color-base:#fff;--color-panel:#f8f9fa;--color-border:#e5e7eb;--color-primary:#3b82f6;--color-success:#10b981;--color-danger:#ef4444;--color-text-main:#18181b;--color-text-muted:#71717a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.dark{--color-base:#09090b;--color-panel:#18181b;--color-border:#27272a;--color-primary:#3b82f6;--color-success:#10b981;--color-danger:#ef4444;--color-text-main:#f4f4f5;--color-text-muted:#a1a1aa;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:9999px}::-webkit-scrollbar-thumb:hover{background-color:var(--color-text-muted)}.placeholder\:font-sans::placeholder{font-family:Inter,system-ui,sans-serif}.hover\:border-danger:hover{border-color:var(--color-danger)}.hover\:bg-black\/10:hover{background-color:#0000001a}.hover\:bg-black\/5:hover{background-color:#0000000d}.hover\:bg-danger:hover{background-color:var(--color-danger)}.hover\:bg-primary:hover{background-color:var(--color-primary)}.hover\:text-primary:hover{color:var(--color-primary)}.hover\:text-textMain:hover{color:var(--color-text-main)}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:shadow-\[0_0_15px_rgba\(59\,130\,246\,0\.4\)\]:hover{--tw-shadow:0 0 15px #3b82f666;--tw-shadow-colored:0 0 15px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.focus\:border-danger:focus{border-color:var(--color-danger)}.focus\:border-primary:focus{border-color:var(--color-primary)}.focus\:outline-none:focus{outline-offset:2px;outline:2px solid #0000}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:text-primary{color:var(--color-primary)}.group:hover .group-hover\:text-textMain{color:var(--color-text-main)}.dark\:bg-white\/\[0\.02\]:is(.dark *){background-color:#ffffff05}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:#ffffff1a}.dark\:hover\:bg-white\/5:hover:is(.dark *){background-color:#ffffff0d}@media (width>=640px){.sm\:w-auto{width:auto}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}}@media (width>=768px){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:p-8{padding:2rem}}@media (width>=1024px){.lg\:h-auto{height:auto}.lg\:w-1\/3{width:33.3333%}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}}
|