agent-tower 0.5.1 → 0.5.2-beta.1
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/dist/app.d.ts.map +1 -1
- package/dist/app.js +4 -0
- package/dist/app.js.map +1 -1
- package/dist/core/container.d.ts +2 -0
- package/dist/core/container.d.ts.map +1 -1
- package/dist/core/container.js +8 -0
- package/dist/core/container.js.map +1 -1
- package/dist/executors/__tests__/codex.executor.test.js +348 -7
- package/dist/executors/__tests__/codex.executor.test.js.map +1 -1
- package/dist/executors/codex.executor.d.ts +18 -1
- package/dist/executors/codex.executor.d.ts.map +1 -1
- package/dist/executors/codex.executor.js +75 -7
- package/dist/executors/codex.executor.js.map +1 -1
- package/dist/mcp/http-client.d.ts +4 -1
- package/dist/mcp/http-client.d.ts.map +1 -1
- package/dist/mcp/http-client.js +2 -2
- package/dist/mcp/http-client.js.map +1 -1
- package/dist/mcp/tools/workspaces.d.ts.map +1 -1
- package/dist/mcp/tools/workspaces.js +4 -1
- package/dist/mcp/tools/workspaces.js.map +1 -1
- package/dist/mcp/types.d.ts +3 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -1
- package/dist/routes/__tests__/tasks.test.js +37 -0
- package/dist/routes/__tests__/tasks.test.js.map +1 -1
- package/dist/routes/git.d.ts.map +1 -1
- package/dist/routes/git.js +6 -1
- package/dist/routes/git.js.map +1 -1
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +12 -0
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/system.d.ts.map +1 -1
- package/dist/routes/system.js +21 -5
- package/dist/routes/system.js.map +1 -1
- package/dist/routes/tasks.js +2 -2
- package/dist/routes/tasks.js.map +1 -1
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/routes/workspaces.js +11 -4
- package/dist/routes/workspaces.js.map +1 -1
- package/dist/services/__tests__/project.service.test.d.ts +2 -0
- package/dist/services/__tests__/project.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/project.service.test.js +62 -0
- package/dist/services/__tests__/project.service.test.js.map +1 -0
- package/dist/services/__tests__/session-manager.team-run.test.js +98 -0
- package/dist/services/__tests__/session-manager.team-run.test.js.map +1 -1
- package/dist/services/__tests__/task.service.test.js +416 -38
- package/dist/services/__tests__/task.service.test.js.map +1 -1
- package/dist/services/__tests__/team-reconciler.service.test.js +68 -0
- package/dist/services/__tests__/team-reconciler.service.test.js.map +1 -1
- package/dist/services/__tests__/team-run.service.test.js +47 -1
- package/dist/services/__tests__/team-run.service.test.js.map +1 -1
- package/dist/services/__tests__/team-scheduler.service.test.js +49 -0
- package/dist/services/__tests__/team-scheduler.service.test.js.map +1 -1
- package/dist/services/__tests__/workspace.service.test.js +157 -0
- package/dist/services/__tests__/workspace.service.test.js.map +1 -1
- package/dist/services/commit-message.service.d.ts.map +1 -1
- package/dist/services/commit-message.service.js +3 -0
- package/dist/services/commit-message.service.js.map +1 -1
- package/dist/services/deleted-task-guard.d.ts +11 -0
- package/dist/services/deleted-task-guard.d.ts.map +1 -0
- package/dist/services/deleted-task-guard.js +10 -0
- package/dist/services/deleted-task-guard.js.map +1 -0
- package/dist/services/project.service.d.ts +1 -0
- package/dist/services/project.service.d.ts.map +1 -1
- package/dist/services/project.service.js +4 -3
- package/dist/services/project.service.js.map +1 -1
- package/dist/services/session-manager.d.ts +55 -1
- package/dist/services/session-manager.d.ts.map +1 -1
- package/dist/services/session-manager.js +133 -41
- package/dist/services/session-manager.js.map +1 -1
- package/dist/services/task-cleanup.service.d.ts +48 -0
- package/dist/services/task-cleanup.service.d.ts.map +1 -0
- package/dist/services/task-cleanup.service.js +209 -0
- package/dist/services/task-cleanup.service.js.map +1 -0
- package/dist/services/task.service.d.ts +19 -7
- package/dist/services/task.service.d.ts.map +1 -1
- package/dist/services/task.service.js +139 -63
- package/dist/services/task.service.js.map +1 -1
- package/dist/services/team-reconciler.service.d.ts.map +1 -1
- package/dist/services/team-reconciler.service.js +21 -1
- package/dist/services/team-reconciler.service.js.map +1 -1
- package/dist/services/team-run.service.d.ts.map +1 -1
- package/dist/services/team-run.service.js +15 -1
- package/dist/services/team-run.service.js.map +1 -1
- package/dist/services/team-scheduler.service.d.ts +3 -1
- package/dist/services/team-scheduler.service.d.ts.map +1 -1
- package/dist/services/team-scheduler.service.js +16 -0
- package/dist/services/team-scheduler.service.js.map +1 -1
- package/dist/services/workspace-kind.d.ts +13 -0
- package/dist/services/workspace-kind.d.ts.map +1 -0
- package/dist/services/workspace-kind.js +16 -0
- package/dist/services/workspace-kind.js.map +1 -0
- package/dist/services/workspace.service.d.ts +26 -0
- package/dist/services/workspace.service.d.ts.map +1 -1
- package/dist/services/workspace.service.js +173 -23
- package/dist/services/workspace.service.js.map +1 -1
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -1
- package/dist/web/assets/AgentDemoPage-CkhVcgZo.js +1 -0
- package/dist/web/assets/{DemoPage-DeXHpe0f.js → DemoPage-dkmp8Vvn.js} +3 -3
- package/dist/web/assets/GeneralSettingsPage-B4DH6g3D.js +1 -0
- package/dist/web/assets/MemberAvatar-pwugXGL4.js +1 -0
- package/dist/web/assets/NotificationSettingsPage-C-bPU_ZE.js +1 -0
- package/dist/web/assets/ProfileSettingsPage-Dlr6BmHb.js +3 -0
- package/dist/web/assets/ProjectKanbanPage-7oEfjjWV.js +89 -0
- package/dist/web/assets/ProjectSettingsPage-DZZksq5G.js +2 -0
- package/dist/web/assets/ProviderSettingsPage-BWN7CEG6.js +54 -0
- package/dist/web/assets/SettingsSection-C-sMhXpf.js +1 -0
- package/dist/web/assets/TeamSettingsPage-924xpocx.js +1 -0
- package/dist/web/assets/arrow-left-UHjQiY5K.js +1 -0
- package/dist/web/assets/button-CUTjpRqw.js +1 -0
- package/dist/web/assets/check-CPkZgPjx.js +1 -0
- package/dist/web/assets/chevron-down-Bby7sJEv.js +1 -0
- package/dist/web/assets/chevron-right-DCC0lyoB.js +1 -0
- package/dist/web/assets/{chevron-up-xy9sRgGr.js → chevron-up-BnCoaejn.js} +1 -1
- package/dist/web/assets/{circle-check-D53Ur01f.js → circle-check-BscClK07.js} +1 -1
- package/dist/web/assets/{code-block-OCS4YCEC-BHTzJkrx.js → code-block-OCS4YCEC-DkMlYSza.js} +1 -1
- package/dist/web/assets/confirm-dialog-wsb35VpE.js +1 -0
- package/dist/web/assets/folder-picker-B-X_nrS1.js +1 -0
- package/dist/web/assets/index-4hNWw0yi.css +1 -0
- package/dist/web/assets/index-CUJoWIuo.js +13 -0
- package/dist/web/assets/loader-circle-Cul4BuAa.js +1 -0
- package/dist/web/assets/log-adapter-CtvxzS4j.js +1 -0
- package/dist/web/assets/{mermaid-NOHMQCX5-BSPQ7bmi.js → mermaid-NOHMQCX5-DoPzf-UA.js} +53 -53
- package/dist/web/assets/message-square-C7Q71jFj.js +1 -0
- package/dist/web/assets/modal-25-qs8P5.js +1 -0
- package/dist/web/assets/{pencil-zfyDXHtM.js → pencil-CaJR6Dqm.js} +1 -1
- package/dist/web/assets/rotate-ccw-Bvz7590n.js +1 -0
- package/dist/web/assets/{select-CEtSClHi.js → select-CzeTYLO4.js} +1 -1
- package/dist/web/assets/upload-_2T21rVP.js +1 -0
- package/dist/web/assets/{use-profiles-BrCaq-M0.js → use-profiles-BaCwGP06.js} +1 -1
- package/dist/web/assets/{use-providers-BmGR6zlI.js → use-providers-Bwl7R5Ql.js} +1 -1
- package/dist/web/index.html +2 -2
- package/node_modules/@agent-tower/shared/dist/types.d.ts +10 -0
- package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/types.js +6 -0
- package/node_modules/@agent-tower/shared/dist/types.js.map +1 -1
- package/node_modules/@prisma/client/.prisma/client/edge.js +24 -5
- package/node_modules/@prisma/client/.prisma/client/index-browser.js +19 -0
- package/node_modules/@prisma/client/.prisma/client/index.d.ts +1652 -142
- package/node_modules/@prisma/client/.prisma/client/index.js +24 -5
- package/node_modules/@prisma/client/.prisma/client/package.json +1 -1
- package/node_modules/@prisma/client/.prisma/client/schema.prisma +29 -1
- package/node_modules/@prisma/client/.prisma/client/wasm.js +19 -0
- package/package.json +1 -1
- package/prisma/migrations/20260603000000_add_task_cleanup_jobs/migration.sql +21 -0
- package/prisma/migrations/20260609000000_add_workspace_kind_working_dir/migration.sql +7 -0
- package/prisma/schema.prisma +29 -1
- package/dist/web/assets/AgentDemoPage-C41Npg-J.js +0 -1
- package/dist/web/assets/GeneralSettingsPage-ROIAXf_I.js +0 -1
- package/dist/web/assets/MemberAvatar-Bgb9cNkt.js +0 -1
- package/dist/web/assets/NotificationSettingsPage-BSFFB_Xk.js +0 -1
- package/dist/web/assets/ProfileSettingsPage-n6J_nKUb.js +0 -3
- package/dist/web/assets/ProjectKanbanPage-BUwfUX3X.js +0 -90
- package/dist/web/assets/ProjectSettingsPage-Dv5Ab2MY.js +0 -2
- package/dist/web/assets/ProviderSettingsPage-Ckp_pVCi.js +0 -54
- package/dist/web/assets/TeamSettingsPage-DjlyHMct.js +0 -1
- package/dist/web/assets/button-_UA8cNod.js +0 -1
- package/dist/web/assets/chevron-down-qLfxqOnz.js +0 -1
- package/dist/web/assets/chevron-right-SY4_v7-h.js +0 -1
- package/dist/web/assets/confirm-dialog-D9WQU47x.js +0 -1
- package/dist/web/assets/folder-picker-DPW13OyX.js +0 -1
- package/dist/web/assets/index-BjIvVVfi.css +0 -1
- package/dist/web/assets/index-BsrxN6e4.js +0 -13
- package/dist/web/assets/loader-circle-CPz4Agyr.js +0 -1
- package/dist/web/assets/log-adapter-i7kNXXup.js +0 -1
- package/dist/web/assets/modal-BLPS1r7Q.js +0 -1
- package/dist/web/assets/upload-hdDyQIIu.js +0 -1
- package/dist/web/assets/utils-CkSf8FUe.js +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{h as se,u as B,r as l,g as ne,j as e,t as T}from"./index-BsrxN6e4.js";import{F as W,a as _,u as re,b as le,c as ae,d as ie,R as oe,e as ce}from"./folder-picker-DPW13OyX.js";import{B as S}from"./button-_UA8cNod.js";import{S as de}from"./select-CEtSClHi.js";import{X as J,P as Q,T as ue,M as G}from"./modal-BLPS1r7Q.js";import"./utils-CkSf8FUe.js";import"./chevron-right-SY4_v7-h.js";import"./loader-circle-CPz4Agyr.js";import"./chevron-down-qLfxqOnz.js";const xe=[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["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"}]],me=se("folder-plus",xe);function pe({value:t,onChange:g,repoPath:b,placeholder:v}){const{t:o}=B(),[i,c]=l.useState(""),[x,h]=l.useState([]),[N,r]=l.useState(!1),[u,y]=l.useState(-1),m=l.useRef(null),f=l.useRef(null),P=l.useRef(void 0),F=l.useCallback(async s=>{if(!b||!s){h([]),r(!1);return}try{const a=await ne.get("/filesystem/complete",{params:{basePath:b,prefix:s}});h(a.results),r(a.results.length>0),y(-1)}catch{h([]),r(!1)}},[b]);l.useEffect(()=>{if(clearTimeout(P.current),!i){h([]),r(!1);return}return P.current=setTimeout(()=>F(i),200),()=>clearTimeout(P.current)},[i,F]),l.useEffect(()=>{const s=a=>{f.current&&!f.current.contains(a.target)&&m.current&&!m.current.contains(a.target)&&r(!1)};return document.addEventListener("mousedown",s),()=>document.removeEventListener("mousedown",s)},[]);const k=s=>{const a=s.trim();!a||t.includes(a)||(g([...t,a]),c(""),r(!1),m.current?.focus())},z=s=>{g(t.filter((a,w)=>w!==s))},D=s=>{s.type==="directory"?(c(s.path),m.current?.focus()):k(s.path)},C=(s,a)=>{a.stopPropagation(),k(s.path.replace(/\/$/,""))},A=s=>{s.nativeEvent.isComposing||s.nativeEvent.keyCode===229||(N&&x.length>0?s.key==="ArrowDown"?(s.preventDefault(),y(a=>Math.min(a+1,x.length-1))):s.key==="ArrowUp"?(s.preventDefault(),y(a=>Math.max(a-1,-1))):s.key==="Enter"?(s.preventDefault(),u>=0?D(x[u]):k(i)):s.key==="Escape"&&r(!1):s.key==="Enter"&&(s.preventDefault(),k(i)))};return e.jsxs("div",{children:[t.length>0&&e.jsx("div",{className:"border border-neutral-200 rounded-lg mb-2 divide-y divide-neutral-100",children:t.map((s,a)=>e.jsxs("div",{className:"flex items-center gap-2 px-3 py-1.5 group",children:[s.includes(".")&&!s.endsWith("/")?e.jsx(W,{size:14,className:"text-neutral-400 shrink-0"}):e.jsx(_,{size:14,className:"text-amber-500 shrink-0"}),e.jsx("span",{className:"text-sm font-mono text-neutral-700 truncate flex-1",children:s}),e.jsx("button",{onClick:()=>z(a),className:"p-0.5 text-neutral-300 hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity shrink-0",children:e.jsx(J,{size:14})})]},s))}),e.jsxs("div",{className:"relative",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{ref:m,type:"text",value:i,onChange:s=>c(s.target.value),onKeyDown:A,onFocus:()=>{i&&x.length>0&&r(!0)},placeholder:v??o("输入文件路径..."),className:"flex-1 px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300"}),e.jsxs("button",{onClick:()=>k(i),disabled:!i.trim(),className:"flex items-center gap-1 px-3 py-2 text-sm bg-neutral-900 text-white rounded-lg hover:bg-neutral-800 disabled:opacity-30 disabled:cursor-not-allowed transition-colors",children:[e.jsx(Q,{size:14}),e.jsx("span",{children:o("添加")})]})]}),N&&e.jsx("div",{ref:f,className:"absolute z-50 left-0 right-0 mt-1 bg-white border border-neutral-200 rounded-lg shadow-lg max-h-[200px] overflow-y-auto",children:x.map((s,a)=>e.jsxs("button",{onClick:()=>D(s),className:`w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left hover:bg-neutral-50 transition-colors ${a===u?"bg-neutral-100":""}`,children:[s.type==="directory"?e.jsx(_,{size:14,className:"text-amber-500 shrink-0"}):e.jsx(W,{size:14,className:"text-neutral-400 shrink-0"}),e.jsx("span",{className:"font-mono text-neutral-700 truncate flex-1",children:s.path}),s.type==="directory"&&e.jsx("span",{onClick:w=>C(s,w),className:"p-0.5 text-neutral-300 hover:text-emerald-600 shrink-0",title:o("添加此目录"),children:e.jsx(me,{size:14})})]},s.path))})]})]})}function he({value:t,onChange:g}){const{t:b}=B(),[v,o]=l.useState(""),[i,c]=l.useState(""),x=()=>{const r=v.trim(),u=i.trim();!r||!u||(g([...t,{name:r,command:u}]),o(""),c(""))},h=r=>{g(t.filter((u,y)=>y!==r))},N=r=>{r.key==="Enter"&&!r.nativeEvent.isComposing&&r.nativeEvent.keyCode!==229&&(r.preventDefault(),x())};return e.jsxs("div",{children:[t.length>0&&e.jsx("div",{className:"border border-neutral-200 rounded-lg mb-2 divide-y divide-neutral-100",children:t.map((r,u)=>e.jsxs("div",{className:"flex items-center gap-3 px-3 py-2 group",children:[e.jsx("span",{className:"text-sm font-medium text-neutral-700 w-28 shrink-0 truncate",children:r.name}),e.jsx("span",{className:"text-sm font-mono text-neutral-500 flex-1 truncate",children:r.command}),e.jsx("button",{onClick:()=>h(u),className:"p-0.5 text-neutral-300 hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity shrink-0",children:e.jsx(J,{size:14})})]},u))}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:v,onChange:r=>o(r.target.value),onKeyDown:N,placeholder:b("名称"),className:"w-28 shrink-0 px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:ring-1 focus:ring-neutral-300"}),e.jsx("input",{type:"text",value:i,onChange:r=>c(r.target.value),onKeyDown:N,placeholder:b("命令"),className:"flex-1 px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300"}),e.jsxs("button",{onClick:x,disabled:!v.trim()||!i.trim(),className:"flex items-center gap-1 px-3 py-2 text-sm bg-neutral-900 text-white rounded-lg hover:bg-neutral-800 disabled:opacity-30 disabled:cursor-not-allowed transition-colors shrink-0",children:[e.jsx(Q,{size:14}),e.jsx("span",{children:b("添加")})]})]})]})}function fe(t){return t?t.split(",").map(g=>g.trim()).filter(Boolean):[]}function je(t){if(!t)return[];try{return JSON.parse(t)}catch{return[]}}function $(t){return typeof t.color!="string"||t.color.trim()===""?"bg-neutral-400":t.color.startsWith("bg-")?t.color:t.color.startsWith("text-")?t.color.replace("text-","bg-"):"bg-neutral-400"}function Re(){const{t}=B(),{data:g,isLoading:b}=re({limit:100,includeArchived:!0}),v=le(),o=ae(),i=ie(),[c,x]=l.useState(""),[h,N]=l.useState(null),[r,u]=l.useState({copyFiles:[],setupScript:"",quickCommands:[]}),[y,m]=l.useState(!1),[f,P]=l.useState(null),[F,k]=l.useState(!1),[z,D]=l.useState(!1),[C,A]=l.useState(!1),[s,a]=l.useState(!1),[w,I]=l.useState(""),R=g?.data??[],j=l.useMemo(()=>R.filter(n=>!n.archivedAt),[R]),E=l.useMemo(()=>R.filter(n=>n.archivedAt),[R]),d=j.find(n=>n.id===c),q=l.useMemo(()=>R.find(n=>n.id===f)??null,[f,R]);if(l.useEffect(()=>{!c&&j.length>0&&x(j[0].id)},[j,c]),l.useEffect(()=>{if(h){j.some(n=>n.id===h)&&(x(h),N(null));return}c&&!j.some(n=>n.id===c)&&(x(j[0]?.id??""),m(!1))},[j,h,c]),l.useEffect(()=>{d&&!y&&u({copyFiles:fe(d.copyFiles),setupScript:d.setupScript??"",quickCommands:je(d.quickCommands)})},[d,y]),b)return e.jsx("div",{className:"p-6 text-sm text-neutral-400",children:t("加载中...")});if(R.length===0)return e.jsx("div",{className:"p-6 text-sm text-neutral-400",children:t("暂无项目,请先创建项目")});const H=j.map(n=>({value:n.id,label:n.name})),V=()=>{c&&v.mutate({id:c,copyFiles:r.copyFiles.length>0?r.copyFiles.join(", "):null,setupScript:r.setupScript.trim()||null,quickCommands:r.quickCommands.length>0?JSON.stringify(r.quickCommands):null},{onSuccess:()=>m(!1)})},X=n=>{N(null),x(n),m(!1)},Z=()=>{d&&(P(d.id),A(!1),a(!1),k(!0))},O=()=>{o.isPending||(k(!1),P(null),A(!1),a(!1))},Y=async()=>{if(f)try{await o.mutateAsync({id:f,deleteRepo:C}),T.success(t(C?"项目已删除,并清理了本地文件":"项目已删除")),m(!1),O()}catch{}},ee=n=>{const p=E.find(U=>U.id===n);P(n),I(p?.repoDeletedAt?p.repoPath:""),D(!0)},M=()=>{i.isPending||(D(!1),P(null),I(""))},te=async()=>{if(!(!f||q?.repoDeletedAt&&!w.trim()))try{const p=await i.mutateAsync({id:f,repoPath:w.trim()||void 0});T.success(t("项目已恢复"));for(const U of p.warnings)T.warning(U);m(!1),N(p.project.id),x(p.project.id),M()}catch{}},K=q?.name??t("this project"),L=!!q?.repoDeletedAt;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"px-10 py-6 mx-auto w-full max-w-4xl space-y-8",children:[e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:t("项目配置")}),e.jsx("p",{className:"text-[12px] text-neutral-400",children:t("配置当前项目的 worktree 初始化行为,并在此页统一管理删除与恢复。")})]}),j.length>0?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[12px] font-medium text-neutral-700 mb-2",children:t("选择项目")}),e.jsx(de,{value:c,onChange:X,options:H,placeholder:t("选择项目...")})]}),d?e.jsx("div",{className:"rounded-xl border border-neutral-200 bg-neutral-50 px-4 py-4",children:e.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-start md:justify-between",children:[e.jsxs("div",{className:"space-y-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`h-2.5 w-2.5 rounded-full ${$(d)}`}),e.jsx("p",{className:"text-sm font-medium text-neutral-900",children:d.name})]}),e.jsx("p",{className:"text-xs text-neutral-500 break-all",children:d.repoPath}),d.repoRemoteUrl?e.jsxs("p",{className:"text-xs text-neutral-400 break-all",children:[t("Remote"),": ",d.repoRemoteUrl]}):null]}),e.jsxs("div",{className:"flex flex-col items-stretch gap-2 md:items-end",children:[e.jsxs(S,{size:"sm",variant:"destructive",onClick:Z,disabled:o.isPending||i.isPending,children:[e.jsx(ue,{size:14}),t("删除项目")]}),e.jsx("p",{className:"text-[11px] text-neutral-500 md:max-w-56 md:text-right",children:t("删除后项目会从默认列表隐藏,但历史任务、workspace 与会话记录仍会保留。")})]})]})}):null]}):e.jsx("div",{className:"rounded-xl border border-dashed border-neutral-200 bg-neutral-50 px-4 py-5 text-sm text-neutral-500",children:t("当前没有可配置的项目。你可以先创建项目,或在下方恢复已删除项目。")})]}),d?e.jsxs(e.Fragment,{children:[e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:t("自动复制文件")}),e.jsx("p",{className:"text-[12px] text-neutral-400 mb-3",children:t("创建 worktree 时自动从主仓库复制的文件或目录。支持 glob 模式。")}),e.jsx(pe,{value:r.copyFiles,onChange:n=>{u(p=>({...p,copyFiles:n})),m(!0)},repoPath:d.repoPath}),e.jsx("p",{className:"text-[11px] text-neutral-400 mt-2",children:t("适用于不在 git 管理中但启动必需的文件,如 .env、node_modules、数据库文件等")})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:t("Setup 脚本")}),e.jsx("p",{className:"text-[12px] text-neutral-400 mb-3",children:t("创建 worktree 后自动执行的命令,每行一条,按顺序执行。")}),e.jsx("textarea",{value:r.setupScript,onChange:n=>{u(p=>({...p,setupScript:n.target.value})),m(!0)},placeholder:`pnpm install
|
|
2
|
-
pnpm run setup`,rows:4,className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300 resize-none"}),e.jsx("p",{className:"text-[11px] text-neutral-400 mt-1",children:t("命令在 worktree 目录下执行,单条命令超时 5 分钟,失败不会阻断后续命令")})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:t("常用命令")}),e.jsx("p",{className:"text-[12px] text-neutral-400 mb-3",children:t("在终端中可快速执行的命令,不会自动运行。")}),e.jsx(he,{value:r.quickCommands,onChange:n=>{u(p=>({...p,quickCommands:n})),m(!0)}})]})]}):null,e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:t("已删除项目")}),e.jsx("p",{className:"text-[12px] text-neutral-400",children:t("这些项目不会出现在主看板里,但历史记录仍保留;如源码已删除,恢复时需要重新绑定 repoPath。")})]}),e.jsx("span",{className:"rounded-full bg-neutral-100 px-2.5 py-1 text-[11px] font-medium text-neutral-500",children:E.length})]}),E.length===0?e.jsx("div",{className:"rounded-xl border border-dashed border-neutral-200 bg-neutral-50 px-4 py-5 text-sm text-neutral-500",children:t("暂无已删除项目")}):e.jsx("div",{className:"space-y-3",children:E.map(n=>e.jsx("div",{className:"rounded-xl border border-neutral-200 bg-white px-4 py-4",children:e.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-start md:justify-between",children:[e.jsxs("div",{className:"space-y-2 min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:`h-2.5 w-2.5 rounded-full ${$(n)}`}),e.jsx("p",{className:"text-sm font-medium text-neutral-900",children:n.name}),e.jsx("span",{className:"rounded-full bg-neutral-100 px-2 py-0.5 text-[10px] font-medium text-neutral-500",children:t("已删除")}),n.repoDeletedAt?e.jsx("span",{className:"rounded-full bg-amber-100 px-2 py-0.5 text-[10px] font-medium text-amber-700",children:t("源码已删除")}):null]}),n.repoDeletedAt?e.jsx("p",{className:"text-xs text-neutral-500",children:t("本地源码目录已删除,相关 Git/代码能力已禁用。恢复时需要重新绑定一个有效仓库路径。")}):e.jsx("p",{className:"text-xs text-neutral-500 break-all",children:n.repoPath}),n.repoRemoteUrl?e.jsxs("p",{className:"text-xs text-neutral-400 break-all",children:[t("Remote"),": ",n.repoRemoteUrl]}):null]}),e.jsxs(S,{size:"sm",variant:"outline",onClick:()=>ee(n.id),disabled:o.isPending||i.isPending,children:[e.jsx(oe,{size:14}),t("恢复")]})]})},n.id))})]}),y&&d?e.jsx("div",{className:"sticky bottom-6 flex justify-end",children:e.jsx(S,{size:"sm",onClick:V,disabled:v.isPending,children:v.isPending?t("保存中..."):t("保存")})}):null]}),e.jsx(G,{isOpen:F,onClose:O,title:t("Delete Project"),action:e.jsxs(e.Fragment,{children:[e.jsx(S,{variant:"outline",onClick:O,disabled:o.isPending,children:t("Cancel")}),e.jsx(S,{variant:"destructive",onClick:Y,disabled:o.isPending||C&&!s,children:o.isPending?t("Deleting..."):t("Delete Project")})]}),children:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-neutral-600 leading-relaxed",children:t("项目「{title}」将从默认项目列表隐藏,但历史任务、workspace 和会话记录仍会保留。",{title:K})}),e.jsxs("label",{className:"flex items-start gap-3 rounded-lg border border-neutral-200 bg-neutral-50 px-3 py-3",children:[e.jsx("input",{type:"checkbox",checked:C,onChange:n=>{A(n.target.checked),n.target.checked||a(!1)},className:"mt-0.5"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-neutral-900",children:t("同时删除本地项目文件")}),e.jsx("p",{className:"mt-1 text-xs text-neutral-500",children:t("勾选后会删除 repoPath 指向的本地仓库目录,并禁用代码/Git 相关能力。")})]})]}),C?e.jsxs("div",{className:"rounded-lg border border-red-200 bg-red-50 px-3 py-3",children:[e.jsx("p",{className:"text-sm font-medium text-red-700",children:t("勾选后会连项目文件一起删除,请谨慎选择。")}),e.jsx("p",{className:"mt-1 text-xs text-red-600",children:t("恢复该项目时需要重新绑定一个有效的 Git 仓库路径。")}),e.jsxs("label",{className:"mt-3 flex items-start gap-2 text-xs text-red-700",children:[e.jsx("input",{type:"checkbox",checked:s,onChange:n=>a(n.target.checked),className:"mt-0.5"}),e.jsx("span",{children:t("我已确认这会删除本地项目文件")})]})]}):null,o.isError?e.jsx("p",{className:"text-xs text-red-500",children:o.error instanceof Error?o.error.message:t("Failed to delete project")}):null]})}),e.jsx(G,{isOpen:z,onClose:M,title:t("Restore Project"),action:e.jsxs(e.Fragment,{children:[e.jsx(S,{variant:"outline",onClick:M,disabled:i.isPending,children:t("Cancel")}),e.jsx(S,{onClick:te,disabled:i.isPending||L&&!w.trim(),children:i.isPending?t("Restoring..."):t("Restore Project")})]}),children:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-neutral-600 leading-relaxed",children:L?t("项目「{title}」的本地仓库文件已删除。恢复前需要重新绑定一个有效的 Git 仓库路径。",{title:K}):t("恢复后,项目会重新出现在默认项目列表中。")}),L?e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-neutral-700 mb-1.5",children:t("Repository Path")}),e.jsx(ce,{value:w,onChange:I}),e.jsx("p",{className:"mt-2 text-xs text-neutral-400",children:t("Agent Tower 会尽量校验仓库 identity;如果 remote URL 或目录名不同,会给出警告但允许继续。")})]}):null,i.isError?e.jsx("p",{className:"text-xs text-red-500",children:i.error instanceof Error?i.error.message:t("Failed to restore project")}):null]})})]})}export{Re as ProjectSettingsPage};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import{h as ne,d as be,q as ve,g as ye,u as T,r as w,j as n,t as P,w as W}from"./index-BsrxN6e4.js";import{u as je,a as we,b as Ne,c as Ce,d as Ee,e as ke,f as Pe}from"./use-providers-BmGR6zlI.js";import{B as E}from"./button-_UA8cNod.js";import{C as Oe}from"./confirm-dialog-D9WQU47x.js";import{P as re,T as se,M as $}from"./modal-BLPS1r7Q.js";import{S as le}from"./select-CEtSClHi.js";import{A as N}from"./log-adapter-i7kNXXup.js";import{c as U}from"./utils-CkSf8FUe.js";import{C as ae}from"./chevron-down-qLfxqOnz.js";import{U as _e}from"./upload-hdDyQIIu.js";import{P as Ie}from"./pencil-zfyDXHtM.js";import{C as Te}from"./circle-check-D53Ur01f.js";const Ae=[["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"}]],Se=ne("circle-x",Ae);const De=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],Le=ne("download",De);function Re(e,t){let l=e.slice(0,t).split(/\r\n|\n|\r/g);return[l.length,l.pop().length+1]}function Fe(e,t,l){let i=e.split(/\r\n|\n|\r/g),a="",s=(Math.log10(t+1)|0)+1;for(let r=t-1;r<=t+1;r++){let o=i[r-1];o&&(a+=r.toString().padEnd(s," "),a+=": ",a+=o,a+=`
|
|
2
|
-
`,r===t&&(a+=" ".repeat(s+l+2),a+=`^
|
|
3
|
-
`))}return a}class f extends Error{line;column;codeblock;constructor(t,l){const[i,a]=Re(l.toml,l.ptr),s=Fe(l.toml,i,a);super(`Invalid TOML document: ${t}
|
|
4
|
-
|
|
5
|
-
${s}`,l),this.line=i,this.column=a,this.codeblock=s}}function Me(e,t){let l=0;for(;e[t-++l]==="\\";);return--l&&l%2}function G(e,t=0,l=e.length){let i=e.indexOf(`
|
|
6
|
-
`,t);return e[i-1]==="\r"&&i--,i<=l?i:-1}function M(e,t){for(let l=t;l<e.length;l++){let i=e[l];if(i===`
|
|
7
|
-
`)return l;if(i==="\r"&&e[l+1]===`
|
|
8
|
-
`)return l+1;if(i<" "&&i!==" "||i==="")throw new f("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function k(e,t,l,i){let a;for(;(a=e[t])===" "||a===" "||!l&&(a===`
|
|
9
|
-
`||a==="\r"&&e[t+1]===`
|
|
10
|
-
`);)t++;return i||a!=="#"?t:k(e,M(e,t),l)}function Ue(e,t,l,i,a=!1){if(!i)return t=G(e,t),t<0?e.length:t;for(let s=t;s<e.length;s++){let r=e[s];if(r==="#")s=G(e,s);else{if(r===l)return s+1;if(r===i||a&&(r===`
|
|
11
|
-
`||r==="\r"&&e[s+1]===`
|
|
12
|
-
`))return s}}throw new f("cannot find end of structure",{toml:e,ptr:t})}function ie(e,t){let l=e[t],i=l===e[t+1]&&e[t+1]===e[t+2]?e.slice(t,t+3):l;t+=i.length-1;do t=e.indexOf(i,++t);while(t>-1&&l!=="'"&&Me(e,t));return t>-1&&(t+=i.length,i.length>1&&(e[t]===l&&t++,e[t]===l&&t++)),t}let ze=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;class S extends Date{#t=!1;#n=!1;#e=null;constructor(t){let l=!0,i=!0,a="Z";if(typeof t=="string"){let s=t.match(ze);s?(s[1]||(l=!1,t=`0000-01-01T${t}`),i=!!s[2],i&&t[10]===" "&&(t=t.replace(" ","T")),s[2]&&+s[2]>23?t="":(a=s[3]||null,t=t.toUpperCase(),!a&&i&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=l,this.#n=i,this.#e=a)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let l=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return l=this.#e[0]==="-"?l:-l,new Date(this.getTime()-l*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,l="Z"){let i=new S(t);return i.#e=l,i}static wrapAsLocalDateTime(t){let l=new S(t);return l.#e=null,l}static wrapAsLocalDate(t){let l=new S(t);return l.#n=!1,l.#e=null,l}static wrapAsLocalTime(t){let l=new S(t);return l.#t=!1,l.#e=null,l}}let Be=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,Ge=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,Ke=/^[+-]?0[0-9_]/,Xe=/^[0-9a-f]{2,8}$/i,Q={b:"\b",t:" ",n:`
|
|
13
|
-
`,f:"\f",r:"\r",e:"\x1B",'"':'"',"\\":"\\"};function oe(e,t=0,l=e.length){let i=e[t]==="'",a=e[t++]===e[t]&&e[t]===e[t+1];a&&(l-=2,e[t+=2]==="\r"&&t++,e[t]===`
|
|
14
|
-
`&&t++);let s=0,r,o="",d=t;for(;t<l-1;){let c=e[t++];if(c===`
|
|
15
|
-
`||c==="\r"&&e[t]===`
|
|
16
|
-
`){if(!a)throw new f("newlines are not allowed in strings",{toml:e,ptr:t-1})}else if(c<" "&&c!==" "||c==="")throw new f("control characters are not allowed in strings",{toml:e,ptr:t-1});if(r){if(r=!1,c==="x"||c==="u"||c==="U"){let p=e.slice(t,t+=c==="x"?2:c==="u"?4:8);if(!Xe.test(p))throw new f("invalid unicode escape",{toml:e,ptr:s});try{o+=String.fromCodePoint(parseInt(p,16))}catch{throw new f("invalid unicode escape",{toml:e,ptr:s})}}else if(a&&(c===`
|
|
17
|
-
`||c===" "||c===" "||c==="\r")){if(t=k(e,t-1,!0),e[t]!==`
|
|
18
|
-
`&&e[t]!=="\r")throw new f("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:s});t=k(e,t)}else if(c in Q)o+=Q[c];else throw new f("unrecognized escape sequence",{toml:e,ptr:s});d=t}else!i&&c==="\\"&&(s=t-1,r=!0,o+=e.slice(d,s))}return o+e.slice(d,l-1)}function $e(e,t,l,i){if(e==="true")return!0;if(e==="false")return!1;if(e==="-inf")return-1/0;if(e==="inf"||e==="+inf")return 1/0;if(e==="nan"||e==="+nan"||e==="-nan")return NaN;if(e==="-0")return i?0n:0;let a=Be.test(e);if(a||Ge.test(e)){if(Ke.test(e))throw new f("leading zeroes are not allowed",{toml:t,ptr:l});e=e.replace(/_/g,"");let r=+e;if(isNaN(r))throw new f("invalid number",{toml:t,ptr:l});if(a){if((a=!Number.isSafeInteger(r))&&!i)throw new f("integer value cannot be represented losslessly",{toml:t,ptr:l});(a||i===!0)&&(r=BigInt(e))}return r}const s=new S(e);if(!s.isValid())throw new f("invalid value",{toml:t,ptr:l});return s}function Ve(e,t,l){let i=e.slice(t,l),a=i.indexOf("#");return a>-1&&(M(e,a),i=i.slice(0,a)),[i.trimEnd(),a]}function V(e,t,l,i,a){if(i===0)throw new f("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let s=e[t];if(s==="["||s==="{"){let[d,c]=s==="["?Je(e,t,i,a):qe(e,t,i,a);if(l){if(c=k(e,c),e[c]===",")c++;else if(e[c]!==l)throw new f("expected comma or end of structure",{toml:e,ptr:c})}return[d,c]}let r;if(s==='"'||s==="'"){r=ie(e,t);let d=oe(e,t,r);if(l){if(r=k(e,r),e[r]&&e[r]!==","&&e[r]!==l&&e[r]!==`
|
|
19
|
-
`&&e[r]!=="\r")throw new f("unexpected character encountered",{toml:e,ptr:r});r+=+(e[r]===",")}return[d,r]}r=Ue(e,t,",",l);let o=Ve(e,t,r-+(e[r-1]===","));if(!o[0])throw new f("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return l&&o[1]>-1&&(r=k(e,t+o[1]),r+=+(e[r]===",")),[$e(o[0],e,t,a),r]}let Ze=/^[a-zA-Z0-9-_]+[ \t]*$/;function K(e,t,l="="){let i=t-1,a=[],s=e.indexOf(l,t);if(s<0)throw new f("incomplete key-value: cannot find end of key",{toml:e,ptr:t});do{let r=e[t=++i];if(r!==" "&&r!==" ")if(r==='"'||r==="'"){if(r===e[t+1]&&r===e[t+2])throw new f("multiline strings are not allowed in keys",{toml:e,ptr:t});let o=ie(e,t);if(o<0)throw new f("unfinished string encountered",{toml:e,ptr:t});i=e.indexOf(".",o);let d=e.slice(o,i<0||i>s?s:i),c=G(d);if(c>-1)throw new f("newlines are not allowed in keys",{toml:e,ptr:t+i+c});if(d.trimStart())throw new f("found extra tokens after the string part",{toml:e,ptr:o});if(s<o&&(s=e.indexOf(l,o),s<0))throw new f("incomplete key-value: cannot find end of key",{toml:e,ptr:t});a.push(oe(e,t,o))}else{i=e.indexOf(".",t);let o=e.slice(t,i<0||i>s?s:i);if(!Ze.test(o))throw new f("only letter, numbers, dashes and underscores are allowed in keys",{toml:e,ptr:t});a.push(o.trimEnd())}}while(i+1&&i<s);return[a,k(e,s+1,!0,!0)]}function qe(e,t,l,i){let a={},s=new Set,r;for(t++;(r=e[t++])!=="}"&&r;){if(r===",")throw new f("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=M(e,t);else if(r!==" "&&r!==" "&&r!==`
|
|
20
|
-
`&&r!=="\r"){let o,d=a,c=!1,[p,v]=K(e,t-1);for(let g=0;g<p.length;g++){if(g&&(d=c?d[o]:d[o]={}),o=p[g],(c=Object.hasOwn(d,o))&&(typeof d[o]!="object"||s.has(d[o])))throw new f("trying to redefine an already defined value",{toml:e,ptr:t});!c&&o==="__proto__"&&Object.defineProperty(d,o,{enumerable:!0,configurable:!0,writable:!0})}if(c)throw new f("trying to redefine an already defined value",{toml:e,ptr:t});let[h,u]=V(e,v,"}",l-1,i);s.add(h),d[o]=h,t=u}}if(!r)throw new f("unfinished table encountered",{toml:e,ptr:t});return[a,t]}function Je(e,t,l,i){let a=[],s;for(t++;(s=e[t++])!=="]"&&s;){if(s===",")throw new f("expected value, found comma",{toml:e,ptr:t-1});if(s==="#")t=M(e,t);else if(s!==" "&&s!==" "&&s!==`
|
|
21
|
-
`&&s!=="\r"){let r=V(e,t-1,"]",l-1,i);a.push(r[0]),t=r[1]}}if(!s)throw new f("unfinished array encountered",{toml:e,ptr:t});return[a,t]}function ee(e,t,l,i){let a=t,s=l,r,o=!1,d;for(let c=0;c<e.length;c++){if(c){if(a=o?a[r]:a[r]={},s=(d=s[r]).c,i===0&&(d.t===1||d.t===2))return null;if(d.t===2){let p=a.length-1;a=a[p],s=s[p].c}}if(r=e[c],(o=Object.hasOwn(a,r))&&s[r]?.t===0&&s[r]?.d)return null;o||(r==="__proto__"&&(Object.defineProperty(a,r,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(s,r,{enumerable:!0,configurable:!0,writable:!0})),s[r]={t:c<e.length-1&&i===2?3:i,d:!1,i:0,c:{}})}if(d=s[r],d.t!==i&&!(i===1&&d.t===3)||(i===2&&(d.d||(d.d=!0,a[r]=[]),a[r].push(a={}),d.c[d.i++]=d={t:1,d:!1,i:0,c:{}}),d.d))return null;if(d.d=!0,i===1)a=o?a[r]:a[r]={};else if(i===0&&o)return null;return[r,a,d.c]}function Ye(e,{maxDepth:t=1e3,integersAsBigInt:l}={}){let i={},a={},s=i,r=a;for(let o=k(e,0);o<e.length;){if(e[o]==="["){let d=e[++o]==="[",c=K(e,o+=+d,"]");if(d){if(e[c[1]-1]!=="]")throw new f("expected end of table declaration",{toml:e,ptr:c[1]-1});c[1]++}let p=ee(c[0],i,a,d?2:1);if(!p)throw new f("trying to redefine an already defined table or value",{toml:e,ptr:o});r=p[2],s=p[1],o=c[1]}else{let d=K(e,o),c=ee(d[0],s,r,0);if(!c)throw new f("trying to redefine an already defined table or value",{toml:e,ptr:o});let p=V(e,d[1],void 0,t,l);c[1][c[0]]=p[0],o=p[1]}if(o=k(e,o,!0),e[o]&&e[o]!==`
|
|
22
|
-
`&&e[o]!=="\r")throw new f("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:o});o=k(e,o)}return i}function He(){return be({queryKey:ve.system.cursorAgentModels,queryFn:()=>ye.get("/system/cursor-agent-models"),staleTime:1e3*60*10})}function We({value:e,onChange:t}){const{t:l}=T(),{data:i,isLoading:a,isError:s}=He(),r=i?.models??[],[o,d]=w.useState(!1),[c,p]=w.useState(""),v=w.useMemo(()=>{const h=c.trim().toLowerCase();return h?r.filter(u=>u.id.toLowerCase().includes(h)||u.label.toLowerCase().includes(h)):r},[r,c]);return n.jsxs("div",{className:"flex flex-col gap-2 flex-1 min-w-0",children:[n.jsx("input",{type:"text",value:e,onChange:h=>{const u=h.target.value;t(u===""?void 0:u)},placeholder:l("留空为 auto;或直接输入模型 ID(与 cursor-agent --model 一致)"),className:"w-full px-3 py-1.5 text-sm border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900 font-mono"}),n.jsxs("button",{type:"button",onClick:()=>d(h=>!h),disabled:a,className:"flex items-center gap-1 text-xs text-neutral-600 hover:text-neutral-900 disabled:opacity-50 w-fit",children:[n.jsx(ae,{size:14,className:U("transition-transform",o&&"rotate-180")}),a?l("正在加载 cursor-agent 模型列表…"):o?l("收起列表"):l("从本机 cursor-agent 选择({count} 个)",{count:r.length})]}),o&&!a&&n.jsxs("div",{className:"rounded-lg border border-neutral-200 bg-white shadow-sm overflow-hidden",children:[n.jsx("input",{type:"text",value:c,onChange:h=>p(h.target.value),placeholder:l("筛选模型…"),className:"w-full px-3 py-2 text-sm border-b border-neutral-100 focus:outline-none focus:ring-1 focus:ring-inset focus:ring-neutral-300"}),n.jsxs("div",{className:"max-h-[min(50vh,22rem)] overflow-y-auto py-1",children:[n.jsx("button",{type:"button",onClick:()=>{t(void 0),d(!1),p("")},className:U("w-full px-3 py-2 text-left text-sm hover:bg-neutral-50",e?"text-neutral-700":"bg-neutral-50 font-medium"),children:l("默认 (auto)")}),v.map(h=>n.jsxs("button",{type:"button",onClick:()=>{t(h.id),d(!1),p("")},className:U("w-full px-3 py-2 text-left text-sm hover:bg-neutral-50 border-t border-neutral-100",e===h.id?"bg-blue-50/80":""),children:[n.jsx("div",{className:"font-mono text-xs text-neutral-900 break-all",children:h.id}),n.jsx("div",{className:"text-xs text-neutral-500 mt-0.5 break-words",children:h.label})]},h.id)),v.length===0&&n.jsx("div",{className:"px-3 py-4 text-xs text-neutral-400 text-center",children:l("无匹配项")})]})]}),(s||i?.error)&&n.jsxs("p",{className:"text-xs text-amber-700",children:[l("无法从本机加载模型列表({error})。仍可手动输入;或在安装 cursor-agent 的机器上运行",{error:i?.error??l("请求失败")}),n.jsx("code",{className:"mx-0.5 bg-neutral-100 px-1 rounded text-[11px]",children:"cursor-agent --list-models"}),l("查看 ID。")]})]})}const Z={CLAUDE_CODE:"Claude Code",GEMINI_CLI:"Gemini CLI",CURSOR_AGENT:"Cursor Agent",CODEX:"Codex"},R={key:"appendPrompt",label:"追加 Prompt",type:"textarea",rows:3,placeholder:"追加到每次 prompt 末尾的文本"},q={[N.CLAUDE_CODE]:[{key:"dangerouslySkipPermissions",label:"跳过权限确认",type:"switch"},{key:"model",label:"模型",type:"input",placeholder:"claude-sonnet-4-20250514"},{key:"effort",label:"推理强度",type:"select",options:[{value:"",label:"默认"},{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"},{value:"xhigh",label:"XHigh"},{value:"max",label:"Max"}]},R],[N.GEMINI_CLI]:[{key:"yolo",label:"跳过权限确认",type:"switch"},{key:"model",label:"模型",type:"input",placeholder:"gemini-2.5-pro"},R],[N.CURSOR_AGENT]:[{key:"force",label:"强制执行",type:"switch"},{key:"model",label:"模型",type:"cursor_model"},R],[N.CODEX]:[{key:"dangerouslyBypassApprovalsAndSandbox",label:"跳过所有确认和沙盒",type:"switch"},{key:"model",label:"模型",type:"input",placeholder:"o3"},{key:"profile",label:"Profile",type:"input",placeholder:"~/.codex/config.toml 中的 profile 名称"},R]};function te(){return{}}function X(e,t){return{...t}}const Qe=JSON.stringify({env:{ANTHROPIC_API_KEY:"",ANTHROPIC_BASE_URL:""}},null,2),et=`# Codex config.toml 配置片段 — 通过 -c 参数注入,不会修改 ~/.codex/config.toml
|
|
23
|
-
# 参考: https://developers.openai.com/codex/config-sample
|
|
24
|
-
|
|
25
|
-
# ─── 模型与推理 ─────────────────────────────────────────────
|
|
26
|
-
# model_reasoning_effort = "medium" # minimal | low | medium | high | xhigh
|
|
27
|
-
# model_reasoning_summary = "auto" # auto | concise | detailed | none
|
|
28
|
-
# model_verbosity = "medium" # low | medium | high
|
|
29
|
-
# service_tier = "flex" # fast | flex
|
|
30
|
-
|
|
31
|
-
# ─── 自定义 Model Provider ──────────────────────────────────
|
|
32
|
-
# model_provider = "azure"
|
|
33
|
-
#
|
|
34
|
-
# [model_providers.azure]
|
|
35
|
-
# name = "Azure OpenAI"
|
|
36
|
-
# base_url = "https://YOUR_PROJECT.openai.azure.com/openai"
|
|
37
|
-
# env_key = "AZURE_OPENAI_API_KEY"
|
|
38
|
-
# env_key_instructions = "Set AZURE_OPENAI_API_KEY in Provider env"
|
|
39
|
-
# wire_api = "responses"
|
|
40
|
-
# query_params = { api-version = "2025-04-01-preview" }
|
|
41
|
-
|
|
42
|
-
# ─── OpenAI 数据驻留 ────────────────────────────────────────
|
|
43
|
-
# [model_providers.openai-us]
|
|
44
|
-
# name = "OpenAI US"
|
|
45
|
-
# base_url = "https://us.api.openai.com/v1"
|
|
46
|
-
# wire_api = "responses"
|
|
47
|
-
# requires_openai_auth = true
|
|
48
|
-
|
|
49
|
-
# ─── 本地 OSS (Ollama) ──────────────────────────────────────
|
|
50
|
-
# [model_providers.ollama]
|
|
51
|
-
# name = "Ollama"
|
|
52
|
-
# base_url = "http://localhost:11434/v1"
|
|
53
|
-
# wire_api = "responses"
|
|
54
|
-
`;function z(e){return e===N.CLAUDE_CODE?Qe:e===N.CODEX?et:""}function tt(e){return e===N.CLAUDE_CODE||e===N.CODEX}const nt=Object.values(q).flat().reduce((e,t)=>(e[t.key]||(e[t.key]=t.label),e),{}),rt=Object.values(q).flat().reduce((e,t)=>(t.options&&(e[t.key]=Object.fromEntries(t.options.map(l=>[l.value,l.label]))),e),{});function st(e,t){return typeof t=="boolean"?t?W("是"):W("否"):typeof t=="string"&&t?rt[e]?.[t]??t:String(t)}function F(e,t){return e instanceof Error?e.message:t}function lt(e){return`agent-tower-provider-backup-${e.replace(/[:.]/g,"-")}.json`}function at(e,t){const l=new Blob([JSON.stringify(t,null,2)],{type:"application/json"}),i=URL.createObjectURL(l),a=document.createElement("a");a.href=i,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}function it(e){switch(e){case"CREATE":return{label:"新增",className:"text-green-700 bg-green-50"};case"OVERWRITE":return{label:"覆盖",className:"text-amber-700 bg-amber-50"};case"SKIP":return{label:"跳过",className:"text-neutral-600 bg-neutral-100"}}}function ot({type:e}){const{t}=T();return e==="LOGIN_DETECTED"||e==="INSTALLATION_FOUND"?n.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 text-xs text-green-700 bg-green-50 rounded",children:[n.jsx(Te,{size:12}),t("可用")]}):n.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 text-xs text-neutral-500 bg-neutral-50 rounded",children:[n.jsx(Se,{size:12}),t("不可用")]})}function B({title:e,defaultOpen:t=!1,children:l}){const[i,a]=w.useState(t);return n.jsxs("div",{className:"border border-neutral-200 rounded-lg",children:[n.jsxs("button",{type:"button",onClick:()=>a(s=>!s),className:"w-full flex items-center justify-between px-4 py-2.5 text-sm font-medium text-neutral-700 hover:bg-neutral-50 transition-colors rounded-lg",children:[e,n.jsx(ae,{size:14,className:`transition-transform ${i?"rotate-180":""}`})]}),i&&n.jsx("div",{className:"px-4 pb-4 space-y-3",children:l})]})}function ct({agentType:e,config:t,onChange:l}){const{t:i}=T(),a=q[e]??[];if(a.length===0)return n.jsx("p",{className:"text-xs text-neutral-400",children:i("该类型暂无运行配置")});const s=(r,o)=>{l({...t,[r]:o})};return n.jsx("div",{className:"space-y-3",children:a.map(r=>r.type==="textarea"?n.jsxs("div",{children:[n.jsx("label",{className:"block text-sm text-neutral-700 mb-1",children:i(r.label)}),n.jsx("textarea",{value:t[r.key]??"",onChange:o=>s(r.key,o.target.value||void 0),placeholder:r.placeholder?i(r.placeholder):void 0,rows:r.rows??3,className:"w-full px-3 py-1.5 text-sm border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900"})]},r.key):r.type==="cursor_model"?n.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-start",children:[n.jsx("label",{className:"text-sm text-neutral-700 w-32 shrink-0 sm:pt-2",children:i(r.label)}),n.jsx(We,{value:t[r.key]??"",onChange:o=>s(r.key,o)})]},r.key):n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsx("label",{className:"text-sm text-neutral-700 w-32 shrink-0",children:i(r.label)}),r.type==="switch"&&n.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[n.jsx("input",{type:"checkbox",checked:!!t[r.key],onChange:o=>s(r.key,o.target.checked),className:"sr-only peer"}),n.jsx("div",{className:"w-9 h-5 bg-neutral-200 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-neutral-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-neutral-900"})]}),r.type==="input"&&n.jsx("input",{type:"text",value:t[r.key]??"",onChange:o=>s(r.key,o.target.value||void 0),placeholder:r.placeholder?i(r.placeholder):void 0,className:"flex-1 px-3 py-1.5 text-sm border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900"}),r.type==="select"&&r.options&&n.jsx(le,{value:t[r.key]??"",onChange:o=>s(r.key,o||void 0),options:r.options,placeholder:i("选择...")})]},r.key))})}function dt({isOpen:e,onClose:t,initialData:l,onSave:i}){const{t:a}=T(),[s,r]=w.useState(l??{name:"",agentType:N.CLAUDE_CODE,config:te(),settings:"",env:[],isDefault:!1}),[o,d]=w.useState("");w.useEffect(()=>{if(!l&&!s.settings){const u=z(s.agentType);u&&r(g=>({...g,settings:u}))}},[]);const c=u=>{r(g=>({...g,agentType:u,config:te(),settings:z(u)}))},p=()=>{d("");const u=X(s.agentType,s.config),g={};for(const[j,O]of Object.entries(u))O!==void 0&&O!==""&&(g[j]=O);const y=s.settings.trim();if(y){if(s.agentType===N.CODEX)try{Ye(y)}catch(j){d(a("TOML 语法错误: {message}",{message:j instanceof Error?j.message:String(j)}));return}else if(s.agentType===N.CLAUDE_CODE)try{JSON.parse(y)}catch{d(a("JSON 语法错误"));return}}const b={};for(const{key:j,value:O}of s.env){const D=j.trim();D&&(b[D]=O)}const C={name:s.name,agentType:s.agentType,config:g,settings:y||void 0,env:Object.keys(b).length>0?b:void 0,isDefault:s.isDefault};i(C)};if(!e)return null;const v=tt(s.agentType),h=s.agentType===N.CODEX;return n.jsx($,{isOpen:e,onClose:t,title:a(l?"编辑 Provider":"新建 Provider"),className:"max-w-2xl",children:n.jsxs("div",{className:"space-y-4",children:[n.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[n.jsxs("div",{children:[n.jsx("label",{className:"block text-xs font-medium text-neutral-700 mb-1",children:a("名称")}),n.jsx("input",{type:"text",value:s.name,onChange:u=>r(g=>({...g,name:u.target.value})),className:"w-full px-3 py-2 text-sm border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900",placeholder:a("例如: Claude Code (官方)")})]}),!l&&n.jsxs("div",{children:[n.jsx("label",{className:"block text-xs font-medium text-neutral-700 mb-1",children:a("Agent 类型")}),n.jsx(le,{value:s.agentType,onChange:u=>c(u),options:Object.values(N).map(u=>({value:u,label:Z[u]??u})),placeholder:a("选择 Agent 类型")})]})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("input",{type:"checkbox",id:"isDefault",checked:s.isDefault,onChange:u=>r(g=>({...g,isDefault:u.target.checked})),className:"w-4 h-4"}),n.jsx("label",{htmlFor:"isDefault",className:"text-sm text-neutral-700",children:a("设为该类型的默认 Provider")})]}),n.jsx(B,{title:a("运行配置"),defaultOpen:!0,children:n.jsx(ct,{agentType:s.agentType,config:s.config,onChange:u=>r(g=>({...g,config:u}))})}),n.jsxs(B,{title:a("环境变量"),defaultOpen:s.env.length>0,children:[n.jsxs("p",{className:"text-xs text-neutral-500 mb-2",children:[a("注入到 Agent 进程的环境变量。Codex 的")," ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"env_key"})," ",a("指定的是变量名,实际值需在此处设置。")]}),n.jsxs("div",{className:"space-y-2",children:[s.env.map((u,g)=>n.jsxs("div",{className:"flex gap-2 items-center",children:[n.jsx("input",{type:"text",value:u.key,onChange:y=>{const b=[...s.env];b[g]={...b[g],key:y.target.value},r(C=>({...C,env:b}))},placeholder:a("变量名,如 AZURE_OPENAI_API_KEY"),className:"flex-1 px-3 py-1.5 text-sm font-mono border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900"}),n.jsx("input",{type:"text",value:u.value,onChange:y=>{const b=[...s.env];b[g]={...b[g],value:y.target.value},r(C=>({...C,env:b}))},placeholder:a("值"),className:"flex-1 px-3 py-1.5 text-sm font-mono border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900"}),n.jsx("button",{type:"button",onClick:()=>{const y=s.env.filter((b,C)=>C!==g);r(b=>({...b,env:y}))},className:"p-1.5 text-neutral-400 hover:text-red-500",children:n.jsx(se,{size:14})})]},g)),n.jsxs(E,{variant:"outline",size:"sm",onClick:()=>r(u=>({...u,env:[...u.env,{key:"",value:""}]})),children:[n.jsx(re,{size:12,className:"mr-1"}),a("添加变量")]})]})]}),v&&n.jsxs(B,{title:a(h?"CLI 原生配置 (config.toml)":"CLI 原生配置 (settings.json)"),children:[n.jsx("p",{className:"text-xs text-neutral-500 mb-2",children:h?n.jsxs(n.Fragment,{children:[a("直接填写 Codex")," ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"config.toml"})," ",a("格式的配置片段,通过")," ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"-c"})," ",a("参数注入。不会修改你的")," ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"~/.codex/config.toml"})," ",a("文件。")]}):n.jsxs(n.Fragment,{children:[a("对应 Claude Code 的")," ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"~/.claude/settings.json"}),",",a("通过")," ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"--settings"})," ",a("参数注入。在")," ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"env"})," ",a("中设置 ANTHROPIC_API_KEY、ANTHROPIC_BASE_URL 等。")]})}),n.jsx("textarea",{value:s.settings,onChange:u=>{r(g=>({...g,settings:u.target.value})),d("")},rows:10,className:"w-full px-3 py-2 text-sm font-mono border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900 bg-neutral-50",placeholder:z(s.agentType)}),o&&n.jsx("p",{className:"mt-1 text-xs text-red-600",children:o})]}),n.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[n.jsx(E,{variant:"outline",onClick:t,children:a("取消")}),n.jsx(E,{onClick:p,disabled:!s.name.trim(),children:a("保存")})]})]})})}function ut({isOpen:e,onClose:t,onConfirm:l,acknowledged:i,onAcknowledgedChange:a,isLoading:s}){const{t:r}=T();return n.jsx($,{isOpen:e,onClose:t,title:r("导出 Provider 备份"),className:"max-w-xl",action:n.jsxs(n.Fragment,{children:[n.jsx(E,{variant:"outline",onClick:t,disabled:s,children:r("取消")}),n.jsx(E,{onClick:l,disabled:!i||s,children:r(s?"导出中...":"导出备份")})]}),children:n.jsxs("div",{className:"space-y-4",children:[n.jsx("div",{className:"rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-900",children:r("导出的备份文件将包含完整的 Provider 配置,包括环境变量、CLI settings 等敏感信息。任何拿到文件的人都可能直接使用这些 Provider。")}),n.jsxs("div",{className:"text-sm text-neutral-600 space-y-2",children:[n.jsx("p",{children:r("这个功能用于备份和迁移,不用于分享配置。")}),n.jsx("p",{children:r("导出内容只包含用户层配置:自定义 Provider,以及对内置 Provider 的覆盖。")})]}),n.jsxs("label",{className:"flex items-start gap-3 rounded-lg border border-neutral-200 px-4 py-3 text-sm text-neutral-700",children:[n.jsx("input",{type:"checkbox",checked:i,onChange:o=>a(o.target.checked),className:"mt-0.5 h-4 w-4"}),n.jsx("span",{children:r("我已知晓该备份文件包含敏感信息,只会保存在安全位置。")})]})]})})}function mt({isOpen:e,onClose:t,preview:l,backup:i,onConfirm:a,isLoading:s}){const{t:r}=T();if(!l||!i)return null;const o=l.summary.create+l.summary.overwrite,d=[...l.items].sort((c,p)=>{const v={CREATE:0,OVERWRITE:1,SKIP:2};return v[c.action]-v[p.action]});return n.jsx($,{isOpen:e,onClose:t,title:r("导入 Provider 备份"),className:"max-w-3xl",action:n.jsxs(n.Fragment,{children:[n.jsx(E,{variant:"outline",onClick:t,disabled:s,children:r("取消")}),n.jsx(E,{onClick:a,disabled:o===0||s,children:s?r("导入中..."):r("确认导入 {count} 项",{count:o})})]}),children:n.jsxs("div",{className:"space-y-4",children:[n.jsxs("div",{className:"rounded-lg border border-neutral-200 bg-neutral-50 px-4 py-3 text-sm text-neutral-600",children:[n.jsx("div",{children:r("导出时间:{value}",{value:new Date(i.exportedAt).toLocaleString()})}),n.jsx("div",{children:r("模式:完整备份(含敏感信息)")}),n.jsx("div",{children:r("文件内 Provider 数量:{count}",{count:i.providers.length})})]}),n.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[n.jsxs("div",{className:"rounded-lg border border-green-200 bg-green-50 px-4 py-3",children:[n.jsx("div",{className:"text-xs text-green-700",children:r("新增")}),n.jsx("div",{className:"text-lg font-semibold text-green-900",children:l.summary.create})]}),n.jsxs("div",{className:"rounded-lg border border-amber-200 bg-amber-50 px-4 py-3",children:[n.jsx("div",{className:"text-xs text-amber-700",children:r("覆盖")}),n.jsx("div",{className:"text-lg font-semibold text-amber-900",children:l.summary.overwrite})]}),n.jsxs("div",{className:"rounded-lg border border-neutral-200 bg-neutral-50 px-4 py-3",children:[n.jsx("div",{className:"text-xs text-neutral-500",children:r("跳过")}),n.jsx("div",{className:"text-lg font-semibold text-neutral-900",children:l.summary.skip})]})]}),n.jsx("div",{className:"max-h-[420px] overflow-y-auto space-y-3 pr-1",children:d.map(c=>{const p=it(c.action);return n.jsxs("div",{className:"rounded-lg border border-neutral-200 px-4 py-3",children:[n.jsx("div",{className:"flex items-center justify-between gap-3",children:n.jsxs("div",{className:"min-w-0",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("h4",{className:"truncate text-sm font-medium text-neutral-900",children:c.incoming.name}),n.jsx("span",{className:`inline-flex rounded px-2 py-0.5 text-xs ${p.className}`,children:r(p.label)})]}),n.jsxs("div",{className:"mt-1 text-xs text-neutral-500",children:[Z[c.incoming.agentType]??c.incoming.agentType," · ",n.jsx("code",{className:"rounded bg-neutral-100 px-1 py-0.5",children:c.incoming.id})]})]})}),c.action==="OVERWRITE"&&c.existing&&n.jsx("p",{className:"mt-2 text-xs text-amber-700",children:r("将覆盖当前已有的 Provider:{name}",{name:c.existing.name})}),c.action==="SKIP"&&n.jsx("p",{className:"mt-2 text-xs text-neutral-500",children:r("当前同 ID Provider 配置一致,本次不会重复写入。")}),c.action==="CREATE"&&n.jsx("p",{className:"mt-2 text-xs text-green-700",children:r("当前不存在同 ID Provider,将直接新增。")})]},c.incoming.id)})})]})})}function Et(){const{t:e}=T(),{data:t,isLoading:l}=je(),i=we(),a=Ne(),s=Ce(),r=Ee(),o=ke(),d=Pe(),c=w.useRef(null),[p,v]=w.useState(null),[h,u]=w.useState(null),[g,y]=w.useState(!1),[b,C]=w.useState(!1),[j,O]=w.useState(null),D=m=>{i.mutate(m,{onSuccess:()=>v(null)})},ce=(m,x)=>{a.mutate({id:m,data:x},{onSuccess:()=>v(null)})},de=m=>{if(!(m.deletable??!m.builtIn)){P.error(e("系统内置 Provider 不可删除"));return}u({id:m.id,name:m.name,builtIn:m.builtIn})},ue=()=>{h&&s.mutate(h.id,{onSuccess:()=>{P.success(h.builtIn?e("已恢复默认 Provider 配置"):e("Provider 已删除")),u(null)},onError:m=>{P.error(F(m,e("删除 Provider 失败")))}})},J=()=>{y(!1),C(!1)},Y=()=>{O(null)},me=()=>{r.mutate(void 0,{onSuccess:m=>{at(lt(m.exportedAt),m),P.success(e("Provider 备份已导出")),J()},onError:m=>{P.error(F(m,e("导出 Provider 备份失败")))}})},xe=()=>{c.current&&(c.current.value="",c.current.click())},fe=async m=>{const x=m.target.files?.[0];if(m.target.value="",!x)return;let _;try{_=JSON.parse(await x.text())}catch{P.error(e("备份文件不是有效的 JSON"));return}o.mutate(_,{onSuccess:I=>{O({backup:_,preview:I})},onError:I=>{P.error(F(I,e("导入预览失败")))}})},pe=()=>{j&&d.mutate(j.backup,{onSuccess:m=>{const x=m.summary.create+m.summary.overwrite;P.success(x===0?e("导入完成,当前配置无需变更"):e("导入完成:新增 {create},覆盖 {overwrite},跳过 {skip}",{create:m.summary.create,overwrite:m.summary.overwrite,skip:m.summary.skip})),Y()},onError:m=>{P.error(F(m,e("导入 Provider 备份失败")))}})},he=m=>{const x=m.provider,_=x.env?Object.entries(x.env).map(([I,L])=>({key:I,value:L})):[];v({id:x.id,data:{name:x.name,agentType:x.agentType,config:X(x.agentType,x.config),settings:x.settings??"",env:_,isDefault:x.isDefault}})};if(l)return n.jsx("div",{className:"p-6 text-sm text-neutral-400",children:e("加载中...")});const H=t??[];return n.jsxs("div",{className:"px-10 py-6 mx-auto w-full max-w-4xl",children:[n.jsx("input",{ref:c,type:"file",accept:".json,application/json",className:"hidden",onChange:fe}),n.jsxs("div",{className:"flex items-center justify-between mb-6",children:[n.jsxs("div",{children:[n.jsx("h2",{className:"text-lg font-semibold text-neutral-900",children:e("Provider 配置")}),n.jsx("p",{className:"text-sm text-neutral-500 mt-1",children:e("管理 AI Agent 的连接配置和运行参数")})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsxs(E,{variant:"outline",onClick:xe,disabled:o.isPending||d.isPending,children:[n.jsx(_e,{size:14}),e("导入备份")]}),n.jsxs(E,{variant:"outline",onClick:()=>y(!0),disabled:r.isPending,children:[n.jsx(Le,{size:14}),e("导出备份")]}),n.jsxs(E,{onClick:()=>v({}),children:[n.jsx(re,{size:14,className:"mr-1"}),e("新建 Provider")]})]})]}),H.length===0?n.jsx("div",{className:"text-center py-12 text-sm text-neutral-400",children:e("暂无 Provider 配置")}):n.jsx("div",{className:"space-y-3",children:H.map(m=>{const x=m.provider,_=m.availability,I=X(x.agentType,x.config),L=Object.entries(I).filter(([A])=>A!=="cmd");return n.jsx("div",{className:"border border-neutral-200 rounded-lg p-4 hover:border-neutral-300 transition-colors",children:n.jsxs("div",{className:"flex items-start justify-between",children:[n.jsxs("div",{className:"flex-1",children:[n.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[n.jsx("h3",{className:"text-sm font-medium text-neutral-900",children:x.name}),n.jsx(ot,{type:_.type}),x.isDefault&&n.jsx("span",{className:"px-2 py-0.5 text-xs text-blue-700 bg-blue-50 rounded",children:e("默认")}),x.builtIn&&n.jsx("span",{className:"px-2 py-0.5 text-xs text-neutral-500 bg-neutral-50 rounded",children:e("内置")})]}),n.jsx("p",{className:"text-xs text-neutral-500 mb-2",children:Z[x.agentType]??x.agentType}),L.length>0&&n.jsx("div",{className:"text-xs text-neutral-600 mb-1",children:L.map(([A,ge])=>n.jsxs("span",{className:"inline-flex items-center mr-3",children:[n.jsxs("span",{className:"font-medium",children:[e(nt[A]??A),":"]})," ",st(A,ge)]},A))}),x.settings?.trim()&&n.jsxs("div",{className:"text-xs text-neutral-600",children:[n.jsx("span",{className:"font-medium",children:e("CLI 配置:")})," ",e("已配置")]}),Object.keys(x.env).length>0&&!x.settings&&n.jsxs("div",{className:"text-xs text-neutral-600",children:[n.jsx("span",{className:"font-medium",children:e("环境变量:")})," ",Object.keys(x.env).join(", ")]})]}),n.jsxs("div",{className:"flex items-center gap-1 ml-4",children:[n.jsx("button",{onClick:()=>he(m),className:"p-2 text-neutral-400 hover:text-neutral-900 transition-colors",title:e("编辑"),children:n.jsx(Ie,{size:14})}),n.jsx("button",{onClick:()=>de(x),className:"p-2 text-neutral-400 hover:text-red-600 transition-colors",title:x.deletable===!1?e("系统内置 Provider 不可删除"):x.builtIn?e("删除自定义覆盖并恢复默认"):e("删除"),disabled:x.deletable===!1,children:n.jsx(se,{size:14})})]})]})},x.id)})}),p&&n.jsx(dt,{isOpen:!0,onClose:()=>v(null),initialData:p.data,onSave:m=>{p.id?ce(p.id,m):D(m)}}),n.jsx(Oe,{isOpen:h!==null,onClose:()=>{s.isPending||u(null)},onConfirm:ue,title:h?.builtIn?e("恢复默认 Provider"):e("删除 Provider"),description:h?.builtIn?e('确定删除 "{name}" 的自定义覆盖,并恢复系统默认配置?',{name:h?.name}):e('确定删除 "{name}"?此操作不可撤销。',{name:h?.name}),confirmText:h?.builtIn?e("恢复默认"):e("删除"),cancelText:e("取消"),variant:"danger",isLoading:s.isPending}),n.jsx(ut,{isOpen:g,onClose:J,onConfirm:me,acknowledged:b,onAcknowledgedChange:C,isLoading:r.isPending}),n.jsx(mt,{isOpen:!!j,onClose:Y,preview:j?.preview??null,backup:j?.backup??null,onConfirm:pe,isLoading:d.isPending})]})}export{Et as ProviderSettingsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as Ae,i as nt,k as it,l as ot,m as ct,n as dt,o as mt,p as ut,s as xt,r as i,j as e,t as d}from"./index-BsrxN6e4.js";import{B as u}from"./button-_UA8cNod.js";import{C as Se}from"./confirm-dialog-D9WQU47x.js";import{P as me,T as ue,M as pt}from"./modal-BLPS1r7Q.js";import{S as R}from"./select-CEtSClHi.js";import{M as z}from"./MemberAvatar-Bgb9cNkt.js";import{u as bt}from"./use-providers-BmGR6zlI.js";import{c as M}from"./utils-CkSf8FUe.js";import{U as ht}from"./upload-hdDyQIIu.js";import{C as gt}from"./chevron-up-xy9sRgGr.js";import{C as vt}from"./chevron-down-qLfxqOnz.js";const n="/avatars/presets",ft=[{id:"developer",label:"Developer",src:`${n}/avatar-preset-01-developer.png`},{id:"architect",label:"Architect",src:`${n}/avatar-preset-02-architect.png`},{id:"tester",label:"Tester",src:`${n}/avatar-preset-03-tester.png`},{id:"devops",label:"DevOps",src:`${n}/avatar-preset-04-devops.png`},{id:"data-scientist",label:"Data scientist",src:`${n}/avatar-preset-05-data-scientist.png`},{id:"frontend",label:"Frontend",src:`${n}/avatar-preset-06-frontend.png`},{id:"backend",label:"Backend",src:`${n}/avatar-preset-07-backend.png`},{id:"security",label:"Security",src:`${n}/avatar-preset-08-security.png`},{id:"project-manager",label:"Project manager",src:`${n}/avatar-preset-09-project-manager.png`},{id:"product-manager",label:"Product manager",src:`${n}/avatar-preset-10-product-manager.png`},{id:"scrum-master",label:"Scrum master",src:`${n}/avatar-preset-11-scrum-master.png`},{id:"tech-lead",label:"Tech lead",src:`${n}/avatar-preset-12-tech-lead.png`},{id:"coordinator",label:"Coordinator",src:`${n}/avatar-preset-13-coordinator.png`},{id:"mentor",label:"Mentor",src:`${n}/avatar-preset-14-mentor.png`},{id:"reviewer",label:"Reviewer",src:`${n}/avatar-preset-15-reviewer.png`},{id:"ui-designer",label:"UI designer",src:`${n}/avatar-preset-16-ui-designer.png`},{id:"ux-researcher",label:"UX researcher",src:`${n}/avatar-preset-17-ux-researcher.png`},{id:"documenter",label:"Documenter",src:`${n}/avatar-preset-18-documenter.png`},{id:"translator",label:"Translator",src:`${n}/avatar-preset-19-translator.png`},{id:"analyst",label:"Analyst",src:`${n}/avatar-preset-20-analyst.png`},{id:"consultant",label:"Consultant",src:`${n}/avatar-preset-21-consultant.png`},{id:"creative-director",label:"Creative director",src:`${n}/avatar-preset-22-creative-director.png`},{id:"support",label:"Support",src:`${n}/avatar-preset-23-support.png`},{id:"assistant",label:"Assistant",src:`${n}/avatar-preset-24-assistant.png`},{id:"robot",label:"Robot",src:`${n}/avatar-preset-25-robot.png`}],_e="/api",jt=2*1024*1024,yt=[],Nt=[],Pt=[],Me=[{key:"readRoom",label:"读房间"},{key:"postRoomMessage",label:"发房间消息"},{key:"mentionMembers",label:"提及成员"},{key:"stopMemberWork",label:"停止成员工作"},{key:"markReadyForReview",label:"标记可审查"},{key:"readFiles",label:"读文件"},{key:"writeFiles",label:"写文件"},{key:"runCommands",label:"运行命令"},{key:"readDiff",label:"读 diff"},{key:"mergeWorkspace",label:"合并工作区"}],Oe={readRoom:!1,postRoomMessage:!1,mentionMembers:!1,stopMemberWork:!1,markReadyForReview:!1,readFiles:!1,writeFiles:!1,runCommands:!1,readDiff:!1,mergeWorkspace:!1},wt=[{value:"none",label:"无"},{value:"shared",label:"共享"},{value:"dedicated",label:"独占"}],Tt={none:"无",shared:"共享",dedicated:"独占"},It=[{value:"MENTION_ONLY",label:"仅提及"},{value:"USER_MESSAGES",label:"所有用户消息"}],kt={MENTION_ONLY:"仅提及",USER_MESSAGES:"所有用户消息"},St=[{value:"new_per_request",label:"每次新会话"},{value:"resume_last",label:"复用上次会话"}],Ct={new_per_request:"每次新会话",resume_last:"复用上次会话"},Et=[{value:"own_only",label:"仅自己队列"},{value:"team_pending",label:"全队列待处理"}],At={own_only:"仅自己队列",team_pending:"全队列待处理"};function U(){return{name:"",aliasesText:"",providerId:"",rolePrompt:"",capabilities:{...Oe},workspacePolicy:"none",triggerPolicy:"MENTION_ONLY",sessionPolicy:"new_per_request",queueManagementPolicy:"own_only",avatar:""}}function xe(a){return{name:a.name,aliasesText:a.aliases.join(", "),providerId:a.providerId,rolePrompt:a.rolePrompt,capabilities:{...Oe,...a.capabilities},workspacePolicy:a.workspacePolicy,triggerPolicy:a.triggerPolicy,sessionPolicy:a.sessionPolicy,queueManagementPolicy:a.queueManagementPolicy,avatar:a.avatar??""}}function Y(){return{name:"",memberPresetIds:[]}}function pe(a){return{name:a.name,memberPresetIds:a.members?.map(o=>o.memberPresetId)??[]}}function Ce(a,o,c,m){if(c.filter(F=>F===m).length<=1)return a;const q=c.slice(0,o+1).filter(F=>F===m).length;return`${a} #${q}`}function _t(a){return Array.from(new Set(a.split(/[\n,]/).map(o=>o.trim()).filter(Boolean)))}function Mt(a){const o=a.trim();return o||null}function Ee(a){return Me.reduce((o,c)=>o+(a[c.key]?1:0),0)}function O(a,o){return a instanceof Error?a.message:o}function Ot(a){return["image/png","image/jpeg","image/webp"].includes(a.type)}async function Ft(a){const o=new FormData;o.append("file",a);const c=await fetch(`${_e}/attachments/upload`,{method:"POST",body:o});if(!c.ok){const m=await c.json().catch(()=>({}));throw new Error(m.error||m.message||`Upload failed (${c.status})`)}return c.json()}function G({title:a,error:o,isFetching:c,onRetry:m}){const{t:S}=Ae();return e.jsx("div",{role:"alert",className:"rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700",children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-medium",children:a}),e.jsx("div",{className:"mt-1 text-xs text-red-600",children:O(o,S("请稍后重试。"))})]}),e.jsx(u,{type:"button",size:"sm",variant:"outline",onClick:m,disabled:c,children:S(c?"加载中...":"重试")})]})})}function Vt(){const{t:a}=Ae(),{data:o,error:c,isError:m,isFetching:S,isLoading:q,refetch:F}=bt(),{data:Fe,error:be,isError:C,isFetching:he,isLoading:W,refetch:ge}=nt(),{data:Le,error:Re,isError:$,isFetching:$e,isLoading:V,refetch:De}=it(),Q=ot(),J=ct(),ve=dt(),K=mt(),X=ut(),fe=xt(),[H,je]=i.useState("presets"),[j,Z]=i.useState("edit"),[h,ee]=i.useState(null),[r,y]=i.useState(U()),[ye,L]=i.useState(!1),[N,te]=i.useState(null),[Be,ae]=i.useState(!1),[Ne,Pe]=i.useState(!1),we=i.useRef(null),[P,se]=i.useState("edit"),[g,re]=i.useState(null),[w,v]=i.useState(Y()),[Te,T]=i.useState(!1),[I,le]=i.useState(null),b=Fe??yt,f=Le??Nt,D=o??Pt,B=i.useMemo(()=>new Map(b.map(t=>[t.id,t])),[b]),ne=i.useMemo(()=>new Map(f.map(t=>[t.id,t])),[f]),Ie=i.useMemo(()=>{const t=D.map(({provider:s,availability:l})=>({value:s.id,label:s.name+(l.type==="NOT_FOUND"?a(" (不可用)"):""),disabled:l.type==="NOT_FOUND"}));return r.providerId&&!t.some(s=>s.value===r.providerId)&&t.unshift({value:r.providerId,label:`${r.providerId}${a(" (不可用)")}`,disabled:!0}),t},[r.providerId,D,a]),ie=h?B.get(h)??null:null,oe=g?ne.get(g)??null:null,ce=i.useMemo(()=>new Map(D.map(({provider:t,availability:s})=>[t.id,t.name+(s.type==="NOT_FOUND"?a(" (不可用)"):"")])),[D,a]);if(i.useEffect(()=>{if(!(W||C)&&!ye){if(j==="create"){y(U());return}if(h){const t=B.get(h);t&&y(xe(t));return}if(b.length>0){const t=b[0];ee(t.id),Z("edit"),y(xe(t));return}Z("create"),ee(null),y(U())}},[B,ye,j,b,C,W,h]),i.useEffect(()=>{if(!(V||$)&&!Te){if(P==="create"){v(Y());return}if(g){const t=ne.get(g);t&&v(pe(t));return}if(f.length>0){const t=f[0];re(t.id),se("edit"),v(pe(t));return}se("create"),re(null),v(Y())}},[g,ne,Te,P,f,$,V]),q||W||V)return e.jsx("div",{className:"p-6 text-sm text-neutral-400",children:a("加载中...")});const x=(t,s)=>{y(l=>({...l,[t]:s})),L(!0)},ze=(t,s)=>{y(l=>({...l,capabilities:{...l.capabilities,[t]:s}})),L(!0)},Ue=t=>{x("avatar",t),ae(!1)},Ye=()=>{x("avatar","")},Ge=async t=>{const s=t.target.files?.[0];if(t.target.value="",!!s){if(!Ot(s)){d.error(a("仅支持 PNG、JPG、WebP 头像。"));return}if(s.size>jt){d.error(a("头像图片不能超过 2MB。"));return}Pe(!0);try{const l=await Ft(s);x("avatar",`${_e}${l.url}`),d.success(a("头像已上传"))}catch(l){d.error(O(l,a("头像上传失败")))}finally{Pe(!1)}}},E=(t,s)=>{Z(t),ee(s?.id??null),y(s?xe(s):U()),L(!1)},qe=(t,s)=>{v(l=>({...l,[t]:s})),T(!0)},A=(t,s)=>{se(t),re(s?.id??null),v(s?pe(s):Y()),T(!1)},We=async()=>{const t={name:r.name.trim(),aliases:_t(r.aliasesText),providerId:r.providerId.trim(),rolePrompt:r.rolePrompt.trim(),capabilities:{...r.capabilities},workspacePolicy:r.workspacePolicy,triggerPolicy:r.triggerPolicy,sessionPolicy:r.sessionPolicy,queueManagementPolicy:r.queueManagementPolicy,avatar:Mt(r.avatar)};try{if(j==="create"||!h){const s=await Q.mutateAsync(t);E("edit",s),d.success(a("已创建"))}else{const s=await J.mutateAsync({id:h,data:t});E("edit",s),d.success(a("已保存"))}}catch(s){d.error(O(s,a("保存失败")))}},Ve=async()=>{if(N)try{await ve.mutateAsync(N.id),d.success(a("Deleted"));const t=b.filter(s=>s.id!==N.id);h===N.id&&(t.length>0?E("edit",t[0]):E("create",null)),te(null)}catch(t){d.error(O(t,a("删除失败")))}},Qe=async()=>{const t={name:w.name.trim(),memberPresetIds:w.memberPresetIds};try{if(P==="create"||!g){const s=await K.mutateAsync(t);A("edit",s),d.success(a("已创建"))}else{const s=await X.mutateAsync({id:g,data:t});A("edit",s),d.success(a("已保存"))}}catch(s){d.error(O(s,a("保存失败")))}},Je=async()=>{if(I)try{await fe.mutateAsync(I.id),d.success(a("Deleted"));const t=f.filter(s=>s.id!==I.id);g===I.id&&(t.length>0?A("edit",t[0]):A("create",null)),le(null)}catch(t){d.error(O(t,a("删除失败")))}},Ke=Ee(r.capabilities),Xe=!!r.name.trim()&&!!r.providerId.trim()&&!!r.rolePrompt.trim()&&!m&&!C&&!Q.isPending&&!J.isPending,He=!!w.name.trim()&&!$&&!C&&!K.isPending&&!X.isPending,de=w.memberPresetIds.map(t=>B.get(t)).filter(t=>!!t),Ze=t=>{L(!1),E("edit",t)},et=()=>{L(!1),E("create",null)},tt=t=>{T(!1),A("edit",t)},at=()=>{T(!1),A("create",null)},st=t=>{v(s=>({...s,memberPresetIds:[...s.memberPresetIds,t]})),T(!0)},rt=t=>{v(s=>({...s,memberPresetIds:s.memberPresetIds.filter((l,p)=>p!==t)})),T(!0)},ke=(t,s)=>{v(l=>{const p=t+s;if(p<0||p>=l.memberPresetIds.length)return l;const _=[...l.memberPresetIds],[k]=_.splice(t,1);return _.splice(p,0,k),{...l,memberPresetIds:_}}),T(!0)};return e.jsxs("div",{className:"px-10 py-6 mx-auto w-full max-w-6xl space-y-6",children:[e.jsxs("section",{className:"space-y-1",children:[e.jsx("h2",{className:"text-lg font-semibold text-neutral-900",children:a("团队协作设置")}),e.jsx("p",{className:"text-sm text-neutral-500",children:a("管理成员预设与团队模板。")})]}),m&&e.jsx(G,{title:a("Provider 列表加载失败"),error:c,isFetching:S,onRetry:()=>{F()}}),e.jsxs("div",{className:"inline-flex rounded-md border border-neutral-200 bg-neutral-50 p-1",children:[e.jsx("button",{type:"button",onClick:()=>je("presets"),className:M("rounded-md px-3 py-1.5 text-sm transition-colors",H==="presets"?"bg-white text-neutral-900 shadow-sm":"text-neutral-500 hover:text-neutral-900"),children:a("成员预设")}),e.jsx("button",{type:"button",onClick:()=>je("templates"),className:M("rounded-md px-3 py-1.5 text-sm transition-colors",H==="templates"?"bg-white text-neutral-900 shadow-sm":"text-neutral-500 hover:text-neutral-900"),children:a("团队模板")})]}),H==="presets"?e.jsxs("div",{className:"grid gap-6 lg:grid-cols-[280px_minmax(0,1fr)]",children:[e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900",children:a("成员预设")}),e.jsx("p",{className:"text-[12px] text-neutral-400",children:a("点击列表项可编辑。")})]}),e.jsxs(u,{size:"sm",variant:"outline",onClick:et,children:[e.jsx(me,{size:14}),a("新增")]})]}),C?e.jsx(G,{title:a("成员预设加载失败"),error:be,isFetching:he,onRetry:()=>{ge()}}):b.length===0?e.jsx("div",{className:"rounded-lg border border-dashed border-neutral-200 p-4 text-sm text-neutral-400",children:a("当前没有成员预设")}):e.jsx("div",{className:"space-y-2",children:b.map(t=>{const s=j==="edit"&&t.id===h,l=ce.get(t.providerId)??t.providerId,p=Ee(t.capabilities);return e.jsx("button",{type:"button",onClick:()=>Ze(t),className:M("w-full rounded-lg border px-3 py-2 text-left transition-colors",s?"border-neutral-900 bg-neutral-50":"border-neutral-200 bg-white hover:border-neutral-300 hover:bg-neutral-50"),children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(z,{name:t.name,avatar:t.avatar,className:"h-10 w-10 text-[11px]"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-medium text-neutral-900",children:t.name}),e.jsx("div",{className:"truncate text-xs text-neutral-500",children:l})]}),e.jsxs("div",{className:"shrink-0 text-[11px] text-neutral-400",children:[p,"/10"]})]}),e.jsxs("div",{className:"mt-2 flex flex-wrap gap-1",children:[e.jsx("span",{className:"rounded bg-neutral-100 px-1.5 py-0.5 text-[11px] text-neutral-600",children:a(Tt[t.workspacePolicy])}),e.jsx("span",{className:"rounded bg-neutral-100 px-1.5 py-0.5 text-[11px] text-neutral-600",children:a(kt[t.triggerPolicy])}),e.jsx("span",{className:"rounded bg-neutral-100 px-1.5 py-0.5 text-[11px] text-neutral-600",children:a(Ct[t.sessionPolicy])}),e.jsx("span",{className:"rounded bg-neutral-100 px-1.5 py-0.5 text-[11px] text-neutral-600",children:a(At[t.queueManagementPolicy])})]})]})]})},t.id)})})]}),e.jsxs("section",{className:"rounded-lg border border-neutral-200 bg-white p-5 space-y-5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-neutral-900",children:a("成员预设")}),e.jsx("p",{className:"text-xs text-neutral-400",children:j==="create"?a("创建新成员预设"):ie?.name??a("编辑成员预设")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[j==="edit"&&ie&&e.jsxs(u,{size:"sm",variant:"outline",onClick:()=>te(ie),children:[e.jsx(ue,{size:14}),a("删除")]}),e.jsx(u,{size:"sm",onClick:We,disabled:!Xe,children:Q.isPending||J.isPending?a("保存中..."):a(j==="create"?"创建":"保存")})]})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"team-member-preset-name",className:"block text-[13px] font-medium text-neutral-700 mb-1",children:a("名称")}),e.jsx("input",{id:"team-member-preset-name","aria-label":a("成员预设名称"),value:r.name,onChange:t=>x("name",t.target.value),className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm focus:border-neutral-400 focus:outline-none"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"team-member-preset-aliases",className:"block text-[13px] font-medium text-neutral-700 mb-1",children:a("别名")}),e.jsx("input",{id:"team-member-preset-aliases","aria-label":a("成员预设别名"),value:r.aliasesText,onChange:t=>x("aliasesText",t.target.value),placeholder:a("alice, a, reviewer"),className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm focus:border-neutral-400 focus:outline-none"})]})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:a("Provider")}),e.jsx(R,{value:r.providerId,onChange:t=>x("providerId",t),options:Ie,disabled:m}),m?e.jsx("p",{className:"mt-1 text-[11px] text-red-500",children:a("Provider 列表加载失败,无法创建或修改成员预设。")}):Ie.length===0&&e.jsx("p",{className:"mt-1 text-[11px] text-neutral-400",children:a("暂无可用 Provider,请先在 Agent 配置中创建。")})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-1 flex items-center justify-between gap-3",children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700",children:a("头像")}),e.jsx("button",{type:"button",onClick:Ye,disabled:!r.avatar.trim(),className:"text-[11px] font-medium text-neutral-400 transition-colors hover:text-neutral-900 disabled:cursor-not-allowed disabled:opacity-40",children:a("清除头像")})]}),e.jsxs("div",{className:"rounded-lg border border-neutral-200 bg-neutral-50 px-3 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx(z,{name:r.name||a("Agent"),avatar:r.avatar,className:"h-14 w-14 text-sm"}),e.jsxs("div",{className:"min-w-[180px] flex-1",children:[e.jsx("div",{className:"truncate text-xs font-medium text-neutral-700",children:r.avatar.trim()?r.avatar:a("默认首字母头像")}),e.jsxs("div",{className:"mt-1 flex flex-wrap gap-2",children:[e.jsx(u,{type:"button",size:"sm",variant:"outline",onClick:()=>ae(!0),children:a("选择预设")}),e.jsxs(u,{type:"button",size:"sm",variant:"outline",onClick:()=>we.current?.click(),disabled:Ne,children:[e.jsx(ht,{size:14}),a(Ne?"上传中...":"上传头像")]})]})]})]}),e.jsx("input",{ref:we,type:"file",accept:"image/png,image/jpeg,image/webp",className:"hidden",onChange:Ge}),e.jsx("p",{className:"mt-2 text-[11px] text-neutral-400",children:a("支持 PNG、JPG、WebP,最大 2MB。")})]})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"team-member-preset-role-prompt",className:"block text-[13px] font-medium text-neutral-700 mb-1",children:a("角色提示词")}),e.jsx("textarea",{id:"team-member-preset-role-prompt","aria-label":a("成员预设角色提示词"),value:r.rolePrompt,onChange:t=>x("rolePrompt",t.target.value),rows:6,className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm font-mono focus:border-neutral-400 focus:outline-none resize-y"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"flex items-end justify-between gap-3 mb-2",children:e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700",children:a("可用能力")}),e.jsxs("p",{className:"text-[11px] text-neutral-400",children:[Ke,"/10"]})]})}),e.jsx("div",{className:"grid gap-2 md:grid-cols-2 xl:grid-cols-3",children:Me.map(t=>e.jsxs("label",{className:"flex items-center gap-2 rounded-md border border-neutral-200 px-3 py-2 text-sm text-neutral-700",children:[e.jsx("input",{type:"checkbox",checked:r.capabilities[t.key],onChange:s=>ze(t.key,s.target.checked),className:"h-4 w-4 rounded border-neutral-300 text-neutral-900 focus:ring-neutral-400"}),e.jsx("span",{children:a(t.label)})]},t.key))})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2 xl:grid-cols-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:a("工作区策略")}),e.jsx(R,{value:r.workspacePolicy,onChange:t=>x("workspacePolicy",t),options:wt.map(t=>({value:t.value,label:a(t.label)}))})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:a("触发策略")}),e.jsx(R,{value:r.triggerPolicy,onChange:t=>x("triggerPolicy",t),options:It.map(t=>({value:t.value,label:a(t.label)}))})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:a("会话策略")}),e.jsx(R,{value:r.sessionPolicy,onChange:t=>x("sessionPolicy",t),options:St.map(t=>({value:t.value,label:a(t.label)}))})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:a("队列管理")}),e.jsx(R,{value:r.queueManagementPolicy,onChange:t=>x("queueManagementPolicy",t),options:Et.map(t=>({value:t.value,label:a(t.label)}))})]})]})]})]}):e.jsxs("div",{className:"grid gap-6 lg:grid-cols-[280px_minmax(0,1fr)]",children:[e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900",children:a("团队模板")}),e.jsx("p",{className:"text-[12px] text-neutral-400",children:a("点击列表项可编辑。")})]}),e.jsxs(u,{size:"sm",variant:"outline",onClick:at,children:[e.jsx(me,{size:14}),a("新增")]})]}),$?e.jsx(G,{title:a("团队模板加载失败"),error:Re,isFetching:$e,onRetry:()=>{De()}}):f.length===0?e.jsx("div",{className:"rounded-lg border border-dashed border-neutral-200 p-4 text-sm text-neutral-400",children:a("当前没有团队模板")}):e.jsx("div",{className:"space-y-2",children:f.map(t=>{const s=P==="edit"&&t.id===g,l=t.members?.length??0,p=t.members?.map(k=>k.memberPresetId)??[],_=t.members?.slice(0,3).map((k,lt)=>Ce(k.memberPreset?.name??k.memberPresetId,lt,p,k.memberPresetId)).join(" · ");return e.jsx("button",{type:"button",onClick:()=>tt(t),className:M("w-full rounded-lg border px-3 py-2 text-left transition-colors",s?"border-neutral-900 bg-neutral-50":"border-neutral-200 bg-white hover:border-neutral-300 hover:bg-neutral-50"),children:e.jsx("div",{className:"flex items-start justify-between gap-3",children:e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-medium text-neutral-900",children:t.name}),e.jsx("div",{className:"mt-1 truncate text-xs text-neutral-500",children:a("{count} 个成员",{count:l})}),_&&e.jsx("div",{className:"mt-2 truncate text-[11px] text-neutral-400",children:_})]})})},t.id)})})]}),e.jsxs("section",{className:"rounded-lg border border-neutral-200 bg-white p-5 space-y-5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-neutral-900",children:a("团队模板")}),e.jsx("p",{className:"text-xs text-neutral-400",children:P==="create"?a("创建新团队模板"):oe?.name??a("编辑团队模板")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[P==="edit"&&oe&&e.jsxs(u,{size:"sm",variant:"outline",onClick:()=>le(oe),children:[e.jsx(ue,{size:14}),a("删除")]}),e.jsx(u,{size:"sm",onClick:Qe,disabled:!He,children:K.isPending||X.isPending?a("保存中..."):a(P==="create"?"创建":"保存")})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"team-template-name",className:"block text-[13px] font-medium text-neutral-700 mb-1",children:a("名称")}),e.jsx("input",{id:"team-template-name","aria-label":a("团队模板名称"),value:w.name,onChange:t=>qe("name",t.target.value),className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm focus:border-neutral-400 focus:outline-none"})]}),e.jsxs("div",{className:"grid gap-4 xl:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700",children:a("成员预设")}),e.jsx("p",{className:"text-[11px] text-neutral-400",children:a("选择顺序即保存顺序。")})]}),e.jsx("div",{className:"max-h-[360px] space-y-2 overflow-y-auto pr-1",children:C?e.jsx(G,{title:a("成员预设加载失败"),error:be,isFetching:he,onRetry:()=>{ge()}}):b.length===0?e.jsx("div",{className:"rounded-lg border border-dashed border-neutral-200 p-4 text-sm text-neutral-400",children:a("先创建成员预设,再配置团队模板。")}):b.map(t=>{const s=w.memberPresetIds.filter(p=>p===t.id).length,l=ce.get(t.providerId)??t.providerId;return e.jsxs("button",{type:"button",onClick:()=>st(t.id),className:M("flex w-full items-start gap-3 rounded-lg border px-3 py-2 text-left transition-colors",s>0?"border-neutral-900 bg-neutral-50":"border-neutral-200 bg-white hover:border-neutral-300 hover:bg-neutral-50"),children:[e.jsx(z,{name:t.name,avatar:t.avatar,className:"mt-0.5 h-8 w-8 text-[11px]"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-sm font-medium text-neutral-900",children:t.name}),e.jsx("div",{className:"truncate text-xs text-neutral-500",children:l})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[s>0&&e.jsxs("span",{className:"rounded-full bg-neutral-900 px-2 py-0.5 text-[11px] font-medium text-white",children:["x",s]}),e.jsx(me,{size:15,className:"text-neutral-500"})]})]},t.id)})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700",children:a("已选成员")}),e.jsx("p",{className:"text-[11px] text-neutral-400",children:a("上移下移后即为保存顺序。")})]}),e.jsx("div",{className:"max-h-[360px] space-y-2 overflow-y-auto pr-1",children:de.length===0?e.jsx("div",{className:"rounded-lg border border-dashed border-neutral-200 p-4 text-sm text-neutral-400",children:a("尚未选择成员预设")}):de.map((t,s)=>{const l=Ce(t.name,s,w.memberPresetIds,t.id);return e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-lg border border-neutral-200 bg-white px-3 py-2",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx(z,{name:t.name,avatar:t.avatar,className:"h-8 w-8 text-[11px]"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-medium text-neutral-900",children:l}),e.jsx("div",{className:"truncate text-xs text-neutral-500",children:ce.get(t.providerId)??t.providerId})]})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(u,{type:"button",variant:"ghost",size:"icon-sm",onClick:()=>ke(s,-1),disabled:s===0,title:a("上移"),children:e.jsx(gt,{size:14})}),e.jsx(u,{type:"button",variant:"ghost",size:"icon-sm",onClick:()=>ke(s,1),disabled:s===de.length-1,title:a("下移"),children:e.jsx(vt,{size:14})}),e.jsx(u,{type:"button",variant:"ghost",size:"icon-sm",onClick:()=>rt(s),title:a("移除"),children:e.jsx(ue,{size:14})})]})]},`${t.id}-${s}`)})})]})]})]})]}),e.jsx(Se,{isOpen:!!N,onClose:()=>te(null),onConfirm:Ve,title:a("删除"),description:N?a('确定删除 "{name}"?此操作不可撤销。',{name:N.name}):"",variant:"danger",confirmText:a("删除"),cancelText:a("取消"),isLoading:ve.isPending}),e.jsx(pt,{isOpen:Be,onClose:()=>ae(!1),title:a("选择预设头像"),className:"max-w-2xl",children:e.jsx("div",{className:"grid grid-cols-4 gap-2 sm:grid-cols-5",children:ft.map(t=>{const s=r.avatar===t.src;return e.jsxs("button",{type:"button",onClick:()=>Ue(t.src),className:M("group rounded-lg border bg-white p-2 text-center transition-colors hover:border-neutral-400 hover:bg-neutral-50 focus:outline-none focus:ring-2 focus:ring-neutral-900/15",s?"border-neutral-900 ring-2 ring-neutral-900/10":"border-neutral-200"),"aria-pressed":s,"aria-label":a("选择 {name} 头像",{name:t.label}),children:[e.jsx("img",{src:t.src,alt:t.label,loading:"lazy",className:"mx-auto h-14 w-14 rounded-full object-cover sm:h-16 sm:w-16"}),e.jsx("span",{className:"mt-1 block truncate text-[10px] font-medium text-neutral-500",children:t.label})]},t.id)})})}),e.jsx(Se,{isOpen:!!I,onClose:()=>le(null),onConfirm:Je,title:a("删除"),description:I?a('确定删除 "{name}"?此操作不可撤销。',{name:I.name}):"",variant:"danger",confirmText:a("删除"),cancelText:a("取消"),isLoading:fe.isPending})]})}export{Vt as TeamSettingsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as a,j as p}from"./index-BsrxN6e4.js";import{a as V,c as k}from"./utils-CkSf8FUe.js";const y=t=>typeof t=="boolean"?`${t}`:t===0?"0":t,b=V,E=(t,n)=>e=>{var i;if(n?.variants==null)return b(t,e?.class,e?.className);const{variants:r,defaultVariants:s}=n,u=Object.keys(r).map(o=>{const c=e?.[o],d=s?.[o];if(c===null)return null;const v=y(c)||y(d);return r[o][v]}),l=e&&Object.entries(e).reduce((o,c)=>{let[d,v]=c;return v===void 0||(o[d]=v),o},{}),f=n==null||(i=n.compoundVariants)===null||i===void 0?void 0:i.reduce((o,c)=>{let{class:d,className:v,...x}=c;return Object.entries(x).every(C=>{let[m,g]=C;return Array.isArray(g)?g.includes({...s,...l}[m]):{...s,...l}[m]===g})?[...o,d,v]:o},[]);return b(t,u,f,e?.class,e?.className)};function h(t,n){if(typeof t=="function")return t(n);t!=null&&(t.current=n)}function S(...t){return n=>{let e=!1;const i=t.map(r=>{const s=h(r,n);return!e&&typeof s=="function"&&(e=!0),s});if(e)return()=>{for(let r=0;r<i.length;r++){const s=i[r];typeof s=="function"?s():h(t[r],null)}}}}function j(t){const n=_(t),e=a.forwardRef((i,r)=>{const{children:s,...u}=i,l=a.Children.toArray(s),f=l.find(R);if(f){const o=f.props.children,c=l.map(d=>d===f?a.Children.count(o)>1?a.Children.only(null):a.isValidElement(o)?o.props.children:null:d);return p.jsx(n,{...u,ref:r,children:a.isValidElement(o)?a.cloneElement(o,void 0,c):null})}return p.jsx(n,{...u,ref:r,children:s})});return e.displayName=`${t}.Slot`,e}var z=j("Slot");function _(t){const n=a.forwardRef((e,i)=>{const{children:r,...s}=e;if(a.isValidElement(r)){const u=w(r),l=O(s,r.props);return r.type!==a.Fragment&&(l.ref=i?S(i,u):u),a.cloneElement(r,l)}return a.Children.count(r)>1?a.Children.only(null):null});return n.displayName=`${t}.SlotClone`,n}var N=Symbol("radix.slottable");function R(t){return a.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===N}function O(t,n){const e={...n};for(const i in n){const r=t[i],s=n[i];/^on[A-Z]/.test(i)?r&&s?e[i]=(...l)=>{const f=s(...l);return r(...l),f}:r&&(e[i]=r):i==="style"?e[i]={...r,...s}:i==="className"&&(e[i]=[r,s].filter(Boolean).join(" "))}return{...t,...e}}function w(t){let n=Object.getOwnPropertyDescriptor(t.props,"ref")?.get,e=n&&"isReactWarning"in n&&n.isReactWarning;return e?t.ref:(n=Object.getOwnPropertyDescriptor(t,"ref")?.get,e=n&&"isReactWarning"in n&&n.isReactWarning,e?t.props.ref:t.props.ref||t.ref)}const P=E("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function I({className:t,variant:n="default",size:e="default",asChild:i=!1,...r}){const s=i?z:"button";return p.jsx(s,{"data-slot":"button","data-variant":n,"data-size":e,className:k(P({variant:n,size:e,className:t})),...r})}export{I as B};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h as o}from"./index-BsrxN6e4.js";const c=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],t=o("check",c);const e=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],s=o("chevron-down",e);export{s as C,t as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h as o}from"./index-BsrxN6e4.js";const t=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],h=o("chevron-right",t);export{h as C};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h as x,u as h,j as e}from"./index-BsrxN6e4.js";import{M as u}from"./modal-BLPS1r7Q.js";import{c as p}from"./utils-CkSf8FUe.js";const b=[["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"}]],f=x("triangle-alert",b),N=({isOpen:n,onClose:a,onConfirm:l,title:i,description:d,confirmText:o="确认",cancelText:c="取消",variant:m="default",isLoading:t=!1})=>{const{t:s}=h(),r=m==="danger";return e.jsx(u,{isOpen:n,onClose:a,title:i,className:"max-w-sm",action:e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:a,disabled:t,className:"px-4 py-2 text-sm font-medium text-neutral-600 hover:text-neutral-900 transition-colors disabled:opacity-50",children:s(c)}),e.jsx("button",{onClick:l,disabled:t,className:p("px-4 py-2 text-sm font-medium rounded-lg transition-colors disabled:opacity-50",r?"bg-red-500 text-white hover:bg-red-600":"bg-neutral-900 text-white hover:bg-black"),children:s(t?"处理中...":o)})]}),children:e.jsxs("div",{className:"flex gap-4",children:[r&&e.jsx("div",{className:"shrink-0 w-10 h-10 rounded-full bg-red-50 flex items-center justify-center",children:e.jsx(f,{size:20,className:"text-red-500"})}),e.jsx("div",{className:"text-sm text-neutral-600 leading-relaxed pt-1",children:d})]})})};export{N as C,f as T};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h as N,d as V,e as y,f as j,q as i,g as p,u as O,r as n,j as e,F as P}from"./index-BsrxN6e4.js";import{c as x}from"./utils-CkSf8FUe.js";import{C as R}from"./chevron-right-SY4_v7-h.js";import{L as D,C as L}from"./loader-circle-CPz4Agyr.js";import{a as T}from"./chevron-down-qLfxqOnz.js";const X=[["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"}]],ie=N("file",X);const Y=[["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"}]],v=N("folder",Y);const ee=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],oe=N("rotate-ccw",ee);function ce(t){const a={};return t?.page!=null&&(a.page=String(t.page)),t?.limit!=null&&(a.limit=String(t.limit)),t?.includeArchived&&(a.includeArchived="true"),V({queryKey:i.projects.list(t),queryFn:()=>p.get("/projects",{params:a})})}function ue(t){return V({queryKey:i.projects.detail(t),queryFn:()=>p.get(`/projects/${t}`),enabled:!!t})}function de(){const t=y();return j({mutationFn:a=>p.post("/projects",a),onSuccess:()=>{t.invalidateQueries({queryKey:i.projects.all})}})}function pe(){const t=y();return j({mutationFn:({id:a,...l})=>p.put(`/projects/${a}`,l),onSuccess:(a,l)=>{t.invalidateQueries({queryKey:i.projects.all}),t.invalidateQueries({queryKey:i.projects.detail(l.id)})}})}function xe(){const t=y();return j({mutationFn:({id:a,deleteRepo:l})=>p.post(`/projects/${a}/archive`,{deleteRepo:l??!1}),onSuccess:(a,l)=>{t.invalidateQueries({queryKey:i.projects.all}),t.invalidateQueries({queryKey:i.projects.detail(l.id)}),t.invalidateQueries({queryKey:i.tasks.all}),t.invalidateQueries({queryKey:i.workspaces.all})}})}function me(){const t=y();return j({mutationFn:({id:a,repoPath:l})=>p.post(`/projects/${a}/restore`,l?{repoPath:l}:{}),onSuccess:(a,l)=>{t.invalidateQueries({queryKey:i.projects.all}),t.invalidateQueries({queryKey:i.projects.detail(l.id)}),t.invalidateQueries({queryKey:i.tasks.all}),t.invalidateQueries({queryKey:i.workspaces.all})}})}function te(t){return t.isGitRepo?"select-and-browse":"browse"}function he({value:t,onChange:a,validationMode:l="git",placeholder:_}){const{t:g}=O(),[u,A]=n.useState(""),[k,G]=n.useState([]),[C,$]=n.useState(""),[I,B]=n.useState("/"),[w,U]=n.useState([]),[M,q]=n.useState(!1),[S,K]=n.useState(null),[b,z]=n.useState(t),[E,d]=n.useState(null),[W,F]=n.useState(!1),Q=n.useRef(!1);n.useEffect(()=>{z(t)},[t]);const o=n.useCallback(async s=>{q(!0),K(null);try{const r={};s&&(r.path=s);const c=await p.get("/filesystem/browse",{params:r});A(c.current),$(c.parent),B(c.sep||"/"),G(c.dirs),c.drives&&U(c.drives)}catch(r){K(r instanceof Error?r.message:"Failed to browse directory")}finally{q(!1)}},[]);n.useEffect(()=>{Q.current||(Q.current=!0,o())},[o]);const m=n.useCallback(async s=>{if(l==="directory"){a(s),d(null);return}F(!0),d(null);try{const r=await p.get("/filesystem/validate",{params:{path:s}});r.valid?(a(s),d(null)):d(r.error??"Not a Git repository")}catch(r){d(r instanceof Error?r.message:"Validation failed")}finally{F(!1)}},[a,l]),Z=n.useCallback(s=>{te(s)==="select-and-browse"?(m(s.path),o(s.path)):(o(s.path),d(null))},[m,o]),h=I==="\\",f=n.useMemo(()=>u?u.split(/[\\/]/).filter(Boolean):[],[u]),H=n.useCallback(s=>{const r=f.slice(0,s+1);let c;h?(c=r.join("\\"),r.length===1&&/^[A-Za-z]:$/.test(r[0])&&(c+="\\")):c="/"+r.join("/"),o(c),d(null)},[f,o,h]),J=n.useCallback(s=>{if(s.key==="Enter"&&!s.nativeEvent.isComposing&&s.nativeEvent.keyCode!==229){s.preventDefault();const r=b.trim();r&&(o(r),m(r))}},[b,o,m]);return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:"text",value:b,onChange:s=>z(s.target.value),onKeyDown:J,placeholder:_??"e.g., /Users/me/projects/my-repo",className:x("w-full px-3 py-2 border rounded-lg text-sm font-mono focus:outline-none transition-colors pr-8",t?"border-emerald-300 bg-emerald-50/50 focus:border-emerald-400":"border-neutral-200 focus:border-neutral-400")}),t&&(l==="git"?e.jsx(P,{size:14,className:"absolute right-3 top-1/2 -translate-y-1/2 text-emerald-500"}):e.jsx(v,{size:14,className:"absolute right-3 top-1/2 -translate-y-1/2 text-emerald-500"}))]}),e.jsx("p",{className:"text-xs text-neutral-400",children:g(l==="git"?"Browse and select a Git repository, or type a path and press Enter":"Browse and select a directory, or type a path and press Enter")}),w.length>0&&e.jsx("div",{className:"flex items-center gap-1 flex-wrap",children:w.map(s=>e.jsx("button",{onClick:()=>{o(s),d(null)},className:x("px-2 py-0.5 rounded text-xs font-mono transition-colors border",u.toUpperCase().startsWith(s.toUpperCase())?"bg-neutral-900 text-white border-neutral-900":"border-neutral-200 text-neutral-600 hover:bg-neutral-100"),children:s.replace("\\","")},s))}),e.jsxs("div",{className:"flex items-center gap-0.5 text-xs text-neutral-500 overflow-x-auto pb-1 scrollbar-none",children:[!h&&e.jsx("button",{onClick:()=>o("/"),className:"hover:text-neutral-900 transition-colors flex-shrink-0 px-1 py-0.5 rounded hover:bg-neutral-100",children:"/"}),f.map((s,r)=>e.jsxs("span",{className:"flex items-center gap-0.5 flex-shrink-0",children:[(h?r>0:!0)&&e.jsx(R,{size:10,className:"text-neutral-300"}),e.jsx("button",{onClick:()=>H(r),className:x("px-1 py-0.5 rounded transition-colors truncate max-w-[120px]",r===f.length-1?"font-medium text-neutral-900":"hover:text-neutral-900 hover:bg-neutral-100"),children:s})]},r))]}),e.jsx("div",{className:"border border-neutral-200 rounded-lg overflow-hidden",children:e.jsx("div",{className:"max-h-[200px] overflow-y-auto",children:M?e.jsxs("div",{className:"flex items-center justify-center py-8 text-neutral-400",children:[e.jsx(D,{size:16,className:"animate-spin mr-2"}),e.jsx("span",{className:"text-xs",children:"Loading..."})]}):S?e.jsxs("div",{className:"flex items-center justify-center py-8 text-red-500 gap-2",children:[e.jsx(L,{size:14}),e.jsx("span",{className:"text-xs",children:S})]}):k.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center gap-3 py-8 text-neutral-400",children:[e.jsx("span",{className:"text-xs",children:"No subdirectories"}),l==="directory"&&u&&e.jsxs("button",{type:"button",onClick:()=>m(u),className:x("inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-xs font-medium transition-colors",u===t?"border-emerald-200 bg-emerald-50 text-emerald-700":"border-neutral-200 bg-white text-neutral-700 hover:bg-neutral-50"),children:[e.jsx(T,{size:13}),e.jsx("span",{children:g("Select Current")})]})]}):e.jsxs("ul",{className:"divide-y divide-neutral-100",children:[u!==C&&e.jsx("li",{children:e.jsxs("button",{onClick:()=>o(C),className:"w-full flex items-center gap-2.5 px-3 py-2 text-left hover:bg-neutral-50 transition-colors group",children:[e.jsx(v,{size:14,className:"text-neutral-400 flex-shrink-0"}),e.jsx("span",{className:"text-xs text-neutral-500 group-hover:text-neutral-700",children:".."})]})}),k.map(s=>e.jsx("li",{children:e.jsxs("button",{type:"button",onClick:()=>Z(s),className:x("w-full flex items-center gap-2.5 px-3 py-2 text-left transition-colors group",s.path===t?"bg-emerald-50":"hover:bg-neutral-50"),children:[s.isGitRepo?e.jsx(P,{size:14,className:"text-emerald-500 flex-shrink-0"}):e.jsx(v,{size:14,className:"text-neutral-400 flex-shrink-0"}),e.jsx("span",{className:x("text-xs truncate",s.path===t?"font-medium text-emerald-700":"text-neutral-700 group-hover:text-neutral-900"),children:s.name}),s.isGitRepo&&e.jsx("span",{className:"ml-auto flex-shrink-0 text-[10px] font-medium bg-emerald-100 text-emerald-600 px-1.5 py-0.5 rounded",children:"Git"}),!s.isGitRepo&&e.jsx(R,{size:12,className:"ml-auto text-neutral-300 group-hover:text-neutral-400 flex-shrink-0"})]})},s.path))]})})}),W&&e.jsxs("div",{className:"flex items-center gap-2 text-xs text-neutral-400",children:[e.jsx(D,{size:12,className:"animate-spin"}),e.jsx("span",{children:"Validating..."})]}),E&&e.jsxs("div",{className:"flex items-center gap-2 text-xs text-red-500",children:[e.jsx(L,{size:12}),e.jsx("span",{children:E})]})]})}export{ie as F,oe as R,v as a,pe as b,xe as c,me as d,he as e,ue as f,de as g,ce as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-green-50:oklch(98.2% .018 155.826);--color-green-200:oklch(92.5% .084 155.995);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-600:oklch(60% .118 184.704);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-700:oklch(52% .105 223.128);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-violet-600:oklch(54.1% .281 293.009);--color-pink-600:oklch(59.2% .249 .584);--color-rose-600:oklch(58.6% .253 17.585);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--ease-out:cubic-bezier(0,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{font-size:16px}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{background-color:var(--background);color:var(--foreground);-webkit-tap-highlight-color:transparent}}@layer components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.-top-1\.5{top:calc(var(--spacing)*-1.5)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing)*4)}.top-full{top:100%}.-right-1\.5{right:calc(var(--spacing)*-1.5)}.right-0{right:calc(var(--spacing)*0)}.right-0\.5{right:calc(var(--spacing)*.5)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-3{bottom:calc(var(--spacing)*3)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[101\]{z-index:101}.z-\[120\]{z-index:120}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-0\.5{margin-inline:calc(var(--spacing)*.5)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-1\.5{margin-inline:calc(var(--spacing)*1.5)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-6{margin-inline:calc(var(--spacing)*6)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-1\.5{margin-block:calc(var(--spacing)*1.5)}.my-2{margin-block:calc(var(--spacing)*2)}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.71429}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.888889em;margin-bottom:.888889em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em;padding-inline-start:1.11111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.8em;font-size:2.14286em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:.8em;font-size:1.42857em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.55556em;margin-bottom:.444444em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.42857em;margin-bottom:.571429em;line-height:1.42857}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.142857em;padding-inline-end:.357143em;padding-bottom:.142857em;border-radius:.3125rem;padding-inline-start:.357143em;font-size:.857143em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;border-radius:.25rem;margin-top:1.66667em;margin-bottom:1.66667em;padding-inline-start:1em;font-size:.857143em;line-height:1.66667}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em;padding-inline-start:1.57143em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;margin-bottom:.285714em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.428571em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;padding-inline-start:1.57143em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.85714em;margin-bottom:2.85714em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.666667em;font-size:.857143em;line-height:1.33333}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-8{margin-right:calc(var(--spacing)*8)}.-mb-px{margin-bottom:-1px}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.-ml-0\.5{margin-left:calc(var(--spacing)*-.5)}.-ml-\[2px\]{margin-left:-2px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-\[22px\]{margin-left:22px}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-28{max-height:calc(var(--spacing)*28)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-36{max-height:calc(var(--spacing)*36)}.max-h-40{max-height:calc(var(--spacing)*40)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-\[82vh\]{max-height:82vh}.max-h-\[200px\]{max-height:200px}.max-h-\[240px\]{max-height:240px}.max-h-\[360px\]{max-height:360px}.max-h-\[420px\]{max-height:420px}.max-h-\[calc\(100vh-2rem\)\]{max-height:calc(100vh - 2rem)}.max-h-\[min\(50vh\,22rem\)\]{max-height:min(50vh,22rem)}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-\[40px\]{min-height:40px}.min-h-\[180px\]{min-height:180px}.min-h-\[200px\]{min-height:200px}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-72{width:calc(var(--spacing)*72)}.w-96{width:calc(var(--spacing)*96)}.w-\[14px\]{width:14px}.w-\[420px\]{width:420px}.w-\[min\(24rem\,calc\(100vw-3rem\)\)\]{width:min(24rem,100vw - 3rem)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[18rem\]{max-width:18rem}.max-w-\[45\%\]{max-width:45%}.max-w-\[70vw\]{max-width:70vw}.max-w-\[85\%\]{max-width:85%}.max-w-\[92vw\]{max-width:92vw}.max-w-\[120px\]{max-width:120px}.max-w-\[130px\]{max-width:130px}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[240px\]{max-width:240px}.max-w-\[280px\]{max-width:280px}.max-w-\[300px\]{max-width:300px}.max-w-\[340px\]{max-width:340px}.max-w-\[calc\(100vw-1rem\)\]{max-width:calc(100vw - 1rem)}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-\[min\(86\%\,46rem\)\]{max-width:min(86%,46rem)}.max-w-\[min\(100\%\,42rem\)\]{max-width:min(100%,42rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[40px\]{min-width:40px}.min-w-\[82px\]{min-width:82px}.min-w-\[110px\]{min-width:110px}.min-w-\[120px\]{min-width:120px}.min-w-\[160px\]{min-width:160px}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.origin-top-left{transform-origin:0 0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[3px\]{--tw-translate-x:3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[18px\]{--tw-translate-x:18px;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(1px*var(--tw-space-y-reverse));margin-block-end:calc(1px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing)*2)}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-neutral-100>:not(:last-child)){border-color:var(--color-neutral-100)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.overscroll-y-contain{overscroll-behavior-y:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:calc(var(--radius) + 8px)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-t-md{border-top-left-radius:calc(var(--radius) - 2px);border-top-right-radius:calc(var(--radius) - 2px)}.rounded-tl-\[2px\]{border-top-left-radius:2px}.rounded-tr-\[2px\]{border-top-right-radius:2px}.rounded-tr-sm{border-top-right-radius:calc(var(--radius) - 4px)}.rounded-b-xl{border-bottom-right-radius:calc(var(--radius) + 4px);border-bottom-left-radius:calc(var(--radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.\!border-neutral-800{border-color:var(--color-neutral-800)!important}.border-\[\#333\]{border-color:#333}.border-\[\#444\]{border-color:#444}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-400{border-color:var(--color-blue-400)}.border-cyan-200{border-color:var(--color-cyan-200)}.border-emerald-100{border-color:var(--color-emerald-100)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-emerald-300{border-color:var(--color-emerald-300)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-200{border-color:var(--color-indigo-200)}.border-neutral-50{border-color:var(--color-neutral-50)}.border-neutral-100{border-color:var(--color-neutral-100)}.border-neutral-200{border-color:var(--color-neutral-200)}.border-neutral-200\/70{border-color:#e5e5e5b3}@supports (color:color-mix(in lab,red,red)){.border-neutral-200\/70{border-color:color-mix(in oklab,var(--color-neutral-200)70%,transparent)}}.border-neutral-300{border-color:var(--color-neutral-300)}.border-neutral-400{border-color:var(--color-neutral-400)}.border-neutral-800{border-color:var(--color-neutral-800)}.border-neutral-900{border-color:var(--color-neutral-900)}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-transparent{border-color:#0000}.border-t-neutral-900{border-top-color:var(--color-neutral-900)}.border-b-neutral-900{border-bottom-color:var(--color-neutral-900)}.\!bg-neutral-900{background-color:var(--color-neutral-900)!important}.bg-\[\#1e1e1e\]{background-color:#1e1e1e}.bg-\[\#2d2d2d\]{background-color:#2d2d2d}.bg-\[\#333\]{background-color:#333}.bg-\[\#444\]{background-color:#444}.bg-\[\#252526\]{background-color:#252526}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/50{background-color:#fffbeb80}@supports (color:color-mix(in lab,red,red)){.bg-amber-50\/50{background-color:color-mix(in oklab,var(--color-amber-50)50%,transparent)}}.bg-amber-50\/80{background-color:#fffbebcc}@supports (color:color-mix(in lab,red,red)){.bg-amber-50\/80{background-color:color-mix(in oklab,var(--color-amber-50)80%,transparent)}}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.bg-amber-600{background-color:var(--color-amber-600)}.bg-background{background-color:var(--background)}.bg-black\/55{background-color:#0000008c}@supports (color:color-mix(in lab,red,red)){.bg-black\/55{background-color:color-mix(in oklab,var(--color-black)55%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/50{background-color:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/50{background-color:color-mix(in oklab,var(--color-blue-50)50%,transparent)}}.bg-blue-50\/80{background-color:#eff6ffcc}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/80{background-color:color-mix(in oklab,var(--color-blue-50)80%,transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-950\/30{background-color:#1624564d}@supports (color:color-mix(in lab,red,red)){.bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}}.bg-card{background-color:var(--card)}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-cyan-600{background-color:var(--color-cyan-600)}.bg-destructive{background-color:var(--destructive)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-50\/50{background-color:#ecfdf580}@supports (color:color-mix(in lab,red,red)){.bg-emerald-50\/50{background-color:color-mix(in oklab,var(--color-emerald-50)50%,transparent)}}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-emerald-950\/40{background-color:#002c2266}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/40{background-color:color-mix(in oklab,var(--color-emerald-950)40%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-green-50{background-color:var(--color-green-50)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-neutral-50\/50{background-color:#fafafa80}@supports (color:color-mix(in lab,red,red)){.bg-neutral-50\/50{background-color:color-mix(in oklab,var(--color-neutral-50)50%,transparent)}}.bg-neutral-50\/80{background-color:#fafafacc}@supports (color:color-mix(in lab,red,red)){.bg-neutral-50\/80{background-color:color-mix(in oklab,var(--color-neutral-50)80%,transparent)}}.bg-neutral-50\/90{background-color:#fafafae6}@supports (color:color-mix(in lab,red,red)){.bg-neutral-50\/90{background-color:color-mix(in oklab,var(--color-neutral-50)90%,transparent)}}.bg-neutral-100{background-color:var(--color-neutral-100)}.bg-neutral-100\/60{background-color:#f5f5f599}@supports (color:color-mix(in lab,red,red)){.bg-neutral-100\/60{background-color:color-mix(in oklab,var(--color-neutral-100)60%,transparent)}}.bg-neutral-100\/80{background-color:#f5f5f5cc}@supports (color:color-mix(in lab,red,red)){.bg-neutral-100\/80{background-color:color-mix(in oklab,var(--color-neutral-100)80%,transparent)}}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-200\/60{background-color:#e5e5e599}@supports (color:color-mix(in lab,red,red)){.bg-neutral-200\/60{background-color:color-mix(in oklab,var(--color-neutral-200)60%,transparent)}}.bg-neutral-300{background-color:var(--color-neutral-300)}.bg-neutral-400{background-color:var(--color-neutral-400)}.bg-neutral-500{background-color:var(--color-neutral-500)}.bg-neutral-700{background-color:var(--color-neutral-700)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-neutral-900\/8{background-color:#17171714}@supports (color:color-mix(in lab,red,red)){.bg-neutral-900\/8{background-color:color-mix(in oklab,var(--color-neutral-900)8%,transparent)}}.bg-neutral-950{background-color:var(--color-neutral-950)}.bg-pink-600{background-color:var(--color-pink-600)}.bg-primary{background-color:var(--primary)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-950\/40{background-color:#46080966}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/40{background-color:color-mix(in oklab,var(--color-red-950)40%,transparent)}}.bg-rose-600{background-color:var(--color-rose-600)}.bg-secondary{background-color:var(--secondary)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-teal-600{background-color:var(--color-teal-600)}.bg-transparent{background-color:#0000}.bg-violet-600{background-color:var(--color-violet-600)}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.bg-white\/60{background-color:#fff9}@supports (color:color-mix(in lab,red,red)){.bg-white\/60{background-color:color-mix(in oklab,var(--color-white)60%,transparent)}}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[repeating-conic-gradient\(\#f3f3f3_0\%_25\%\,\#fff_0\%_50\%\)\]{background-image:repeating-conic-gradient(#f3f3f3 0% 25%,#fff 0% 50%)}.from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-amber-50{--tw-gradient-to:var(--color-amber-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-neutral-100{--tw-gradient-to:var(--color-neutral-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-neutral-900{--tw-gradient-to:var(--color-neutral-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-\[length\:16px_16px\]{background-size:16px 16px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.5{padding-inline:calc(var(--spacing)*3.5)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-\[3px\]{padding-block:3px}.py-px{padding-block:1px}.pt-0\.5{padding-top:calc(var(--spacing)*.5)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-2\.5{padding-top:calc(var(--spacing)*2.5)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-0\.5{padding-bottom:calc(var(--spacing)*.5)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-1\.5{padding-bottom:calc(var(--spacing)*1.5)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-7{padding-left:calc(var(--spacing)*7)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-\[14px\]{--tw-leading:14px;line-height:14px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.break-words,.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.\!text-neutral-100{color:var(--color-neutral-100)!important}.text-amber-300{color:var(--color-amber-300)}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/80{color:color-mix(in oklab,var(--color-amber-400)80%,transparent)}}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-card-foreground{color:var(--card-foreground)}.text-cyan-600{color:var(--color-cyan-600)}.text-cyan-700{color:var(--color-cyan-700)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-foreground{color:var(--foreground)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-900{color:var(--color-green-900)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-muted-foreground{color:var(--muted-foreground)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-700{color:var(--color-neutral-700)}.text-neutral-800{color:var(--color-neutral-800)}.text-neutral-900{color:var(--color-neutral-900)}.text-pink-600{color:var(--color-pink-600)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-rose-600{color:var(--color-rose-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-600{color:var(--color-teal-600)}.text-violet-600{color:var(--color-violet-600)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-neutral-300{-webkit-text-decoration-color:var(--color-neutral-300);text-decoration-color:var(--color-neutral-300)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.placeholder-neutral-400::placeholder{color:var(--color-neutral-400)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.\!shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_-2px_6px_rgba\(0\,0\,0\,0\.02\)\]{--tw-shadow:0 -2px 6px var(--tw-shadow-color,#00000005);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-neutral-200\/50{--tw-shadow-color:#e5e5e580}@supports (color:color-mix(in lab,red,red)){.shadow-neutral-200\/50{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-neutral-200)50%,transparent)var(--tw-shadow-alpha),transparent)}}.shadow-neutral-200\/70{--tw-shadow-color:#e5e5e5b3}@supports (color:color-mix(in lab,red,red)){.shadow-neutral-200\/70{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-neutral-200)70%,transparent)var(--tw-shadow-alpha),transparent)}}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-neutral-900\/10{--tw-ring-color:#1717171a}@supports (color:color-mix(in lab,red,red)){.ring-neutral-900\/10{--tw-ring-color:color-mix(in oklab,var(--color-neutral-900)10%,transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[max-height\]{transition-property:max-height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.fade-in{--tw-enter-opacity:0}.running{animation-play-state:running}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}@media(hover:hover){.group-hover\:flex:is(:where(.group):hover *){display:flex}.group-hover\:inline-flex:is(:where(.group):hover *){display:inline-flex}.group-hover\:border-neutral-300:is(:where(.group):hover *){border-color:var(--color-neutral-300)}.group-hover\:bg-neutral-500:is(:where(.group):hover *){background-color:var(--color-neutral-500)}.group-hover\:text-neutral-400:is(:where(.group):hover *){color:var(--color-neutral-400)}.group-hover\:text-neutral-500:is(:where(.group):hover *){color:var(--color-neutral-500)}.group-hover\:text-neutral-700:is(:where(.group):hover *){color:var(--color-neutral-700)}.group-hover\:text-neutral-800:is(:where(.group):hover *){color:var(--color-neutral-800)}.group-hover\:text-neutral-900:is(:where(.group):hover *){color:var(--color-neutral-900)}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/tooltip\:opacity-100:is(:where(.group\/tooltip):hover *){opacity:1}}.peer-checked\:bg-neutral-900:is(:where(.peer):checked~*){background-color:var(--color-neutral-900)}.peer-focus\:outline-none:is(:where(.peer):focus~*){--tw-outline-style:none;outline-style:none}.placeholder\:text-neutral-400::placeholder{color:var(--color-neutral-400)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:top-1:before{content:var(--tw-content);top:calc(var(--spacing)*1)}.before\:bottom-2:before{content:var(--tw-content);bottom:calc(var(--spacing)*2)}.before\:left-\[7px\]:before{content:var(--tw-content);left:7px}.before\:w-px:before{content:var(--tw-content);width:1px}.before\:bg-neutral-100:before{content:var(--tw-content);background-color:var(--color-neutral-100)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:h-4:after{content:var(--tw-content);height:calc(var(--spacing)*4)}.after\:w-4:after{content:var(--tw-content);width:calc(var(--spacing)*4)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.after\:border:after{content:var(--tw-content);border-style:var(--tw-border-style);border-width:1px}.after\:border-neutral-300:after{content:var(--tw-content);border-color:var(--color-neutral-300)}.after\:bg-white:after{content:var(--tw-content);background-color:var(--color-white)}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.peer-checked\:after\:translate-x-full:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.peer-checked\:after\:border-white:is(:where(.peer):checked~*):after{content:var(--tw-content);border-color:var(--color-white)}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.focus-within\:border-neutral-300:focus-within{border-color:var(--color-neutral-300)}.focus-within\:shadow-md:focus-within{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-1:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-neutral-300:focus-within{--tw-ring-color:var(--color-neutral-300)}@media(hover:hover){.hover\:border-neutral-200:hover{border-color:var(--color-neutral-200)}.hover\:border-neutral-300:hover{border-color:var(--color-neutral-300)}.hover\:border-neutral-400:hover{border-color:var(--color-neutral-400)}.hover\:bg-\[\#333\]:hover{background-color:#333}.hover\:bg-\[\#444\]:hover{background-color:#444}.hover\:bg-\[\#383838\]:hover{background-color:#383838}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-amber-50:hover{background-color:var(--color-amber-50)}.hover\:bg-amber-100:hover{background-color:var(--color-amber-100)}.hover\:bg-amber-200:hover{background-color:var(--color-amber-200)}.hover\:bg-amber-500\/20:hover{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/20:hover{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-blue-100:hover{background-color:var(--color-blue-100)}.hover\:bg-blue-300:hover{background-color:var(--color-blue-300)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-emerald-50:hover{background-color:var(--color-emerald-50)}.hover\:bg-emerald-100:hover{background-color:var(--color-emerald-100)}.hover\:bg-emerald-700:hover{background-color:var(--color-emerald-700)}.hover\:bg-neutral-50:hover{background-color:var(--color-neutral-50)}.hover\:bg-neutral-50\/80:hover{background-color:#fafafacc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-neutral-50\/80:hover{background-color:color-mix(in oklab,var(--color-neutral-50)80%,transparent)}}.hover\:bg-neutral-100:hover{background-color:var(--color-neutral-100)}.hover\:bg-neutral-100\/80:hover{background-color:#f5f5f5cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-neutral-100\/80:hover{background-color:color-mix(in oklab,var(--color-neutral-100)80%,transparent)}}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-neutral-200\/50:hover{background-color:#e5e5e580}@supports (color:color-mix(in lab,red,red)){.hover\:bg-neutral-200\/50:hover{background-color:color-mix(in oklab,var(--color-neutral-200)50%,transparent)}}.hover\:bg-neutral-300:hover{background-color:var(--color-neutral-300)}.hover\:bg-neutral-800:hover{background-color:var(--color-neutral-800)}.hover\:bg-neutral-900:hover{background-color:var(--color-neutral-900)}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/15:hover{background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/15:hover{background-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-amber-300:hover{color:var(--color-amber-300)}.hover\:text-emerald-600:hover{color:var(--color-emerald-600)}.hover\:text-emerald-800:hover{color:var(--color-emerald-800)}.hover\:text-neutral-300:hover{color:var(--color-neutral-300)}.hover\:text-neutral-500:hover{color:var(--color-neutral-500)}.hover\:text-neutral-600:hover{color:var(--color-neutral-600)}.hover\:text-neutral-700:hover{color:var(--color-neutral-700)}.hover\:text-neutral-800:hover{color:var(--color-neutral-800)}.hover\:text-neutral-900:hover{color:var(--color-neutral-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-red-800:hover{color:var(--color-red-800)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:border-emerald-300:focus{border-color:var(--color-emerald-300)}.focus\:border-emerald-400:focus{border-color:var(--color-emerald-400)}.focus\:border-neutral-300:focus{border-color:var(--color-neutral-300)}.focus\:border-neutral-400:focus{border-color:var(--color-neutral-400)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-emerald-500\/20:focus{--tw-ring-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.focus\:ring-emerald-500\/20:focus{--tw-ring-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}}.focus\:ring-neutral-300:focus{--tw-ring-color:var(--color-neutral-300)}.focus\:ring-neutral-400:focus{--tw-ring-color:var(--color-neutral-400)}.focus\:ring-neutral-900:focus{--tw-ring-color:var(--color-neutral-900)}.focus\:ring-neutral-900\/15:focus{--tw-ring-color:#17171726}@supports (color:color-mix(in lab,red,red)){.focus\:ring-neutral-900\/15:focus{--tw-ring-color:color-mix(in oklab,var(--color-neutral-900)15%,transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-neutral-300:focus-visible{--tw-ring-color:var(--color-neutral-300)}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:bg-black:active{background-color:var(--color-black)}.active\:bg-blue-400:active{background-color:var(--color-blue-400)}.active\:bg-neutral-50:active{background-color:var(--color-neutral-50)}.active\:bg-neutral-100:active{background-color:var(--color-neutral-100)}.active\:bg-neutral-400:active{background-color:var(--color-neutral-400)}.active\:bg-red-50:active{background-color:var(--color-red-50)}.active\:bg-red-600:active{background-color:var(--color-red-600)}.active\:bg-white:active{background-color:var(--color-white)}.active\:text-neutral-600:active{color:var(--color-neutral-600)}.active\:text-neutral-700:active{color:var(--color-neutral-700)}.active\:text-neutral-900:active{color:var(--color-neutral-900)}.active\:opacity-90:active{opacity:.9}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-neutral-50:disabled{background-color:var(--color-neutral-50)}.disabled\:bg-neutral-100:disabled{background-color:var(--color-neutral-100)}.disabled\:text-neutral-400:disabled{color:var(--color-neutral-400)}.disabled\:text-neutral-500:disabled{color:var(--color-neutral-500)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-\[\>svg\]\:px-1\.5:has(>svg){padding-inline:calc(var(--spacing)*1.5)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}@media(min-width:40rem){.sm\:h-16{height:calc(var(--spacing)*16)}.sm\:w-16{width:calc(var(--spacing)*16)}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:pt-2{padding-top:calc(var(--spacing)*2)}.sm\:pr-14{padding-right:calc(var(--spacing)*14)}.sm\:pl-14{padding-left:calc(var(--spacing)*14)}}@media(min-width:48rem){.md\:max-w-56{max-width:calc(var(--spacing)*56)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:justify-between{justify-content:space-between}.md\:text-right{text-align:right}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[280px_minmax\(0\,1fr\)\]{grid-template-columns:280px minmax(0,1fr)}.lg\:grid-cols-\[minmax\(0\,1\.15fr\)_minmax\(320px\,0\.85fr\)\]{grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr)}}@media(min-width:80rem){.xl\:inline{display:inline}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}@media(hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.prose-headings\:mt-3 :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--spacing)*3)}.prose-headings\:mb-2 :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:calc(var(--spacing)*2)}.prose-headings\:leading-snug :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.prose-headings\:font-semibold :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose-headings\:text-white :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-white)}.prose-p\:my-2 :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--spacing)*2)}.prose-p\:leading-6 :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.prose-p\:first\:mt-0 :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--spacing)*0)}.prose-p\:last\:mb-0 :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):last-child{margin-bottom:calc(var(--spacing)*0)}.prose-a\:text-blue-200 :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-blue-200)}.prose-a\:text-blue-600 :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-blue-600)}.prose-a\:underline-offset-2 :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-underline-offset:2px}@media(hover:hover){.hover\:prose-a\:text-blue-100:hover :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-blue-100)}.hover\:prose-a\:text-blue-700:hover :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-blue-700)}}.prose-blockquote\:my-2 :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--spacing)*2)}.prose-blockquote\:border-l-2 :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-left-style:var(--tw-border-style);border-left-width:2px}.prose-blockquote\:border-neutral-300 :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--color-neutral-300)}.prose-blockquote\:border-white\/30 :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.prose-blockquote\:border-white\/30 :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.prose-blockquote\:pl-3 :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:calc(var(--spacing)*3)}.prose-blockquote\:text-neutral-200 :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-neutral-200)}.prose-blockquote\:text-neutral-600 :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-neutral-600)}.prose-strong\:text-neutral-900 :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-neutral-900)}.prose-strong\:text-white :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-white)}.prose-code\:rounded :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem}.prose-code\:bg-neutral-100 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--color-neutral-100)}.prose-code\:bg-white\/15 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.prose-code\:bg-white\/15 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.prose-code\:px-1 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:calc(var(--spacing)*1)}.prose-code\:py-0\.5 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--spacing)*.5)}.prose-code\:text-\[0\.9em\] :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-code\:font-medium :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.prose-code\:break-words :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){overflow-wrap:break-word}.prose-code\:text-neutral-800 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-neutral-800)}.prose-code\:text-white :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-white)}.prose-pre\:my-3 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--spacing)*3)}.prose-pre\:max-w-full :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){max-width:100%}.prose-pre\:overflow-x-auto :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){overflow-x:auto}.prose-pre\:rounded-md :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:calc(var(--radius) - 2px)}.prose-pre\:border :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-style:var(--tw-border-style);border-width:1px}.prose-pre\:border-neutral-700 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--color-neutral-700)}.prose-pre\:border-neutral-800 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--color-neutral-800)}.prose-pre\:bg-neutral-950 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--color-neutral-950)}.prose-pre\:p-3 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding:calc(var(--spacing)*3)}.prose-pre\:text-xs :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.prose-pre\:leading-relaxed :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.prose-pre\:shadow-inner :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.prose-pre\:prose-code\:bg-transparent :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)) :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:#0000}.prose-pre\:prose-code\:p-0 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)) :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding:calc(var(--spacing)*0)}.prose-pre\:prose-code\:text-neutral-100 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)) :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-neutral-100)}.prose-ol\:my-2 :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-ul\:my-2 :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--spacing)*2)}.prose-li\:my-1 :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--spacing)*1)}.prose-li\:pl-0 :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:calc(var(--spacing)*0)}.prose-li\:leading-6 :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.prose-li\:marker\:text-neutral-400 :where(li):not(:where([class~=not-prose],[class~=not-prose] *)) ::marker{color:var(--color-neutral-400)}.prose-li\:marker\:text-neutral-400 :where(li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--color-neutral-400)}.prose-li\:marker\:text-neutral-400 :where(li):not(:where([class~=not-prose],[class~=not-prose] *)) ::-webkit-details-marker{color:var(--color-neutral-400)}.prose-li\:marker\:text-neutral-400 :where(li):not(:where([class~=not-prose],[class~=not-prose] *))::-webkit-details-marker{color:var(--color-neutral-400)}.prose-hr\:my-3 :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--spacing)*3)}.prose-hr\:border-neutral-200 :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--color-neutral-200)}.prose-hr\:border-white\/15 :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.prose-hr\:border-white\/15 :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}.\[\&\>p\]\:inline>p{display:inline}.active-work-dots{text-align:left;width:1.5em;display:inline-block}.active-work-dots__second{animation:1.8s step-end infinite active-work-dot-2}.active-work-dots__third{animation:1.8s step-end infinite active-work-dot-3}@keyframes active-work-dot-2{0%{opacity:0}33%,to{opacity:1}}@keyframes active-work-dot-3{0%,33%{opacity:0}66%,to{opacity:1}}@media(prefers-reduced-motion:reduce){.active-work-dots__second,.active-work-dots__third{animation:none}}.scrollbar-app{--scrollbar-current-size:var(--scrollbar-size);scrollbar-color:var(--scrollbar-thumb)var(--scrollbar-track);scrollbar-width:auto}.scrollbar-app-thin{--scrollbar-current-size:var(--scrollbar-thin-size);scrollbar-color:var(--scrollbar-thumb)var(--scrollbar-track);scrollbar-width:thin}.scrollbar-app::-webkit-scrollbar{width:var(--scrollbar-current-size);height:var(--scrollbar-current-size)}.scrollbar-app-thin::-webkit-scrollbar{width:var(--scrollbar-current-size);height:var(--scrollbar-current-size)}.scrollbar-app::-webkit-scrollbar-track{background:var(--scrollbar-track)}.scrollbar-app-thin::-webkit-scrollbar-track{background:var(--scrollbar-track)}.scrollbar-app::-webkit-scrollbar-corner{background:var(--scrollbar-track)}.scrollbar-app-thin::-webkit-scrollbar-corner{background:var(--scrollbar-track)}.scrollbar-app::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:var(--scrollbar-radius)}.scrollbar-app-thin::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:var(--scrollbar-radius)}.scrollbar-app::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}.scrollbar-app-thin::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}.pb-safe{padding-bottom:env(safe-area-inset-bottom,0px)}.pt-safe{padding-top:env(safe-area-inset-top,0px)}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0);--scrollbar-size:8px;--scrollbar-thin-size:4px;--scrollbar-radius:9999px;--scrollbar-track:transparent;--scrollbar-thumb:oklch(84% 0 0);--scrollbar-thumb-hover:oklch(70.8% 0 0)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0);--scrollbar-thumb:oklch(43.9% 0 0);--scrollbar-thumb-hover:oklch(55.6% 0 0)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}
|