@swarmroom/server 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/LICENSE +21 -0
  2. package/dist/app.js +15 -4
  3. package/dist/index.js +2 -0
  4. package/dist/public/assets/_agentId-Det2HUaT.js +36 -0
  5. package/dist/public/assets/activity-C5c3pd0l.js +6 -0
  6. package/dist/public/assets/arrow-left-Bho8c3gL.js +6 -0
  7. package/dist/public/assets/avatar-D6PiXqfu.js +1 -0
  8. package/dist/public/assets/card-BWnhVACg.js +1 -0
  9. package/dist/public/assets/chevron-down-io8WQqgh.js +6 -0
  10. package/dist/public/assets/error-boundary-ONLtI3m8.js +11 -0
  11. package/dist/public/assets/external-link-D6ZNJ2De.js +6 -0
  12. package/dist/public/assets/index-B3vl6HkB.js +36 -0
  13. package/dist/public/assets/index-CRKuXBmU.js +16 -0
  14. package/dist/public/assets/index-Coo_PliT.js +213 -0
  15. package/dist/public/assets/index-CrAz8zKh.js +6 -0
  16. package/dist/public/assets/index-DSLPkkn7.js +26 -0
  17. package/dist/public/assets/index-DTF52X7L.js +6 -0
  18. package/dist/public/assets/index-DcbqFmA_.css +1 -0
  19. package/dist/public/assets/index-DrvfFRRH.js +26 -0
  20. package/dist/public/assets/input-CpGy8OTc.js +1 -0
  21. package/dist/public/assets/loader-circle-BBfeX6jI.js +6 -0
  22. package/dist/public/assets/plus-c5hdQFYj.js +6 -0
  23. package/dist/public/assets/radio-zlZI1pp6.js +6 -0
  24. package/dist/public/assets/scroll-area-BD_ZWvua.js +1 -0
  25. package/dist/public/assets/send-D7L2DhCM.js +6 -0
  26. package/dist/public/assets/useMutation-C7s7l6mS.js +1 -0
  27. package/dist/public/assets/user-minus-B2DcEtYp.js +11 -0
  28. package/dist/public/assets/utils-Dt8_kYy9.js +6 -0
  29. package/dist/public/assets/wifi-CkkG3jQZ.js +26 -0
  30. package/dist/public/index.html +14 -0
  31. package/dist/public/vite.svg +4 -0
  32. package/dist/routes/skills.d.ts +3 -0
  33. package/dist/routes/skills.js +19 -0
  34. package/dist/services/mdns-browser.js +110 -33
  35. package/dist/services/skill-service.d.ts +4 -0
  36. package/dist/services/skill-service.js +81 -0
  37. package/package.json +25 -13
@@ -0,0 +1,6 @@
1
+ import{c as ne,j as e,U as Y,n as $,r as h,D as L,d as O,e as k,f as E,g as Q,o as K,b as x,t as v,A as b,u as M,S as re,p as ie,m as W}from"./index-Coo_PliT.js";import{B as I,S as D,E as le}from"./error-boundary-ONLtI3m8.js";import{C as X,a as Z}from"./card-BWnhVACg.js";import{A as oe,a as _,b as U,c as ce}from"./avatar-D6PiXqfu.js";import{g as R,a as B,s as T,T as de}from"./utils-Dt8_kYy9.js";import{u as w}from"./useMutation-C7s7l6mS.js";import{I as S}from"./input-CpGy8OTc.js";import{L as P}from"./loader-circle-BBfeX6jI.js";import{S as ee}from"./scroll-area-BD_ZWvua.js";import{P as G}from"./plus-c5hdQFYj.js";import{P as me,U as ue}from"./user-minus-B2DcEtYp.js";/**
2
+ * @license lucide-react v0.400.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const xe=ne("UserPlus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);function he({team:a,onClick:i}){const o=a.topAgentNames??[],r=a.agentCount-o.length;return e.jsxs(X,{className:"group relative cursor-pointer gap-0 overflow-hidden py-0 transition-all duration-200 hover:shadow-lg hover:-translate-y-0.5",onClick:i,children:[e.jsx("div",{className:"absolute inset-y-0 left-0 w-1 transition-all duration-200 group-hover:w-1.5",style:{backgroundColor:a.color??"#6366f1"}}),e.jsxs(Z,{className:"flex flex-col gap-4 p-5 pl-5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h3",{className:"truncate text-base font-semibold leading-tight text-foreground",children:a.name}),a.description&&e.jsx("p",{className:"mt-1 line-clamp-2 text-sm text-muted-foreground leading-relaxed",children:a.description})]}),e.jsxs(I,{variant:"secondary",className:"shrink-0 gap-1 tabular-nums text-xs",children:[e.jsx(Y,{className:"size-3"}),a.agentCount]})]}),e.jsx("div",{className:"flex items-center gap-3 border-t border-border/40 pt-3",children:o.length>0?e.jsxs(oe,{children:[o.slice(0,5).map(m=>e.jsx(_,{size:"sm",children:e.jsx(U,{className:"text-[9px] font-semibold text-white",style:{backgroundColor:B(m)},children:R(m)})},m)),r>0&&e.jsxs(ce,{className:"text-[10px] font-medium",children:["+",r]})]}):e.jsx("span",{className:"text-xs text-muted-foreground italic",children:"No members yet"})})]})]})}function fe(){return e.jsxs(X,{className:"gap-0 overflow-hidden py-0",children:[e.jsx("div",{className:"absolute inset-y-0 left-0 w-1 bg-muted"}),e.jsxs(Z,{className:"flex flex-col gap-4 p-5 pl-5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex-1 space-y-2",children:[e.jsx("div",{className:"h-5 w-32 animate-pulse rounded bg-muted"}),e.jsx("div",{className:"h-4 w-48 animate-pulse rounded bg-muted"})]}),e.jsx("div",{className:"h-5 w-12 animate-pulse rounded-full bg-muted"})]}),e.jsx("div",{className:"flex gap-1 border-t border-border/40 pt-3",children:Array.from({length:3}).map((a,i)=>e.jsx("div",{className:"size-6 animate-pulse rounded-full bg-muted"},i))})]})]})}const q=["#6366f1","#8b5cf6","#ec4899","#f43f5e","#ef4444","#f97316","#eab308","#22c55e","#10b981","#06b6d4","#3b82f6","#64748b"];function ge({open:a,onOpenChange:i}){const o=$(),[r,m]=h.useState(""),[c,l]=h.useState(""),[g,N]=h.useState(q[0]),j=w({mutationFn:async()=>{var f;const t=await fetch(`${b}/teams`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:r.trim(),description:c.trim()||void 0,color:g})});if(!t.ok){const u=await t.json().catch(()=>null);throw new Error(((f=u==null?void 0:u.error)==null?void 0:f.message)??`Failed to create team (${t.status})`)}return t.json()},onSuccess:()=>{o.invalidateQueries({queryKey:["teams"]}),v.success("Team created"),y()},onError:t=>{v.error(t.message)}});function y(){m(""),l(""),N(q[0]),i(!1)}function n(t){t.preventDefault(),r.trim()&&j.mutate()}return e.jsx(L,{open:a,onOpenChange:i,children:e.jsx(O,{className:"sm:max-w-md",children:e.jsxs("form",{onSubmit:n,children:[e.jsxs(k,{children:[e.jsx(E,{children:"Create Team"}),e.jsx(Q,{children:"Group agents into a collaborative team."})]}),e.jsxs("div",{className:"mt-4 flex flex-col gap-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{htmlFor:"team-name",className:"text-sm font-medium text-foreground",children:"Name"}),e.jsx(S,{id:"team-name",value:r,onChange:t=>m(t.target.value),placeholder:"e.g. Frontend Squad",autoFocus:!0,required:!0})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{htmlFor:"team-desc",className:"text-sm font-medium text-foreground",children:"Description"}),e.jsx(S,{id:"team-desc",value:c,onChange:t=>l(t.target.value),placeholder:"What does this team focus on?"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("span",{className:"text-sm font-medium text-foreground",children:"Color"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:q.map(t=>e.jsx("button",{type:"button",onClick:()=>N(t),className:"relative size-7 rounded-full transition-transform hover:scale-110 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",style:{backgroundColor:t},children:g===t&&e.jsx("span",{className:"absolute inset-0 flex items-center justify-center",children:e.jsx("span",{className:"size-2 rounded-full bg-white"})})},t))})]})]}),e.jsxs(K,{className:"mt-6",children:[e.jsx(x,{type:"button",variant:"outline",onClick:y,disabled:j.isPending,children:"Cancel"}),e.jsxs(x,{type:"submit",disabled:!r.trim()||j.isPending,children:[j.isPending&&e.jsx(P,{className:"animate-spin"}),"Create"]})]})]})})})}function je({open:a,onOpenChange:i,teamId:o,currentAgentIds:r}){var y;const m=$(),[c,l]=h.useState(""),g=M({queryKey:["agents"],queryFn:async()=>{const n=await fetch(`${b}/agents`);if(!n.ok)throw new Error("Failed to fetch agents");return(await n.json()).data},enabled:a,staleTime:3e4}),N=w({mutationFn:async n=>{var f;const t=await fetch(`${b}/teams/${o}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:n})});if(!t.ok){const u=await t.json().catch(()=>null);throw new Error(((f=u==null?void 0:u.error)==null?void 0:f.message)??`Failed to add agent (${t.status})`)}return t.json()},onSuccess:()=>{m.invalidateQueries({queryKey:["teams"]}),m.invalidateQueries({queryKey:["team",o]}),v.success("Agent added to team")},onError:n=>{v.error(n.message)}}),j=h.useMemo(()=>{const n=g.data??[],t=new Set(r);let f=n.filter(u=>!t.has(u.id));if(c){const u=c.toLowerCase();f=f.filter(C=>C.displayName.toLowerCase().includes(u)||C.name.toLowerCase().includes(u))}return f},[g.data,r,c]);return e.jsx(L,{open:a,onOpenChange:i,children:e.jsxs(O,{className:"sm:max-w-md",children:[e.jsxs(k,{children:[e.jsx(E,{children:"Add Agent"}),e.jsx(Q,{children:"Select an agent to add to this team."})]}),e.jsxs("div",{className:"relative",children:[e.jsx(re,{className:"absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(S,{value:c,onChange:n=>l(n.target.value),placeholder:"Search agents...",className:"pl-9"})]}),e.jsx(ee,{className:"max-h-64",children:g.isLoading?e.jsx("div",{className:"flex flex-col gap-2 p-1",children:Array.from({length:3}).map((n,t)=>e.jsx("div",{className:"h-12 animate-pulse rounded-lg bg-muted"},t))}):j.length===0?e.jsx("div",{className:"py-8 text-center text-sm text-muted-foreground",children:(((y=g.data)==null?void 0:y.length)??0)===0?"No agents available":c?"No matching agents":"All agents are already in this team"}):e.jsx("div",{className:"flex flex-col gap-1 p-1",children:j.map(n=>{const t=T[n.status]??T.offline;return e.jsxs("div",{className:"flex items-center gap-3 rounded-lg px-3 py-2 transition-colors hover:bg-accent",children:[e.jsx(_,{size:"sm",children:e.jsx(U,{className:"text-[9px] font-semibold text-white",style:{backgroundColor:B(n.displayName)},children:R(n.displayName)})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"truncate text-sm font-medium",children:n.displayName}),e.jsx("span",{className:`inline-block size-1.5 shrink-0 rounded-full ${t.dot}`})]}),e.jsx("p",{className:"truncate text-xs text-muted-foreground font-mono",children:n.name})]}),e.jsxs(x,{size:"xs",variant:"outline",onClick:()=>N.mutate(n.id),disabled:N.isPending,children:[e.jsx(G,{className:"size-3"}),"Add"]})]},n.id)})})}),e.jsx(K,{children:e.jsx(x,{variant:"outline",onClick:()=>i(!1),children:"Done"})})]})})}function pe({teamId:a,open:i,onOpenChange:o}){const r=$(),[m,c]=h.useState(!1),[l,g]=h.useState(""),[N,j]=h.useState(""),[y,n]=h.useState(""),[t,f]=h.useState(!1),[u,C]=h.useState(!1),H=M({queryKey:["team",a],queryFn:async()=>{const s=await fetch(`${b}/teams/${a}`);if(!s.ok)throw new Error("Failed to fetch team");return(await s.json()).data},enabled:i&&!!a,staleTime:1e4}),d=H.data,A=w({mutationFn:async s=>{var V;const p=await fetch(`${b}/teams/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!p.ok){const z=await p.json().catch(()=>null);throw new Error(((V=z==null?void 0:z.error)==null?void 0:V.message)??`Failed to update team (${p.status})`)}return p.json()},onSuccess:()=>{r.invalidateQueries({queryKey:["teams"]}),r.invalidateQueries({queryKey:["team",a]}),v.success("Team updated"),c(!1)},onError:s=>{v.error(s.message)}}),F=w({mutationFn:async()=>{if(!(await fetch(`${b}/teams/${a}`,{method:"DELETE"})).ok)throw new Error("Failed to delete team")},onSuccess:()=>{r.invalidateQueries({queryKey:["teams"]}),v.success("Team deleted"),o(!1)},onError:s=>{v.error(s.message)}}),J=w({mutationFn:async s=>{if(!(await fetch(`${b}/teams/${a}/agents/${s}`,{method:"DELETE"})).ok)throw new Error("Failed to remove agent")},onSuccess:()=>{r.invalidateQueries({queryKey:["teams"]}),r.invalidateQueries({queryKey:["team",a]}),v.success("Agent removed from team")},onError:s=>{v.error(s.message)}});function se(){d&&(g(d.name),j(d.description??""),n(d.color??"#6366f1"),c(!0))}function te(s){s.preventDefault(),l.trim()&&A.mutate({name:l.trim(),description:N.trim()||void 0,color:y})}const ae=["#6366f1","#8b5cf6","#ec4899","#f43f5e","#ef4444","#f97316","#eab308","#22c55e","#10b981","#06b6d4","#3b82f6","#64748b"];return e.jsxs(e.Fragment,{children:[e.jsx(L,{open:i,onOpenChange:o,children:e.jsx(O,{className:"sm:max-w-lg",children:H.isLoading?e.jsxs("div",{className:"flex flex-col gap-4 py-8",children:[e.jsx("div",{className:"h-6 w-40 animate-pulse rounded bg-muted"}),e.jsx("div",{className:"h-4 w-64 animate-pulse rounded bg-muted"}),e.jsx("div",{className:"h-px bg-border"}),Array.from({length:3}).map((s,p)=>e.jsx("div",{className:"h-12 animate-pulse rounded-lg bg-muted"},p))]}):d?m?e.jsxs("form",{onSubmit:te,children:[e.jsx(k,{children:e.jsx(E,{children:"Edit Team"})}),e.jsxs("div",{className:"mt-4 flex flex-col gap-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{htmlFor:"edit-name",className:"text-sm font-medium text-foreground",children:"Name"}),e.jsx(S,{id:"edit-name",value:l,onChange:s=>g(s.target.value),autoFocus:!0,required:!0})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{htmlFor:"edit-desc",className:"text-sm font-medium text-foreground",children:"Description"}),e.jsx(S,{id:"edit-desc",value:N,onChange:s=>j(s.target.value)})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("span",{className:"text-sm font-medium text-foreground",children:"Color"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:ae.map(s=>e.jsx("button",{type:"button",onClick:()=>n(s),className:"relative size-7 rounded-full transition-transform hover:scale-110 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",style:{backgroundColor:s},children:y===s&&e.jsx("span",{className:"absolute inset-0 flex items-center justify-center",children:e.jsx("span",{className:"size-2 rounded-full bg-white"})})},s))})]})]}),e.jsxs(K,{className:"mt-6",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>c(!1),children:"Cancel"}),e.jsxs(x,{type:"submit",disabled:!l.trim()||A.isPending,children:[A.isPending&&e.jsx(P,{className:"animate-spin"}),"Save"]})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs(k,{children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"size-4 shrink-0 rounded-full",style:{backgroundColor:d.color??"#6366f1"}}),e.jsx(E,{className:"truncate",children:d.name})]}),d.description&&e.jsx(Q,{children:d.description})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(x,{size:"sm",variant:"outline",onClick:se,children:[e.jsx(me,{}),"Edit"]}),e.jsxs(x,{size:"sm",variant:"outline",onClick:()=>f(!0),children:[e.jsx(xe,{}),"Add Agent"]}),e.jsx("div",{className:"flex-1"}),u?e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"text-xs text-destructive font-medium",children:"Delete?"}),e.jsx(x,{size:"xs",variant:"destructive",onClick:()=>F.mutate(),disabled:F.isPending,children:F.isPending?e.jsx(P,{className:"animate-spin"}):"Yes"}),e.jsx(x,{size:"xs",variant:"outline",onClick:()=>C(!1),children:"No"})]}):e.jsx(x,{size:"sm",variant:"ghost",className:"text-destructive hover:text-destructive hover:bg-destructive/10",onClick:()=>C(!0),children:e.jsx(de,{})})]}),e.jsx(ie,{}),e.jsx("div",{className:"space-y-1",children:e.jsxs("h4",{className:"text-sm font-medium",children:["Members",e.jsx(I,{variant:"secondary",className:"ml-2 tabular-nums",children:d.agents.length})]})}),e.jsx(ee,{className:"max-h-64",children:d.agents.length===0?e.jsx("div",{className:"py-6 text-center text-sm text-muted-foreground italic",children:"No agents in this team yet"}):e.jsx("div",{className:"flex flex-col gap-1",children:d.agents.map(s=>{const p=T[s.status]??T.offline;return e.jsxs("div",{className:"flex items-center gap-3 rounded-lg px-3 py-2 transition-colors hover:bg-accent/50",children:[e.jsx(_,{size:"sm",children:e.jsx(U,{className:"text-[9px] font-semibold text-white",style:{backgroundColor:B(s.displayName)},children:R(s.displayName)})}),e.jsx("div",{className:"min-w-0 flex-1",children:e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"truncate text-sm font-medium",children:s.displayName}),e.jsx("span",{className:`inline-block size-1.5 shrink-0 rounded-full ${p.dot}`})]})}),e.jsx(x,{size:"icon-xs",variant:"ghost",className:"text-muted-foreground hover:text-destructive",onClick:()=>J.mutate(s.id),disabled:J.isPending,children:e.jsx(ue,{className:"size-3.5"})})]},s.id)})})})]}):e.jsx("div",{className:"py-8 text-center text-sm text-muted-foreground",children:"Team not found"})})}),e.jsx(je,{open:t,onOpenChange:f,teamId:a,currentAgentIds:(d==null?void 0:d.agents.map(s=>s.id))??[]})]})}function ve(){const[a,i]=h.useState(!1),[o,r]=h.useState(null),m=M({queryKey:["teams"],queryFn:async()=>{const l=await fetch(`${b}/teams`);if(!l.ok)throw new Error("Failed to fetch teams");return(await l.json()).data},staleTime:3e4,refetchInterval:15e3,retry:1});if(m.isLoading)return e.jsx(ye,{});const c=m.data??[];return e.jsxs("div",{className:"flex flex-col gap-6 p-4 sm:p-6",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Teams"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Organize agents into collaborative teams"})]}),e.jsxs(x,{onClick:()=>i(!0),children:[e.jsx(G,{}),"Create Team"]})]}),c.length===0?e.jsx(Ne,{onCreateClick:()=>i(!0)}):e.jsx(W.div,{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4",initial:"hidden",animate:"visible",variants:{hidden:{},visible:{transition:{staggerChildren:.05}}},children:c.map(l=>e.jsx(W.div,{variants:{hidden:{opacity:0,y:12},visible:{opacity:1,y:0,transition:{duration:.25}}},children:e.jsx(he,{team:l,onClick:()=>r(l.id)})},l.id))}),e.jsx(ge,{open:a,onOpenChange:i}),o&&e.jsx(pe,{teamId:o,open:!!o,onOpenChange:l=>{l||r(null)}})]})}function Ne({onCreateClick:a}){return e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-dashed border-border/60 py-20",children:[e.jsx("div",{className:"flex size-16 items-center justify-center rounded-2xl bg-muted",children:e.jsx(Y,{className:"size-8 text-muted-foreground"})}),e.jsx("h2",{className:"mt-5 text-lg font-semibold",children:"No teams yet"}),e.jsx("p",{className:"mt-1.5 max-w-sm text-center text-sm text-muted-foreground",children:"Create your first team to organize agents into focused groups that collaborate on tasks together."}),e.jsxs(x,{className:"mt-6",onClick:a,children:[e.jsx(G,{}),"Create Team"]})]})}function ye(){return e.jsxs("div",{className:"flex flex-col gap-6 p-4 sm:p-6",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{children:[e.jsx(D,{className:"h-8 w-28"}),e.jsx(D,{className:"mt-2 h-4 w-64"})]}),e.jsx(D,{className:"h-9 w-32"})]}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4",children:Array.from({length:4}).map((a,i)=>e.jsx(fe,{},i))})]})}function qe(){return e.jsx(le,{featureName:"Teams",children:e.jsx(ve,{})})}export{qe as component};
@@ -0,0 +1,26 @@
1
+ import{c as m,u as k,j as e,b as x,U as A,A as b,t as c,r as C,C as z,q as E,s as S,v as M,w as U,p as y}from"./index-Coo_PliT.js";import{C as u,b as h,c as f,d as g,a as p}from"./card-BWnhVACg.js";import{R as H,S as j,B as v,E as T}from"./error-boundary-ONLtI3m8.js";import{A as L}from"./activity-C5c3pd0l.js";import{W as q,G as F,C as I,a as $,F as B}from"./wifi-CkkG3jQZ.js";import{R as O}from"./radio-zlZI1pp6.js";import{E as P}from"./external-link-D6ZNJ2De.js";/**
2
+ * @license lucide-react v0.400.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const R=m("Clipboard",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}]]);/**
7
+ * @license lucide-react v0.400.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const G=m("Heart",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}]]);/**
12
+ * @license lucide-react v0.400.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const J=m("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/**
17
+ * @license lucide-react v0.400.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */const w=m("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/**
22
+ * @license lucide-react v0.400.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */const _=m("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);function D(s){const r=Math.floor(s/86400),t=Math.floor(s%86400/3600),a=Math.floor(s%3600/60),o=Math.floor(s%60),i=[];return r>0&&i.push(`${r}d`),t>0&&i.push(`${t}h`),a>0&&i.push(`${a}m`),i.push(`${o}s`),i.join(" ")}function W(){return`${window.location.protocol}//${window.location.host}`}function K(){const{data:s,isLoading:r,isError:t,refetch:a,isFetching:o}=k({queryKey:["health"],queryFn:async()=>{const n=await fetch(`${b}/health`);if(!n.ok)throw new Error("Failed to fetch health");return n.json()},refetchInterval:3e4,retry:2});async function i(){try{const n=await fetch(`${b}/health`);if(!n.ok)throw new Error(`HTTP ${n.status}`);const l=await n.json();l.status==="ok"?c.success("Connection successful",{description:`Hub v${l.version} is running with ${l.agentCount} agent(s)`}):c.error("Unexpected response",{description:`Status: ${l.status}`})}catch(n){c.error("Connection failed",{description:n instanceof Error?n.message:"Could not reach the hub"})}}const N=W();return e.jsxs(u,{children:[e.jsx(h,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex size-10 items-center justify-center rounded-lg bg-brand-500/10 text-brand-500",children:e.jsx(w,{className:"size-5"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx(f,{className:"text-lg",children:"Hub Information"}),e.jsx(g,{children:"Status and details of your SwarmRoom hub"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(x,{variant:"outline",size:"sm",onClick:()=>a(),disabled:o,children:[e.jsx(H,{className:`size-3.5 ${o?"animate-spin":""}`}),"Refresh"]}),e.jsxs(x,{variant:"default",size:"sm",onClick:i,children:[e.jsx(L,{className:"size-3.5"}),"Test Connection"]})]})]})}),e.jsx(p,{children:r?e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:Array.from({length:5}).map((n,l)=>e.jsxs("div",{className:"flex items-center gap-3 rounded-lg border p-4",children:[e.jsx(j,{className:"size-9 rounded-md"}),e.jsxs("div",{className:"flex-1 space-y-1.5",children:[e.jsx(j,{className:"h-3 w-16"}),e.jsx(j,{className:"h-5 w-24"})]})]},l))}):t?e.jsxs("div",{className:"flex flex-col items-center gap-3 rounded-lg border border-dashed border-destructive/30 bg-destructive/5 py-8 text-center",children:[e.jsx(q,{className:"size-8 text-destructive/60"}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-destructive",children:"Unable to reach hub"}),e.jsxs("p",{className:"mt-1 text-sm text-muted-foreground",children:["Check that the server is running at ",N]})]}),e.jsx(x,{variant:"outline",size:"sm",onClick:()=>a(),children:"Retry"})]}):e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:[e.jsx(d,{icon:e.jsx(F,{className:"size-4"}),label:"Hub URL",value:N,mono:!0}),e.jsx(d,{icon:e.jsx(O,{className:"size-4"}),label:"Status",value:e.jsxs(v,{variant:(s==null?void 0:s.status)==="ok"?"default":"destructive",className:(s==null?void 0:s.status)==="ok"?"bg-emerald-500/15 text-emerald-600 dark:text-emerald-400":"",children:[e.jsxs("span",{className:"relative flex size-1.5",children:[e.jsx("span",{className:`absolute inline-flex size-full animate-ping rounded-full opacity-75 ${(s==null?void 0:s.status)==="ok"?"bg-emerald-500":"bg-destructive"}`}),e.jsx("span",{className:`relative inline-flex size-1.5 rounded-full ${(s==null?void 0:s.status)==="ok"?"bg-emerald-500":"bg-destructive"}`})]}),(s==null?void 0:s.status)==="ok"?"Online":"Degraded"]})}),e.jsx(d,{icon:e.jsx(w,{className:"size-4"}),label:"Version",value:`v${(s==null?void 0:s.version)??"0.0.0"}`,mono:!0}),e.jsx(d,{icon:e.jsx(I,{className:"size-4"}),label:"Uptime",value:s?D(s.uptime):"—",mono:!0}),e.jsx(d,{icon:e.jsx(A,{className:"size-4"}),label:"Connected Agents",value:String((s==null?void 0:s.agentCount)??0)})]})})]})}function d({icon:s,label:r,value:t,mono:a}){return e.jsxs("div",{className:"flex items-center gap-3 rounded-lg border bg-muted/30 p-4 transition-colors hover:bg-muted/50",children:[e.jsx("div",{className:"flex size-9 shrink-0 items-center justify-center rounded-md bg-background text-muted-foreground shadow-sm",children:s}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"text-xs font-medium tracking-wide text-muted-foreground uppercase",children:r}),e.jsx("div",{className:`mt-0.5 truncate text-sm font-semibold ${a?"font-mono text-[13px]":""}`,children:t})]})]})}function V(){return`${window.location.protocol}//${window.location.host}`}const Q=[{id:"claude",name:"Claude Code",file:".mcp.json",icon:e.jsx(_,{className:"size-4"}),getConfig:s=>JSON.stringify({mcpServers:{swarmroom:{url:s}}},null,2)},{id:"opencode",name:"OpenCode",file:"opencode.json",icon:e.jsx($,{className:"size-4"}),getConfig:s=>JSON.stringify({mcp:{swarmroom:{type:"streamable-http",url:s}}},null,2)},{id:"gemini",name:"Gemini CLI",file:".gemini/settings.json",icon:e.jsx(B,{className:"size-4"}),getConfig:s=>JSON.stringify({mcpServers:{swarmroom:{httpUrl:s}}},null,2)}];function X(){const r=`${V()}/mcp`;return e.jsxs(u,{children:[e.jsx(h,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex size-10 items-center justify-center rounded-lg bg-accent-500/10 text-accent-500",children:e.jsx($,{className:"size-5"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx(f,{className:"text-lg",children:"Connection"}),e.jsx(g,{children:"Configure your AI tools to connect to this SwarmRoom hub"})]})]})}),e.jsxs(p,{className:"space-y-5",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-xs font-medium tracking-wide text-muted-foreground uppercase",children:"Hub MCP Endpoint"}),e.jsx(Z,{value:r})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-xs font-medium tracking-wide text-muted-foreground uppercase",children:"Configuration Examples"}),e.jsx("div",{className:"grid gap-3",children:Q.map(t=>e.jsx(Y,{config:t,mcpUrl:r},t.id))})]})]})]})}function Z({value:s}){const[r,t]=C.useState(!1);async function a(){try{await navigator.clipboard.writeText(s),t(!0),c.success("Copied to clipboard"),setTimeout(()=>t(!1),2e3)}catch{c.error("Failed to copy")}}return e.jsxs("button",{type:"button",onClick:a,className:"group flex w-full items-center gap-2 rounded-lg border bg-muted/30 px-4 py-3 text-left transition-colors hover:bg-muted/50",children:[e.jsx("code",{className:"flex-1 truncate font-mono text-sm",children:s}),e.jsx("span",{className:"flex size-7 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors group-hover:bg-background group-hover:shadow-sm",children:r?e.jsx(z,{className:"size-3.5 text-emerald-500"}):e.jsx(R,{className:"size-3.5"})})]})}function Y({config:s,mcpUrl:r}){const[t,a]=C.useState(!1),o=s.getConfig(r);async function i(){try{await navigator.clipboard.writeText(o),a(!0),c.success(`${s.name} config copied`),setTimeout(()=>a(!1),2e3)}catch{c.error("Failed to copy")}}return e.jsxs("div",{className:"overflow-hidden rounded-lg border bg-muted/20",children:[e.jsxs("div",{className:"flex items-center gap-2 border-b bg-muted/40 px-4 py-2.5",children:[e.jsx("span",{className:"text-muted-foreground",children:s.icon}),e.jsx("span",{className:"flex-1 text-sm font-medium",children:s.name}),e.jsx(v,{variant:"outline",className:"font-mono text-[11px]",children:s.file}),e.jsx(x,{variant:"ghost",size:"icon-xs",onClick:i,className:"ml-1",children:t?e.jsx(z,{className:"size-3 text-emerald-500"}):e.jsx(R,{className:"size-3"})})]}),e.jsx("pre",{className:"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-foreground/80",children:o})]})}const ee=[{value:"light",label:"Light",icon:S,description:"Bright and clean"},{value:"dark",label:"Dark",icon:M,description:"Easy on the eyes"},{value:"system",label:"System",icon:U,description:"Match your OS"}];function se(){const{theme:s,setTheme:r}=E();return e.jsxs(u,{children:[e.jsx(h,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex size-10 items-center justify-center rounded-lg bg-brand-500/10 text-brand-500",children:e.jsx(S,{className:"size-5"})}),e.jsxs("div",{children:[e.jsx(f,{className:"text-lg",children:"Appearance"}),e.jsx(g,{children:"Customize how SwarmRoom looks on your device"})]})]})}),e.jsx(p,{children:e.jsx("div",{className:"grid gap-3 sm:grid-cols-3",children:ee.map(t=>{const a=s===t.value;return e.jsxs("button",{type:"button",onClick:()=>r(t.value),className:`group relative flex flex-col items-center gap-3 rounded-xl border-2 p-5 transition-all ${a?"border-brand-500 bg-brand-500/5 shadow-sm shadow-brand-500/10":"border-transparent bg-muted/30 hover:border-border hover:bg-muted/50"}`,children:[e.jsx("div",{className:`flex size-12 items-center justify-center rounded-xl transition-colors ${a?"bg-brand-500/15 text-brand-500":"bg-background text-muted-foreground shadow-sm dark:border dark:border-border group-hover:text-foreground"}`,children:e.jsx(t.icon,{className:"size-5"})}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:`text-sm font-semibold ${a?"text-brand-500":"text-foreground"}`,children:t.label}),e.jsx("p",{className:"mt-0.5 text-xs text-muted-foreground",children:t.description})]}),a&&e.jsx("div",{className:"absolute -top-1 -right-1 flex size-5 items-center justify-center rounded-full bg-brand-500 text-white shadow-sm",children:e.jsx("svg",{className:"size-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:3,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"})})})]},t.value)})})})]})}function te(){const{data:s}=k({queryKey:["health"],queryFn:async()=>{const t=await fetch(`${b}/health`);if(!t.ok)throw new Error("Failed to fetch health");return t.json()},staleTime:6e4}),r=(s==null?void 0:s.version)??"0.0.0";return e.jsxs(u,{children:[e.jsx(h,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex size-10 items-center justify-center rounded-lg bg-accent-500/10 text-accent-500",children:e.jsx(J,{className:"size-5"})}),e.jsxs("div",{children:[e.jsx(f,{className:"text-lg",children:"About"}),e.jsx(g,{children:"SwarmRoom project information"})]})]})}),e.jsxs(p,{className:"space-y-5",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("div",{className:"flex size-14 items-center justify-center rounded-2xl bg-gradient-to-br from-brand-500 to-accent-500 shadow-lg shadow-brand-500/20",children:e.jsx("span",{className:"text-2xl font-black text-white",children:"S"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-bold tracking-tight",children:"SwarmRoom"}),e.jsxs("div",{className:"mt-1 flex items-center gap-2",children:[e.jsxs(v,{variant:"secondary",className:"font-mono text-xs",children:["v",r]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"Open Source"})]})]})]}),e.jsx(y,{}),e.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"LAN-based agent discovery and communication hub. SwarmRoom enables AI agents to find each other on local networks and collaborate through a shared MCP-compatible interface."}),e.jsx("div",{className:"flex flex-wrap gap-2",children:e.jsxs("a",{href:"https://github.com/swarmroom/swarmroom",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1.5 rounded-md border bg-muted/30 px-3 py-1.5 text-xs font-medium transition-colors hover:bg-muted/50",children:[e.jsx(P,{className:"size-3"}),"GitHub"]})}),e.jsx(y,{}),e.jsxs("p",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:["Made with ",e.jsx(G,{className:"size-3 text-red-500"})," for the agent ecosystem"]})]})]})}function re(){return e.jsxs("div",{className:"mx-auto w-full max-w-4xl space-y-8 p-4 pb-16 sm:p-6 lg:p-8",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Configure your SwarmRoom instance"})]}),e.jsxs("div",{className:"space-y-6",children:[e.jsx(K,{}),e.jsx(X,{}),e.jsx(se,{}),e.jsx(te,{})]})]})}function me(){return e.jsx(T,{featureName:"Settings",children:e.jsx(re,{})})}export{me as component};
@@ -0,0 +1,6 @@
1
+ import{c as R,u as C,j as e,U as B,A as y,n as k,r as p,t as j,D as S,d as P,e as F,f as E,g as A,S as G,b as h,p as _,o as D,m as O,F as J}from"./index-Coo_PliT.js";import{B as Q,S as b,E as W}from"./error-boundary-ONLtI3m8.js";import{C as H,a as V}from"./card-BWnhVACg.js";import{A as X,a as q,b as $,c as Y}from"./avatar-D6PiXqfu.js";import{t as M,g as T,a as I,s as w,T as Z}from"./utils-Dt8_kYy9.js";import{E as U}from"./external-link-D6ZNJ2De.js";import{u as v}from"./useMutation-C7s7l6mS.js";import{I as N}from"./input-CpGy8OTc.js";import{S as ee}from"./scroll-area-BD_ZWvua.js";import{A as se}from"./arrow-left-Bho8c3gL.js";import{P as te,U as re}from"./user-minus-B2DcEtYp.js";import{P as L}from"./plus-c5hdQFYj.js";/**
2
+ * @license lucide-react v0.400.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const K=R("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);function ae(s){const l=["#0ea5e9","#6366f1","#8b5cf6","#ec4899","#f97316","#10b981","#14b8a6","#f43f5e","#84cc16","#eab308","#06b6d4","#3b82f6"];let o=0;for(let c=0;c<s.length;c++)o=s.charCodeAt(c)+((o<<5)-o);return l[Math.abs(o)%l.length]}function ne({project:s,onClick:l}){const o=ae(s.name),d=(C({queryKey:["agents"],queryFn:async()=>{const a=await fetch(`${y}/agents`);if(!a.ok)throw new Error("Failed to fetch agents");return(await a.json()).data},staleTime:3e4,retry:1}).data??[]).filter(a=>s.agentIds.includes(a.id)),m=d.slice(0,5),x=d.length-5;return e.jsxs(H,{className:"group relative cursor-pointer gap-0 overflow-hidden py-0 transition-all duration-200 hover:shadow-md hover:-translate-y-0.5",onClick:l,children:[e.jsx("div",{className:"h-1.5 w-full",style:{background:`linear-gradient(90deg, ${o}, ${o}44)`}}),e.jsxs(V,{className:"flex flex-col gap-3.5 p-5",children:[e.jsx("div",{className:"flex items-start justify-between gap-2",children:e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex size-8 shrink-0 items-center justify-center rounded-lg text-xs font-bold text-white",style:{backgroundColor:o},children:s.name.charAt(0).toUpperCase()}),e.jsx("h3",{className:"truncate text-sm font-semibold leading-tight text-foreground",children:s.name})]}),s.description&&e.jsx("p",{className:"mt-2 line-clamp-2 text-xs text-muted-foreground leading-relaxed",children:s.description})]})}),s.repository&&e.jsxs("a",{href:s.repository,target:"_blank",rel:"noopener noreferrer",onClick:a=>a.stopPropagation(),className:"flex items-center gap-1.5 rounded-md bg-muted/50 px-2.5 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",children:[e.jsx(K,{className:"size-3 shrink-0"}),e.jsx("span",{className:"truncate",children:M(s.repository)}),e.jsx(U,{className:"ml-auto size-3 shrink-0 opacity-0 transition-opacity group-hover:opacity-100"})]}),e.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border/50 pt-3",children:[e.jsx("div",{className:"flex items-center gap-2",children:m.length>0?e.jsxs(X,{children:[m.map(a=>e.jsx(q,{size:"sm",children:e.jsx($,{className:"text-[9px] font-semibold text-white",style:{backgroundColor:I(a.displayName)},children:T(a.displayName)})},a.id)),x>0&&e.jsxs(Y,{className:"text-[10px]",children:["+",x]})]}):null}),e.jsxs(Q,{variant:"secondary",className:"text-[10px] gap-1",children:[e.jsx(B,{className:"size-3"}),s.agentIds.length]})]})]})]})}function ie({projectId:s,existingAgentIds:l,open:o,onOpenChange:c}){const d=k(),[m,x]=p.useState(""),a=C({queryKey:["agents"],queryFn:async()=>{const r=await fetch(`${y}/agents`);if(!r.ok)throw new Error("Failed to fetch agents");return(await r.json()).data},staleTime:3e4,retry:1}),i=v({mutationFn:async r=>{if(!(await fetch(`${y}/projects/${s}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:r})})).ok)throw new Error("Failed to add agent")},onSuccess:()=>{d.invalidateQueries({queryKey:["projects"]}),j.success("Agent added to project")},onError:()=>{j.error("Failed to add agent")}}),f=p.useMemo(()=>{const u=(a.data??[]).filter(n=>!l.includes(n.id));if(!m)return u;const t=m.toLowerCase();return u.filter(n=>n.displayName.toLowerCase().includes(t)||n.name.toLowerCase().includes(t))},[a.data,l,m]);return e.jsx(S,{open:o,onOpenChange:c,children:e.jsxs(P,{children:[e.jsxs(F,{children:[e.jsx(E,{children:"Add agent"}),e.jsx(A,{children:"Select an agent to add to this project."})]}),e.jsxs("div",{className:"relative",children:[e.jsx(G,{className:"absolute top-2.5 left-3 size-4 text-muted-foreground"}),e.jsx(N,{value:m,onChange:r=>x(r.target.value),placeholder:"Search agents…",className:"pl-9"})]}),e.jsx(ee,{className:"max-h-64",children:f.length===0?e.jsx("p",{className:"py-8 text-center text-sm text-muted-foreground",children:a.isLoading?"Loading agents…":"No available agents found"}):e.jsx("div",{className:"flex flex-col gap-1",children:f.map(r=>{const u=w[r.status]??w.offline;return e.jsxs("button",{type:"button",onClick:()=>{i.mutate(r.id),c(!1),x("")},disabled:i.isPending,className:"flex items-center gap-3 rounded-md px-3 py-2.5 text-left transition-colors hover:bg-accent disabled:opacity-50",children:[e.jsx(q,{size:"sm",children:e.jsx($,{className:"text-[9px] font-semibold text-white",style:{backgroundColor:I(r.displayName)},children:T(r.displayName)})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"truncate text-sm font-medium",children:r.displayName}),e.jsx("p",{className:"truncate text-xs text-muted-foreground",children:r.name})]}),e.jsx("span",{className:`size-2 shrink-0 rounded-full ${u.dot}`,title:u.label})]},r.id)})})})]})})}function oe({project:s,onBack:l}){const o=k(),[c,d]=p.useState(!1),[m,x]=p.useState(!1),[a,i]=p.useState(!1),f=C({queryKey:["agents"],queryFn:async()=>{const n=await fetch(`${y}/agents`);if(!n.ok)throw new Error("Failed to fetch agents");return(await n.json()).data},staleTime:3e4,refetchInterval:1e4,retry:1}),r=v({mutationFn:async n=>{if(!(await fetch(`${y}/projects/${s.id}/agents/${n}`,{method:"DELETE"})).ok)throw new Error("Failed to remove agent")},onSuccess:()=>{o.invalidateQueries({queryKey:["projects"]}),j.success("Agent removed from project")},onError:()=>{j.error("Failed to remove agent")}}),u=v({mutationFn:async()=>{if(!(await fetch(`${y}/projects/${s.id}`,{method:"DELETE"})).ok)throw new Error("Failed to delete project")},onSuccess:()=>{o.invalidateQueries({queryKey:["projects"]}),j.success("Project deleted"),l()},onError:()=>{j.error("Failed to delete project")}}),t=(f.data??[]).filter(n=>s.agentIds.includes(n.id));return e.jsxs("div",{className:"flex flex-col gap-6 p-4 sm:p-6",children:[e.jsxs("button",{onClick:l,className:"flex items-center gap-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground w-fit",children:[e.jsx(se,{className:"size-4"}),"Back to projects"]}),e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:s.name}),s.description&&e.jsx("p",{className:"mt-1.5 text-sm text-muted-foreground",children:s.description}),s.repository&&e.jsxs("a",{href:s.repository,target:"_blank",rel:"noopener noreferrer",className:"mt-2 inline-flex items-center gap-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground",children:[e.jsx(K,{className:"size-3.5"}),e.jsx("span",{children:M(s.repository,48)}),e.jsx(U,{className:"size-3"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(h,{variant:"outline",size:"sm",onClick:()=>x(!0),children:[e.jsx(te,{className:"size-3.5"}),"Edit"]}),e.jsxs(h,{variant:"outline",size:"sm",className:"text-destructive hover:bg-destructive/10",onClick:()=>i(!0),children:[e.jsx(Z,{className:"size-3.5"}),"Delete"]})]})]}),e.jsx(_,{}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold",children:"Members"}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[t.length," agent",t.length!==1?"s":""," ","assigned to this project"]})]}),e.jsxs(h,{size:"sm",variant:"outline",onClick:()=>d(!0),children:[e.jsx(L,{className:"size-3.5"}),"Add Agent"]})]}),t.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-dashed border-border/60 py-12",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"No agents assigned yet"}),e.jsx(h,{size:"sm",variant:"link",className:"mt-1",onClick:()=>d(!0),children:"Add your first agent"})]}):e.jsx("div",{className:"grid gap-2",children:t.map(n=>{const g=w[n.status]??w.offline;return e.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-border/60 px-4 py-3 transition-colors hover:bg-muted/30",children:[e.jsx(q,{children:e.jsx($,{className:"text-xs font-semibold text-white",style:{backgroundColor:I(n.displayName)},children:T(n.displayName)})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("p",{className:"truncate text-sm font-medium",children:n.displayName}),e.jsx("span",{className:`size-2 shrink-0 rounded-full ${g.dot}`,title:g.label})]}),e.jsx("p",{className:"truncate text-xs text-muted-foreground",children:n.name})]}),e.jsx(Q,{variant:g.variant,className:"text-[10px]",children:g.label}),e.jsx(h,{variant:"ghost",size:"icon-xs",className:"text-muted-foreground hover:text-destructive",onClick:()=>r.mutate(n.id),disabled:r.isPending,children:e.jsx(re,{className:"size-3.5"})})]},n.id)})})]}),e.jsx(ie,{projectId:s.id,existingAgentIds:s.agentIds,open:c,onOpenChange:d}),e.jsx(le,{project:s,open:m,onOpenChange:x}),e.jsx(S,{open:a,onOpenChange:i,children:e.jsxs(P,{children:[e.jsxs(F,{children:[e.jsx(E,{children:"Delete project"}),e.jsxs(A,{children:["This will permanently delete"," ",e.jsx("span",{className:"font-medium text-foreground",children:s.name}),". This action cannot be undone."]})]}),e.jsxs(D,{children:[e.jsx(h,{variant:"outline",onClick:()=>i(!1),disabled:u.isPending,children:"Cancel"}),e.jsx(h,{variant:"destructive",onClick:()=>u.mutate(),disabled:u.isPending,children:u.isPending?"Deleting…":"Delete"})]})]})})]})}function le({project:s,open:l,onOpenChange:o}){const c=k(),[d,m]=p.useState(s.name),[x,a]=p.useState(s.description??""),[i,f]=p.useState(s.repository??""),r=v({mutationFn:async()=>{const t={name:d};if(x.trim()?t.description=x.trim():t.description="",i.trim()?t.repository=i.trim():t.repository="",!(await fetch(`${y}/projects/${s.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).ok)throw new Error("Failed to update project")},onSuccess:()=>{c.invalidateQueries({queryKey:["projects"]}),j.success("Project updated"),o(!1)},onError:()=>{j.error("Failed to update project")}});function u(t){t.preventDefault(),d.trim()&&r.mutate()}return e.jsx(S,{open:l,onOpenChange:o,children:e.jsxs(P,{children:[e.jsxs(F,{children:[e.jsx(E,{children:"Edit project"}),e.jsx(A,{children:"Update your project details."})]}),e.jsxs("form",{onSubmit:u,className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("label",{htmlFor:"edit-name",className:"text-sm font-medium",children:["Name ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(N,{id:"edit-name",value:d,onChange:t=>m(t.target.value),required:!0})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("label",{htmlFor:"edit-description",className:"text-sm font-medium",children:"Description"}),e.jsx(N,{id:"edit-description",value:x,onChange:t=>a(t.target.value),placeholder:"What this project is about"})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("label",{htmlFor:"edit-repository",className:"text-sm font-medium",children:"Repository URL"}),e.jsx(N,{id:"edit-repository",value:i,onChange:t=>f(t.target.value),placeholder:"https://github.com/org/repo",type:"url"})]}),e.jsxs(D,{children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>o(!1),disabled:r.isPending,children:"Cancel"}),e.jsx(h,{type:"submit",disabled:!d.trim()||r.isPending,children:r.isPending?"Saving…":"Save"})]})]})]})})}function ce({open:s,onOpenChange:l}){const o=k(),[c,d]=p.useState(""),[m,x]=p.useState(""),[a,i]=p.useState(""),f=v({mutationFn:async()=>{var g;const t={name:c};m.trim()&&(t.description=m.trim()),a.trim()&&(t.repository=a.trim());const n=await fetch(`${y}/projects`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok){const z=await n.json().catch(()=>null);throw new Error(((g=z==null?void 0:z.error)==null?void 0:g.message)??"Failed to create project")}},onSuccess:()=>{o.invalidateQueries({queryKey:["projects"]}),j.success("Project created"),r()},onError:t=>{j.error(t.message)}});function r(){d(""),x(""),i(""),l(!1)}function u(t){t.preventDefault(),c.trim()&&f.mutate()}return e.jsx(S,{open:s,onOpenChange:l,children:e.jsxs(P,{children:[e.jsxs(F,{children:[e.jsx(E,{children:"Create project"}),e.jsx(A,{children:"Group agents around a shared codebase or goal."})]}),e.jsxs("form",{onSubmit:u,className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("label",{htmlFor:"project-name",className:"text-sm font-medium",children:["Name ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(N,{id:"project-name",value:c,onChange:t=>d(t.target.value),placeholder:"e.g. swarm-room",required:!0,autoFocus:!0})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("label",{htmlFor:"project-description",className:"text-sm font-medium",children:"Description"}),e.jsx(N,{id:"project-description",value:m,onChange:t=>x(t.target.value),placeholder:"What this project is about"})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("label",{htmlFor:"project-repository",className:"text-sm font-medium",children:"Repository URL"}),e.jsx(N,{id:"project-repository",value:a,onChange:t=>i(t.target.value),placeholder:"https://github.com/org/repo",type:"url"})]}),e.jsxs(D,{children:[e.jsx(h,{type:"button",variant:"outline",onClick:r,disabled:f.isPending,children:"Cancel"}),e.jsx(h,{type:"submit",disabled:!c.trim()||f.isPending,children:f.isPending?"Creating…":"Create"})]})]})]})})}function de(){var a;const[s,l]=p.useState(null),[o,c]=p.useState(!1),d=C({queryKey:["projects"],queryFn:async()=>{const i=await fetch(`${y}/projects`);if(!i.ok)throw new Error("Failed to fetch projects");return(await i.json()).data},staleTime:3e4,refetchInterval:1e4,retry:1}),m=(a=d.data)==null?void 0:a.find(i=>i.id===s);if(d.isLoading)return e.jsx(xe,{});if(m)return e.jsx(oe,{project:m,onBack:()=>l(null)});const x=d.data??[];return e.jsxs("div",{className:"flex flex-col gap-6 p-4 sm:p-6",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Projects"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Organize agents into project workspaces with linked repositories"})]}),e.jsxs(h,{onClick:()=>c(!0),size:"sm",children:[e.jsx(L,{className:"size-4"}),"New Project"]})]}),x.length===0?e.jsx(me,{onCreateClick:()=>c(!0)}):e.jsx(O.div,{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-3",initial:"hidden",animate:"visible",variants:{hidden:{},visible:{transition:{staggerChildren:.05}}},children:x.map(i=>e.jsx(O.div,{variants:{hidden:{opacity:0,y:12},visible:{opacity:1,y:0,transition:{duration:.25}}},children:e.jsx(ne,{project:i,onClick:()=>l(i.id)})},i.id))}),e.jsx(ce,{open:o,onOpenChange:c})]})}function me({onCreateClick:s}){return e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-dashed border-border/60 py-20",children:[e.jsx("div",{className:"flex size-16 items-center justify-center rounded-2xl bg-muted",children:e.jsx(J,{className:"size-8 text-muted-foreground"})}),e.jsx("h2",{className:"mt-5 text-lg font-semibold",children:"No projects yet"}),e.jsx("p",{className:"mt-1.5 max-w-sm text-center text-sm text-muted-foreground",children:"Create a project to group agents around a shared codebase or goal. Link a repository and assign team members."}),e.jsxs(h,{className:"mt-6",size:"sm",onClick:s,children:[e.jsx(L,{className:"size-4"}),"Create your first project"]})]})}function xe(){return e.jsxs("div",{className:"flex flex-col gap-6 p-4 sm:p-6",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{children:[e.jsx(b,{className:"h-8 w-36"}),e.jsx(b,{className:"mt-2 h-4 w-72"})]}),e.jsx(b,{className:"h-8 w-28"})]}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-3",children:Array.from({length:6}).map((s,l)=>e.jsx(b,{className:"h-52 rounded-xl"},l))})]})}function ke(){return e.jsx(W,{featureName:"Projects",children:e.jsx(de,{})})}export{ke as component};
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@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-space-y-reverse:0;--tw-space-x-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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--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:"Inter",ui-sans-serif,system-ui,sans-serif;--font-mono:"JetBrains Mono",ui-monospace,monospace;--color-red-500:oklch(63.7% .237 25.331);--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-lime-600:oklch(64.8% .2 131.684);--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-teal-500:oklch(70.4% .14 182.503);--color-cyan-600:oklch(60.9% .126 221.723);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-indigo-900:oklch(35.9% .144 278.697);--color-indigo-950:oklch(25.7% .09 281.288);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-4xl:56rem;--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);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-sm:.375rem;--radius-md:.5rem;--radius-lg:.75rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-2xl:40px;--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);--color-brand-300:oklch(79% .13 277);--color-brand-400:oklch(68% .18 277);--color-brand-500:oklch(59% .22 277);--color-brand-600:oklch(52% .24 277);--color-accent-500:oklch(55% .25 293)}}@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%;-moz-tab-size:4;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]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{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);font-feature-settings:"rlig" 1,"calt" 1}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.6)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.animate-pulse-dot{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse-dot}.animate-shimmer{background:linear-gradient(90deg,#0000 25%,#dedede80,#0000 75%) 0 0/200% 100%;animation:1.5s ease-in-out infinite shimmer}.dark .animate-shimmer{background:linear-gradient(90deg,#0000 25%,#2e2e2e66,#0000 75%) 0 0/200% 100%;animation:1.5s ease-in-out infinite shimmer}}@layer components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-0\.5{top:calc(var(--spacing)*-.5)}.-top-1{top:calc(var(--spacing)*-1)}.-top-7{top:calc(var(--spacing)*-7)}.top-0{top:calc(var(--spacing)*0)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2\.5{top:calc(var(--spacing)*2.5)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-\[50\%\]{top:50%}.-right-0\.5{right:calc(var(--spacing)*-.5)}.-right-1{right:calc(var(--spacing)*-1)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.-bottom-0\.5{bottom:calc(var(--spacing)*-.5)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-2\.5{left:calc(var(--spacing)*2.5)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-\[50\%\]{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.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-1{margin-inline:calc(var(--spacing)*-1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.-mt-10{margin-top:calc(var(--spacing)*-10)}.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)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-auto{margin-top:auto}.mr-0\.5{margin-right:calc(var(--spacing)*.5)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-5\.5{margin-left:calc(var(--spacing)*5.5)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.aspect-square{aspect-ratio:1}.size-1\.5{width:calc(var(--spacing)*1.5);height:calc(var(--spacing)*1.5)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.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)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-14{width:calc(var(--spacing)*14);height:calc(var(--spacing)*14)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-20{width:calc(var(--spacing)*20);height:calc(var(--spacing)*20)}.size-full{width:100%;height:100%}.\!h-4{height:calc(var(--spacing)*4)!important}.h-1\.5{height:calc(var(--spacing)*1.5)}.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-4\!{height:calc(var(--spacing)*4)!important}.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-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-\[180px\]{height:180px}.h-\[340px\]{height:340px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[calc\(100vh-3\.5rem\)\]{height:calc(100vh - 3.5rem)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[50vh\]{max-height:50vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[300px\]{max-height:300px}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[36px\]{min-height:36px}.min-h-svh{min-height:100svh}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-1{width:calc(var(--spacing)*1)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-2\/3{width:66.6667%}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.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-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[75\%\]{max-width:75%}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-\[8rem\]{min-width:8rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.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-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize-none{resize:none}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.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{gap:calc(var(--spacing)*0)}.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-3\.5{gap:calc(var(--spacing)*3.5)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-\[3px\]{gap:3px}: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-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-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)))}.gap-x-5{column-gap:calc(var(--spacing)*5)}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-2{row-gap:calc(var(--spacing)*2)}.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-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-br-md{border-bottom-right-radius:var(--radius-md)}.rounded-bl-md{border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-border,.border-border\/40{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/60{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.border-brand-500{border-color:var(--color-brand-500)}.border-destructive\/30{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/30{border-color:color-mix(in oklab,var(--destructive)30%,transparent)}}.border-indigo-200\/60{border-color:#c7d2ff99}@supports (color:color-mix(in lab,red,red)){.border-indigo-200\/60{border-color:color-mix(in oklab,var(--color-indigo-200)60%,transparent)}}.border-indigo-300\/50{border-color:#a4b3ff80}@supports (color:color-mix(in lab,red,red)){.border-indigo-300\/50{border-color:color-mix(in oklab,var(--color-indigo-300)50%,transparent)}}.border-indigo-400\/50{border-color:#7d87ff80}@supports (color:color-mix(in lab,red,red)){.border-indigo-400\/50{border-color:color-mix(in oklab,var(--color-indigo-400)50%,transparent)}}.border-input{border-color:var(--input)}.border-primary-foreground\/10{border-color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.border-primary-foreground\/10{border-color:color-mix(in oklab,var(--primary-foreground)10%,transparent)}}.border-primary-foreground\/30{border-color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.border-primary-foreground\/30{border-color:color-mix(in oklab,var(--primary-foreground)30%,transparent)}}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-accent{background-color:var(--accent)}.bg-accent-500\/10{background-color:#7f3cf21a}@supports (color:color-mix(in lab,red,red)){.bg-accent-500\/10{background-color:color-mix(in oklab,var(--color-accent-500)10%,transparent)}}.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-600{background-color:var(--color-amber-600)}.bg-background,.bg-background\/80{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/80{background-color:color-mix(in oklab,var(--background)80%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-border{background-color:var(--border)}.bg-brand-500{background-color:var(--color-brand-500)}.bg-brand-500\/5{background-color:#6364fc0d}@supports (color:color-mix(in lab,red,red)){.bg-brand-500\/5{background-color:color-mix(in oklab,var(--color-brand-500)5%,transparent)}}.bg-brand-500\/10{background-color:#6364fc1a}@supports (color:color-mix(in lab,red,red)){.bg-brand-500\/10{background-color:color-mix(in oklab,var(--color-brand-500)10%,transparent)}}.bg-brand-500\/15{background-color:#6364fc26}@supports (color:color-mix(in lab,red,red)){.bg-brand-500\/15{background-color:color-mix(in oklab,var(--color-brand-500)15%,transparent)}}.bg-brand-500\/70{background-color:#6364fcb3}@supports (color:color-mix(in lab,red,red)){.bg-brand-500\/70{background-color:color-mix(in oklab,var(--color-brand-500)70%,transparent)}}.bg-card,.bg-card\/80{background-color:var(--card)}@supports (color:color-mix(in lab,red,red)){.bg-card\/80{background-color:color-mix(in oklab,var(--card)80%,transparent)}}.bg-cyan-600{background-color:var(--color-cyan-600)}.bg-destructive,.bg-destructive\/5{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/5{background-color:color-mix(in oklab,var(--destructive)5%,transparent)}}.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500)10%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500)15%,transparent)}}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-foreground{background-color:var(--foreground)}.bg-fuchsia-600{background-color:var(--color-fuchsia-600)}.bg-indigo-50\/50{background-color:#eef2ff80}@supports (color:color-mix(in lab,red,red)){.bg-indigo-50\/50{background-color:color-mix(in oklab,var(--color-indigo-50)50%,transparent)}}.bg-indigo-50\/80{background-color:#eef2ffcc}@supports (color:color-mix(in lab,red,red)){.bg-indigo-50\/80{background-color:color-mix(in oklab,var(--color-indigo-50)80%,transparent)}}.bg-indigo-100\/80{background-color:#e0e7ffcc}@supports (color:color-mix(in lab,red,red)){.bg-indigo-100\/80{background-color:color-mix(in oklab,var(--color-indigo-100)80%,transparent)}}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-indigo-500\/15{background-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/15{background-color:color-mix(in oklab,var(--color-indigo-500)15%,transparent)}}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-600{background-color:var(--color-lime-600)}.bg-muted,.bg-muted\/20{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/20{background-color:color-mix(in oklab,var(--muted)20%,transparent)}}.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,var(--muted)40%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted)60%,transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-primary-foreground\/15{background-color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-primary-foreground\/15{background-color:color-mix(in oklab,var(--primary-foreground)15%,transparent)}}.bg-primary-foreground\/20{background-color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-primary-foreground\/20{background-color:color-mix(in oklab,var(--primary-foreground)20%,transparent)}}.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-primary\/15{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/15{background-color:color-mix(in oklab,var(--primary)15%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/10{background-color:color-mix(in oklab,var(--color-rose-500)10%,transparent)}}.bg-rose-600{background-color:var(--color-rose-600)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-sidebar-primary{background-color:var(--sidebar-primary)}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-600{background-color:var(--color-sky-600)}.bg-transparent{background-color:#0000}.bg-violet-600{background-color:var(--color-violet-600)}.bg-white{background-color:var(--color-white)}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-400{background-color:var(--color-zinc-400)}.bg-zinc-500\/15{background-color:#71717b26}@supports (color:color-mix(in lab,red,red)){.bg-zinc-500\/15{background-color:color-mix(in oklab,var(--color-zinc-500)15%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-brand-500{--tw-gradient-from:var(--color-brand-500);--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))}.from-indigo-500{--tw-gradient-from:var(--color-indigo-500);--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))}.from-rose-500{--tw-gradient-from:var(--color-rose-500);--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))}.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))}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-accent-500{--tw-gradient-to:var(--color-accent-500);--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-500{--tw-gradient-to:var(--color-amber-500);--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-brand-500\/\[0\.03\]{--tw-gradient-to:#6364fc08}@supports (color:color-mix(in lab,red,red)){.to-brand-500\/\[0\.03\]{--tw-gradient-to:color-mix(in oklab,var(--color-brand-500)3%,transparent)}}.to-brand-500\/\[0\.03\]{--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-sky-500{--tw-gradient-to:var(--color-sky-500);--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))}.fill-current{fill:currentColor}.fill-foreground{fill:var(--foreground)}.p-0{padding:calc(var(--spacing)*0)}.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)}.p-\[3px\]{padding:3px}.p-px{padding:1px}.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-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.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-4{padding-block:calc(var(--spacing)*4)}.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-20{padding-block:calc(var(--spacing)*20)}.pt-0\.5{padding-top:calc(var(--spacing)*.5)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-6{padding-top:calc(var(--spacing)*6)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.text-left{text-align:left}.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-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-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.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-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)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-500{color:var(--color-accent-500)}.text-amber-500{color:var(--color-amber-500)}.text-background{color:var(--background)}.text-blue-500{color:var(--color-blue-500)}.text-brand-500{color:var(--color-brand-500)}.text-brand-600{color:var(--color-brand-600)}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-destructive\/60{color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.text-destructive\/60{color:color-mix(in oklab,var(--destructive)60%,transparent)}}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-foreground,.text-foreground\/60{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\/60{color:color-mix(in oklab,var(--foreground)60%,transparent)}}.text-foreground\/80{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-indigo-500{color:var(--color-indigo-500)}.text-indigo-500\/50{color:#625fff80}@supports (color:color-mix(in lab,red,red)){.text-indigo-500\/50{color:color-mix(in oklab,var(--color-indigo-500)50%,transparent)}}.text-indigo-500\/60{color:#625fff99}@supports (color:color-mix(in lab,red,red)){.text-indigo-500\/60{color:color-mix(in oklab,var(--color-indigo-500)60%,transparent)}}.text-indigo-600{color:var(--color-indigo-600)}.text-muted-foreground,.text-muted-foreground\/40{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/40{color:color-mix(in oklab,var(--muted-foreground)40%,transparent)}}.text-muted-foreground\/50{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}}.text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,var(--muted-foreground)60%,transparent)}}.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground,.text-primary-foreground\/40{color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.text-primary-foreground\/40{color:color-mix(in oklab,var(--primary-foreground)40%,transparent)}}.text-primary-foreground\/50{color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.text-primary-foreground\/50{color:color-mix(in oklab,var(--primary-foreground)50%,transparent)}}.text-primary-foreground\/70{color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.text-primary-foreground\/70{color:color-mix(in oklab,var(--primary-foreground)70%,transparent)}}.text-primary-foreground\/80{color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.text-primary-foreground\/80{color:color-mix(in oklab,var(--primary-foreground)80%,transparent)}}.text-red-500{color:var(--color-red-500)}.text-rose-500{color:var(--color-rose-500)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground)70%,transparent)}}.text-sidebar-primary-foreground{color:var(--sidebar-primary-foreground)}.text-teal-500{color:var(--color-teal-500)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.text-white\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\/50{color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-zinc-500{color:var(--color-zinc-500)}.capitalize{text-transform:capitalize}.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,)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-100{opacity:1}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));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-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-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)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + 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-brand-500\/10{--tw-shadow-color:#6364fc1a}@supports (color:color-mix(in lab,red,red)){.shadow-brand-500\/10{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-brand-500)10%,transparent)var(--tw-shadow-alpha),transparent)}}.shadow-brand-500\/20{--tw-shadow-color:#6364fc33}@supports (color:color-mix(in lab,red,red)){.shadow-brand-500\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-brand-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}.shadow-indigo-600\/20{--tw-shadow-color:#4f39f633}@supports (color:color-mix(in lab,red,red)){.shadow-indigo-600\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-indigo-600)20%,transparent)var(--tw-shadow-alpha),transparent)}}.ring-background{--tw-ring-color:var(--background)}.ring-card{--tw-ring-color:var(--card)}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur-2xl{--tw-blur:blur(var(--blur-2xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(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-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\]{transition-property:width,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-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-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.running{animation-play-state:running}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media(hover:hover){.group-hover\:w-1\.5:is(:where(.group):hover *){width:calc(var(--spacing)*1.5)}.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-background:is(:where(.group):hover *){background-color:var(--background)}.group-hover\:text-brand-600:is(:where(.group):hover *){color:var(--color-brand-600)}.group-hover\:text-foreground:is(:where(.group):hover *){color:var(--foreground)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\:shadow-sm:is(:where(.group):hover *){--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)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-data-\[collapsible\=icon\]\/sidebar-wrapper\:h-12:is(:where(.group\/sidebar-wrapper):has([data-collapsible=icon]) *){height:calc(var(--spacing)*12)}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-has-data-\[size\=lg\]\/avatar-group\:size-10:is(:where(.group\/avatar-group):has([data-size=lg]) *){width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.group-has-data-\[size\=sm\]\/avatar-group\:size-6:is(:where(.group\/avatar-group):has([data-size=sm]) *){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[orientation\=horizontal\]\/tabs\:h-9:is(:where(.group\/tabs)[data-orientation=horizontal] *){height:calc(var(--spacing)*9)}.group-data-\[orientation\=vertical\]\/tabs\:h-fit:is(:where(.group\/tabs)[data-orientation=vertical] *){height:fit-content}.group-data-\[orientation\=vertical\]\/tabs\:w-full:is(:where(.group\/tabs)[data-orientation=vertical] *){width:100%}.group-data-\[orientation\=vertical\]\/tabs\:flex-col:is(:where(.group\/tabs)[data-orientation=vertical] *){flex-direction:column}.group-data-\[orientation\=vertical\]\/tabs\:justify-start:is(:where(.group\/tabs)[data-orientation=vertical] *){justify-content:flex-start}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[size\=default\]\/avatar\:size-2\.5:is(:where(.group\/avatar)[data-size=default] *){width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.group-data-\[size\=lg\]\/avatar\:size-3:is(:where(.group\/avatar)[data-size=lg] *){width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.group-data-\[size\=sm\]\/avatar\:size-2:is(:where(.group\/avatar)[data-size=sm] *){width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.group-data-\[size\=sm\]\/avatar\:text-xs:is(:where(.group\/avatar)[data-size=sm] *){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--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)}.group-data-\[variant\=line\]\/tabs-list\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *){background-color:#0000}@media(hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder,.placeholder\:text-muted-foreground\/60::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.placeholder\:text-muted-foreground\/60::placeholder{color:color-mix(in oklab,var(--muted-foreground)60%,transparent)}}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:bg-foreground:after{content:var(--tw-content);background-color:var(--foreground)}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:transition-opacity:after{content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.group-data-\[orientation\=horizontal\]\/tabs\:after\:inset-x-0:is(:where(.group\/tabs)[data-orientation=horizontal] *):after{content:var(--tw-content);inset-inline:calc(var(--spacing)*0)}.group-data-\[orientation\=horizontal\]\/tabs\:after\:bottom-\[-5px\]:is(:where(.group\/tabs)[data-orientation=horizontal] *):after{content:var(--tw-content);bottom:-5px}.group-data-\[orientation\=horizontal\]\/tabs\:after\:h-0\.5:is(:where(.group\/tabs)[data-orientation=horizontal] *):after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.group-data-\[orientation\=vertical\]\/tabs\:after\:inset-y-0:is(:where(.group\/tabs)[data-orientation=vertical] *):after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.group-data-\[orientation\=vertical\]\/tabs\:after\:-right-1:is(:where(.group\/tabs)[data-orientation=vertical] *):after{content:var(--tw-content);right:calc(var(--spacing)*-1)}.group-data-\[orientation\=vertical\]\/tabs\:after\:w-0\.5:is(:where(.group\/tabs)[data-orientation=vertical] *):after{content:var(--tw-content);width:calc(var(--spacing)*.5)}.focus-within\:border-ring:focus-within{border-color:var(--ring)}.focus-within\:bg-background:focus-within{background-color:var(--background)}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-border:hover{border-color:var(--border)}.hover\:border-brand-300:hover{border-color:var(--color-brand-300)}.hover\:bg-accent:hover,.hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.hover\:bg-accent\/60:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/60:hover{background-color:color-mix(in oklab,var(--accent)60%,transparent)}}.hover\:bg-brand-500:hover{background-color:var(--color-brand-500)}.hover\:bg-destructive\/10:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-indigo-600:hover{background-color:var(--color-indigo-600)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}.hover\:bg-muted:hover,.hover\:bg-muted\/30:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/30:hover{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.hover\:bg-muted\/40:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/40:hover{background-color:color-mix(in oklab,var(--muted)40%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.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-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-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[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-ring:focus-visible,.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-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.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-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=horizontal\]\:flex-col[data-orientation=horizontal]{flex-direction:column}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=lg\]\:size-10[data-size=lg]{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.data-\[size\=sm\]\:size-6[data-size=sm]{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}:is(.\*\:data-\[slot\=avatar\]\:ring-2>*)[data-slot=avatar]{--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)}:is(.\*\:data-\[slot\=avatar\]\:ring-background>*)[data-slot=avatar]{--tw-ring-color:var(--background)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing)*12)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.group-data-\[variant\=default\]\/tabs-list\:data-\[state\=active\]\:shadow-sm:is(:where(.group\/tabs-list)[data-variant=default] *)[data-state=active]{--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)}.group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{background-color:#0000}.group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:shadow-none:is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:after\:opacity-100:is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]:after{content:var(--tw-content);opacity:1}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit 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)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=open\]\:animate-in[data-state=open]{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)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--secondary)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}@media(hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.data-\[variant\=line\]\:rounded-none[data-variant=line]{border-radius:0}@media(min-width:40rem){.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:table-cell{display:table-cell}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:text-left{text-align:left}}@media(min-width:48rem){.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media(min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:table-cell{display:table-cell}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:p-8{padding:calc(var(--spacing)*8)}}@media(min-width:80rem){.xl\:w-96{width:calc(var(--spacing)*96)}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:96rem){.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border:is(.dark *){border-style:var(--tw-border-style);border-width:1px}.dark\:border-border:is(.dark *){border-color:var(--border)}.dark\:border-indigo-500\/20:is(.dark *){border-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.dark\:border-indigo-500\/20:is(.dark *){border-color:color-mix(in oklab,var(--color-indigo-500)20%,transparent)}}.dark\:border-indigo-500\/30:is(.dark *){border-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.dark\:border-indigo-500\/30:is(.dark *){border-color:color-mix(in oklab,var(--color-indigo-500)30%,transparent)}}.dark\:border-indigo-500\/40:is(.dark *){border-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.dark\:border-indigo-500\/40:is(.dark *){border-color:color-mix(in oklab,var(--color-indigo-500)40%,transparent)}}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-brand-400\/60:is(.dark *){background-color:#7f8aff99}@supports (color:color-mix(in lab,red,red)){.dark\:bg-brand-400\/60:is(.dark *){background-color:color-mix(in oklab,var(--color-brand-400)60%,transparent)}}.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-indigo-400\/15:is(.dark *){background-color:#7d87ff26}@supports (color:color-mix(in lab,red,red)){.dark\:bg-indigo-400\/15:is(.dark *){background-color:color-mix(in oklab,var(--color-indigo-400)15%,transparent)}}.dark\:bg-indigo-500:is(.dark *){background-color:var(--color-indigo-500)}.dark\:bg-indigo-900\/40:is(.dark *){background-color:#312c8566}@supports (color:color-mix(in lab,red,red)){.dark\:bg-indigo-900\/40:is(.dark *){background-color:color-mix(in oklab,var(--color-indigo-900)40%,transparent)}}.dark\:bg-indigo-950\/20:is(.dark *){background-color:#1e1a4d33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-indigo-950\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-indigo-950)20%,transparent)}}.dark\:bg-indigo-950\/40:is(.dark *){background-color:#1e1a4d66}@supports (color:color-mix(in lab,red,red)){.dark\:bg-indigo-950\/40:is(.dark *){background-color:color-mix(in oklab,var(--color-indigo-950)40%,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)}}.dark\:bg-zinc-400\/15:is(.dark *){background-color:#9f9fa926}@supports (color:color-mix(in lab,red,red)){.dark\:bg-zinc-400\/15:is(.dark *){background-color:color-mix(in oklab,var(--color-zinc-400)15%,transparent)}}.dark\:bg-zinc-500:is(.dark *){background-color:var(--color-zinc-500)}.dark\:bg-zinc-600:is(.dark *){background-color:var(--color-zinc-600)}.dark\:to-brand-400\/\[0\.05\]:is(.dark *){--tw-gradient-to:#7f8aff0d}@supports (color:color-mix(in lab,red,red)){.dark\:to-brand-400\/\[0\.05\]:is(.dark *){--tw-gradient-to:color-mix(in oklab,var(--color-brand-400)5%,transparent)}}.dark\:to-brand-400\/\[0\.05\]:is(.dark *){--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))}.dark\:text-brand-400:is(.dark *){color:var(--color-brand-400)}.dark\:text-emerald-400:is(.dark *){color:var(--color-emerald-400)}.dark\:text-indigo-400:is(.dark *){color:var(--color-indigo-400)}.dark\:text-indigo-400\/50:is(.dark *){color:#7d87ff80}@supports (color:color-mix(in lab,red,red)){.dark\:text-indigo-400\/50:is(.dark *){color:color-mix(in oklab,var(--color-indigo-400)50%,transparent)}}.dark\:text-indigo-400\/60:is(.dark *){color:#7d87ff99}@supports (color:color-mix(in lab,red,red)){.dark\:text-indigo-400\/60:is(.dark *){color:color-mix(in oklab,var(--color-indigo-400)60%,transparent)}}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}.dark\:text-zinc-400:is(.dark *){color:var(--color-zinc-400)}@media(hover:hover){.dark\:group-hover\:text-brand-400:is(.dark *):is(:where(.group):hover *){color:var(--color-brand-400)}.dark\:hover\:border-brand-600:is(.dark *):hover{border-color:var(--color-brand-600)}.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-brand-400:is(.dark *):hover{background-color:var(--color-brand-400)}.dark\:hover\:bg-indigo-600:is(.dark *):hover{background-color:var(--color-indigo-600)}.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\:hover\:text-foreground:is(.dark *):hover{color:var(--foreground)}}.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)}}.dark\:data-\[state\=active\]\:border-input:is(.dark *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:data-\[state\=active\]\:text-foreground:is(.dark *)[data-state=active]{color:var(--foreground)}.dark\:group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:border-transparent:is(.dark *):is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{border-color:#0000}.dark\:group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:bg-transparent:is(.dark *):is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{background-color:#0000}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_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)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.group-has-data-\[size\=lg\]\/avatar-group\:\[\&\>svg\]\:size-5:is(:where(.group\/avatar-group):has([data-size=lg]) *)>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.group-has-data-\[size\=sm\]\/avatar-group\:\[\&\>svg\]\:size-3:is(:where(.group\/avatar-group):has([data-size=sm]) *)>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.group-data-\[size\=default\]\/avatar\:\[\&\>svg\]\:size-2:is(:where(.group\/avatar)[data-size=default] *)>svg,.group-data-\[size\=lg\]\/avatar\:\[\&\>svg\]\:size-2:is(:where(.group\/avatar)[data-size=lg] *)>svg{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.group-data-\[size\=sm\]\/avatar\:\[\&\>svg\]\:hidden:is(:where(.group\/avatar)[data-size=sm] *)>svg{display:none}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}@media(hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}a.\[a\&\]\:hover\:underline:hover{text-decoration-line:underline}}}@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{--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(59% .22 277);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(96% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(96% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.33);--destructive-foreground:oklch(57.7% .245 27.33);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(59% .22 277);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.714);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--radius:.625rem;--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(59% .22 277);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(96% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(59% .22 277)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(14.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(14.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(68% .18 277);--primary-foreground:oklch(14.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(39.6% .141 25.768);--destructive-foreground:oklch(63.7% .237 25.331);--border:oklch(26.9% 0 0);--input:oklch(26.9% 0 0);--ring:oklch(68% .18 277);--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(17% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(68% .18 277);--sidebar-primary-foreground:oklch(14.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(26.9% 0 0);--sidebar-ring:oklch(68% .18 277)}@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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-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-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-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))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}
@@ -0,0 +1,26 @@
1
+ import{c as D,j as e,S as ne,V as E,W as $,b as f,X as F,Y as q,Z as H,_,$ as O,x as T,r as m,a0 as re,M as ie,D as ce,d as de,e as oe,f as xe,g as me,o as he,L as Y,n as ue,u as K,t as Q,A as B,m as P,B as ge}from"./index-Coo_PliT.js";import{u as je}from"./useMutation-C7s7l6mS.js";import{B as S,S as C,E as fe}from"./error-boundary-ONLtI3m8.js";import{I as pe}from"./input-CpGy8OTc.js";import{a as Z,b as X}from"./avatar-D6PiXqfu.js";import{T as be,s as R,g as J,a as ee,t as ye,f as se}from"./utils-Dt8_kYy9.js";import{C as Ne,a as ve}from"./card-BWnhVACg.js";/**
2
+ * @license lucide-react v0.400.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const we=D("ArrowUpDown",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]);/**
7
+ * @license lucide-react v0.400.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const ke=D("Ellipsis",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]]);/**
12
+ * @license lucide-react v0.400.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const Ce=D("Eye",[["path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z",key:"rwhkz3"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/**
17
+ * @license lucide-react v0.400.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */const Se=D("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);/**
22
+ * @license lucide-react v0.400.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */const Te=D("List",[["line",{x1:"8",x2:"21",y1:"6",y2:"6",key:"7ey8pc"}],["line",{x1:"8",x2:"21",y1:"12",y2:"12",key:"rjfblc"}],["line",{x1:"8",x2:"21",y1:"18",y2:"18",key:"c3b1m8"}],["line",{x1:"3",x2:"3.01",y1:"6",y2:"6",key:"1g7gq3"}],["line",{x1:"3",x2:"3.01",y1:"12",y2:"12",key:"1pjlvk"}],["line",{x1:"3",x2:"3.01",y1:"18",y2:"18",key:"28t2mc"}]]),G=[{value:"all",label:"All statuses"},{value:"online",label:"Online"},{value:"offline",label:"Offline"},{value:"busy",label:"Busy"},{value:"idle",label:"Idle"}],ze=[{value:"name",label:"Name"},{value:"status",label:"Status"},{value:"lastSeen",label:"Last seen"}];function Ae({search:s,onSearchChange:t,statusFilter:d,onStatusFilterChange:l,teamFilter:r,onTeamFilterChange:i,viewMode:h,onViewModeChange:x,sortField:o,sortDirection:u,onSortChange:v,teams:p,totalCount:b,filteredCount:z}){var L,A;const I=((L=G.find(n=>n.value===d))==null?void 0:L.label)??"All",w=((A=p.find(n=>n.id===r))==null?void 0:A.name)??"All teams";return e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{className:"flex flex-1 items-center gap-2",children:[e.jsxs("div",{className:"relative max-w-xs flex-1",children:[e.jsx(ne,{className:"text-muted-foreground pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2"}),e.jsx(pe,{placeholder:"Search agents...",value:s,onChange:n=>t(n.target.value),className:"pl-8"})]}),e.jsxs(E,{children:[e.jsx($,{asChild:!0,children:e.jsxs(f,{variant:"outline",size:"sm",className:"shrink-0",children:[e.jsx("span",{className:`mr-1.5 inline-block size-2 rounded-full ${d==="online"?"bg-emerald-500":d==="offline"?"bg-zinc-400":d==="busy"?"bg-amber-500":d==="idle"?"bg-sky-400":"bg-zinc-300 dark:bg-zinc-600"}`}),I]})}),e.jsxs(F,{align:"start",children:[e.jsx(q,{children:"Filter by status"}),e.jsx(H,{}),G.map(n=>e.jsx(_,{checked:d===n.value,onCheckedChange:()=>l(n.value),children:n.label},n.value))]})]}),p.length>0&&e.jsxs(E,{children:[e.jsx($,{asChild:!0,children:e.jsx(f,{variant:"outline",size:"sm",className:"shrink-0",children:w})}),e.jsxs(F,{align:"start",children:[e.jsx(q,{children:"Filter by team"}),e.jsx(H,{}),e.jsx(_,{checked:r===null,onCheckedChange:()=>i(null),children:"All teams"}),p.map(n=>e.jsxs(_,{checked:r===n.id,onCheckedChange:()=>i(n.id),children:[e.jsx("span",{className:"mr-1.5 inline-block size-2.5 rounded",style:{backgroundColor:n.color}}),n.name]},n.id))]})]}),e.jsxs(E,{children:[e.jsx($,{asChild:!0,children:e.jsxs(f,{variant:"ghost",size:"sm",className:"shrink-0 gap-1",children:[e.jsx(we,{className:"size-3.5"}),e.jsx("span",{className:"hidden sm:inline",children:"Sort"})]})}),e.jsxs(F,{align:"start",children:[e.jsx(q,{children:"Sort by"}),e.jsx(H,{}),ze.map(n=>e.jsxs(O,{onClick:()=>v(n.value),children:[n.label,o===n.value&&e.jsx("span",{className:"text-muted-foreground ml-auto text-xs",children:u==="asc"?"↑":"↓"})]},n.value))]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-muted-foreground text-xs tabular-nums",children:z===b?`${b} agent${b!==1?"s":""}`:`${z} of ${b}`}),e.jsxs("div",{className:"bg-muted flex rounded-md p-0.5",children:[e.jsx(f,{variant:h==="table"?"secondary":"ghost",size:"icon-xs",onClick:()=>x("table"),"aria-label":"Table view",children:e.jsx(Te,{className:"size-3.5"})}),e.jsx(f,{variant:h==="grid"?"secondary":"ghost",size:"icon-xs",onClick:()=>x("grid"),"aria-label":"Grid view",children:e.jsx(Se,{className:"size-3.5"})})]})]})]})}function De({className:s,...t}){return e.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:e.jsx("table",{"data-slot":"table",className:T("w-full caption-bottom text-sm",s),...t})})}function Ie({className:s,...t}){return e.jsx("thead",{"data-slot":"table-header",className:T("[&_tr]:border-b",s),...t})}function Le({className:s,...t}){return e.jsx("tbody",{"data-slot":"table-body",className:T("[&_tr:last-child]:border-0",s),...t})}function W({className:s,...t}){return e.jsx("tr",{"data-slot":"table-row",className:T("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",s),...t})}function y({className:s,...t}){return e.jsx("th",{"data-slot":"table-head",className:T("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",s),...t})}function N({className:s,...t}){return e.jsx("td",{"data-slot":"table-cell",className:T("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",s),...t})}function ae({agent:s,onDelete:t,isDeleting:d}){const[l,r]=m.useState(!1),i=re();return e.jsxs(e.Fragment,{children:[e.jsxs(E,{children:[e.jsx($,{asChild:!0,children:e.jsx(f,{variant:"ghost",size:"icon-xs","aria-label":"Agent actions",children:e.jsx(ke,{className:"size-4"})})}),e.jsxs(F,{align:"end",children:[e.jsxs(O,{onClick:()=>i({to:"/agents/$agentId",params:{agentId:s.id}}),children:[e.jsx(Ce,{className:"mr-2 size-4"}),"View Details"]}),e.jsxs(O,{onClick:()=>i({to:"/messages",search:{to:s.id}}),children:[e.jsx(ie,{className:"mr-2 size-4"}),"Send Message"]}),e.jsx(H,{}),e.jsxs(O,{variant:"destructive",onClick:()=>r(!0),children:[e.jsx(be,{className:"mr-2 size-4"}),"Remove"]})]})]}),e.jsx(ce,{open:l,onOpenChange:r,children:e.jsxs(de,{children:[e.jsxs(oe,{children:[e.jsx(xe,{children:"Remove agent"}),e.jsxs(me,{children:["This will set"," ",e.jsx("span",{className:"font-medium text-foreground",children:s.displayName})," ","to offline. The agent can re-register at any time."]})]}),e.jsxs(he,{children:[e.jsx(f,{variant:"outline",onClick:()=>r(!1),disabled:d,children:"Cancel"}),e.jsx(f,{variant:"destructive",disabled:d,onClick:()=>{t(s.id),r(!1)},children:d?"Removing...":"Remove"})]})]})})]})}function Me({agents:s,onDelete:t,deletingId:d}){return e.jsx("div",{className:"overflow-x-auto rounded-lg border",children:e.jsxs(De,{children:[e.jsx(Ie,{children:e.jsxs(W,{children:[e.jsx(y,{className:"w-10"}),e.jsx(y,{children:"Agent"}),e.jsx(y,{className:"hidden md:table-cell",children:"URL"}),e.jsx(y,{className:"hidden lg:table-cell",children:"Teams"}),e.jsx(y,{children:"Status"}),e.jsx(y,{className:"hidden sm:table-cell",children:"Last Seen"}),e.jsx(y,{className:"w-10"})]})}),e.jsx(Le,{children:s.map(l=>{var x,o,u;const r=R[l.status]??R.offline,i=J(l.displayName),h=ee(l.displayName);return e.jsxs(W,{children:[e.jsx(N,{children:e.jsx("span",{className:`inline-block size-2 rounded-full ${r.dot}`,title:r.label})}),e.jsx(N,{children:e.jsxs(Y,{to:"/agents/$agentId",params:{agentId:l.id},className:"flex items-center gap-2.5",children:[e.jsx(Z,{size:"sm",children:e.jsx(X,{className:"text-[10px] font-semibold text-white",style:{backgroundColor:h},children:i})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"truncate font-medium leading-tight",children:l.displayName}),e.jsx("p",{className:"truncate font-mono text-[11px] text-muted-foreground",children:l.name})]})]})}),e.jsx(N,{className:"hidden md:table-cell",children:e.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:ye(l.url)})}),e.jsx(N,{className:"hidden lg:table-cell",children:e.jsxs("div",{className:"flex flex-wrap gap-1",children:[(o=(x=l.agentCard)==null?void 0:x.teams)==null?void 0:o.map(v=>e.jsx(S,{variant:"outline",className:"text-[10px] leading-tight",children:v},v)),(!((u=l.agentCard)!=null&&u.teams)||l.agentCard.teams.length===0)&&e.jsx("span",{className:"text-xs text-muted-foreground",children:"—"})]})}),e.jsx(N,{children:e.jsx(S,{variant:r.variant,className:"text-[10px]",children:r.label})}),e.jsx(N,{className:"hidden sm:table-cell",children:e.jsx("span",{className:"text-xs text-muted-foreground",children:l.lastHeartbeat?se(l.lastHeartbeat):"Never"})}),e.jsx(N,{children:e.jsx(ae,{agent:l,onDelete:t,isDeleting:d===l.id})})]},l.id)})})]})})}function Ee({agent:s,onDelete:t,isDeleting:d}){var h,x;const l=J(s.displayName),r=ee(s.displayName),i=R[s.status]??R.offline;return e.jsxs(Ne,{className:"group relative gap-0 overflow-hidden py-0 transition-all duration-200 hover:shadow-md hover:-translate-y-0.5",children:[e.jsx("div",{className:"h-1.5 w-full",style:{background:`linear-gradient(90deg, ${r}88, ${r}22)`}}),e.jsxs(ve,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs(Y,{to:"/agents/$agentId",params:{agentId:s.id},className:"flex items-center gap-3",children:[e.jsx(Z,{size:"lg",children:e.jsx(X,{className:"text-sm font-semibold text-white",style:{backgroundColor:r},children:l})}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h3",{className:"truncate font-semibold leading-tight text-foreground",children:s.displayName}),e.jsxs("span",{className:"relative flex size-2 shrink-0",children:[s.status==="online"&&e.jsx("span",{className:`absolute inset-0 rounded-full ${i.dot} animate-pulse-dot`}),e.jsx("span",{className:`relative inline-flex size-2 rounded-full ${i.dot}`,title:i.label})]})]}),e.jsx("p",{className:"mt-0.5 truncate font-mono text-xs text-muted-foreground",children:s.name})]})]}),e.jsx(ae,{agent:s,onDelete:t,isDeleting:d})]}),((h=s.agentCard)==null?void 0:h.skills)&&s.agentCard.skills.length>0&&e.jsxs("div",{className:"flex flex-wrap gap-1",children:[s.agentCard.skills.slice(0,4).map(o=>e.jsx(S,{variant:"secondary",className:"text-[10px] leading-tight",children:o.name},o.id)),s.agentCard.skills.length>4&&e.jsxs(S,{variant:"outline",className:"text-[10px] leading-tight",children:["+",s.agentCard.skills.length-4]})]}),((x=s.agentCard)==null?void 0:x.teams)&&s.agentCard.teams.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:s.agentCard.teams.map(o=>e.jsx(S,{variant:"outline",className:"text-[10px] leading-tight",children:o},o))}),e.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border/50 pt-3",children:[e.jsx(S,{variant:i.variant,className:"text-[10px]",children:i.label}),s.lastHeartbeat&&e.jsx("span",{className:"text-[10px] text-muted-foreground",children:se(s.lastHeartbeat)})]})]})]})}const te="swarmroom:agents:viewMode";function $e(){try{const s=localStorage.getItem(te);if(s==="grid"||s==="table")return s}catch{}return"grid"}function Fe(){var U;const s=ue(),[t,d]=m.useState(""),[l,r]=m.useState("all"),[i,h]=m.useState(null),[x,o]=m.useState($e),[u,v]=m.useState("name"),[p,b]=m.useState("asc"),[z,I]=m.useState(null),w=K({queryKey:["agents"],queryFn:async()=>{const a=await fetch(`${B}/agents`);if(!a.ok)throw new Error("Failed to fetch agents");return(await a.json()).data},staleTime:3e4,refetchInterval:1e4,retry:1}),L=K({queryKey:["teams"],queryFn:async()=>{const a=await fetch(`${B}/teams`);if(!a.ok)throw new Error("Failed to fetch teams");return(await a.json()).data},staleTime:6e4,retry:1}),A=je({mutationFn:async a=>{if(I(a),!(await fetch(`${B}/agents/${a}`,{method:"DELETE"})).ok)throw new Error("Failed to remove agent")},onSuccess:()=>{s.invalidateQueries({queryKey:["agents"]}),Q.success("Agent removed")},onError:()=>{Q.error("Failed to remove agent")},onSettled:()=>{I(null)}}),n=m.useCallback(a=>{o(a);try{localStorage.setItem(te,a)}catch{}},[]),le=m.useCallback(a=>{a===u?b(c=>c==="asc"?"desc":"asc"):(v(a),b("asc"))},[u]),M=m.useMemo(()=>{let a=w.data??[];if(t){const c=t.toLowerCase();a=a.filter(g=>g.displayName.toLowerCase().includes(c)||g.name.toLowerCase().includes(c))}return l!=="all"&&(a=a.filter(c=>c.status===l)),i&&(a=a.filter(c=>{var g,j;return(j=(g=c.agentCard)==null?void 0:g.teams)==null?void 0:j.some(k=>k===i)})),a=[...a].sort((c,g)=>{let j=0;switch(u){case"name":j=c.displayName.localeCompare(g.displayName);break;case"status":{const k={online:0,busy:1,idle:2,offline:3};j=(k[c.status]??9)-(k[g.status]??9);break}case"lastSeen":{const k=c.lastHeartbeat?new Date(c.lastHeartbeat).getTime():0;j=(g.lastHeartbeat?new Date(g.lastHeartbeat).getTime():0)-k;break}}return p==="asc"?j:-j}),a},[w.data,t,l,i,u,p]),V=((U=w.data)==null?void 0:U.length)??0;return w.isLoading?e.jsx(Re,{}):e.jsxs("div",{className:"flex flex-col gap-6 p-4 sm:p-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Agents"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Monitor and manage your AI agents across the swarm"})]}),e.jsx(Ae,{search:t,onSearchChange:d,statusFilter:l,onStatusFilterChange:r,teamFilter:i,onTeamFilterChange:h,viewMode:x,onViewModeChange:n,sortField:u,sortDirection:p,onSortChange:le,teams:L.data??[],totalCount:V,filteredCount:M.length}),V===0?e.jsx(He,{}):M.length===0?e.jsx(Oe,{onClear:()=>{d(""),r("all"),h(null)}}):x==="table"?e.jsx(Me,{agents:M,onDelete:a=>A.mutate(a),deletingId:z}):e.jsx(P.div,{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4",initial:"hidden",animate:"visible",variants:{hidden:{},visible:{transition:{staggerChildren:.05}}},children:M.map(a=>e.jsx(P.div,{variants:{hidden:{opacity:0,y:12},visible:{opacity:1,y:0,transition:{duration:.25}}},children:e.jsx(Ee,{agent:a,onDelete:c=>A.mutate(c),isDeleting:z===a.id})},a.id))})]})}function He(){return e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-dashed border-border/60 py-20",children:[e.jsx("div",{className:"flex size-16 items-center justify-center rounded-2xl bg-muted",children:e.jsx(ge,{className:"size-8 text-muted-foreground"})}),e.jsx("h2",{className:"mt-5 text-lg font-semibold",children:"No agents registered"}),e.jsx("p",{className:"mt-1.5 max-w-sm text-center text-sm text-muted-foreground",children:"Agents self-register when they connect to the swarm. Start an agent with the SDK or CLI to see it appear here."}),e.jsx("div",{className:"mt-6 rounded-lg bg-muted/60 px-4 py-3",children:e.jsx("code",{className:"font-mono text-xs text-muted-foreground",children:"npx @swarmroom/cli agent start"})})]})}function Oe({onClear:s}){return e.jsxs("div",{className:"flex flex-col items-center justify-center py-16",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"No agents match your filters."}),e.jsx("button",{onClick:s,className:"mt-2 text-sm font-medium text-primary hover:underline",children:"Clear filters"})]})}function Re(){return e.jsxs("div",{className:"flex flex-col gap-6 p-4 sm:p-6",children:[e.jsxs("div",{children:[e.jsx(C,{className:"h-8 w-32"}),e.jsx(C,{className:"mt-2 h-4 w-64"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(C,{className:"h-9 w-48"}),e.jsx(C,{className:"h-8 w-24"}),e.jsx(C,{className:"h-8 w-24"})]}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4",children:Array.from({length:6}).map((s,t)=>e.jsx(C,{className:"h-48 rounded-xl"},t))})]})}function Ge(){return e.jsx(fe,{featureName:"Agents",children:e.jsx(Fe,{})})}export{Ge as component};
@@ -0,0 +1 @@
1
+ import{j as t,x as n}from"./index-Coo_PliT.js";function a({className:e,type:i,...r}){return t.jsx("input",{type:i,"data-slot":"input",className:n("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","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",e),...r})}export{a as I};
@@ -0,0 +1,6 @@
1
+ import{c as e}from"./index-Coo_PliT.js";/**
2
+ * @license lucide-react v0.400.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const r=e("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);export{r as L};
@@ -0,0 +1,6 @@
1
+ import{c as e}from"./index-Coo_PliT.js";/**
2
+ * @license lucide-react v0.400.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const a=e("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);export{a as P};
@@ -0,0 +1,6 @@
1
+ import{c}from"./index-Coo_PliT.js";/**
2
+ * @license lucide-react v0.400.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const a=c("Radio",[["path",{d:"M4.9 19.1C1 15.2 1 8.8 4.9 4.9",key:"1vaf9d"}],["path",{d:"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5",key:"u1ii0m"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5",key:"1j5fej"}],["path",{d:"M19.1 4.9C23 8.8 23 15.1 19.1 19",key:"10b0cb"}]]);export{a as R};
@@ -0,0 +1 @@
1
+ import{r as s,I as T,J as se,j as f,P as L,K as O,N as ce,O as C,Q as P,R as ae,x as F}from"./index-Coo_PliT.js";function ie(e,[o,r]){return Math.min(r,Math.max(o,e))}function de(e,o){return s.useReducer((r,l)=>o[r][l]??r,e)}var U="ScrollArea",[$]=ce(U),[ue,p]=$(U),q=s.forwardRef((e,o)=>{const{__scopeScrollArea:r,type:l="hover",dir:t,scrollHideDelay:n=600,...c}=e,[a,i]=s.useState(null),[h,d]=s.useState(null),[b,u]=s.useState(null),[S,m]=s.useState(null),[A,X]=s.useState(null),[x,_]=s.useState(0),[Y,D]=s.useState(0),[j,y]=s.useState(!1),[N,W]=s.useState(!1),v=T(o,R=>i(R)),w=se(t);return f.jsx(ue,{scope:r,type:l,dir:w,scrollHideDelay:n,scrollArea:a,viewport:h,onViewportChange:d,content:b,onContentChange:u,scrollbarX:S,onScrollbarXChange:m,scrollbarXEnabled:j,onScrollbarXEnabledChange:y,scrollbarY:A,onScrollbarYChange:X,scrollbarYEnabled:N,onScrollbarYEnabledChange:W,onCornerWidthChange:_,onCornerHeightChange:D,children:f.jsx(L.div,{dir:w,...c,ref:v,style:{position:"relative","--radix-scroll-area-corner-width":x+"px","--radix-scroll-area-corner-height":Y+"px",...e.style}})})});q.displayName=U;var J="ScrollAreaViewport",K=s.forwardRef((e,o)=>{const{__scopeScrollArea:r,children:l,nonce:t,...n}=e,c=p(J,r),a=s.useRef(null),i=T(o,a,c.onViewportChange);return f.jsxs(f.Fragment,{children:[f.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:t}),f.jsx(L.div,{"data-radix-scroll-area-viewport":"",...n,ref:i,style:{overflowX:c.scrollbarXEnabled?"scroll":"hidden",overflowY:c.scrollbarYEnabled?"scroll":"hidden",...e.style},children:f.jsx("div",{ref:c.onContentChange,style:{minWidth:"100%",display:"table"},children:l})})]})});K.displayName=J;var g="ScrollAreaScrollbar",Q=s.forwardRef((e,o)=>{const{forceMount:r,...l}=e,t=p(g,e.__scopeScrollArea),{onScrollbarXEnabledChange:n,onScrollbarYEnabledChange:c}=t,a=e.orientation==="horizontal";return s.useEffect(()=>(a?n(!0):c(!0),()=>{a?n(!1):c(!1)}),[a,n,c]),t.type==="hover"?f.jsx(he,{...l,ref:o,forceMount:r}):t.type==="scroll"?f.jsx(fe,{...l,ref:o,forceMount:r}):t.type==="auto"?f.jsx(G,{...l,ref:o,forceMount:r}):t.type==="always"?f.jsx(V,{...l,ref:o}):null});Q.displayName=g;var he=s.forwardRef((e,o)=>{const{forceMount:r,...l}=e,t=p(g,e.__scopeScrollArea),[n,c]=s.useState(!1);return s.useEffect(()=>{const a=t.scrollArea;let i=0;if(a){const h=()=>{window.clearTimeout(i),c(!0)},d=()=>{i=window.setTimeout(()=>c(!1),t.scrollHideDelay)};return a.addEventListener("pointerenter",h),a.addEventListener("pointerleave",d),()=>{window.clearTimeout(i),a.removeEventListener("pointerenter",h),a.removeEventListener("pointerleave",d)}}},[t.scrollArea,t.scrollHideDelay]),f.jsx(O,{present:r||n,children:f.jsx(G,{"data-state":n?"visible":"hidden",...l,ref:o})})}),fe=s.forwardRef((e,o)=>{const{forceMount:r,...l}=e,t=p(g,e.__scopeScrollArea),n=e.orientation==="horizontal",c=M(()=>i("SCROLL_END"),100),[a,i]=de("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return s.useEffect(()=>{if(a==="idle"){const h=window.setTimeout(()=>i("HIDE"),t.scrollHideDelay);return()=>window.clearTimeout(h)}},[a,t.scrollHideDelay,i]),s.useEffect(()=>{const h=t.viewport,d=n?"scrollLeft":"scrollTop";if(h){let b=h[d];const u=()=>{const S=h[d];b!==S&&(i("SCROLL"),c()),b=S};return h.addEventListener("scroll",u),()=>h.removeEventListener("scroll",u)}},[t.viewport,n,i,c]),f.jsx(O,{present:r||a!=="hidden",children:f.jsx(V,{"data-state":a==="hidden"?"hidden":"visible",...l,ref:o,onPointerEnter:C(e.onPointerEnter,()=>i("POINTER_ENTER")),onPointerLeave:C(e.onPointerLeave,()=>i("POINTER_LEAVE"))})})}),G=s.forwardRef((e,o)=>{const r=p(g,e.__scopeScrollArea),{forceMount:l,...t}=e,[n,c]=s.useState(!1),a=e.orientation==="horizontal",i=M(()=>{if(r.viewport){const h=r.viewport.offsetWidth<r.viewport.scrollWidth,d=r.viewport.offsetHeight<r.viewport.scrollHeight;c(a?h:d)}},10);return E(r.viewport,i),E(r.content,i),f.jsx(O,{present:l||n,children:f.jsx(V,{"data-state":n?"visible":"hidden",...t,ref:o})})}),V=s.forwardRef((e,o)=>{const{orientation:r="vertical",...l}=e,t=p(g,e.__scopeScrollArea),n=s.useRef(null),c=s.useRef(0),[a,i]=s.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),h=te(a.viewport,a.content),d={...l,sizes:a,onSizesChange:i,hasThumb:h>0&&h<1,onThumbChange:u=>n.current=u,onThumbPointerUp:()=>c.current=0,onThumbPointerDown:u=>c.current=u};function b(u,S){return we(u,c.current,a,S)}return r==="horizontal"?f.jsx(be,{...d,ref:o,onThumbPositionChange:()=>{if(t.viewport&&n.current){const u=t.viewport.scrollLeft,S=k(u,a,t.dir);n.current.style.transform=`translate3d(${S}px, 0, 0)`}},onWheelScroll:u=>{t.viewport&&(t.viewport.scrollLeft=u)},onDragScroll:u=>{t.viewport&&(t.viewport.scrollLeft=b(u,t.dir))}}):r==="vertical"?f.jsx(Se,{...d,ref:o,onThumbPositionChange:()=>{if(t.viewport&&n.current){const u=t.viewport.scrollTop,S=k(u,a);n.current.style.transform=`translate3d(0, ${S}px, 0)`}},onWheelScroll:u=>{t.viewport&&(t.viewport.scrollTop=u)},onDragScroll:u=>{t.viewport&&(t.viewport.scrollTop=b(u))}}):null}),be=s.forwardRef((e,o)=>{const{sizes:r,onSizesChange:l,...t}=e,n=p(g,e.__scopeScrollArea),[c,a]=s.useState(),i=s.useRef(null),h=T(o,i,n.onScrollbarXChange);return s.useEffect(()=>{i.current&&a(getComputedStyle(i.current))},[i]),f.jsx(ee,{"data-orientation":"horizontal",...t,ref:h,sizes:r,style:{bottom:0,left:n.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:n.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":I(r)+"px",...e.style},onThumbPointerDown:d=>e.onThumbPointerDown(d.x),onDragScroll:d=>e.onDragScroll(d.x),onWheelScroll:(d,b)=>{if(n.viewport){const u=n.viewport.scrollLeft+d.deltaX;e.onWheelScroll(u),le(u,b)&&d.preventDefault()}},onResize:()=>{i.current&&n.viewport&&c&&l({content:n.viewport.scrollWidth,viewport:n.viewport.offsetWidth,scrollbar:{size:i.current.clientWidth,paddingStart:z(c.paddingLeft),paddingEnd:z(c.paddingRight)}})}})}),Se=s.forwardRef((e,o)=>{const{sizes:r,onSizesChange:l,...t}=e,n=p(g,e.__scopeScrollArea),[c,a]=s.useState(),i=s.useRef(null),h=T(o,i,n.onScrollbarYChange);return s.useEffect(()=>{i.current&&a(getComputedStyle(i.current))},[i]),f.jsx(ee,{"data-orientation":"vertical",...t,ref:h,sizes:r,style:{top:0,right:n.dir==="ltr"?0:void 0,left:n.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":I(r)+"px",...e.style},onThumbPointerDown:d=>e.onThumbPointerDown(d.y),onDragScroll:d=>e.onDragScroll(d.y),onWheelScroll:(d,b)=>{if(n.viewport){const u=n.viewport.scrollTop+d.deltaY;e.onWheelScroll(u),le(u,b)&&d.preventDefault()}},onResize:()=>{i.current&&n.viewport&&c&&l({content:n.viewport.scrollHeight,viewport:n.viewport.offsetHeight,scrollbar:{size:i.current.clientHeight,paddingStart:z(c.paddingTop),paddingEnd:z(c.paddingBottom)}})}})}),[ve,Z]=$(g),ee=s.forwardRef((e,o)=>{const{__scopeScrollArea:r,sizes:l,hasThumb:t,onThumbChange:n,onThumbPointerUp:c,onThumbPointerDown:a,onThumbPositionChange:i,onDragScroll:h,onWheelScroll:d,onResize:b,...u}=e,S=p(g,r),[m,A]=s.useState(null),X=T(o,v=>A(v)),x=s.useRef(null),_=s.useRef(""),Y=S.viewport,D=l.content-l.viewport,j=P(d),y=P(i),N=M(b,10);function W(v){if(x.current){const w=v.clientX-x.current.left,R=v.clientY-x.current.top;h({x:w,y:R})}}return s.useEffect(()=>{const v=w=>{const R=w.target;(m==null?void 0:m.contains(R))&&j(w,D)};return document.addEventListener("wheel",v,{passive:!1}),()=>document.removeEventListener("wheel",v,{passive:!1})},[Y,m,D,j]),s.useEffect(y,[l,y]),E(m,N),E(S.content,N),f.jsx(ve,{scope:r,scrollbar:m,hasThumb:t,onThumbChange:P(n),onThumbPointerUp:P(c),onThumbPositionChange:y,onThumbPointerDown:P(a),children:f.jsx(L.div,{...u,ref:X,style:{position:"absolute",...u.style},onPointerDown:C(e.onPointerDown,v=>{v.button===0&&(v.target.setPointerCapture(v.pointerId),x.current=m.getBoundingClientRect(),_.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",S.viewport&&(S.viewport.style.scrollBehavior="auto"),W(v))}),onPointerMove:C(e.onPointerMove,W),onPointerUp:C(e.onPointerUp,v=>{const w=v.target;w.hasPointerCapture(v.pointerId)&&w.releasePointerCapture(v.pointerId),document.body.style.webkitUserSelect=_.current,S.viewport&&(S.viewport.style.scrollBehavior=""),x.current=null})})})}),H="ScrollAreaThumb",re=s.forwardRef((e,o)=>{const{forceMount:r,...l}=e,t=Z(H,e.__scopeScrollArea);return f.jsx(O,{present:r||t.hasThumb,children:f.jsx(me,{ref:o,...l})})}),me=s.forwardRef((e,o)=>{const{__scopeScrollArea:r,style:l,...t}=e,n=p(H,r),c=Z(H,r),{onThumbPositionChange:a}=c,i=T(o,b=>c.onThumbChange(b)),h=s.useRef(void 0),d=M(()=>{h.current&&(h.current(),h.current=void 0)},100);return s.useEffect(()=>{const b=n.viewport;if(b){const u=()=>{if(d(),!h.current){const S=ge(b,a);h.current=S,a()}};return a(),b.addEventListener("scroll",u),()=>b.removeEventListener("scroll",u)}},[n.viewport,d,a]),f.jsx(L.div,{"data-state":c.hasThumb?"visible":"hidden",...t,ref:i,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...l},onPointerDownCapture:C(e.onPointerDownCapture,b=>{const S=b.target.getBoundingClientRect(),m=b.clientX-S.left,A=b.clientY-S.top;c.onThumbPointerDown({x:m,y:A})}),onPointerUp:C(e.onPointerUp,c.onThumbPointerUp)})});re.displayName=H;var B="ScrollAreaCorner",oe=s.forwardRef((e,o)=>{const r=p(B,e.__scopeScrollArea),l=!!(r.scrollbarX&&r.scrollbarY);return r.type!=="scroll"&&l?f.jsx(pe,{...e,ref:o}):null});oe.displayName=B;var pe=s.forwardRef((e,o)=>{const{__scopeScrollArea:r,...l}=e,t=p(B,r),[n,c]=s.useState(0),[a,i]=s.useState(0),h=!!(n&&a);return E(t.scrollbarX,()=>{var b;const d=((b=t.scrollbarX)==null?void 0:b.offsetHeight)||0;t.onCornerHeightChange(d),i(d)}),E(t.scrollbarY,()=>{var b;const d=((b=t.scrollbarY)==null?void 0:b.offsetWidth)||0;t.onCornerWidthChange(d),c(d)}),h?f.jsx(L.div,{...l,ref:o,style:{width:n,height:a,position:"absolute",right:t.dir==="ltr"?0:void 0,left:t.dir==="rtl"?0:void 0,bottom:0,...e.style}}):null});function z(e){return e?parseInt(e,10):0}function te(e,o){const r=e/o;return isNaN(r)?0:r}function I(e){const o=te(e.viewport,e.content),r=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,l=(e.scrollbar.size-r)*o;return Math.max(l,18)}function we(e,o,r,l="ltr"){const t=I(r),n=t/2,c=o||n,a=t-c,i=r.scrollbar.paddingStart+c,h=r.scrollbar.size-r.scrollbar.paddingEnd-a,d=r.content-r.viewport,b=l==="ltr"?[0,d]:[d*-1,0];return ne([i,h],b)(e)}function k(e,o,r="ltr"){const l=I(o),t=o.scrollbar.paddingStart+o.scrollbar.paddingEnd,n=o.scrollbar.size-t,c=o.content-o.viewport,a=n-l,i=r==="ltr"?[0,c]:[c*-1,0],h=ie(e,i);return ne([0,c],[0,a])(h)}function ne(e,o){return r=>{if(e[0]===e[1]||o[0]===o[1])return o[0];const l=(o[1]-o[0])/(e[1]-e[0]);return o[0]+l*(r-e[0])}}function le(e,o){return e>0&&e<o}var ge=(e,o=()=>{})=>{let r={left:e.scrollLeft,top:e.scrollTop},l=0;return(function t(){const n={left:e.scrollLeft,top:e.scrollTop},c=r.left!==n.left,a=r.top!==n.top;(c||a)&&o(),r=n,l=window.requestAnimationFrame(t)})(),()=>window.cancelAnimationFrame(l)};function M(e,o){const r=P(e),l=s.useRef(0);return s.useEffect(()=>()=>window.clearTimeout(l.current),[]),s.useCallback(()=>{window.clearTimeout(l.current),l.current=window.setTimeout(r,o)},[r,o])}function E(e,o){const r=P(o);ae(()=>{let l=0;if(e){const t=new ResizeObserver(()=>{cancelAnimationFrame(l),l=window.requestAnimationFrame(r)});return t.observe(e),()=>{window.cancelAnimationFrame(l),t.unobserve(e)}}},[e,r])}var xe=q,Pe=K,Ce=oe;function Ae({className:e,children:o,...r}){return f.jsxs(xe,{"data-slot":"scroll-area",className:F("relative",e),...r,children:[f.jsx(Pe,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",children:o}),f.jsx(Re,{}),f.jsx(Ce,{})]})}function Re({className:e,orientation:o="vertical",...r}){return f.jsx(Q,{"data-slot":"scroll-area-scrollbar",orientation:o,className:F("flex touch-none p-px transition-colors select-none",o==="vertical"&&"h-full w-2.5 border-l border-l-transparent",o==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",e),...r,children:f.jsx(re,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}export{Ae as S};
@@ -0,0 +1,6 @@
1
+ import{c as e}from"./index-Coo_PliT.js";/**
2
+ * @license lucide-react v0.400.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const a=e("Send",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]]);export{a as S};
@@ -0,0 +1 @@
1
+ var R=i=>{throw TypeError(i)};var E=(i,t,s)=>t.has(i)||R("Cannot "+s);var e=(i,t,s)=>(E(i,t,"read from private field"),s?s.call(i):t.get(i)),m=(i,t,s)=>t.has(i)?R("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,s),p=(i,t,s,r)=>(E(i,t,"write to private field"),r?r.call(i,s):t.set(i,s),s),y=(i,t,s)=>(E(i,t,"access private method"),s);import{aa as U,ab as k,ac as j,ad as q,ae as P,n as L,r as v,af as A,ag as D}from"./index-Coo_PliT.js";var a,c,o,h,n,C,S,w,I=(w=class extends U{constructor(t,s){super();m(this,n);m(this,a);m(this,c);m(this,o);m(this,h);p(this,a,t),this.setOptions(s),this.bindMethods(),y(this,n,C).call(this)}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(t){var r;const s=this.options;this.options=e(this,a).defaultMutationOptions(t),k(this.options,s)||e(this,a).getMutationCache().notify({type:"observerOptionsUpdated",mutation:e(this,o),observer:this}),s!=null&&s.mutationKey&&this.options.mutationKey&&j(s.mutationKey)!==j(this.options.mutationKey)?this.reset():((r=e(this,o))==null?void 0:r.state.status)==="pending"&&e(this,o).setOptions(this.options)}onUnsubscribe(){var t;this.hasListeners()||(t=e(this,o))==null||t.removeObserver(this)}onMutationUpdate(t){y(this,n,C).call(this),y(this,n,S).call(this,t)}getCurrentResult(){return e(this,c)}reset(){var t;(t=e(this,o))==null||t.removeObserver(this),p(this,o,void 0),y(this,n,C).call(this),y(this,n,S).call(this)}mutate(t,s){var r;return p(this,h,s),(r=e(this,o))==null||r.removeObserver(this),p(this,o,e(this,a).getMutationCache().build(e(this,a),this.options)),e(this,o).addObserver(this),e(this,o).execute(t)}},a=new WeakMap,c=new WeakMap,o=new WeakMap,h=new WeakMap,n=new WeakSet,C=function(){var s;const t=((s=e(this,o))==null?void 0:s.state)??q();p(this,c,{...t,isPending:t.status==="pending",isSuccess:t.status==="success",isError:t.status==="error",isIdle:t.status==="idle",mutate:this.mutate,reset:this.reset})},S=function(t){P.batch(()=>{var s,r,u,f,d,O,x,K;if(e(this,h)&&this.hasListeners()){const b=e(this,c).variables,g=e(this,c).context,M={client:e(this,a),meta:this.options.meta,mutationKey:this.options.mutationKey};if((t==null?void 0:t.type)==="success"){try{(r=(s=e(this,h)).onSuccess)==null||r.call(s,t.data,b,g,M)}catch(l){Promise.reject(l)}try{(f=(u=e(this,h)).onSettled)==null||f.call(u,t.data,null,b,g,M)}catch(l){Promise.reject(l)}}else if((t==null?void 0:t.type)==="error"){try{(O=(d=e(this,h)).onError)==null||O.call(d,t.error,b,g,M)}catch(l){Promise.reject(l)}try{(K=(x=e(this,h)).onSettled)==null||K.call(x,void 0,t.error,b,g,M)}catch(l){Promise.reject(l)}}}this.listeners.forEach(b=>{b(e(this,c))})})},w);function z(i,t){const s=L(),[r]=v.useState(()=>new I(s,i));v.useEffect(()=>{r.setOptions(i)},[r,i]);const u=v.useSyncExternalStore(v.useCallback(d=>r.subscribe(P.batchCalls(d)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),f=v.useCallback((d,O)=>{r.mutate(d,O).catch(A)},[r]);if(u.error&&D(r.options.throwOnError,[u.error]))throw u.error;return{...u,mutate:f,mutateAsync:u.mutate}}export{z as u};
@@ -0,0 +1,11 @@
1
+ import{c as e}from"./index-Coo_PliT.js";/**
2
+ * @license lucide-react v0.400.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const c=e("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/**
7
+ * @license lucide-react v0.400.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const s=e("UserMinus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);export{c as P,s as U};
@@ -0,0 +1,6 @@
1
+ import{c as f}from"./index-Coo_PliT.js";/**
2
+ * @license lucide-react v0.400.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const u=f("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]),g={online:{label:"Online",dot:"bg-emerald-500",variant:"default"},offline:{label:"Offline",dot:"bg-zinc-400 dark:bg-zinc-500",variant:"secondary"},busy:{label:"Busy",dot:"bg-amber-500",variant:"outline"},idle:{label:"Idle",dot:"bg-sky-400",variant:"outline"}};function b(e){const t=Date.now(),n=new Date(e).getTime(),o=t-n;if(o<0)return"just now";const a=Math.floor(o/1e3);if(a<60)return`${a}s ago`;const r=Math.floor(a/60);if(r<60)return`${r}m ago`;const s=Math.floor(r/60);if(s<24)return`${s}h ago`;const i=Math.floor(s/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}function d(e){const t=e.replace(/([a-z])([A-Z])/g,"$1 $2").split(/[\s\-_]+/).filter(Boolean);return t.length===0?"?":t.length===1?t[0].substring(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}const c=["#6366f1","#8b5cf6","#a855f7","#d946ef","#ec4899","#f43f5e","#ef4444","#f97316","#f59e0b","#eab308","#84cc16","#22c55e","#10b981","#14b8a6","#06b6d4","#0ea5e9","#3b82f6","#2563eb"];function y(e){let t=0;for(let n=0;n<e.length;n++)t=e.charCodeAt(n)+((t<<5)-t);return c[Math.abs(t)%c.length]}function p(e,t=32){try{const n=new URL(e),o=n.host+n.pathname;return o.length>t?o.substring(0,t)+"…":o}catch{return e.length>t?e.substring(0,t)+"…":e}}export{u as T,y as a,b as f,d as g,g as s,p as t};