@chenpu17/cc-gw 0.8.4 → 0.8.6

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 (46) hide show
  1. package/package.json +5 -5
  2. package/src/web/dist/assets/{About-C_aKibBC.js → About-DI7ipumV.js} +1 -1
  3. package/src/web/dist/assets/{ApiKeys-DsAyIbwB.js → ApiKeys-p_HrxRk7.js} +1 -1
  4. package/src/web/dist/assets/{ConfirmDialog-z8FIBVOS.js → ConfirmDialog-8iSYQ7NE.js} +1 -1
  5. package/src/web/dist/assets/Dashboard-CjMh6Cr5.js +1 -0
  6. package/src/web/dist/assets/{DialogShell-Cdf4kRdb.js → DialogShell-CygWjkEa.js} +1 -1
  7. package/src/web/dist/assets/EChart-B2VLuu4H.js +1 -0
  8. package/src/web/dist/assets/{Events-D8BFNMmT.js → Events-BtwqpvkH.js} +1 -1
  9. package/src/web/dist/assets/{Help-CLnzpKCo.js → Help-Ch8s4btZ.js} +1 -1
  10. package/src/web/dist/assets/{Login-DaukwolD.js → Login-D8OeR4Ya.js} +1 -1
  11. package/src/web/dist/assets/{Logs-CxWTzBAj.js → Logs-seICabmw.js} +1 -1
  12. package/src/web/dist/assets/ModelManagement-bbVLSR-e.js +1 -0
  13. package/src/web/dist/assets/{PageHeader-bBBkQNPI.js → PageHeader-DKkO-Kdm.js} +1 -1
  14. package/src/web/dist/assets/{PageSection-Bkk2okl7.js → PageSection-D9se25qM.js} +1 -1
  15. package/src/web/dist/assets/{PageState-QEhNwS9Q.js → PageState-DSoiwsKr.js} +1 -1
  16. package/src/web/dist/assets/{Profiler-LHVe6wwO.js → Profiler-Brnhx0iq.js} +1 -1
  17. package/src/web/dist/assets/RoutingManagement-B5xsDNPf.js +1 -0
  18. package/src/web/dist/assets/{Settings-D7qUYpBC.js → Settings-CjMhqGQf.js} +1 -1
  19. package/src/web/dist/assets/{Skeleton-CCQlvfTP.js → Skeleton-C7Qi01SG.js} +1 -1
  20. package/src/web/dist/assets/{badge-dFhP0Qyo.js → badge-CkaH3uCO.js} +1 -1
  21. package/src/web/dist/assets/{card-BeBgk27f.js → card-Bem3kP2L.js} +1 -1
  22. package/src/web/dist/assets/{charts-core-B4zLPEwd.js → charts-core-D_rRW-0W.js} +1 -1
  23. package/src/web/dist/assets/{charts-engine-CmnAuZWT.js → charts-engine-BXnGh0aE.js} +1 -1
  24. package/src/web/dist/assets/{charts-react-C9hy6r5j.js → charts-react-t97X9Vfc.js} +1 -1
  25. package/src/web/dist/assets/{gateway-DWOrDCuI.js → gateway-DrmzHCwu.js} +1 -1
  26. package/src/web/dist/assets/{i18n-DJXLExhE.js → i18n-dgCQR_PB.js} +1 -1
  27. package/src/web/dist/assets/index--7y4K3jp.css +1 -0
  28. package/src/web/dist/assets/index-OvGsIZkZ.js +61 -0
  29. package/src/web/dist/assets/{input-BTCXiXUM.js → input-DCNoHAkn.js} +1 -1
  30. package/src/web/dist/assets/{label-DjpX-mjh.js → label-9kbpUKaR.js} +1 -1
  31. package/src/web/dist/assets/{popover-Brp8rADW.js → popover-BGkrY50i.js} +1 -1
  32. package/src/web/dist/assets/{query-CR1zzqi0.js → query-Db16w3tH.js} +1 -1
  33. package/src/web/dist/assets/{radix-BMe0_WA0.js → radix-D08JKSgz.js} +1 -1
  34. package/src/web/dist/assets/{router-cKa0BaP7.js → router-BURlSZbt.js} +2 -2
  35. package/src/web/dist/assets/{select-C3RskPYc.js → select-DS37xdev.js} +1 -1
  36. package/src/web/dist/assets/{switch-n7tI2AqZ.js → switch-DVok_beq.js} +1 -1
  37. package/src/web/dist/assets/{useApiQuery-olO5q8vr.js → useApiQuery-3ZHohr5l.js} +1 -1
  38. package/src/web/dist/assets/{useAppMutation-BJbRpdNF.js → useAppMutation-C2rsFjm5.js} +1 -1
  39. package/src/web/dist/assets/useModelManagementState-Irif8Gdi.js +1 -0
  40. package/src/web/dist/assets/{vendor-CseyjbPR.js → vendor-DfnQOGOQ.js} +46 -41
  41. package/src/web/dist/index.html +7 -7
  42. package/src/web/dist/assets/Dashboard-DVP7GTtz.js +0 -1
  43. package/src/web/dist/assets/EChart-BlZFJiWb.js +0 -1
  44. package/src/web/dist/assets/ModelManagement-D5SFzd2o.js +0 -1
  45. package/src/web/dist/assets/index-CXBZSNMv.css +0 -1
  46. package/src/web/dist/assets/index-wrD5MdRi.js +0 -61
@@ -5,13 +5,13 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no" />
6
6
  <meta name="format-detection" content="telephone=no" />
7
7
  <title>cc-gw 控制台</title>
8
- <script type="module" crossorigin src="/assets/index-wrD5MdRi.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/vendor-CseyjbPR.js">
10
- <link rel="modulepreload" crossorigin href="/assets/query-CR1zzqi0.js">
11
- <link rel="modulepreload" crossorigin href="/assets/i18n-DJXLExhE.js">
12
- <link rel="modulepreload" crossorigin href="/assets/router-cKa0BaP7.js">
13
- <link rel="modulepreload" crossorigin href="/assets/radix-BMe0_WA0.js">
14
- <link rel="stylesheet" crossorigin href="/assets/index-CXBZSNMv.css">
8
+ <script type="module" crossorigin src="/assets/index-OvGsIZkZ.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/vendor-DfnQOGOQ.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/query-Db16w3tH.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/i18n-dgCQR_PB.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/router-BURlSZbt.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/radix-D08JKSgz.js">
14
+ <link rel="stylesheet" crossorigin href="/assets/index--7y4K3jp.css">
15
15
  </head>
16
16
  <body class="bg-slate-50 text-slate-900 dark:bg-slate-900 dark:text-slate-50">
17
17
  <div id="root"></div>
@@ -1 +0,0 @@
1
- import{r as c,j as e,ab as me,ac as Me,X as Y,ad as he,ae as Ae,af as De,ag as Be,ah as xe,ai as Fe,aj as Oe,S as z,ak as $e,al as _e,V as Ge}from"./vendor-CseyjbPR.js";import{P as He}from"./PageHeader-bBBkQNPI.js";import{P as X,a as Q}from"./PageState-QEhNwS9Q.js";import{c as C,u as ze,a as Qe,b as Ue,t as Ve,s as Ke,B as U}from"./index-wrD5MdRi.js";import{S as Ye,a as Xe,b as Ze,c as Je,d as $}from"./select-C3RskPYc.js";import{E as We}from"./EChart-BlZFJiWb.js";import{P as ue}from"./PageSection-Bkk2okl7.js";import{S as et,C as tt,T as at}from"./Skeleton-CCQlvfTP.js";import{B as E}from"./badge-dFhP0Qyo.js";import{C as B,a as F}from"./card-BeBgk27f.js";import{g as de}from"./utils-BHook6QN.js";import{u as w}from"./i18n-DJXLExhE.js";import{e as st}from"./charts-core-B4zLPEwd.js";import{u as L}from"./useApiQuery-olO5q8vr.js";import{q as I}from"./queryKeys-BMvyDTQS.js";import"./query-CR1zzqi0.js";import"./router-cKa0BaP7.js";import"./radix-BMe0_WA0.js";import"./charts-react-C9hy6r5j.js";import"./charts-engine-CmnAuZWT.js";const Z=c.forwardRef(({className:t,...a},s)=>e.jsx("div",{className:"relative w-full overflow-auto rounded-lg border border-border bg-background",children:e.jsx("table",{ref:s,className:C("w-full caption-bottom border-collapse text-sm",t),...a})}));Z.displayName="Table";const J=c.forwardRef(({className:t,...a},s)=>e.jsx("thead",{ref:s,className:C("bg-muted/35 [&_tr]:border-b [&_tr]:border-border/60",t),...a}));J.displayName="TableHeader";const W=c.forwardRef(({className:t,...a},s)=>e.jsx("tbody",{ref:s,className:C("[&_tr:last-child]:border-0",t),...a}));W.displayName="TableBody";const rt=c.forwardRef(({className:t,...a},s)=>e.jsx("tfoot",{ref:s,className:C("border-t bg-muted/45 font-medium [&>tr]:last:border-b-0",t),...a}));rt.displayName="TableFooter";const O=c.forwardRef(({className:t,...a},s)=>e.jsx("tr",{ref:s,className:C("border-b border-border/50 transition-all duration-150","hover:bg-primary/5 data-[state=selected]:bg-primary/10","group",t),...a}));O.displayName="TableRow";const b=c.forwardRef(({className:t,...a},s)=>e.jsx("th",{ref:s,className:C("h-12 px-4 text-left align-middle text-[11px] font-semibold uppercase tracking-[0.14em] text-muted-foreground/80","[&:has([role=checkbox])]:pr-0",t),...a}));b.displayName="TableHead";const g=c.forwardRef(({className:t,...a},s)=>e.jsx("td",{ref:s,className:C("px-4 py-3.5 align-middle text-sm","[&:has([role=checkbox])]:pr-0","group-hover:text-foreground transition-colors",t),...a}));g.displayName="TableCell";const ot=c.forwardRef(({className:t,...a},s)=>e.jsx("caption",{ref:s,className:C("mt-4 text-sm text-muted-foreground",t),...a}));ot.displayName="TableCaption";const _=15e3,V=6e4,S={requests:"#2563eb",input:"#059669",output:"#ea580c",cacheRead:"#7c3aed",cacheCreation:"#e11d48",latency:"#0891b2"};function D(t,a,s){return t==null?"-":`${t.toLocaleString(void 0,s)} ${a}`}function K(t){if(t==null)return"-";if(t<1024)return`${t} B`;const a=["KB","MB","GB","TB"];let s=t/1024,r=0;for(;s>=1024&&r<a.length-1;)s/=1024,r+=1;return`${s.toFixed(s>=100?0:s>=10?1:2)} ${a[r]}`}function ce(t){if(t==null)return"-";const a=t<1?0:t;return a<1024?`${a.toLocaleString(void 0,{maximumFractionDigits:a>=100?0:a>=10?1:2})} B/s`:`${K(a)}/s`}function nt(t){return t==null?"-":`${t.toLocaleString(void 0,{maximumFractionDigits:t>=10?0:1})}%`}function it(){return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-3",children:Array.from({length:6}).map((t,a)=>e.jsx(et,{},a))}),e.jsx("div",{className:"grid gap-6 lg:grid-cols-2",children:Array.from({length:4}).map((t,a)=>e.jsx(tt,{},a))}),e.jsx("div",{className:"rounded-lg border border-border",children:e.jsx("table",{className:"w-full",children:e.jsx("tbody",{children:Array.from({length:5}).map((t,a)=>e.jsx(at,{columns:6},a))})})})]})}function lt({dbSizeDisplay:t,memoryDisplay:a,selectedEndpointLabel:s,status:r,todayRequests:d}){const{t:i}=w();return e.jsxs("div",{className:"grid gap-4 xl:grid-cols-[minmax(0,1.4fr)_minmax(320px,0.9fr)]",children:[e.jsx(B,{children:e.jsx(F,{className:"pt-6",children:e.jsxs("div",{className:"flex flex-col gap-6 lg:flex-row lg:items-end lg:justify-between",children:[e.jsxs("div",{className:"max-w-2xl space-y-3",children:[e.jsxs("div",{className:"inline-flex items-center gap-1.5 rounded-full border border-primary/20 bg-accent px-3 py-1 text-xs font-semibold text-primary",children:[e.jsx(me,{className:"h-3.5 w-3.5","aria-hidden":"true"}),"Live Gateway"]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:s}),e.jsx("p",{className:"max-w-xl text-sm text-muted-foreground",children:i("dashboard.description")})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(E,{variant:"outline",className:"border-[hsl(var(--success)/0.3)] bg-[hsl(var(--success-bg))] text-[hsl(var(--success)/1)]",children:i("dashboard.status.listeningLabel")}),e.jsx(E,{variant:"secondary",children:s}),e.jsxs(E,{variant:"outline",children:[i("dashboard.labels.todayRequests"),": ",d.toLocaleString()]})]})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3 lg:min-w-[420px] lg:flex-1",children:[e.jsx(k,{icon:e.jsx(Me,{className:"h-4 w-4","aria-hidden":"true"}),label:i("dashboard.labels.activeRequests"),value:((r==null?void 0:r.activeRequests)??0).toLocaleString()}),e.jsx(k,{icon:e.jsx(Y,{className:"h-4 w-4","aria-hidden":"true"}),label:i("dashboard.labels.requestsPerMinute"),value:((r==null?void 0:r.requestsPerMinute)??0).toLocaleString()}),e.jsx(k,{icon:e.jsx(he,{className:"h-4 w-4","aria-hidden":"true"}),label:i("dashboard.labels.outputTokensPerMinute"),value:((r==null?void 0:r.outputTokensPerMinute)??0).toLocaleString()}),e.jsx(k,{icon:e.jsx(Ae,{className:"h-4 w-4","aria-hidden":"true"}),label:i("dashboard.labels.cpu"),value:nt(r==null?void 0:r.cpuUsagePercent)}),e.jsx(k,{icon:e.jsx(De,{className:"h-4 w-4","aria-hidden":"true"}),label:i("dashboard.labels.networkIngress"),value:ce(r==null?void 0:r.networkIngressBytesPerSecond)}),e.jsx(k,{icon:e.jsx(Be,{className:"h-4 w-4","aria-hidden":"true"}),label:i("dashboard.labels.networkEgress"),value:ce(r==null?void 0:r.networkEgressBytesPerSecond)}),e.jsx(k,{icon:e.jsx(xe,{className:"h-4 w-4","aria-hidden":"true"}),label:i("dashboard.labels.database"),value:t}),e.jsx(k,{icon:e.jsx(Fe,{className:"h-4 w-4","aria-hidden":"true"}),label:i("dashboard.labels.memory"),value:a})]})]})})}),e.jsx(B,{children:e.jsx(F,{className:"pt-6",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Gateway runtime"}),e.jsxs("p",{className:"mt-1.5 text-xl font-semibold text-foreground",children:[(r==null?void 0:r.host)??"0.0.0.0",":",(r==null?void 0:r.port)??"-"]})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[e.jsx(A,{label:i("dashboard.labels.providers"),value:((r==null?void 0:r.providers)??0).toLocaleString()}),e.jsx(A,{label:i("dashboard.labels.activeClientAddresses"),value:((r==null?void 0:r.activeClientAddresses)??0).toLocaleString()}),e.jsx(A,{label:i("dashboard.labels.activeClientSessions"),value:((r==null?void 0:r.activeClientSessions)??0).toLocaleString()}),e.jsx(A,{label:i("dashboard.labels.uniqueClientAddressesLastHour"),value:((r==null?void 0:r.uniqueClientAddressesLastHour)??0).toLocaleString()}),e.jsx(A,{label:i("dashboard.labels.uniqueClientSessionsLastHour"),value:((r==null?void 0:r.uniqueClientSessionsLastHour)??0).toLocaleString()})]})]})})})]})}function dt({overview:t}){const{t:a}=w();return e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-3",children:[e.jsx(q,{icon:e.jsx(Y,{className:"h-5 w-5"}),title:a("dashboard.cards.todayRequests"),value:(t==null?void 0:t.today.requests)??0,suffix:a("common.units.request"),iconClass:"bg-blue-50 text-blue-600 dark:bg-blue-950 dark:text-blue-400"}),e.jsx(q,{icon:e.jsx(Oe,{className:"h-5 w-5"}),title:a("dashboard.cards.todayInput"),value:(t==null?void 0:t.today.inputTokens)??0,suffix:a("common.units.token"),iconClass:"bg-emerald-50 text-emerald-600 dark:bg-emerald-950 dark:text-emerald-400"}),e.jsx(q,{icon:e.jsx(he,{className:"h-5 w-5"}),title:a("dashboard.cards.todayCacheRead"),value:(t==null?void 0:t.today.cacheReadTokens)??0,suffix:a("common.units.token"),iconClass:"bg-violet-50 text-violet-600 dark:bg-violet-950 dark:text-violet-400"}),e.jsx(q,{icon:e.jsx(me,{className:"h-5 w-5"}),title:a("dashboard.cards.todayCacheCreation"),value:(t==null?void 0:t.today.cacheCreationTokens)??0,suffix:a("common.units.token"),iconClass:"bg-rose-50 text-rose-600 dark:bg-rose-950 dark:text-rose-400"}),e.jsx(q,{icon:e.jsx(z,{className:"h-5 w-5"}),title:a("dashboard.cards.todayOutput"),value:(t==null?void 0:t.today.outputTokens)??0,suffix:a("common.units.token"),iconClass:"bg-amber-50 text-amber-600 dark:bg-amber-950 dark:text-amber-400"}),e.jsx(q,{icon:e.jsx($e,{className:"h-5 w-5"}),title:a("dashboard.cards.avgLatency"),value:(t==null?void 0:t.today.avgLatencyMs)??0,suffix:a("common.units.ms"),iconClass:"bg-cyan-50 text-cyan-600 dark:bg-cyan-950 dark:text-cyan-400"})]})}function ct({busiestDay:t,fastestTtftModel:a,topModel:s,totalRequestsInRange:r}){const{t:d}=w();return e.jsxs("div",{className:"grid gap-4 lg:grid-cols-4",children:[e.jsx(G,{label:d("dashboard.insights.totalRequests"),value:r.toLocaleString(),hint:d("dashboard.insights.totalRequestsHint")}),e.jsx(G,{label:d("dashboard.insights.busiestDay"),value:t?t.date:"-",hint:t?d("dashboard.insights.busiestDayHint",{value:t.requestCount.toLocaleString()}):d("common.noData")}),e.jsx(G,{label:d("dashboard.insights.topModel"),value:s?`${s.provider}/${s.model}`:"-",hint:s?d("dashboard.insights.topModelHint",{value:s.requests.toLocaleString()}):d("common.noData")}),e.jsx(G,{label:d("dashboard.insights.fastestTtft"),value:a?`${a.provider}/${a.model}`:"-",hint:a?D(a.avgTtftMs,d("common.units.ms")):d("common.noData")})]})}function mt({dailyEmpty:t,dailyOption:a,dailyPending:s,models:r,modelRequestsOption:d,modelUsagePending:i,ttftOption:m,tpotOption:o}){const{t:l}=w();return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[e.jsx(H,{title:l("dashboard.charts.requestsTitle"),description:l("dashboard.charts.requestsDesc"),loading:s,option:a,empty:t,emptyText:l("dashboard.charts.empty")}),e.jsx(H,{title:l("dashboard.charts.modelTitle"),description:l("dashboard.charts.modelDesc"),loading:i,option:d,empty:!r.length,emptyText:l("dashboard.charts.empty")})]}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[e.jsx(H,{title:l("dashboard.charts.ttftTitle"),description:l("dashboard.charts.ttftDesc"),loading:i,option:m,empty:!r.some(h=>h.avgTtftMs!=null&&h.avgTtftMs>0),emptyText:l("dashboard.charts.ttftEmpty")}),e.jsx(H,{title:l("dashboard.charts.tpotTitle"),description:l("dashboard.charts.tpotDesc"),loading:i,option:o,empty:!r.some(h=>h.avgTpotMs!=null&&h.avgTpotMs>0),emptyText:l("dashboard.charts.tpotEmpty")})]})]})}function ht({models:t,loading:a}){const{t:s}=w();return e.jsx(ue,{title:s("dashboard.modelTable.title"),description:s("dashboard.modelTable.description"),children:a?e.jsx(X,{compact:!0,label:s("common.loadingShort")}):t.length===0?e.jsx(Q,{compact:!0,icon:e.jsx(z,{className:"h-5 w-5","aria-hidden":"true"}),title:s("dashboard.modelTable.empty")}):e.jsx("div",{className:"overflow-auto rounded-lg border border-border",children:e.jsxs(Z,{children:[e.jsx(J,{children:e.jsxs(O,{children:[e.jsx(b,{children:s("dashboard.modelTable.columns.model")}),e.jsx(b,{className:"text-right",children:s("dashboard.modelTable.columns.requests")}),e.jsx(b,{className:"text-right",children:s("dashboard.modelTable.columns.latency")}),e.jsx(b,{className:"text-right",children:s("dashboard.modelTable.columns.ttft")}),e.jsx(b,{className:"text-right",children:s("dashboard.modelTable.columns.tpot")})]})}),e.jsx(W,{children:t.map(r=>e.jsxs(O,{children:[e.jsx(g,{children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium",children:r.provider}),e.jsx("span",{className:"text-xs text-muted-foreground",children:r.model})]})}),e.jsx(g,{className:"text-right font-medium",children:r.requests.toLocaleString()}),e.jsx(g,{className:"text-right",children:D(r.avgLatencyMs,s("common.units.ms"))}),e.jsx(g,{className:"text-right",children:D(r.avgTtftMs,s("common.units.ms"))}),e.jsx(g,{className:"text-right",children:D(r.avgTpotMs,s("common.units.msPerToken"),{maximumFractionDigits:2})})]},`${r.provider}/${r.model}`))})]})})})}function xt({records:t,loading:a}){const{t:s}=w(),r=t.map(o=>de(o,s)),d=r.filter(o=>o.tone==="success").length,i=r.filter(o=>o.tone==="error").length,m=r.filter(o=>o.tone==="pending").length;return e.jsx(ue,{title:s("dashboard.recent.title"),description:s("dashboard.recent.subtitle",{count:5}),actions:t.length>0?e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(E,{variant:"secondary",children:t.length}),e.jsxs(E,{variant:"outline",className:"border-[hsl(var(--success)/0.3)] bg-[hsl(var(--success-bg))] text-[hsl(var(--success)/1)]",children:[s("common.status.success"),": ",d]}),e.jsxs(E,{variant:"outline",className:"border-destructive/30 bg-destructive/10 text-destructive",children:[s("common.status.error"),": ",i]}),m>0?e.jsxs(E,{variant:"outline",className:"border-amber-300/60 bg-amber-50 text-amber-700 dark:border-amber-900 dark:bg-amber-950/60 dark:text-amber-300",children:[s("common.status.pending"),": ",m]}):null]}):null,children:a?e.jsx(X,{compact:!0,label:s("dashboard.recent.loading")}):t.length===0?e.jsx(Q,{compact:!0,icon:e.jsx(Y,{className:"h-5 w-5","aria-hidden":"true"}),title:s("dashboard.recent.empty")}):e.jsx("div",{className:"overflow-auto rounded-lg border border-border",children:e.jsxs(Z,{children:[e.jsx(J,{children:e.jsxs(O,{children:[e.jsx(b,{children:s("dashboard.recent.columns.time")}),e.jsx(b,{children:s("dashboard.recent.columns.endpoint")}),e.jsx(b,{children:s("dashboard.recent.columns.provider")}),e.jsx(b,{children:s("dashboard.recent.columns.route")}),e.jsx(b,{className:"text-right",children:s("dashboard.recent.columns.latency")}),e.jsx(b,{children:s("dashboard.recent.columns.status")})]})}),e.jsx(W,{children:t.map(o=>{const l=de(o,s);return e.jsxs(O,{children:[e.jsx(g,{children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"text-xs font-medium",children:new Date(o.timestamp).toLocaleString()}),e.jsxs("span",{className:"text-[11px] text-muted-foreground",children:["#",o.id]})]})}),e.jsx(g,{children:e.jsx(E,{variant:"outline",className:"text-[11px]",children:o.endpoint==="anthropic"?s("logs.endpointAnthropic"):o.endpoint==="openai"?s("logs.endpointOpenAI"):o.endpoint})}),e.jsx(g,{children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium",children:o.provider}),e.jsx("span",{className:"text-[11px] text-muted-foreground",children:o.stream?"stream":"sync"})]})}),e.jsx(g,{children:e.jsxs("div",{className:"flex flex-col gap-1 text-xs",children:[e.jsxs("div",{className:"flex items-center gap-1 text-muted-foreground",children:[e.jsx("span",{children:o.client_model??s("dashboard.recent.routePlaceholder")}),e.jsx("span",{children:"->"}),e.jsx("span",{className:"font-medium text-foreground",children:o.model})]}),o.error?e.jsx("span",{className:"truncate text-destructive",children:o.error}):null]})}),e.jsx(g,{className:"text-right font-medium",children:D(o.latency_ms,s("common.units.ms"))}),e.jsx(g,{children:e.jsx(E,{variant:l.variant,className:"min-w-14 justify-center",children:l.label})})]},o.id)})})]})})})}function k({icon:t,label:a,value:s}){return e.jsxs("div",{className:"rounded-lg border border-border bg-secondary px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx("span",{className:"flex h-6 w-6 items-center justify-center rounded-md bg-primary/10 text-primary",children:t}),a]}),e.jsx("p",{className:"mt-2 text-lg font-semibold text-foreground",children:s})]})}function A({label:t,value:a}){return e.jsxs("div",{className:"rounded-lg border border-border bg-secondary px-3 py-2.5",children:[e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t}),e.jsx("p",{className:"mt-1 text-sm font-semibold text-foreground",children:a})]})}function q({icon:t,iconClass:a,suffix:s,title:r,value:d}){return e.jsx(B,{children:e.jsxs(F,{className:"pt-5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:r}),t?e.jsx("div",{className:C("flex h-9 w-9 items-center justify-center rounded-lg",a),children:t}):null]}),e.jsxs("p",{className:"mt-3 text-2xl font-bold text-foreground",children:[d.toLocaleString(),s?e.jsx("span",{className:"ml-1.5 text-sm font-normal text-muted-foreground",children:s}):null]})]})})}function G({label:t,value:a,hint:s}){return e.jsx(B,{children:e.jsxs(F,{className:"pt-4",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-wider text-muted-foreground",children:t}),e.jsx("p",{className:"mt-2 line-clamp-1 text-sm font-semibold text-foreground",children:a}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:s})]})})}function H({description:t,empty:a,emptyText:s,loading:r,option:d,title:i}){const{t:m}=w();return e.jsx(B,{children:e.jsxs(F,{className:"space-y-4 pt-5",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold",children:i}),e.jsx("p",{className:"mt-0.5 text-xs text-muted-foreground",children:t})]}),r?e.jsx(X,{compact:!0,className:"min-h-[320px]",label:m("common.loadingShort")}):a?e.jsx(Q,{compact:!0,className:"min-h-[320px]",icon:e.jsx(z,{className:"h-5 w-5","aria-hidden":"true"}),title:s??m("dashboard.charts.empty")}):e.jsx(We,{echarts:st,option:d,className:"h-[40vh] min-h-[280px] max-h-[420px]",notMerge:!0,lazyUpdate:!0})]})})}function ut(){var ee,te,ae,se,re,oe,ne,ie;const{t}=w(),{pushToast:a}=ze(),[s,r]=Qe(Ke.dashboard.endpointFilter,"all"),[d,i]=c.useState(!1),m=s==="all"?void 0:s,o=L(I.customEndpoints.all(),{url:"/api/custom-endpoints",method:"GET"},{refetchInterval:V,refetchIntervalInBackground:!0}),l=L(I.stats.overview(s),{url:"/api/stats/overview",method:"GET",params:m?{endpoint:m}:void 0},{refetchInterval:_,refetchIntervalInBackground:!0}),h=L(I.stats.daily(14,s),{url:"/api/stats/daily",method:"GET",params:{days:14,...m?{endpoint:m}:{}}},{refetchInterval:V,refetchIntervalInBackground:!0}),N=L(I.stats.model(7,6,s),{url:"/api/stats/model",method:"GET",params:{days:7,limit:6,...m?{endpoint:m}:{}}},{refetchInterval:V,refetchIntervalInBackground:!0}),f=L(I.status.byEndpoint(s),{url:"/api/status",method:"GET",params:m?{endpoint:m}:void 0},{refetchInterval:_,refetchIntervalInBackground:!0}),p=L(I.db.info(),{url:"/api/db/info",method:"GET"},{refetchInterval:_,refetchIntervalInBackground:!0}),v=L(I.logs.recent(s),{url:"/api/logs",method:"GET",params:{limit:5,...m?{endpoint:m}:{}}},{refetchInterval:_,refetchIntervalInBackground:!0});c.useEffect(()=>{l.isError&&l.error&&a({title:t("dashboard.toast.overviewError"),description:l.error.message,variant:"error"})},[l.error,l.isError,a,t]),c.useEffect(()=>{h.isError&&h.error&&a({title:t("dashboard.toast.dailyError"),description:h.error.message,variant:"error"})},[h.error,h.isError,a,t]),c.useEffect(()=>{N.isError&&N.error&&a({title:t("dashboard.toast.modelError"),description:N.error.message,variant:"error"})},[N.error,N.isError,a,t]),c.useEffect(()=>{f.isError&&f.error&&a({title:t("dashboard.toast.statusError"),description:f.error.message,variant:"error"})},[f.error,f.isError,a,t]),c.useEffect(()=>{p.isError&&p.error&&a({title:t("dashboard.toast.dbError"),description:p.error.message,variant:"error"})},[p.error,p.isError,a,t]),c.useEffect(()=>{v.isError&&v.error&&a({title:t("dashboard.toast.recentError"),description:v.error.message,variant:"error"})},[v.error,v.isError,a,t]);const pe=c.useCallback(async()=>{await Promise.all([o.refetch(),l.refetch(),h.refetch(),N.refetch(),f.refetch(),p.refetch(),v.refetch()])},[o,p,h,v,N,l,f]),be=c.useCallback(async()=>{if(!d){i(!0);try{await Ue.post("/api/db/compact"),await p.refetch(),a({title:t("dashboard.toast.compactSuccess.title"),description:t("dashboard.toast.compactSuccess.desc"),variant:"success"})}catch(n){const x=Ve(n);a({title:t("dashboard.toast.compactError.title"),description:x.message,variant:"error"})}finally{i(!1)}}},[d,p,a,t]),ge=l.data,T=h.data??[],u=N.data??[],fe=f.data,R=p.data,je=((ee=v.data)==null?void 0:ee.items)??[],ye=s==="all"?t("dashboard.filters.endpointAll"):s==="anthropic"?t("dashboard.filters.endpointAnthropic"):s==="openai"?t("dashboard.filters.endpointOpenAI"):((se=(ae=(te=o.data)==null?void 0:te.endpoints)==null?void 0:ae.find(n=>n.id===s))==null?void 0:se.label)||s,Ne=T.reduce((n,x)=>n+x.requestCount,0),ve=T.reduce((n,x)=>!n||x.requestCount>n.requestCount?x:n,null),Te=u[0],Se=u.filter(n=>n.avgTtftMs!=null&&n.avgTtftMs>0).sort((n,x)=>(n.avgTtftMs??Number.POSITIVE_INFINITY)-(x.avgTtftMs??Number.POSITIVE_INFINITY))[0],Ce=o.isFetching||l.isFetching||h.isFetching||N.isFetching||f.isFetching||p.isFetching||v.isFetching,Ee=l.isPending||f.isPending||p.isPending,we=((re=l.error)==null?void 0:re.message)??((oe=f.error)==null?void 0:oe.message)??((ne=p.error)==null?void 0:ne.message)??null,ke=R?K(R.totalBytes??R.sizeBytes):"-",Re=K(R==null?void 0:R.memoryRssBytes),Le=c.useMemo(()=>{const n=T.map(y=>y.date),x=t("dashboard.charts.barRequests"),P=t("dashboard.charts.lineInput"),M=t("dashboard.charts.lineOutput"),j=t("dashboard.charts.lineCacheRead"),le=t("dashboard.charts.lineCacheCreation");return{tooltip:{trigger:"axis"},legend:{data:[x,P,M,j,le]},grid:{left:56,right:28,top:56,bottom:54},xAxis:{type:"category",data:n},yAxis:{type:"value"},series:[{name:x,type:"bar",data:T.map(y=>y.requestCount),itemStyle:{color:S.requests,borderRadius:[6,6,0,0]}},{name:P,type:"line",smooth:!0,data:T.map(y=>y.inputTokens),itemStyle:{color:S.input},lineStyle:{width:2}},{name:M,type:"line",smooth:!0,data:T.map(y=>y.outputTokens),itemStyle:{color:S.output},lineStyle:{width:2}},{name:j,type:"line",smooth:!0,data:T.map(y=>y.cacheReadTokens),itemStyle:{color:S.cacheRead},lineStyle:{width:2}},{name:le,type:"line",smooth:!0,data:T.map(y=>y.cacheCreationTokens),itemStyle:{color:S.cacheCreation},lineStyle:{width:2}}]}},[T,t]),Ie=c.useMemo(()=>{const n=u.map(j=>`${j.provider}/${j.model}`),x=t("dashboard.charts.barRequests"),P=t("dashboard.charts.lineInput"),M=t("dashboard.charts.lineOutput");return{tooltip:{trigger:"axis"},legend:{data:[x,P,M]},grid:{left:72,right:52,top:56,bottom:96},xAxis:{type:"category",data:n,axisLabel:{rotate:28}},yAxis:[{type:"value",name:x},{type:"value",name:t("dashboard.charts.axisTokens"),position:"right"}],series:[{name:x,type:"bar",data:u.map(j=>j.requests),itemStyle:{color:S.requests,borderRadius:[6,6,0,0]}},{name:P,type:"line",yAxisIndex:1,smooth:!0,data:u.map(j=>j.inputTokens??0),itemStyle:{color:S.input}},{name:M,type:"line",yAxisIndex:1,smooth:!0,data:u.map(j=>j.outputTokens??0),itemStyle:{color:S.output}}]}},[u,t]),qe=c.useMemo(()=>({tooltip:{trigger:"axis"},grid:{left:72,right:40,top:56,bottom:96},xAxis:{type:"category",data:u.map(n=>`${n.provider}/${n.model}`),axisLabel:{rotate:28}},yAxis:{type:"value",name:t("dashboard.charts.ttftAxis")},series:[{name:t("dashboard.charts.ttftLabel"),type:"bar",data:u.map(n=>n.avgTtftMs??0),itemStyle:{color:S.latency,borderRadius:[6,6,0,0]}}]}),[u,t]),Pe=c.useMemo(()=>({tooltip:{trigger:"axis"},grid:{left:72,right:40,top:56,bottom:96},xAxis:{type:"category",data:u.map(n=>`${n.provider}/${n.model}`),axisLabel:{rotate:28}},yAxis:{type:"value",name:t("dashboard.charts.tpotAxis")},series:[{name:t("dashboard.charts.tpotLabel"),type:"bar",data:u.map(n=>n.avgTpotMs??0),itemStyle:{color:S.output,borderRadius:[6,6,0,0]}}]}),[u,t]);return{compacting:d,customEndpoints:((ie=o.data)==null?void 0:ie.endpoints)??[],daily:T,dailyOption:Le,dailyPending:h.isPending,dbInfo:R,dbSizeDisplay:ke,endpointFilter:s,fastestTtftModel:Se,handleCompact:be,handleRefresh:pe,bootstrapError:we,isBootstrapping:Ee,isRefreshing:Ce,latestLogsPending:v.isPending,memoryDisplay:Re,modelRequestsOption:Ie,modelUsagePending:N.isPending,models:u,overview:ge,recentLogs:je,selectedEndpointLabel:ye,setEndpointFilter:r,status:fe,topModel:Te,totalRequestsInRange:Ne,busiestDay:ve,ttftOption:qe,tpotOption:Pe}}function At(){var s;const{t}=w(),a=ut();return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(He,{icon:e.jsx(z,{className:"h-5 w-5","aria-hidden":"true"}),title:t("nav.dashboard"),description:t("dashboard.description"),badge:a.selectedEndpointLabel,eyebrow:"Operations",breadcrumb:"Gateway / Dashboard",helper:t("dashboard.charts.requestsDesc"),actions:e.jsxs("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:flex-wrap sm:items-center sm:justify-end",children:[e.jsxs("div",{className:"rounded-lg border border-border bg-secondary px-3 py-2 text-xs text-muted-foreground",children:[t("dashboard.filters.endpoint")," · ",a.selectedEndpointLabel]}),e.jsxs(Ye,{value:a.endpointFilter,onValueChange:a.setEndpointFilter,children:[e.jsx(Xe,{className:"w-full sm:w-[168px]",children:e.jsx(Ze,{})}),e.jsxs(Je,{children:[e.jsx($,{value:"all",children:t("dashboard.filters.endpointAll")}),e.jsx($,{value:"anthropic",children:t("dashboard.filters.endpointAnthropic")}),e.jsx($,{value:"openai",children:t("dashboard.filters.endpointOpenAI")}),a.customEndpoints.map(r=>e.jsx($,{value:r.id,children:r.label||r.id},r.id))]})]}),e.jsxs(U,{variant:"outline",size:"sm",onClick:()=>void a.handleRefresh(),disabled:a.isRefreshing,className:"w-full sm:w-auto",children:[e.jsx(_e,{className:C("mr-2 h-4 w-4",a.isRefreshing&&"animate-spin"),"aria-hidden":"true"}),a.isRefreshing?t("common.actions.refreshing"):t("common.actions.refresh")]}),e.jsxs(U,{variant:"outline",size:"sm",onClick:()=>void a.handleCompact(),disabled:a.compacting,className:"w-full sm:w-auto",children:[e.jsx(xe,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),a.compacting?t("dashboard.actions.compacting"):t("dashboard.actions.compact")]})]})}),a.isBootstrapping?e.jsx(it,{}):a.bootstrapError?e.jsx(Q,{icon:e.jsx(Ge,{className:"h-5 w-5","aria-hidden":"true"}),tone:"danger",title:t("common.status.error"),description:a.bootstrapError,action:e.jsx(U,{variant:"outline",onClick:()=>void a.handleRefresh(),children:t("common.actions.refresh")})}):e.jsxs(e.Fragment,{children:[e.jsx(lt,{dbSizeDisplay:a.dbSizeDisplay,memoryDisplay:a.memoryDisplay,selectedEndpointLabel:a.selectedEndpointLabel,status:a.status,todayRequests:((s=a.overview)==null?void 0:s.today.requests)??0}),e.jsx(dt,{overview:a.overview}),e.jsx(ct,{busiestDay:a.busiestDay,fastestTtftModel:a.fastestTtftModel,topModel:a.topModel,totalRequestsInRange:a.totalRequestsInRange}),e.jsx(mt,{dailyEmpty:!a.daily.length,dailyOption:a.dailyOption,dailyPending:a.dailyPending,models:a.models,modelRequestsOption:a.modelRequestsOption,modelUsagePending:a.modelUsagePending,ttftOption:a.ttftOption,tpotOption:a.tpotOption}),e.jsx(ht,{models:a.models,loading:a.modelUsagePending}),e.jsx(xt,{records:a.recentLogs,loading:a.latestLogsPending})]})]})}export{At as default};
@@ -1 +0,0 @@
1
- import{_ as a}from"./charts-react-C9hy6r5j.js";import{u as s,i as l,a as t,b as i,c as n,d as o,f as r,g as $}from"./charts-core-B4zLPEwd.js";s([l,t,i,n,o,r,$]);const e=a;export{e as E};
@@ -1 +0,0 @@
1
- import{r as y,j as e,a8 as Re,au as xt,av as Me,q as fs,a1 as ht,al as bs,an as vs,U as js}from"./vendor-CseyjbPR.js";import{C as ys}from"./ConfirmDialog-z8FIBVOS.js";import{P as Ns}from"./PageHeader-bBBkQNPI.js";import{c as ne,B as F,d as De,T as ws,e as Ms,f as ks,g as Cs,h as Ae,b as Ue,u as Es,t as dt}from"./index-wrD5MdRi.js";import{u as ee}from"./i18n-DJXLExhE.js";import{u as He}from"./useAppMutation-BJbRpdNF.js";import{I as fe}from"./input-BTCXiXUM.js";import{L as Y}from"./label-DjpX-mjh.js";import{S as gt,a as ft,b as bt,c as vt,d as xe}from"./select-C3RskPYc.js";import{S as Ge}from"./switch-n7tI2AqZ.js";import{q as ge}from"./queryKeys-BMvyDTQS.js";import{B as H}from"./badge-dFhP0Qyo.js";import{C as Ie,a as Ke}from"./card-BeBgk27f.js";import{D as jt,A as yt,a as Nt,b as wt,c as Mt,d as kt,e as Ct}from"./DialogShell-Cdf4kRdb.js";import{P as Ss,a as Ps,b as Ds}from"./popover-Brp8rADW.js";import{u as Rs,a as Ts}from"./query-CR1zzqi0.js";import{g as we}from"./gateway-DWOrDCuI.js";import{u as Os}from"./useApiQuery-olO5q8vr.js";import"./router-cKa0BaP7.js";import"./radix-BMe0_WA0.js";function Xe(){return typeof globalThis.crypto<"u"&&typeof globalThis.crypto.randomUUID=="function"?globalThis.crypto.randomUUID():Math.random().toString(36).slice(2,10)}function As(){return{_key:Xe(),id:"",label:""}}const $e={openai:{baseUrl:"https://api.openai.com/v1"},deepseek:{baseUrl:"https://api.deepseek.com/v1"},huawei:{baseUrl:"https://api.modelarts-maas.com/v1"},kimi:{baseUrl:"https://api.moonshot.cn/v1"},anthropic:{baseUrl:"https://api.anthropic.com/v1"},custom:{}},lt=[{value:"openai",label:"OpenAI"},{value:"deepseek",label:"DeepSeek"},{value:"huawei",label:"Huawei Cloud"},{value:"kimi",label:"Kimi"},{value:"anthropic",label:"Anthropic"},{value:"custom",label:"Custom"}];function ze(s){return s==="anthropic"?"authToken":"apiKey"}function it(s){return s?{id:s.id,label:s.label??s.id,baseUrl:s.baseUrl,apiKey:s.apiKey??"",type:s.type??"custom",defaultModel:s.defaultModel??"",models:(s.models??[]).map(t=>({...t,_key:Xe()})),authMode:s.authMode??ze(s.type??"custom")}:{id:"",label:"",baseUrl:"",apiKey:"",type:"custom",defaultModel:"",models:[],authMode:ze("custom")}}function Us(s){return{_key:Xe(),id:s.id,label:s.label}}function $s({open:s,mode:t,provider:c,existingProviderIds:h,onClose:d,onSubmit:x}){const{t:a}=ee(),[n,m]=y.useState(()=>it(c)),[u,g]=y.useState({}),[B,k]=y.useState(!1),[M,C]=y.useState(null),v=y.useRef(null),f=y.useRef(null),b=y.useRef(null),[T,E]=y.useState(t==="edit");y.useEffect(()=>{s&&(m(it(c)),g({}),C(null),k(!1),E(t==="edit"))},[s,c,t]),y.useEffect(()=>{if(!s)return;const l=w=>{w.key==="Escape"&&d()};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[s,d]),y.useEffect(()=>{if(s){if(t==="create"&&b.current){b.current.focus();return}f.current&&f.current.focus()}},[s,t]);const X=t==="create",te=y.useMemo(()=>n.models.filter(l=>l.id.trim().length>0),[n.models]),le=y.useMemo(()=>{var l;return((l=lt.find(w=>w.value===n.type))==null?void 0:l.label)??"Custom"},[n.type]),J=(l,w)=>a(w==="authToken"?"providers.drawer.fields.authModeAuthToken":w==="xAuthToken"?"providers.drawer.fields.authModeXAuthToken":l==="anthropic"?"providers.drawer.fields.authModeApiKey":"providers.drawer.fields.authModeProviderDefault"),W=n.label.trim()||n.id.trim()||a("providers.drawer.summary.untitled"),be=y.useMemo(()=>[{label:a("providers.drawer.summary.type"),value:le},{label:a("providers.drawer.summary.auth"),value:J(n.type,n.authMode)},{label:a("providers.drawer.summary.models"),value:te.length.toLocaleString()}],[te.length,n.authMode,n.type,le,a]),G=l=>w=>{m(O=>({...O,[l]:w}))},ke=l=>{m(w=>{const P=!T||w.label.trim().length===0||w.label===w.id?l:w.label;return{...w,id:l,label:P}})},ve=l=>{m(w=>{var Ee;const P=$e[l??"custom"]??$e.custom,I=ze(w.type),U=ze(l),_=Object.values($e).map(ue=>ue.baseUrl).filter(ue=>!!ue),se=!w.baseUrl||_.includes(w.baseUrl),je=t==="create"&&(w.models.length===0||w.models.every(ue=>ue.id.trim().length===0)),me={...w,type:l,authMode:w.authMode===I?U:w.authMode};return P!=null&&P.baseUrl&&se&&(me.baseUrl=P.baseUrl),P!=null&&P.models&&je&&(me.models=P.models.map(Us),me.defaultModel=P.defaultModel??((Ee=P.models[0])==null?void 0:Ee.id)??""),me})},R=(l,w)=>{m(O=>{const P=[...O.models];return P[l]={...P[l],...w},{...O,models:P}})},K=(l,w)=>{m(O=>{const P=[...O.models],I=P[l];if(!I)return O;const U=!T||!I.label||I.label===I.id,_={...I,id:w,label:U?w:I.label};P[l]=_;const se=O.defaultModel===I.id?w:O.defaultModel;return{...O,models:P,defaultModel:se}})},Ce=l=>{m(w=>{if(l<0||l>=w.models.length)return w;const O=w.models.filter((I,U)=>U!==l);let P=w.defaultModel;return O.some(I=>I.id===P)||(P=""),{...w,models:O,defaultModel:P}})},ie=()=>{m(l=>({...l,models:[...l.models,As()]}))},oe=l=>{m(w=>({...w,authMode:l}))},ce=()=>{const l={},w=n.id.trim(),O=n.baseUrl.trim();if(t==="create"&&(w.length===0?l.id=a("providers.drawer.errors.idRequired"):h.includes(w)&&(l.id=a("providers.drawer.errors.idDuplicate"))),t==="edit"&&w.length===0&&(l.id=a("providers.drawer.errors.idRequired")),O.length===0)l.baseUrl=a("providers.drawer.errors.baseUrlInvalid");else try{new URL(O)}catch{l.baseUrl=a("providers.drawer.errors.baseUrlInvalid")}if(n.models.length>0){const P=new Set;n.models.some(U=>{const _=U.id.trim();return _.length===0||P.has(_)?!0:(P.add(_),!1)})&&(l.models=a("providers.drawer.errors.modelInvalid"))}return n.defaultModel&&!n.models.some(P=>P.id===n.defaultModel)&&(l.models=a("providers.drawer.errors.defaultInvalid")),g(l),Object.keys(l).length===0},he=()=>{const l=n.models.map(P=>{var I;return{id:P.id.trim(),label:(I=P.label)!=null&&I.trim()?P.label.trim():void 0}}).filter(P=>P.id.length>0),w=c!=null&&c.extraHeaders&&Object.keys(c.extraHeaders).length>0?c.extraHeaders:void 0,O=n.authMode==="apiKey"&&n.type!=="anthropic"?void 0:n.authMode;return{id:n.id.trim(),label:n.label.trim()||n.id.trim(),baseUrl:n.baseUrl.trim(),apiKey:n.apiKey.trim()||void 0,type:n.type??"custom",defaultModel:n.defaultModel||void 0,models:l.length>0?l:void 0,extraHeaders:w,authMode:O}},de=async()=>{if(C(null),!!ce()){k(!0);try{const l=he();await x(l)}catch(l){C(a("providers.drawer.toast.saveFailure",{message:l instanceof Error?l.message:"unknown"})),k(!1);return}k(!1),d()}};return s?e.jsxs("div",{className:"fixed inset-0 z-50 flex",children:[e.jsx("div",{className:"flex-1 bg-background/80 backdrop-blur-sm",onClick:d,"aria-hidden":"true"}),e.jsxs("aside",{ref:v,role:"dialog","aria-modal":"true","aria-labelledby":"provider-drawer-title","aria-describedby":"provider-drawer-desc",className:"flex h-full min-h-0 w-full max-w-5xl flex-col border-l border-border bg-background shadow-lg",children:[e.jsxs("header",{className:"border-b border-border bg-secondary px-6 py-5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"inline-flex rounded-full border border-primary/20 bg-primary/10 px-3 py-1 text-[11px] font-medium uppercase tracking-[0.18em] text-primary",children:a(X?"providers.drawer.quickStart":"providers.drawer.editTitle")}),e.jsxs("div",{children:[e.jsx("h2",{id:"provider-drawer-title",className:"text-lg font-semibold tracking-[-0.02em]",children:a(X?"providers.drawer.createTitle":"providers.drawer.editTitle")}),e.jsx("p",{id:"provider-drawer-desc",className:"text-sm text-muted-foreground",children:a("providers.drawer.description")})]})]}),e.jsx("button",{type:"button",ref:f,onClick:d,className:"rounded-full border border-border bg-card px-4 py-2 text-sm transition hover:border-primary/20 hover:bg-accent/50",children:a("common.actions.close")})]}),e.jsx("div",{className:"mt-4 grid gap-3 md:grid-cols-3",children:be.map(l=>e.jsxs("div",{className:"rounded-lg border border-border bg-card px-4 py-3",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-[0.16em] text-muted-foreground",children:l.label}),e.jsx("p",{className:"mt-2 text-sm font-semibold text-foreground",children:l.value})]},l.label))})]}),e.jsxs("div",{className:"grid min-h-0 flex-1 overflow-hidden xl:grid-cols-[minmax(0,1fr)_280px]",children:[e.jsxs("div",{className:"min-h-0 overflow-y-auto px-6 py-5 pb-10",children:[e.jsxs("section",{className:"space-y-5","aria-labelledby":"provider-type-fields",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h3",{id:"provider-type-fields",className:"text-sm font-semibold",children:a("providers.drawer.sections.type")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("providers.drawer.hints.type")})]}),e.jsx("div",{className:"grid gap-2 md:grid-cols-3",children:lt.map(l=>{var O;const w=l.value===n.type;return e.jsxs("button",{type:"button",onClick:()=>ve(l.value),className:ne("rounded-2xl border px-4 py-3 text-left transition",w?"border-primary bg-primary/10 text-primary shadow-sm":"border-border bg-card text-foreground hover:border-primary/20 hover:bg-accent/50"),children:[e.jsx("div",{className:"text-sm font-semibold",children:l.label}),e.jsx("div",{className:"mt-1 text-xs text-muted-foreground",children:((O=$e[l.value??"custom"])==null?void 0:O.baseUrl)??a("providers.drawer.hints.customProvider")})]},l.value??"custom")})})]}),e.jsxs("section",{className:"mt-8 space-y-4","aria-labelledby":"provider-basic-info",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h3",{id:"provider-basic-info",className:"text-sm font-semibold",children:a("providers.drawer.sections.basic")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("providers.drawer.hints.basic")})]}),e.jsx("button",{type:"button",onClick:()=>E(l=>!l),className:"rounded-full border border-border bg-card px-3 py-1.5 text-xs transition hover:border-primary/20 hover:bg-accent/50",children:a(T?"providers.drawer.fields.hideAdvanced":"providers.drawer.fields.showAdvanced")})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("providers.drawer.fields.id")}),e.jsx("input",{value:n.id,ref:b,onChange:l=>ke(l.target.value),disabled:!X,placeholder:a("providers.drawer.fields.idPlaceholder"),className:"h-10 rounded-md border border-input bg-background px-3 py-2 text-sm transition-all focus:border-primary/40 focus:outline-none focus:ring-2 focus:ring-ring disabled:bg-muted/60 disabled:text-muted-foreground","aria-invalid":!!u.id}),u.id?e.jsx("span",{className:"text-xs text-red-500",children:u.id}):null]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("providers.drawer.fields.label")}),e.jsx("input",{value:n.label,onChange:l=>G("label")(l.target.value),placeholder:a("providers.drawer.fields.labelPlaceholder"),className:"h-10 rounded-md border border-input bg-background px-3 py-2 text-sm transition-all focus:border-primary/40 focus:outline-none focus:ring-2 focus:ring-ring disabled:bg-muted/60 disabled:text-muted-foreground"})]})]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("providers.drawer.fields.baseUrl")}),e.jsx("input",{value:n.baseUrl,onChange:l=>G("baseUrl")(l.target.value),placeholder:a("providers.drawer.fields.baseUrlPlaceholder"),className:"h-10 rounded-md border border-input bg-background px-3 py-2 text-sm transition-all focus:border-primary/40 focus:outline-none focus:ring-2 focus:ring-ring disabled:bg-muted/60 disabled:text-muted-foreground","aria-invalid":!!u.baseUrl}),u.baseUrl?e.jsx("span",{className:"text-xs text-red-500",children:u.baseUrl}):null]})]}),e.jsxs("section",{className:"mt-8 space-y-4","aria-labelledby":"provider-auth-fields",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h3",{id:"provider-auth-fields",className:"text-sm font-semibold",children:a("providers.drawer.sections.auth")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("providers.drawer.hints.auth")})]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("providers.drawer.fields.apiKey")}),e.jsx("input",{value:n.apiKey,onChange:l=>G("apiKey")(l.target.value),placeholder:a("providers.drawer.fields.apiKeyPlaceholder"),className:"h-10 rounded-md border border-input bg-background px-3 py-2 text-sm transition-all focus:border-primary/40 focus:outline-none focus:ring-2 focus:ring-ring disabled:bg-muted/60 disabled:text-muted-foreground"})]}),e.jsxs("fieldset",{className:"grid gap-2 rounded-lg border border-border bg-card p-4 text-xs",children:[e.jsx("legend",{className:"px-1 text-muted-foreground",children:a("providers.drawer.fields.authMode")}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:a("providers.drawer.fields.authModeHint")}),e.jsxs("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-transparent px-3 py-2 transition hover:bg-primary/5",children:[e.jsx("input",{type:"radio",name:"provider-auth-mode",value:"apiKey",checked:n.authMode==="apiKey",onChange:()=>oe("apiKey"),className:"mt-0.5"}),e.jsx("span",{children:J(n.type,"apiKey")})]}),e.jsxs("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-transparent px-3 py-2 transition hover:bg-primary/5",children:[e.jsx("input",{type:"radio",name:"provider-auth-mode",value:"authToken",checked:n.authMode==="authToken",onChange:()=>oe("authToken"),className:"mt-0.5"}),e.jsx("span",{children:a("providers.drawer.fields.authModeAuthToken")})]}),e.jsxs("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-transparent px-3 py-2 transition hover:bg-primary/5",children:[e.jsx("input",{type:"radio",name:"provider-auth-mode",value:"xAuthToken",checked:n.authMode==="xAuthToken",onChange:()=>oe("xAuthToken"),className:"mt-0.5"}),e.jsx("span",{children:a("providers.drawer.fields.authModeXAuthToken")})]})]})]}),e.jsxs("section",{className:"mt-8 space-y-4","aria-labelledby":"provider-model-fields",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h3",{id:"provider-model-fields",className:"text-sm font-semibold",children:a("providers.drawer.fields.models")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("providers.drawer.modelsDescription")})]}),e.jsx("button",{type:"button",onClick:ie,className:"rounded-full border border-border bg-card px-3 py-1.5 text-xs transition hover:border-primary/20 hover:bg-accent/50",children:a("providers.drawer.fields.addModel")})]}),u.models?e.jsx("p",{className:"text-xs text-red-500",children:u.models}):null,e.jsxs("div",{className:"space-y-4",children:[n.models.map((l,w)=>e.jsxs("div",{className:"rounded-lg border border-border bg-card p-4",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("providers.drawer.fields.modelId")}),e.jsx("input",{value:l.id,onChange:O=>K(w,O.target.value),placeholder:a("providers.drawer.fields.modelIdPlaceholder"),className:"h-10 rounded-md border border-input bg-background px-3 py-2 text-sm transition-all focus:border-primary/40 focus:outline-none focus:ring-2 focus:ring-ring disabled:bg-muted/60 disabled:text-muted-foreground"})]}),T?e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("providers.drawer.fields.modelLabel")}),e.jsx("input",{value:l.label??"",onChange:O=>R(w,{label:O.target.value}),placeholder:a("providers.drawer.fields.modelLabelPlaceholder"),className:"h-10 rounded-md border border-input bg-background px-3 py-2 text-sm transition-all focus:border-primary/40 focus:outline-none focus:ring-2 focus:ring-ring disabled:bg-muted/60 disabled:text-muted-foreground"})]}):null]}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center justify-between gap-3 text-xs",children:[e.jsxs("label",{className:"flex items-center gap-2 text-muted-foreground",children:[e.jsx("input",{type:"radio",name:"defaultModel",value:l.id,checked:n.defaultModel===l.id,onChange:()=>m(O=>({...O,defaultModel:l.id})),disabled:l.id.trim().length===0}),a("providers.drawer.fields.setDefault")]}),e.jsx("button",{type:"button",className:"text-red-500 transition hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-40",onClick:()=>Ce(w),disabled:n.models.length===0,children:a("providers.drawer.fields.removeModel")})]})]},l._key)),n.models.length===0?e.jsx("div",{className:"rounded-lg border border-amber-200 bg-amber-50/60 p-5 dark:border-amber-700/50 dark:bg-amber-900/20",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm font-semibold text-amber-900 dark:text-amber-200",children:a("providers.drawer.noModelsTitle")}),e.jsx("p",{className:"text-xs leading-relaxed text-amber-800 dark:text-amber-300",children:a("providers.drawer.noModelsHint",{providerId:n.id||"provider-id"})}),e.jsxs("div",{className:"rounded-md border border-border bg-secondary p-2.5",children:[e.jsx("p",{className:"mb-1.5 text-xs font-medium text-foreground",children:a("providers.drawer.routeExample")}),e.jsxs("code",{className:"block rounded-md border border-border bg-card px-2.5 py-1.5 font-mono text-xs text-foreground",children:['"claude-*": "',(n.id||"provider-id").trim()||"provider-id",':*"']})]})]})}):null]}),te.length>1?e.jsx("div",{className:"text-xs text-muted-foreground",children:a("providers.drawer.defaultHint",{model:n.defaultModel||a("providers.card.noDefault")})}):null]})]}),e.jsx("aside",{className:"hidden min-h-0 overflow-y-auto border-l border-border bg-secondary px-5 py-5 xl:block",children:e.jsxs("div",{className:"sticky top-0 space-y-5",children:[e.jsxs("div",{className:"rounded-lg border border-border bg-card p-4",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-[0.16em] text-muted-foreground",children:a("providers.drawer.formSummary")}),e.jsx("p",{className:"mt-2 text-base font-semibold",children:W}),e.jsx("div",{className:"mt-4 space-y-3 text-sm",children:be.map(l=>e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:l.label}),e.jsx("span",{className:"text-right font-medium",children:l.value})]},l.label))})]}),e.jsxs("div",{className:"rounded-lg border border-border bg-card p-4",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-[0.16em] text-muted-foreground",children:a("providers.drawer.sections.checklist")}),e.jsxs("ul",{className:"mt-3 space-y-2 text-sm text-muted-foreground",children:[e.jsx("li",{children:a("providers.drawer.hints.checkUrl")}),e.jsx("li",{children:a("providers.drawer.hints.checkAuth")}),e.jsx("li",{children:a("providers.drawer.hints.checkModels")})]})]}),T&&e.jsxs("div",{className:"rounded-lg border border-primary/20 bg-accent p-4 text-sm text-foreground",children:[e.jsx("p",{className:"font-medium text-primary",children:a("providers.drawer.hints.advancedTitle")}),e.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:a("providers.drawer.hints.advancedBody")})]})]})})]}),e.jsxs("footer",{className:"flex items-center justify-between gap-3 border-t border-border bg-secondary px-6 py-4 text-sm",children:[e.jsx("div",{className:"flex flex-col text-xs text-red-500","aria-live":"polite",children:M?e.jsx("span",{children:M}):null}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{type:"button",onClick:d,className:"rounded-full border border-border bg-card px-4 py-2 transition hover:border-primary/20 hover:bg-accent/50",disabled:B,children:a("common.actions.cancel")}),e.jsx("button",{type:"button",onClick:de,className:"rounded-full bg-primary px-5 py-2 text-primary-foreground shadow-[0_8px_20px_-12px_rgba(59,130,246,0.65)] transition hover:-translate-y-0.5 hover:bg-primary/95 disabled:opacity-60",disabled:B,children:a(B?"common.actions.saving":"common.actions.save")})]})]})]})]}):null}const Ls=["anthropic","openai-auto","openai-chat","openai-responses"];function Fs({open:s,endpoint:t,onClose:c,onSuccess:h}){const{t:d}=ee(),[x,a]=y.useState({id:"",label:"",paths:[{path:"",protocol:"openai-auto"}],enabled:!0});y.useEffect(()=>{if(t){const v=t.paths&&t.paths.length>0?t.paths:t.path&&t.protocol?[{path:t.path,protocol:t.protocol}]:[{path:"",protocol:"openai-auto"}];a({id:t.id,label:t.label,paths:v,enabled:t.enabled!==!1});return}a({id:"",label:"",paths:[{path:"",protocol:"openai-auto"}],enabled:!0})},[t,s]);const n=He({mutationFn:De.create,invalidateKeys:[ge.customEndpoints.all()],successToast:()=>({title:d("modelManagement.createEndpointSuccess")}),errorToast:v=>({title:d("modelManagement.createEndpointError",{error:v.message})}),onSuccess:async()=>{h(),c()}}),m=He({mutationFn:v=>De.update(v.id,v.updates),invalidateKeys:[ge.customEndpoints.all()],successToast:()=>({title:d("modelManagement.updateEndpointSuccess")}),errorToast:v=>({title:d("modelManagement.updateEndpointError",{error:v.message})}),onSuccess:async()=>{h(),c()}}),u=()=>{a(v=>({...v,paths:[...v.paths,{path:"",protocol:"anthropic"}]}))},g=v=>{x.paths.length!==1&&a(f=>({...f,paths:f.paths.filter((b,T)=>T!==v)}))},B=(v,f,b)=>{a(T=>{const E=[...T.paths];return E[v]={...E[v],[f]:b},{...T,paths:E}})},k=v=>{if(v==null||v.preventDefault(),!x.id.trim()||!x.label.trim())return;for(const b of x.paths)if(!b.path.trim())return;const f=x.paths.map(b=>({path:b.path.trim(),protocol:b.protocol}));if(t){m.mutate({id:t.id,updates:{label:x.label.trim(),paths:f,enabled:x.enabled}});return}n.mutate({id:x.id.trim(),label:x.label.trim(),paths:f,enabled:x.enabled})},M=n.isPending||m.isPending,C=x.paths.length===0?d("modelManagement.atLeastOnePath"):!x.id.trim()||!x.label.trim()?d("modelManagement.endpointValidationError"):x.paths.some(v=>!v.path.trim())?d("modelManagement.pathValidationError"):null;return s?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 z-40 bg-background/80 backdrop-blur-sm",onClick:c}),e.jsx("div",{className:"fixed inset-y-0 right-0 z-50 w-full max-w-md border-l border-border bg-background shadow-lg",children:e.jsxs("div",{className:"flex h-full flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border bg-secondary p-6",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h2",{className:"text-lg font-semibold tracking-[-0.02em]",children:d(t?"modelManagement.editEndpoint":"modelManagement.createEndpoint")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t?t.id:d("modelManagement.endpointRoutingHint")})]}),e.jsx(F,{variant:"ghost",size:"sm",onClick:c,children:e.jsx(Re,{className:"h-4 w-4"})})]}),e.jsxs("form",{onSubmit:k,className:"flex-1 space-y-6 overflow-y-auto p-6",children:[e.jsxs("div",{className:"grid gap-3 rounded-lg border border-border bg-secondary p-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground",children:d("modelManagement.endpointId")}),e.jsx("p",{className:"truncate text-sm font-medium text-foreground",children:(t==null?void 0:t.id)||"new-endpoint"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground",children:d("modelManagement.endpointEnabled")}),e.jsx("p",{className:"text-sm font-medium text-foreground",children:x.enabled?d("common.status.enabled"):d("common.status.disabled")})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(Y,{children:[d("modelManagement.endpointId")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(fe,{value:x.id,onChange:v=>a(f=>({...f,id:v.target.value})),placeholder:d("modelManagement.endpointIdPlaceholder"),disabled:!!t,required:!0}),e.jsx("p",{className:"text-xs text-muted-foreground",children:d("modelManagement.endpointIdHint")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(Y,{children:[d("modelManagement.endpointLabel")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(fe,{value:x.label,onChange:v=>a(f=>({...f,label:v.target.value})),placeholder:d("modelManagement.endpointLabelPlaceholder"),required:!0})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(Y,{children:[d("modelManagement.endpointPaths")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsxs(F,{type:"button",variant:"ghost",size:"sm",onClick:u,children:[e.jsx(xt,{className:"mr-1 h-3 w-3"}),d("modelManagement.addPath")]})]}),e.jsx("div",{className:"space-y-3",children:x.paths.map((v,f)=>e.jsxs("div",{className:"space-y-2 rounded-lg border border-border bg-card p-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"flex-1 space-y-2",children:[e.jsx(fe,{value:v.path,onChange:b=>B(f,"path",b.target.value),placeholder:d("modelManagement.endpointPathPlaceholder"),required:!0}),e.jsxs(gt,{value:v.protocol,onValueChange:b=>B(f,"protocol",b),children:[e.jsx(ft,{children:e.jsx(bt,{})}),e.jsx(vt,{children:Ls.map(b=>e.jsx(xe,{value:b,children:d(b==="anthropic"?"modelManagement.protocolAnthropic":b==="openai-auto"?"modelManagement.protocolOpenAI":b==="openai-chat"?"modelManagement.protocolOpenAIChat":"modelManagement.protocolOpenAIResponses")},b))})]})]}),x.paths.length>1?e.jsx(F,{type:"button",variant:"ghost",size:"sm",onClick:()=>g(f),className:"text-destructive",children:e.jsx(Re,{className:"h-4 w-4"})}):null]}),e.jsxs("div",{className:"space-y-1 text-xs text-muted-foreground",children:[f===0?e.jsx("p",{children:d("modelManagement.endpointPathHint")}):null,e.jsx("p",{children:d(`modelManagement.protocolHints.${v.protocol}`)})]})]},`${v.protocol}-${f}`))}),C?e.jsx("p",{className:"text-xs text-destructive",children:C}):null]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Ge,{id:"enabled",checked:x.enabled,onCheckedChange:v=>a(f=>({...f,enabled:v}))}),e.jsx(Y,{htmlFor:"enabled",children:d("modelManagement.endpointEnabled")})]}),t?null:e.jsx("div",{className:"rounded-lg border border-primary/20 bg-accent p-4",children:e.jsx("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:d("modelManagement.endpointRoutingHint")})})]}),e.jsxs("div",{className:"flex gap-3 border-t border-border bg-secondary p-6",children:[e.jsx(F,{variant:"outline",className:"flex-1",onClick:c,disabled:M,children:d("common.cancel")}),e.jsx(F,{className:"flex-1",onClick:()=>k(),disabled:M,children:d(M?"common.saving":t?"common.save":"common.create")})]})]})})]}):null}function _e(s,t){return t(s==="anthropic"?"modelManagement.protocolAnthropic":s==="openai-chat"?"modelManagement.protocolOpenAIChat":s==="openai-responses"?"modelManagement.protocolOpenAIResponses":"modelManagement.protocolOpenAI")}function Bs({activeTab:s,activeTabInfo:t,customEndpoints:c,customTabs:h,isDirtyByEndpoint:d,onDeleteEndpoint:x,onEditEndpoint:a,onSelectTab:n,providerCount:m,systemTabs:u}){const{t:g}=ee(),B=Object.values(d).filter(Boolean).length,k=u.length-1+h.length;return e.jsx(Ie,{className:"overflow-hidden",children:e.jsxs(Ke,{className:"space-y-5 pt-5",children:[e.jsxs("div",{className:"flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(H,{variant:"outline",className:"border-primary/20 bg-accent text-primary",children:[g("modelManagement.tabs.providers")," · ",m]}),e.jsxs(H,{variant:"outline",children:[g("modelManagement.tabs.customEndpoint")," · ",h.length]}),B>0?e.jsx(H,{variant:"warning",children:g("modelManagement.overview.unsavedCount",{count:B})}):e.jsx(H,{variant:"success",children:g("modelManagement.overview.synced")})]}),e.jsx("p",{className:"text-sm font-semibold text-foreground",children:t==null?void 0:t.label}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t==null?void 0:t.description})]}),e.jsxs("div",{className:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:flex-wrap sm:items-center",children:[e.jsx("div",{className:"rounded-lg border border-border bg-secondary px-3 py-2 text-xs text-muted-foreground",children:h.length>0?g("modelManagement.overview.headerWithCustom"):g("modelManagement.overview.headerWithoutCustom")}),e.jsxs("div",{className:"rounded-lg border border-primary/20 bg-accent px-3 py-2 text-xs font-medium text-primary",children:[g("modelManagement.overview.routeWorkspacesStat")," · ",k]})]})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-4",children:[e.jsx(Le,{label:g("modelManagement.overview.providersStat"),value:m.toString(),helper:g("modelManagement.overview.providersStatHint")}),e.jsx(Le,{label:g("modelManagement.overview.routeWorkspacesStat"),value:k.toString(),helper:g("modelManagement.overview.routeWorkspacesStatHint")}),e.jsx(Le,{label:g("modelManagement.overview.customEndpointsStat"),value:h.length.toString(),helper:g("modelManagement.overview.customEndpointsStatHint")}),e.jsx(Le,{label:g("modelManagement.overview.activeWorkspace"),value:(t==null?void 0:t.label)??"-",helper:g(s==="providers"?"modelManagement.overview.activeWorkspaceProvider":"modelManagement.overview.activeWorkspaceRouting")})]}),e.jsxs("div",{className:"grid gap-3 rounded-lg border border-border bg-secondary p-4 md:grid-cols-2",children:[e.jsx(ct,{title:g("modelManagement.overview.resourceCardTitle"),description:g("modelManagement.overview.resourceCardDescription")}),e.jsx(ct,{title:g("modelManagement.overview.entryCardTitle"),description:g("modelManagement.overview.entryCardDescription")})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("p",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:g("modelManagement.overview.providerAndSystem")})}),e.jsx("div",{className:"grid gap-3 md:grid-cols-3",children:u.map(M=>{const C=s===M.key,v=M.key!=="providers"&&d[M.key];return e.jsxs("button",{type:"button",onClick:()=>n(M.key),className:ne("group flex min-h-[96px] flex-col justify-between rounded-lg border px-4 py-4 text-left transition-all",C?"border-primary/30 bg-accent":"border-border bg-card hover:border-primary/20 hover:bg-accent/50"),children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx("span",{className:ne("text-base font-semibold",C?"text-primary":"text-foreground"),children:M.label}),e.jsx("div",{className:"text-[11px] uppercase tracking-wider text-muted-foreground",children:M.key==="providers"?g("modelManagement.overview.providerPoolTag"):g("modelManagement.overview.systemEndpointTag")})]}),v?e.jsx("span",{className:"mt-1 h-2.5 w-2.5 rounded-full bg-amber-500"}):null]}),e.jsx("span",{className:"line-clamp-2 text-sm text-muted-foreground",children:M.description})]},M.key)})})]}),h.length>0?e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"flex items-center justify-between gap-3",children:e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:g("modelManagement.overview.customEndpoints")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:g("modelManagement.overview.customEndpointsHint")})]})}),e.jsx("div",{className:"overflow-x-auto pb-1",children:e.jsx("div",{className:"flex min-w-full snap-x gap-3",children:h.map(M=>{var b;const C=s===M.key,v=d[M.key],f=c.find(T=>T.id===M.key);return e.jsxs("div",{className:ne("group relative flex w-[260px] shrink-0 snap-start flex-col gap-3 rounded-lg border px-4 py-4 text-left transition-all",C?"border-primary/30 bg-accent":"border-border bg-card hover:border-primary/20 hover:bg-accent/50"),children:[e.jsxs("button",{type:"button",onClick:()=>n(M.key),className:"min-w-0 flex-1 text-left",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:ne("truncate text-base font-semibold",C?"text-primary":"text-foreground"),children:M.label}),v?e.jsx("span",{className:"h-2 w-2 rounded-full bg-amber-500"}):null]}),e.jsx("p",{className:"mt-1 line-clamp-2 text-sm text-muted-foreground",children:M.description})]}),e.jsxs("div",{className:"grid gap-2 sm:flex sm:items-start",children:[e.jsx(F,{variant:"ghost",size:"sm",className:"h-7 w-full px-2 text-xs sm:w-auto",disabled:!f,onClick:()=>{f&&a(f)},children:g("common.edit")}),M.canDelete?e.jsx("button",{type:"button",onClick:T=>{T.stopPropagation(),f&&x({kind:"endpoint",endpoint:f})},className:"flex h-7 w-full items-center justify-center rounded-full border border-transparent text-muted-foreground transition hover:border-destructive/20 hover:bg-destructive/10 hover:text-destructive sm:w-7",title:g("common.delete"),children:e.jsx(Re,{className:"h-3.5 w-3.5"})}):null]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[(M.protocols??[]).map(T=>e.jsx(H,{variant:"outline",className:"max-w-full truncate text-[11px]",children:_e(T,g)},`${M.key}-${T}`)),e.jsx(H,{variant:(f==null?void 0:f.enabled)===!1?"secondary":"success",className:"text-[11px]",children:(f==null?void 0:f.enabled)===!1?g("modelManagement.overview.endpointDisabled"):g("modelManagement.overview.endpointEnabled")})]}),f!=null&&f.paths&&f.paths.length>0?e.jsxs("div",{className:"space-y-1 rounded-lg border border-border bg-secondary px-3 py-2 text-[11px] text-muted-foreground",children:[f.paths.slice(0,2).map(T=>e.jsxs("div",{className:"truncate",children:[e.jsx("span",{className:"font-medium text-foreground",children:T.path})," · ",_e(T.protocol,g)]},`${f.id}-${T.path}-${T.protocol}`)),f.paths.length>2?e.jsx("div",{children:g("modelManagement.overview.endpointMorePaths",{count:f.paths.length-2})}):null]}):f!=null&&f.path?e.jsxs("div",{className:"rounded-lg border border-border bg-secondary px-3 py-2 text-[11px] text-muted-foreground",children:[e.jsx("span",{className:"font-medium text-foreground",children:f.path})," · ",_e(f.protocol??"anthropic",g)]}):null,e.jsx("div",{className:"rounded-lg border border-border bg-secondary px-3 py-2 text-[11px] text-muted-foreground",children:(b=M.protocols)!=null&&b.length?g("modelManagement.overview.endpointProtocols",{count:M.protocols.length}):g("modelManagement.overview.endpointNoProtocol")}),M.canDelete?null:e.jsx("div",{className:"text-[11px] text-muted-foreground",children:g("modelManagement.overview.endpointManagedExternally")})]},M.key)})})})]}):null]})})}function ct({description:s,title:t}){return e.jsxs("div",{className:"rounded-lg border border-border bg-card px-4 py-3",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:t}),e.jsx("p",{className:"mt-2 text-sm leading-6 text-foreground",children:s})]})}function Le({helper:s,label:t,value:c}){return e.jsxs("div",{className:"rounded-lg border border-border bg-card px-4 py-3",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-wider text-muted-foreground",children:t}),e.jsx("p",{className:"mt-2 truncate text-base font-semibold text-foreground",children:c}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:s})]})}function Hs({dialog:s,currentRoutes:t,onConfirm:c,onClose:h}){const{t:d}=ee();if(!s)return null;const{endpoint:x,preset:a}=s,n=a.modelRoutes??{},m={};for(const C of t){const v=C.source.trim(),f=C.target.trim();v&&f&&(m[v]=f)}const u=new Set([...Object.keys(m),...Object.keys(n)]),g=[],B=[],k=[];for(const C of u){const v=C in m,f=C in n;f&&!v?g.push([C,n[C]]):v&&!f?B.push([C,m[C]]):v&&f&&m[C]!==n[C]&&k.push([C,m[C],n[C]])}const M=g.length>0||B.length>0||k.length>0;return e.jsx(jt,{open:!0,onOpenChange:C=>!C&&h(),children:e.jsxs(yt,{className:"max-w-2xl",children:[e.jsxs(Nt,{children:[e.jsx(wt,{children:d("modelManagement.presets.diffTitle")}),e.jsx(Mt,{children:d("modelManagement.presets.diffDescription",{name:a.name})})]}),e.jsx(kt,{children:M?e.jsxs("div",{className:"max-h-80 space-y-2 rounded-lg border border-border bg-secondary p-3 text-sm",children:[g.map(([C,v])=>e.jsxs("div",{className:"flex items-center gap-2 rounded-xl bg-emerald-50 px-2 py-1.5 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-200",children:[e.jsx(H,{variant:"outline",className:"border-emerald-300 text-xs dark:border-emerald-700",children:d("modelManagement.presets.diffAdded")}),e.jsx("span",{className:"truncate",children:C}),e.jsx(Me,{className:"h-3 w-3 flex-shrink-0"}),e.jsx("span",{className:"truncate",children:v})]},`add-${C}`)),B.map(([C,v])=>e.jsxs("div",{className:"flex items-center gap-2 rounded-xl bg-red-50 px-2 py-1.5 text-red-800 dark:bg-red-950 dark:text-red-200",children:[e.jsx(H,{variant:"outline",className:"border-red-300 text-xs dark:border-red-700",children:d("modelManagement.presets.diffRemoved")}),e.jsx("span",{className:"truncate",children:C}),e.jsx(Me,{className:"h-3 w-3 flex-shrink-0"}),e.jsx("span",{className:"truncate",children:v})]},`rm-${C}`)),k.map(([C,v,f])=>e.jsxs("div",{className:"flex items-center gap-2 rounded-xl bg-amber-50 px-2 py-1.5 text-amber-800 dark:bg-amber-950 dark:text-amber-200",children:[e.jsx(H,{variant:"outline",className:"border-amber-300 text-xs dark:border-amber-700",children:d("modelManagement.presets.diffChanged")}),e.jsx("span",{className:"truncate",children:C}),e.jsx(Me,{className:"h-3 w-3 flex-shrink-0"}),e.jsx("span",{className:"truncate line-through opacity-60",children:v}),e.jsx(Me,{className:"h-3 w-3 flex-shrink-0"}),e.jsx("span",{className:"truncate",children:f})]},`chg-${C}`))]}):e.jsx("p",{className:"rounded-lg border border-border bg-secondary py-8 text-center text-sm text-muted-foreground",children:d("modelManagement.presets.diffEmpty")})}),e.jsxs(Ct,{children:[e.jsx(F,{variant:"outline",onClick:h,children:d("common.cancel")}),e.jsx(F,{onClick:()=>c(x,a),disabled:!M,children:d("modelManagement.presets.diffConfirm")})]})]})})}function Et({eyebrow:s,title:t,description:c,breadcrumb:h,aside:d}){return e.jsxs("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground",children:[e.jsx("span",{children:s}),h.map((x,a)=>e.jsxs(fs.Fragment,{children:[a>0?e.jsx(ht,{className:"h-3.5 w-3.5"}):null,e.jsx("span",{className:ne(a===h.length-1&&"text-foreground"),children:x})]},`${x}-${a}`))]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold tracking-[-0.03em] text-foreground",children:t}),e.jsx("p",{className:"mt-1 max-w-3xl text-sm text-muted-foreground",children:c})]})]}),d?e.jsx("div",{className:"w-full shrink-0 lg:w-auto",children:d}):null]})}const Is=["claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929-thinking","claude-sonnet-4-20250514","claude-opus-4-1-20250805","claude-opus-4-1-20250805-thinking","claude-haiku-4-5-20251001","claude-haiku-4-5-20251001-thinking","claude-3-5-haiku-20241022"],Ks=["gpt-4o-mini","gpt-4o","o4-mini","o4-large","gpt-5-codex"];function ae(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():Math.random().toString(36).slice(2,10)}function Je(s,t){var c;return(c=s==null?void 0:s.customEndpoints)!=null&&c.length?s.customEndpoints:t}function qe(s){return s?Object.entries(s).map(([t,c])=>({id:ae(),source:t,target:c})):[]}function We(s,t){var d,x,a;if(!s)return{};const c={},h=s.endpointRouting??{};c.anthropic=qe(((d=h.anthropic)==null?void 0:d.modelRoutes)??s.modelRoutes??{}),c.openai=qe(((x=h.openai)==null?void 0:x.modelRoutes)??{});for(const n of Je(s,t))(a=n.routing)!=null&&a.modelRoutes?c[n.id]=qe(n.routing.modelRoutes):c[n.id]=[];return c}function mt(s,t,c){var x,a,n;const h=Je(s,t).find(m=>m.id===c);if(h)return((x=h.routing)==null?void 0:x.modelRoutes)??{};const d=s.endpointRouting??{};return c==="anthropic"?((a=d.anthropic)==null?void 0:a.modelRoutes)??s.modelRoutes??{}:c==="openai"?((n=d.openai)==null?void 0:n.modelRoutes)??{}:{}}function zs(s){const t={};for(const c of s){const h=c.source.trim(),d=c.target.trim();h&&d&&(t[h]=d)}return t}function ut(s,t){return JSON.stringify(zs(s))!==JSON.stringify(t)}function Vs(s,t){if(s==="anthropic")return!0;const c=t.find(h=>h.id===s);return c?c.paths&&c.paths.length>0?c.paths.some(h=>h.protocol==="anthropic"):c.protocol==="anthropic":!1}function _s(s,t,c){var d,x,a;if(!t)return;if(s==="anthropic"||s==="openai")return(x=(d=t.endpointRouting)==null?void 0:d[s])==null?void 0:x.validation;const h=Je(t,c).find(n=>n.id===s);return(a=h==null?void 0:h.routing)==null?void 0:a.validation}function qs(s,t){const c=[{key:"providers",label:s("modelManagement.tabs.providers"),description:s("modelManagement.tabs.providersDesc"),isSystem:!0,canDelete:!1},{key:"anthropic",label:s("modelManagement.tabs.anthropic"),description:s("modelManagement.tabs.anthropicDesc"),isSystem:!0,canDelete:!1,protocols:["anthropic"]},{key:"openai",label:s("modelManagement.tabs.openai"),description:s("modelManagement.tabs.openaiDesc"),isSystem:!0,canDelete:!1,protocols:["openai-auto","openai-chat","openai-responses"]}],h=t.map(d=>{let x=s("modelManagement.tabs.customEndpoint"),a=[];if(d.paths&&d.paths.length>0)x=`${s("modelManagement.tabs.customEndpoint")}: ${d.paths.map(n=>`${n.path} (${n.protocol})`).join(", ")}`,a=[...new Set(d.paths.map(n=>n.protocol))];else if(d.path){const n=d.protocol||"anthropic";x=`${s("modelManagement.tabs.customEndpoint")}: ${d.path} (${n})`,a=[n]}return{key:d.id,label:d.label||d.id,description:x,isSystem:!1,canDelete:d.deletable!==!1,protocols:a}});return[...c,...h]}function St(s){return s.label&&s.label.trim().length>0?`${s.label} (${s.id})`:s.id}function Ws({providerCount:s,providersLength:t,filteredProviders:c,defaultLabels:h,providerSearch:d,providerTypeFilter:x,configPending:a,configFetching:n,testingProviderId:m,onRefresh:u,onOpenCreate:g,onOpenEdit:B,onTestConnection:k,onRequestDelete:M,onProviderSearchChange:C,onProviderTypeChange:v,onResetFilters:f}){const{t:b}=ee(),T=E=>{const X=E.authMode??(E.type==="anthropic"?"authToken":"apiKey");return X==="authToken"?"Bearer":X==="xAuthToken"?"X-Auth-Token":E.type==="anthropic"?"X-API-Key":b("providers.card.providerDefault")};return e.jsx(Ie,{children:e.jsxs(Ke,{className:"space-y-6 pt-6",children:[e.jsx(Et,{eyebrow:"Model Access",title:b("providers.title"),description:b("providers.description"),breadcrumb:[b("modelManagement.title"),b("modelManagement.tabs.providers")],aside:e.jsxs("div",{className:"flex w-full flex-wrap items-center gap-2 sm:w-auto sm:gap-3",children:[e.jsx(H,{variant:"secondary",children:b("providers.count",{count:s})}),e.jsxs(F,{variant:"outline",size:"sm",onClick:u,disabled:n,className:"w-full sm:w-auto",children:[e.jsx(bs,{className:ne("mr-2 h-4 w-4",n&&"animate-spin")}),b(n?"common.actions.refreshing":"providers.actions.refresh")]}),e.jsxs(F,{size:"sm",onClick:g,className:"w-full sm:w-auto",children:[e.jsx(xt,{className:"mr-2 h-4 w-4"}),b("providers.actions.add")]})]})}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsx(Qe,{label:"Configured",value:s.toString(),helper:"Total providers in supply pool",tone:"blue"}),e.jsx(Qe,{label:"Visible",value:c.length.toString(),helper:"Providers matching current filter",tone:"emerald"}),e.jsx(Qe,{label:"Connection Status",value:m?"Testing":"Idle",helper:m?`Testing ${m}`:"Ready for diagnostics",tone:"amber"})]}),e.jsxs("div",{className:"rounded-lg border border-border bg-accent px-4 py-3 text-sm text-primary",children:[e.jsx("p",{className:"font-medium",children:b("modelManagement.providersSemantics.title")}),e.jsx("p",{className:"mt-1 leading-6 text-primary/80",children:b("modelManagement.providersSemantics.description")})]}),e.jsxs("div",{className:"grid gap-3 rounded-lg border border-border bg-secondary p-4 sm:grid-cols-2 xl:grid-cols-[minmax(0,1fr)_220px_auto]",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Y,{className:"text-[11px] uppercase tracking-[0.16em] text-muted-foreground",children:b("providers.filters.searchPlaceholder")}),e.jsx(fe,{value:d,onChange:E=>C(E.target.value),placeholder:b("providers.filters.searchPlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Y,{className:"text-[11px] uppercase tracking-[0.16em] text-muted-foreground",children:b("providers.filters.typeAll")}),e.jsxs(gt,{value:x,onValueChange:v,children:[e.jsx(ft,{children:e.jsx(bt,{})}),e.jsxs(vt,{children:[e.jsx(xe,{value:"all",children:b("providers.filters.typeAll")}),e.jsx(xe,{value:"openai",children:"OpenAI"}),e.jsx(xe,{value:"anthropic",children:"Anthropic"}),e.jsx(xe,{value:"deepseek",children:"DeepSeek"}),e.jsx(xe,{value:"huawei",children:"Huawei"}),e.jsx(xe,{value:"kimi",children:"Kimi"}),e.jsx(xe,{value:"custom",children:"Custom"})]})]})]}),e.jsx("div",{className:"flex items-end sm:col-span-2 xl:col-span-1",children:e.jsx(F,{variant:"ghost",size:"sm",onClick:f,disabled:!d.trim()&&x==="all",className:"w-full xl:w-auto",children:b("common.actions.reset")})})]}),a?e.jsx("div",{className:"flex min-h-[200px] items-center justify-center rounded-lg border border-border bg-secondary text-sm text-muted-foreground",children:b("common.loading")}):t===0?e.jsxs("div",{className:"rounded-lg border border-dashed border-border p-12 text-center text-sm text-muted-foreground",children:[e.jsx("p",{className:"font-medium",children:b("providers.emptyState")}),e.jsx("p",{className:"mt-2 text-xs",children:b("providers.emptyStateSub",{default:"点击上方按钮添加您的第一个提供商"})})]}):c.length===0?e.jsx("div",{className:"rounded-lg border border-dashed border-border p-12 text-center text-sm text-muted-foreground",children:e.jsx("p",{className:"font-medium",children:b("providers.emptyFiltered")})}):e.jsx("div",{className:"grid gap-4 [grid-template-columns:repeat(auto-fit,minmax(280px,1fr))]",children:c.map(E=>{var X;return e.jsx(Ie,{className:"flex flex-col overflow-hidden","data-testid":"provider-card",children:e.jsxs(Ke,{className:"flex flex-1 flex-col gap-4 pt-6",children:[e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h3",{className:"text-base font-semibold tracking-[-0.02em]",children:E.label||E.id}),E.type?e.jsx(Qs,{type:E.type}):null]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["ID: ",E.id]}),e.jsx("code",{className:"block max-w-full break-all rounded-lg border border-border bg-secondary px-2.5 py-1.5 text-[11px] text-muted-foreground",children:E.baseUrl})]}),E.defaultModel?e.jsx(H,{variant:"default",className:"text-xs",children:h.get(E.id)??E.defaultModel}):e.jsx(H,{variant:"secondary",className:"text-xs",children:b("providers.card.noDefault")})]}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-3",children:[e.jsx(Pe,{label:b("providers.card.authMode"),value:T(E)}),e.jsx(Pe,{label:b("providers.card.modelsTitle"),value:(X=E.models)!=null&&X.length?b("providers.card.modelCount",{count:E.models.length}):b("providers.card.passthrough")}),e.jsx(Pe,{label:b("providers.card.defaultModelLabel"),value:E.defaultModel?h.get(E.id)??E.defaultModel:b("providers.card.noDefault"),truncate:!0})]}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(Pe,{label:"Routing readiness",value:E.defaultModel?"Ready":"Needs default"}),e.jsx(Pe,{label:"Endpoint type",value:E.type?E.type:"custom"})]}),e.jsxs("div",{className:"space-y-2 rounded-lg border border-border bg-secondary p-3",children:[e.jsx(Y,{className:"text-xs uppercase tracking-[0.16em] text-muted-foreground",children:b("providers.card.modelsTitle")}),E.models&&E.models.length>0?e.jsx("div",{className:"flex max-h-24 flex-wrap gap-1 overflow-y-auto",children:E.models.map(te=>e.jsx(H,{variant:"outline",className:"text-xs",children:St(te)},te.id))}):e.jsx("p",{className:"text-xs text-muted-foreground",children:b("providers.card.noModels")})]}),e.jsxs("div",{className:"mt-auto grid gap-2 border-t border-border pt-4 sm:grid-cols-3",children:[e.jsx(F,{variant:"default",size:"sm",onClick:()=>B(E),className:"w-full",children:b("providers.actions.edit")}),e.jsx(F,{variant:"outline",size:"sm",onClick:()=>k(E),disabled:m===E.id,className:"w-full",children:m===E.id?b("common.actions.testingConnection"):b("providers.actions.test")}),e.jsx(F,{variant:"destructive",size:"sm",onClick:()=>M(E),className:"w-full",children:b("providers.actions.delete")})]})]})},E.id)})})]})})}function Qe({helper:s,label:t,value:c}){return e.jsxs("div",{className:"rounded-lg border border-border bg-card px-4 py-3",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-wider text-muted-foreground",children:t}),e.jsx("p",{className:"mt-2 text-base font-semibold text-foreground",children:c}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:s})]})}function Pe({label:s,value:t,truncate:c}){return e.jsxs("div",{className:"rounded-lg border border-border bg-secondary px-3 py-2",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-[0.16em] text-muted-foreground",children:s}),e.jsx("p",{className:ne("mt-1 text-sm font-medium",c&&"truncate"),children:t})]})}function Qs({type:s}){const t={openai:{label:"OpenAI",variant:"success"},deepseek:{label:"DeepSeek",variant:"info"},huawei:{label:"华为云",variant:"warning"},kimi:{label:"Kimi",variant:"purple"},anthropic:{label:"Anthropic",variant:"pink"},custom:{label:"Custom",variant:"secondary"}},{label:c,variant:h}=t[s]||t.custom;return e.jsx(H,{variant:h,className:"text-xs",children:c})}function Gs({value:s,onChange:t,options:c,disabled:h,placeholder:d}){const{t:x}=ee(),[a,n]=y.useState(!1),[m,u]=y.useState(""),g=y.useMemo(()=>{if(!m.trim())return c;const k=m.toLowerCase();return c.filter(M=>M.label.toLowerCase().includes(k)||M.value.toLowerCase().includes(k))},[c,m]),B=k=>{t(k),u(""),n(!1)};return e.jsxs(Ss,{open:a,onOpenChange:k=>{n(k),k&&u("")},children:[e.jsx(Ps,{asChild:!0,children:e.jsx(fe,{value:s,onChange:k=>{t(k.target.value),u(k.target.value),a||n(!0)},onFocus:()=>{u(""),n(!0)},onClick:()=>{a||n(!0)},placeholder:d,disabled:h,autoComplete:"off"})}),e.jsx(Ds,{className:"max-h-60 w-[var(--radix-popover-trigger-width)] overflow-y-auto p-1",align:"start",onOpenAutoFocus:k=>k.preventDefault(),children:g.length===0?e.jsx("div",{className:"px-2 py-3 text-center text-xs text-muted-foreground",children:x("common.noMatches")}):g.map(k=>e.jsx("button",{type:"button",className:ne("flex w-full items-center rounded-sm px-2 py-1.5 text-left text-sm hover:bg-accent",k.value===s.trim()&&"bg-accent"),onMouseDown:M=>{M.preventDefault(),B(k.value)},children:e.jsx("span",{className:"truncate",children:k.label})},k.value))})]})}function Xs({endpoint:s,tabs:t,customEndpoints:c,config:h,routes:d,routeError:x,savingRoute:a,isDirty:n,presets:m,presetName:u,presetError:g,savingPreset:B,applyingPreset:k,deletingPreset:M,presetsExpanded:C,savingClaudeValidation:v,providerModelOptions:f,onTogglePresetsExpanded:b,onPresetNameChange:T,onSavePreset:E,onRequestPresetDiff:X,onRequestDeletePreset:te,onToggleClaudeValidation:le,onRouteChange:J,onRemoveRoute:W,onAddSuggestion:be,onAddRoute:G,onResetRoutes:ke,onSaveRoutes:ve}){var P,I;const{t:R}=ee(),K=t.find(U=>U.key===s),ie=((P=K==null?void 0:K.protocols)==null?void 0:P.includes("anthropic"))??s==="anthropic"?Is:Ks,oe=(K==null?void 0:K.label)??s,ce=(K==null?void 0:K.isSystem)===!1?K.description:R(`settings.routing.descriptionByEndpoint.${s}`),he=`route-source-${s}`,de=Vs(s,c),l=_s(s,h,c),w=de&&(l==null?void 0:l.mode)==="claude-code",O=new Set(d.map(U=>U.source.trim()).filter(Boolean));return e.jsx(Ie,{children:e.jsxs(Ke,{className:"space-y-6 pt-6",children:[e.jsx(Et,{eyebrow:"Routing Workspace",title:R("settings.routing.titleByEndpoint",{endpoint:oe}),description:ce,breadcrumb:[R("modelManagement.title"),oe],aside:e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(H,{variant:"outline",children:[d.length," rules"]}),n?e.jsx(H,{variant:"outline",className:"border-amber-300 text-amber-700 dark:border-amber-700 dark:text-amber-300",children:R("modelManagement.actions.unsaved")}):e.jsx(H,{variant:"secondary",children:R("common.status.success")})]})}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-4",children:[e.jsx(Fe,{label:"Rules",value:d.length.toString(),helper:"Current model routes",tone:"blue"}),e.jsx(Fe,{label:"Presets",value:m.length.toString(),helper:"Reusable routing templates",tone:"emerald"}),e.jsx(Fe,{label:"Protocols",value:(((I=K==null?void 0:K.protocols)==null?void 0:I.length)??0).toString(),helper:"Bound to this endpoint",tone:"amber"}),e.jsx(Fe,{label:"Validation",value:de?w?"Claude Code":"Disabled":"Standard",helper:de?"Anthropic compatibility mode":"Default endpoint routing",tone:"rose"})]}),e.jsx("div",{className:"rounded-lg border border-border bg-secondary px-4 py-3 text-xs text-muted-foreground",children:R("settings.routing.wildcardHint")}),de?e.jsx("div",{className:"rounded-lg border border-primary/20 bg-accent p-4",children:e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium text-primary",children:R("modelManagement.claudeValidation.title")}),e.jsx("p",{className:"text-xs text-primary/80",children:R("modelManagement.claudeValidation.description")})]}),e.jsxs("div",{className:"flex items-center gap-2 self-start sm:self-auto",children:[e.jsx(Ge,{checked:w,onCheckedChange:le,disabled:v}),e.jsx("span",{className:ne("text-xs font-medium",w?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"),children:R(w?"modelManagement.claudeValidation.statusEnabled":"modelManagement.claudeValidation.statusDisabled")})]})]})}):null,x?e.jsx("p",{className:"text-sm text-destructive",children:x}):null,e.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary p-4",children:[e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(Y,{className:"text-sm font-semibold text-foreground",children:R("modelManagement.routesEditorTitle")}),e.jsxs(H,{variant:"outline",children:[d.length," active"]})]}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:R("modelManagement.overview.routesEditorHint")})]}),e.jsxs("div",{className:"self-start rounded-lg border border-border bg-card px-3 py-2 text-[11px] text-muted-foreground",children:[oe," workspace"]})]}),d.length===0?e.jsxs("div",{className:"rounded-lg border border-dashed border-border p-12 text-center text-sm text-muted-foreground",children:[e.jsx("p",{className:"font-medium",children:R("settings.routing.empty")}),e.jsx("p",{className:"mt-2 text-xs",children:R("modelManagement.emptyRoutesHint")})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"hidden grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)_auto] items-center gap-3 px-1 text-xs font-medium text-muted-foreground md:grid",children:[e.jsx("span",{children:R("settings.routing.source")}),e.jsx("span",{}),e.jsx("span",{children:R("settings.routing.target")}),e.jsx("span",{})]}),d.map((U,_)=>e.jsxs("div",{className:"rounded-lg border border-border bg-card p-3",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between md:hidden",children:[e.jsxs(H,{variant:"outline",className:"text-[11px]",children:["#",_+1]}),e.jsx(F,{variant:"ghost",size:"icon",className:"h-8 w-8 text-muted-foreground hover:text-destructive",onClick:()=>W(U.id),disabled:a,children:e.jsx(Re,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)_auto] md:items-center",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(Y,{className:"text-[11px] uppercase tracking-[0.16em] text-muted-foreground md:hidden",children:R("settings.routing.source")}),e.jsx(fe,{value:U.source,onChange:se=>J(U.id,"source",se.target.value),placeholder:R("settings.routing.sourcePlaceholder"),list:he,disabled:a,"aria-label":`route-source-${_+1}`})]}),e.jsx(Me,{className:"hidden h-4 w-4 flex-shrink-0 text-muted-foreground md:block"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(Y,{className:"text-[11px] uppercase tracking-[0.16em] text-muted-foreground md:hidden",children:R("settings.routing.target")}),e.jsx(Gs,{value:U.target,onChange:se=>J(U.id,"target",se),options:f,disabled:a,placeholder:R("settings.routing.targetPlaceholder")})]}),e.jsx(F,{variant:"ghost",size:"icon",className:"hidden h-8 w-8 text-muted-foreground hover:text-destructive md:inline-flex",onClick:()=>W(U.id),disabled:a,children:e.jsx(Re,{className:"h-4 w-4"})})]})]},U.id))]})]}),e.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary p-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(Y,{className:"text-sm font-semibold text-foreground",children:R("settings.routing.suggested")}),e.jsxs(H,{variant:"outline",children:[ie.length," presets"]})]}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:R("modelManagement.overview.suggestionHint")})]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:ie.map(U=>{const _=O.has(U);return e.jsx(F,{variant:_?"ghost":"outline",size:"sm",onClick:()=>be(U),disabled:a||_,className:_?"opacity-50":"",children:U},`${s}-${U}`)})})]}),e.jsxs("div",{className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4 md:flex-row md:items-center md:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium",children:R("modelManagement.actions.footerTitle")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:R(n?"modelManagement.actions.footerDirtyHint":"modelManagement.actions.footerSavedHint")})]}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-3 md:flex md:flex-wrap md:items-center",children:[e.jsx(F,{variant:"outline",size:"sm",onClick:G,disabled:a,className:"w-full",children:R("settings.routing.add")}),e.jsx(F,{variant:"outline",size:"sm",onClick:ke,disabled:a||!n,className:"w-full",children:R("common.actions.reset")}),e.jsxs(F,{size:"sm",onClick:ve,disabled:a,className:"relative w-full",children:[R(a?"common.actions.saving":"modelManagement.actions.saveRoutes"),n?e.jsx("span",{className:"absolute -right-1 -top-1 h-2 w-2 rounded-full bg-amber-500"}):null]})]})]}),e.jsx(Js,{presets:m,presetName:u,presetError:g,savingPreset:B,applyingPreset:k,deletingPreset:M,expanded:C,onToggleExpanded:b,onPresetNameChange:T,onSavePreset:E,onRequestPresetDiff:X,onRequestDeletePreset:te}),e.jsx("datalist",{id:he,children:ie.map(U=>e.jsx("option",{value:U},`${he}-${U}`))})]})})}function Fe({helper:s,label:t,value:c}){return e.jsxs("div",{className:"rounded-lg border border-border bg-card px-4 py-3",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-wider text-muted-foreground",children:t}),e.jsx("p",{className:"mt-2 truncate text-base font-semibold text-foreground",children:c}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:s})]})}function Js({presets:s,presetName:t,presetError:c,savingPreset:h,applyingPreset:d,deletingPreset:x,expanded:a,onToggleExpanded:n,onPresetNameChange:m,onSavePreset:u,onRequestPresetDiff:g,onRequestDeletePreset:B}){const{t:k}=ee();return e.jsxs("div",{className:"rounded-lg border border-dashed border-border bg-card",children:[e.jsx("button",{type:"button",className:"flex w-full items-center justify-between gap-3 p-4 text-left transition-colors hover:bg-primary/5",onClick:n,children:e.jsxs("div",{className:"flex items-center gap-2",children:[a?e.jsx(vs,{className:"h-4 w-4"}):e.jsx(ht,{className:"h-4 w-4"}),e.jsx("h3",{className:"font-medium",children:k("modelManagement.presets.title")}),e.jsx(H,{variant:"secondary",className:"text-xs",children:s.length})]})}),a?e.jsxs("div",{className:"space-y-4 border-t px-4 pb-4 pt-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:k("modelManagement.presets.description")}),e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center",children:[e.jsx(fe,{value:t,onChange:M=>m(M.target.value),placeholder:k("modelManagement.presets.namePlaceholder"),disabled:h,className:"w-full md:w-48"}),e.jsx(F,{onClick:u,disabled:h,className:"w-full md:w-auto",children:k(h?"modelManagement.presets.saving":"modelManagement.presets.save")})]}),c?e.jsx("p",{className:"text-sm text-destructive",children:c}):null,s.length===0?e.jsx("p",{className:"py-4 text-center text-sm text-muted-foreground",children:k("modelManagement.presets.empty")}):e.jsx(ws,{children:e.jsx("div",{className:"grid gap-2 sm:grid-cols-2 lg:grid-cols-3",children:s.map(M=>{const C=d===M.name,v=x===M.name,f=Object.entries(M.modelRoutes??{}),b=f.length;return e.jsxs("div",{className:"flex flex-col gap-3 rounded-lg border border-border bg-secondary px-4 py-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs(Ms,{children:[e.jsx(ks,{asChild:!0,children:e.jsxs("div",{className:"min-w-0 flex-1 cursor-default",children:[e.jsx("span",{className:"block truncate text-sm font-medium",children:M.name}),e.jsx(H,{variant:"outline",className:"mt-1 text-xs",children:b>0?k("modelManagement.presets.rulesCount",{count:b}):k("modelManagement.presets.noRules")})]})}),b>0?e.jsx(Cs,{side:"bottom",className:"max-w-xs",children:e.jsxs("div",{className:"space-y-1 text-xs",children:[f.slice(0,5).map(([T,E])=>e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"truncate",children:T}),e.jsx(Me,{className:"h-3 w-3 flex-shrink-0"}),e.jsx("span",{className:"truncate",children:E})]},T)),b>5?e.jsxs("div",{className:"text-muted-foreground",children:["…+",b-5]}):null]})}):null]}),e.jsxs("div",{className:"grid flex-shrink-0 gap-2 sm:flex sm:items-center",children:[e.jsx(F,{size:"sm",onClick:()=>g(M),disabled:C||v,className:"w-full sm:w-auto",children:k(C?"modelManagement.presets.applying":"modelManagement.presets.apply")}),e.jsx(F,{variant:"destructive",size:"sm",onClick:()=>B(M),disabled:v||C,className:"w-full sm:w-auto",children:k(v?"modelManagement.presets.deleting":"modelManagement.presets.delete")})]})]},M.name)})})})]}):null]})}function Ys({open:s,provider:t,options:c,usePreset:h,preservedExtras:d,onPresetChange:x,onConfirm:a,onClose:n}){const{t:m}=ee();return t?e.jsx(jt,{open:s,onOpenChange:u=>!u&&n(),children:e.jsxs(yt,{className:"max-w-2xl",children:[e.jsxs(Nt,{children:[e.jsx(wt,{children:m("providers.testDialog.title")}),e.jsx(Mt,{children:m("providers.testDialog.subtitle",{name:t.label||t.id})})]}),e.jsxs(kt,{className:"space-y-4",children:[e.jsx("div",{className:"rounded-lg border border-primary/20 bg-accent p-4 text-sm text-primary",children:m("providers.testDialog.description")}),e.jsxs("div",{className:"space-y-4 rounded-lg border border-border bg-secondary p-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Y,{htmlFor:"provider-test-preset",children:m("providers.testDialog.presetLabel")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:m("providers.testDialog.presetDescription")})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsx(Ge,{id:"provider-test-preset",checked:h,onCheckedChange:x})})]}),h?e.jsx("div",{className:"space-y-2",children:e.jsxs("details",{className:"rounded-lg border border-border bg-secondary p-2 text-xs",children:[e.jsx("summary",{className:"cursor-pointer text-primary hover:underline",children:m("providers.testDialog.presetPreviewSummary")}),e.jsx("div",{className:"mt-2 space-y-1",children:c.map(u=>e.jsxs("code",{className:"block rounded-md border border-border bg-card px-2 py-1 text-xs",children:[u.key,": ",u.value]},u.key))})]})}):e.jsx("p",{className:"text-xs text-muted-foreground",children:m("providers.testDialog.presetDescription")})]}),Object.keys(d).length>0&&e.jsxs("div",{className:"space-y-2 rounded-lg border border-border bg-secondary p-4 text-xs",children:[e.jsx("p",{className:"font-medium",children:m("providers.testDialog.preservedInfo")}),Object.entries(d).map(([u,g])=>e.jsxs("code",{className:"block rounded-md border border-border bg-card px-2 py-1",children:[u,": ",g]},u))]})]}),e.jsxs(Ct,{children:[e.jsx(F,{variant:"outline",onClick:n,children:m("providers.testDialog.cancel")}),e.jsx(F,{onClick:()=>void a(),children:m("providers.testDialog.primary")})]})]})}):null}const Be={savePreset(s,t){return Ae(Ue.post(`/api/routing-presets/${s}`,{name:t}))},applyPreset(s,t){return Ae(Ue.post(`/api/routing-presets/${s}/apply`,{name:t}))},deletePreset(s,t){return Ae(Ue.delete(`/api/routing-presets/${s}/${encodeURIComponent(t)}`))},testProvider(s,t){return Ae(Ue.post(`/api/providers/${s}/test`,t))}};function pt(s,t){var h,d,x;const c={anthropic:((h=s.routingPresets)==null?void 0:h.anthropic)??[],openai:((d=s.routingPresets)==null?void 0:d.openai)??[]};for(const a of t){const n=(x=s.customEndpoints)==null?void 0:x.find(m=>m.id===a.id);c[a.id]=(n==null?void 0:n.routingPresets)??a.routingPresets??[]}return c}function Zs(){var nt;const{t:s}=ee(),{pushToast:t}=Es(),c=Rs(),h=Os(ge.config.full(),we.configRequest()),x=((nt=Ts({queryKey:ge.customEndpoints.all(),queryFn:De.list,refetchInterval:1e4}).data)==null?void 0:nt.endpoints)??[],a=y.useMemo(()=>qs(s,x),[x,s]),[n,m]=y.useState("providers"),[u,g]=y.useState(null),[B,k]=y.useState(!1),[M,C]=y.useState("create"),[v,f]=y.useState(void 0),[b,T]=y.useState(void 0),[E,X]=y.useState(null),[te,le]=y.useState(!1),[J,W]=y.useState({}),[be,G]=y.useState({}),[ke,ve]=y.useState(null),[R,K]=y.useState({}),[Ce,ie]=y.useState({}),[oe,ce]=y.useState({}),[he,de]=y.useState(null),[l,w]=y.useState(null),[O,P]=y.useState(null),[I,U]=y.useState(!1),[_,se]=y.useState(null),[je,me]=y.useState(!0),[Ee,ue]=y.useState({}),[Pt,Ye]=y.useState(!1),[Dt,Rt]=y.useState({}),[Tt,Ot]=y.useState(null),[S,Ze]=y.useState(null),[At,et]=y.useState(!1),[Ve,Ut]=y.useState(""),[Te,$t]=y.useState("all"),Lt=y.useMemo(()=>a.filter(r=>r.isSystem),[a]),Ft=y.useMemo(()=>a.filter(r=>!r.isSystem),[a]),Bt=y.useMemo(()=>a.find(r=>r.key===n)??a[0]??null,[n,a]),Z=(u==null?void 0:u.providers)??[],Ht=Z.length,It=y.useMemo(()=>Z.filter(r=>{var N;if(!(Te==="all"||(r.type??"custom")===Te))return!1;const o=Ve.trim().toLowerCase();return o?[r.id,r.label??"",r.baseUrl,r.defaultModel??"",...((N=r.models)==null?void 0:N.map(j=>j.id))??[]].join(" ").toLowerCase().includes(o):!0}),[Ve,Te,Z]),Se=y.useMemo(()=>[{key:"anthropic-beta",value:"claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14",label:s("providers.testDialog.options.beta.label"),description:s("providers.testDialog.options.beta.description")}],[s]);y.useEffect(()=>{if(!h.data)return;const r=h.data;g(r),W(i=>{const o=We(r,x);if(!i||Object.keys(i).length===0)return o;const p={...o};for(const[N,j]of Object.entries(i)){if(!(N in o))continue;const D=mt(r,x,N);ut(j,D)&&(p[N]=j)}return p}),G({}),K(pt(r,x))},[h.data,x]),y.useEffect(()=>{!h.isError||!h.error||t({title:s("providers.toast.loadFailure",{message:h.error.message}),variant:"error"})},[h.error,h.isError,t,s]),y.useEffect(()=>{a.some(r=>r.key===n)||m("providers")},[n,a]);const Kt=y.useMemo(()=>{const r=new Map;for(const i of Z){if(!i.defaultModel||!i.models)continue;const o=i.models.find(p=>p.id===i.defaultModel);o&&r.set(i.id,St(o))}return r},[Z]),zt=y.useMemo(()=>{const r=[],i=new Set;for(const o of Z){const p=o.label&&o.label!==o.id?`${o.label} (${o.id})`:o.id,N=o.models??[];if(N.length>0)for(const D of N){const L=`${o.id}:${D.id}`;i.has(L)||(i.add(L),r.push({value:L,label:`${p} · ${D.label??D.id}`}))}else if(o.defaultModel){const D=`${o.id}:${o.defaultModel}`;i.has(D)||(i.add(D),r.push({value:D,label:`${p} · ${o.defaultModel}`}))}const j=`${o.id}:*`;i.has(j)||(i.add(j),r.push({value:j,label:s("settings.routing.providerPassthroughOption",{provider:p})}))}for(const o of Object.values(J).flat()){const p=o.target.trim();p&&!i.has(p)&&(i.add(p),r.push({value:p,label:p}))}return r},[Z,J,s]),Vt=()=>{T(void 0),le(!0)},_t=r=>{T(r),le(!0)},qt=r=>u?mt(u,x,r):{},Wt=y.useMemo(()=>{const r={};for(const i of a){if(i.key==="providers")continue;const o=J[i.key]||[];r[i.key]=ut(o,qt(i.key))}return r},[u,x,J,a]),tt=(r,i)=>{K(o=>({...o,[r]:i})),g(o=>{if(!o)return o;if(r==="anthropic"||r==="openai")return{...o,routingPresets:{...o.routingPresets,[r]:i}};const p=[...o.customEndpoints??[]],N=p.findIndex(j=>j.id===r);return N===-1?o:(p[N]={...p[N],routingPresets:i},{...o,customEndpoints:p})})},pe=()=>u?!0:(t({title:s("settings.toast.missingConfig"),variant:"error"}),h.refetch(),!1),Qt=(r,i)=>{ie(o=>({...o,[r]:i})),i.trim()&&ce(o=>({...o,[r]:null}))},Gt=async r=>{if(!pe())return;const i=(Ce[r]??"").trim();if(!i){ce(o=>({...o,[r]:s("modelManagement.validation.presetName")}));return}if((R[r]??[]).some(o=>o.name.toLowerCase()===i.toLowerCase())){ce(o=>({...o,[r]:s("modelManagement.validation.presetDuplicate",{name:i})}));return}de(r);try{const p=(await Be.savePreset(r,i)).presets??[];tt(r,p),ie(N=>({...N,[r]:""})),ce(N=>({...N,[r]:null})),t({title:s("modelManagement.toast.presetSaved",{name:i}),variant:"success"})}catch(o){t({title:s("modelManagement.toast.presetSaveFailure",{message:o instanceof Error?o.message:"unknown"}),variant:"error"})}finally{de(null),h.refetch()}},Xt=async(r,i)=>{if(pe()){w({endpoint:r,name:i.name});try{const p=(await Be.applyPreset(r,i.name)).config;if(p)g(p),W(We(p,x)),K(pt(p,x));else{const N=i.modelRoutes??{};W(j=>({...j,[r]:Object.entries(N).map(([D,L])=>({id:ae(),source:D,target:L}))})),g(j=>{var L,$,A,z;if(!j)return j;const D=(j.customEndpoints??[]).findIndex(V=>V.id===r);if(D!==-1){const V=[...j.customEndpoints??[]],re=V[D];return V[D]={...re,routing:{defaults:((L=re.routing)==null?void 0:L.defaults)??j.defaults,...re.routing??{},modelRoutes:N}},{...j,customEndpoints:V}}return r==="anthropic"||r==="openai"?{...j,endpointRouting:{...j.endpointRouting??{},[r]:{defaults:((A=($=j.endpointRouting)==null?void 0:$[r])==null?void 0:A.defaults)??j.defaults,...((z=j.endpointRouting)==null?void 0:z[r])??{},modelRoutes:N}},modelRoutes:r==="anthropic"?N:j.modelRoutes??{}}:j})}r!=="anthropic"&&r!=="openai"&&await c.invalidateQueries({queryKey:ge.customEndpoints.all()}),t({title:s("modelManagement.toast.presetApplySuccess",{name:i.name}),variant:"success"})}catch(o){t({title:s("modelManagement.toast.presetApplyFailure",{message:o instanceof Error?o.message:"unknown"}),variant:"error"})}finally{w(null),h.refetch()}}},Jt=async(r,i)=>{if(pe()){P({endpoint:r,name:i.name});try{const o=await Be.deletePreset(r,i.name);tt(r,o.presets??[]),t({title:s("modelManagement.toast.presetDeleteSuccess",{name:i.name}),variant:"success"})}catch(o){t({title:s("modelManagement.toast.presetDeleteFailure",{message:o instanceof Error?o.message:"unknown"}),variant:"error"})}finally{P(null),h.refetch()}}},Yt=()=>{pe()&&(C("create"),f(void 0),k(!0))},Zt=r=>{pe()&&(C("edit"),f(r),k(!0))},es=async r=>{if(!u)throw new Error(s("settings.toast.missingConfig"));const i=M==="create"?[...Z,r]:Z.map(p=>v&&p.id===v.id?{...r,id:v.id}:p),o={...u,providers:i};await we.saveConfig(o),g(o),W(We(o,x)),h.refetch(),t({title:M==="create"?s("providers.toast.createSuccess",{name:r.label||r.id}):s("providers.toast.updateSuccess",{name:r.label||r.id}),variant:"success"})},ts=async r=>{const i=x.find(o=>o.id===r);if(!(!i||i.deletable===!1))try{await De.delete(r),await c.invalidateQueries({queryKey:ge.customEndpoints.all()}),t({title:s("modelManagement.deleteEndpointSuccess"),variant:"success"}),n===r&&m("providers")}catch(o){const p=dt(o);t({title:s("modelManagement.deleteEndpointError",{error:p.message}),variant:"error"})}},st=async(r,i)=>{X(r.id);try{const o=i&&(i.headers||i.query)?{headers:i.headers&&Object.keys(i.headers).length>0?i.headers:void 0,query:i.query&&i.query.trim().length>0?i.query.trim():void 0}:void 0,p=await Be.testProvider(r.id,o);if(p.ok){t({title:s("providers.toast.testSuccess"),description:s("providers.toast.testSuccessDesc",{status:p.status,duration:p.durationMs?`${p.durationMs} ms`:"—"}),variant:"success"});return}t({title:s("providers.toast.testFailure",{message:`${p.status} ${p.statusText}`}),variant:"error"})}catch(o){t({title:s("providers.toast.testFailure",{message:o instanceof Error?o.message:"unknown"}),variant:"error"})}finally{X(null)}},ss=r=>{if(r.type!=="anthropic"){st(r);return}const i=r.extraHeaders??{},o=new Map(Se.map(j=>[j.key.toLowerCase(),j])),p={};let N=!0;for(const j of Se){const D=Object.entries(i).find(([A])=>A.toLowerCase()===j.key.toLowerCase());if(!D)continue;const[L,$]=D;String($??"")!==j.value&&(N=!1,p[L]=String($??""))}for(const[j,D]of Object.entries(i))o.has(j.toLowerCase())||(p[j]=String(D??""));ue(p),me(N),se(r),U(!0)},rt=()=>{U(!1),se(null),me(!0),ue({})},rs=async()=>{if(!_)return;const r={};if(je)for(const p of Se)r[p.key]=p.value;const i=new Map(Se.map(p=>[p.key.toLowerCase(),p]));for(const[p,N]of Object.entries(Ee))i.get(p.toLowerCase())&&je||(r[p]=N);const o=_;rt(),await st(o,{headers:Object.keys(r).length>0?r:void 0,query:je?"beta=true":void 0})},at=async r=>{var $,A,z,V,re,Oe;if(!pe())return;const i=Z.filter(q=>q.id!==r.id),o=q=>{const Q={};if(!q)return Q;for(const[ye,Ne]of Object.entries(q)){if(!Ne)continue;const[ot]=Ne.split(":");ot&&ot===r.id||Ne===r.id||(Q[ye]=Ne)}return Q},p=(u==null?void 0:u.endpointRouting)??{},N=o((($=p.anthropic)==null?void 0:$.modelRoutes)??(u==null?void 0:u.modelRoutes)??{}),j=o(((A=p.openai)==null?void 0:A.modelRoutes)??{}),D=((u==null?void 0:u.customEndpoints)??x).map(q=>{const Q=q.routing,ye=Q==null?void 0:Q.modelRoutes;return ye?{...q,routing:{...Q,defaults:Q.defaults??u.defaults,modelRoutes:o(ye)}}:q}),L={...u,providers:i,modelRoutes:N,customEndpoints:D,endpointRouting:{anthropic:{defaults:((z=p.anthropic)==null?void 0:z.defaults)??u.defaults,modelRoutes:N,validation:(V=p.anthropic)==null?void 0:V.validation},openai:{defaults:((re=p.openai)==null?void 0:re.defaults)??u.defaults,modelRoutes:j,validation:(Oe=p.openai)==null?void 0:Oe.validation}}};try{await we.saveConfig(L),g(L),W({anthropic:Object.entries(N).map(([q,Q])=>({id:ae(),source:q,target:Q})),openai:Object.entries(j).map(([q,Q])=>({id:ae(),source:q,target:Q})),...Object.fromEntries(D.map(q=>{var Q;return[q.id,Object.entries(((Q=q.routing)==null?void 0:Q.modelRoutes)??{}).map(([ye,Ne])=>({id:ae(),source:ye,target:Ne}))]}))}),t({title:s("providers.toast.deleteSuccess",{name:r.label||r.id}),variant:"success"}),h.refetch()}catch(q){t({title:s("providers.toast.deleteFailure",{message:q instanceof Error?q.message:"unknown"}),variant:"error"})}},as=async()=>{if(S){et(!0);try{S.kind==="provider"?await at(S.provider):S.kind==="preset"?await Jt(S.endpoint,S.preset):await ts(S.endpoint.id),Ze(null)}finally{et(!1)}}},ns=r=>{W(i=>({...i,[r]:[...i[r]||[],{id:ae(),source:"",target:""}]})),G(i=>({...i,[r]:null}))},os=async(r,i)=>{var o,p;if(pe()){Ye(!0);try{if(r==="anthropic"||r==="openai"){const N=r,j=u.endpointRouting?{...u.endpointRouting}:{},D=j[N]??{defaults:u.defaults,modelRoutes:(N==="anthropic"?u.modelRoutes:{})??{}},L={defaults:D.defaults??u.defaults,modelRoutes:D.modelRoutes??{}},$=i?{...D.validation??{},mode:"claude-code",allowExperimentalBlocks:((o=D.validation)==null?void 0:o.allowExperimentalBlocks)??!0}:void 0,A={...u,endpointRouting:{...j,[N]:$?{...L,validation:$}:{...L}}};await we.saveConfig(A),g(A)}else{const N=[...u.customEndpoints??[]],j=N.findIndex(z=>z.id===r);if(j===-1)throw new Error(s("modelManagement.toast.endpointNotFound"));const D=N[j],L=D.routing??{defaults:u.defaults,modelRoutes:{}},$=i?{...L.validation??{},mode:"claude-code",allowExperimentalBlocks:((p=L.validation)==null?void 0:p.allowExperimentalBlocks)??!0}:void 0;N[j]={...D,routing:$?{...L,validation:$}:{defaults:L.defaults,modelRoutes:L.modelRoutes}};const A={...u,customEndpoints:N};await we.saveConfig(A),g(A)}t({title:s(i?"modelManagement.toast.claudeValidationEnabled":"modelManagement.toast.claudeValidationDisabled"),variant:"success"}),h.refetch()}catch(N){const j=dt(N);t({title:s("modelManagement.toast.claudeValidationFailure",{message:j.message}),variant:"error"})}finally{Ye(!1)}}},ds=(r,i)=>{W(o=>{const p=o[r]||[];return p.some(N=>N.source.trim()===i.trim())?o:{...o,[r]:[...p,{id:ae(),source:i,target:""}]}}),G(o=>({...o,[r]:null}))},ls=(r,i,o,p)=>{W(N=>({...N,[r]:(N[r]||[]).map(j=>j.id===i?{...j,[o]:p}:j)})),G(N=>({...N,[r]:null}))},is=(r,i)=>{W(o=>({...o,[r]:(o[r]||[]).filter(p=>p.id!==i)})),G(o=>({...o,[r]:null}))},cs=r=>{var o;if(!u)return;const i=(u.customEndpoints??x).find(p=>p.id===r);if(i)W(p=>{var N;return{...p,[r]:Object.entries(((N=i.routing)==null?void 0:N.modelRoutes)??{}).map(([j,D])=>({id:ae(),source:j,target:D}))}});else{const p=u.endpointRouting??{},N=r,j=N==="anthropic"?u.modelRoutes??{}:{},D=((o=p[N])==null?void 0:o.modelRoutes)??j;W(L=>({...L,[r]:Object.entries(D).map(([$,A])=>({id:ae(),source:$,target:A}))}))}G(p=>({...p,[r]:null}))},ms=He({mutationFn:async r=>(await we.saveConfig(r.nextConfig),r)}),us=He({mutationFn:async r=>(await De.update(r.endpoint,{routing:r.routing}),r)}),ps=async r=>{var p,N,j,D,L;if(!pe())return;const i=J[r]||[],o={};for(const $ of i){const A=$.source.trim(),z=$.target.trim();if(!(!A&&!z)){if(!A||!z){G(V=>({...V,[r]:s("settings.validation.routePair")}));return}if(o[A]){G(V=>({...V,[r]:s("settings.validation.routeDuplicate",{model:A})}));return}o[A]=z}}G($=>({...$,[r]:null})),ve(r);try{const $=x.find(A=>A.id===r);if($){const A={...$.routing??{},modelRoutes:o,defaults:((p=$.routing)==null?void 0:p.defaults)||u.defaults};await us.mutateAsync({endpoint:r,routing:A}),g(z=>{if(!z)return z;const V=[...z.customEndpoints??[]],re=V.findIndex(Oe=>Oe.id===r);return re===-1?z:(V[re]={...V[re],routing:A},{...z,customEndpoints:V})}),await c.invalidateQueries({queryKey:ge.customEndpoints.all()})}else{const A={...u,endpointRouting:{...u.endpointRouting??{},[r]:{defaults:((j=(N=u.endpointRouting)==null?void 0:N[r])==null?void 0:j.defaults)??u.defaults,modelRoutes:o,validation:(L=(D=u.endpointRouting)==null?void 0:D[r])==null?void 0:L.validation}},modelRoutes:r==="anthropic"?o:u.modelRoutes??{}};await ms.mutateAsync({endpoint:r,nextConfig:A}),g(A)}W(A=>({...A,[r]:Object.entries(o).map(([z,V])=>({id:ae(),source:z,target:V}))})),t({title:s("modelManagement.toast.routesSaved"),variant:"success"}),h.refetch()}catch($){t({title:s("modelManagement.toast.routesSaveFailure",{message:$ instanceof Error?$.message:"unknown"}),variant:"error"})}finally{ve(null)}},xs=(S==null?void 0:S.kind)==="provider"?s("providers.actions.delete"):(S==null?void 0:S.kind)==="preset"?s("modelManagement.presets.delete"):(S==null?void 0:S.kind)==="endpoint"?s("common.delete"):"",hs=(S==null?void 0:S.kind)==="provider"?s("providers.confirm.delete",{name:S.provider.label||S.provider.id}):(S==null?void 0:S.kind)==="preset"?s("modelManagement.confirm.deletePreset",{name:S.preset.name}):(S==null?void 0:S.kind)==="endpoint"?s("modelManagement.deleteEndpointConfirm",{label:S.endpoint.label}):"",gs=(S==null?void 0:S.kind)==="provider"?S.provider.label||S.provider.id:(S==null?void 0:S.kind)==="preset"?S.preset.name:(S==null?void 0:S.kind)==="endpoint"?S.endpoint.label:"";return{activeTab:n,activeTabInfo:Bt,anthropicTestHeaderOptions:Se,applyingPreset:l,config:u,configQuery:h,confirmAction:S,confirmDialogDescription:hs,confirmDialogName:gs,confirmDialogTitle:xs,confirmingAction:At,customEndpoints:x,customTabs:Ft,defaultLabels:Kt,deletingPreset:O,drawerMode:M,drawerOpen:B,editingEndpoint:b,editingProvider:v,endpointDrawerOpen:te,filteredProviders:It,handleAddRoute:ns,handleAddSuggestion:ds,handleApplyPreset:Xt,handleConfirmDialog:as,handleDeleteProvider:at,handleOpenCreate:Yt,handleOpenCreateEndpoint:Vt,handleOpenEditEndpoint:_t,handleOpenEdit:Zt,handlePresetNameChange:Qt,handleProviderSubmit:es,handleRemoveRoute:is,handleResetRoutes:cs,handleRouteChange:ls,handleSavePreset:Gt,handleSaveRoutes:ps,handleToggleClaudeValidation:os,initiateTestConnection:ss,isDirtyByEndpoint:Wt,presetDiffDialog:Tt,presetErrorByEndpoint:oe,presetNameByEndpoint:Ce,presetsByEndpoint:R,presetsExpanded:Dt,providerCount:Ht,providerModelOptions:zt,providerSearch:Ve,providerTypeFilter:Te,providers:Z,pushToast:t,routeError:be,routesByEndpoint:J,savingClaudeValidation:Pt,savingPresetFor:he,savingRouteFor:ke,setActiveTab:m,setConfirmAction:Ze,setDrawerMode:C,setDrawerOpen:k,setEditingEndpoint:T,setEditingProvider:f,setEndpointDrawerOpen:le,setPresetDiffDialog:Ot,setPresetsExpanded:Rt,setProviderSearch:Ut,setProviderTypeFilter:$t,setTestDialogUsePreset:me,systemTabs:Lt,tabs:a,testDialogOpen:I,testDialogPreservedExtras:Ee,testDialogProvider:_,testDialogUsePreset:je,testingProviderId:E,closeTestDialog:rt,confirmTestDialog:rs}}function jr(){var x,a,n;const{t:s}=ee(),t=Zs(),c=Object.values(t.isDirtyByEndpoint).filter(Boolean).length,h=Math.max(0,t.systemTabs.length-1)+t.customTabs.length,d=t.activeTab==="providers"?s("modelManagement.header.providersHelper"):s("modelManagement.header.routingHelper",{name:((x=t.activeTabInfo)==null?void 0:x.label)??t.activeTab});return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(Ns,{icon:e.jsx(js,{className:"h-5 w-5","aria-hidden":"true"}),title:s("modelManagement.title"),description:s("modelManagement.description"),eyebrow:"Routing Control",breadcrumb:"Gateway / Model Management",helper:d,badge:c>0?s("modelManagement.overview.unsavedCount",{count:c}):void 0,actions:e.jsxs("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:flex-wrap sm:justify-end",children:[e.jsxs("div",{className:"rounded-lg border border-border bg-secondary px-3 py-2 text-xs text-muted-foreground",children:[s("modelManagement.tabs.providers")," · ",t.providerCount," / ",s("modelManagement.overview.routeWorkspacesStat")," · ",h]}),e.jsx(F,{onClick:t.handleOpenCreateEndpoint,className:"w-full sm:w-auto",children:s("modelManagement.addEndpoint")})]})}),e.jsx(Bs,{activeTab:t.activeTab,activeTabInfo:t.activeTabInfo,customEndpoints:t.customEndpoints,customTabs:t.customTabs,isDirtyByEndpoint:t.isDirtyByEndpoint,onDeleteEndpoint:t.setConfirmAction,onEditEndpoint:t.handleOpenEditEndpoint,onSelectTab:t.setActiveTab,providerCount:t.providerCount,systemTabs:t.systemTabs}),t.activeTab==="providers"?e.jsx(Ws,{configPending:t.configQuery.isPending||!t.config&&t.configQuery.isFetching,configFetching:t.configQuery.isFetching,defaultLabels:t.defaultLabels,filteredProviders:t.filteredProviders,onOpenCreate:t.handleOpenCreate,onOpenEdit:t.handleOpenEdit,onRefresh:()=>void t.configQuery.refetch(),onRequestDelete:m=>t.setConfirmAction({kind:"provider",provider:m}),onResetFilters:()=>{t.setProviderSearch(""),t.setProviderTypeFilter("all")},onProviderSearchChange:t.setProviderSearch,onProviderTypeChange:t.setProviderTypeFilter,onTestConnection:t.initiateTestConnection,providerCount:t.providerCount,providerSearch:t.providerSearch,providerTypeFilter:t.providerTypeFilter,providersLength:t.providers.length,testingProviderId:t.testingProviderId}):e.jsx(Xs,{endpoint:t.activeTab,applyingPreset:((a=t.applyingPreset)==null?void 0:a.endpoint)===t.activeTab?t.applyingPreset.name:null,config:t.config,customEndpoints:t.customEndpoints,deletingPreset:((n=t.deletingPreset)==null?void 0:n.endpoint)===t.activeTab?t.deletingPreset.name:null,isDirty:t.isDirtyByEndpoint[t.activeTab]??!1,onAddRoute:()=>t.handleAddRoute(t.activeTab),onAddSuggestion:m=>t.handleAddSuggestion(t.activeTab,m),onPresetNameChange:m=>t.handlePresetNameChange(t.activeTab,m),onRequestDeletePreset:m=>t.setConfirmAction({kind:"preset",endpoint:t.activeTab,preset:m}),onRequestPresetDiff:m=>t.setPresetDiffDialog({endpoint:t.activeTab,preset:m}),onRemoveRoute:m=>t.handleRemoveRoute(t.activeTab,m),onResetRoutes:()=>t.handleResetRoutes(t.activeTab),onRouteChange:(m,u,g)=>t.handleRouteChange(t.activeTab,m,u,g),onSavePreset:()=>void t.handleSavePreset(t.activeTab),onSaveRoutes:()=>void t.handleSaveRoutes(t.activeTab),onToggleClaudeValidation:m=>void t.handleToggleClaudeValidation(t.activeTab,m),onTogglePresetsExpanded:()=>t.setPresetsExpanded(m=>({...m,[t.activeTab]:!m[t.activeTab]})),presetError:t.presetErrorByEndpoint[t.activeTab],presetName:t.presetNameByEndpoint[t.activeTab]??"",presets:t.presetsByEndpoint[t.activeTab]??[],presetsExpanded:t.presetsExpanded[t.activeTab]===!0,providerModelOptions:t.providerModelOptions,routeError:t.routeError[t.activeTab],routes:t.routesByEndpoint[t.activeTab]||[],savingClaudeValidation:t.savingClaudeValidation,savingPreset:t.savingPresetFor===t.activeTab,savingRoute:t.savingRouteFor===t.activeTab,tabs:t.tabs}),e.jsx($s,{open:t.drawerOpen,mode:t.drawerMode,provider:t.drawerMode==="edit"?t.editingProvider:void 0,existingProviderIds:t.providers.map(m=>m.id).filter(m=>t.drawerMode==="edit"&&t.editingProvider?m!==t.editingProvider.id:!0),onClose:()=>{t.setDrawerOpen(!1),t.setEditingProvider(void 0),t.setDrawerMode("create")},onSubmit:t.handleProviderSubmit}),e.jsx(Fs,{open:t.endpointDrawerOpen,endpoint:t.editingEndpoint,onClose:()=>{t.setEndpointDrawerOpen(!1),t.setEditingEndpoint(void 0)},onSuccess:()=>{t.configQuery.refetch()}}),e.jsx(Ys,{open:t.testDialogOpen,provider:t.testDialogProvider,options:t.anthropicTestHeaderOptions,preservedExtras:t.testDialogPreservedExtras,usePreset:t.testDialogUsePreset,onPresetChange:t.setTestDialogUsePreset,onConfirm:t.confirmTestDialog,onClose:t.closeTestDialog}),e.jsx(Hs,{dialog:t.presetDiffDialog,currentRoutes:t.presetDiffDialog?t.routesByEndpoint[t.presetDiffDialog.endpoint]||[]:[],onConfirm:(m,u)=>{t.setPresetDiffDialog(null),t.handleApplyPreset(m,u)},onClose:()=>t.setPresetDiffDialog(null)}),e.jsx(ys,{open:!!t.confirmAction,onOpenChange:m=>{!m&&!t.confirmingAction&&t.setConfirmAction(null)},title:t.confirmDialogTitle,description:t.confirmDialogDescription,confirmLabel:t.confirmingAction?s("common.actions.loading"):s("common.delete"),cancelLabel:s("common.actions.cancel"),loading:t.confirmingAction,onConfirm:t.handleConfirmDialog,children:t.confirmDialogName?e.jsx("div",{className:"rounded-[1rem] border border-destructive/20 bg-destructive/5 px-3 py-2 font-mono text-xs text-foreground",children:t.confirmDialogName}):null})]})}export{jr as default};
@@ -1 +0,0 @@
1
- *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 210 17% 98%;--foreground: 213 10% 14%;--card: 0 0% 100%;--card-foreground: 213 10% 14%;--popover: 0 0% 100%;--popover-foreground: 213 10% 14%;--primary: 217 89% 51%;--primary-foreground: 0 0% 100%;--secondary: 213 14% 95%;--secondary-foreground: 213 10% 14%;--muted: 213 14% 95%;--muted-foreground: 213 7% 39%;--accent: 217 100% 93%;--accent-foreground: 217 80% 40%;--destructive: 4 85% 57%;--destructive-foreground: 0 0% 100%;--border: 213 14% 87%;--input: 213 14% 87%;--ring: 217 89% 51%;--radius: .5rem;--success: 145 63% 32%;--success-bg: 138 45% 93%;--warning: 35 100% 35%;--warning-bg: 48 100% 94%;--error: 4 85% 57%;--error-bg: 5 92% 95%;--info: 217 89% 51%;--info-bg: 217 100% 93%;--chart-1: 217 89% 51%;--chart-2: 140 57% 42%;--chart-3: 44 100% 50%;--chart-4: 4 85% 57%;--chart-5: 271 55% 56%}.dark,[data-theme=dark]{--background: 220 9% 14%;--foreground: 213 10% 91%;--card: 220 9% 17%;--card-foreground: 213 10% 91%;--popover: 220 9% 17%;--popover-foreground: 213 10% 91%;--primary: 217 89% 67%;--primary-foreground: 220 9% 14%;--secondary: 220 9% 21%;--secondary-foreground: 213 10% 91%;--muted: 220 9% 21%;--muted-foreground: 213 7% 60%;--accent: 217 50% 25%;--accent-foreground: 217 89% 67%;--destructive: 4 75% 65%;--destructive-foreground: 0 0% 100%;--border: 220 9% 24%;--input: 220 9% 24%;--ring: 217 89% 67%;--chart-1: 217 89% 67%;--chart-2: 140 57% 55%;--chart-3: 44 100% 60%;--chart-4: 4 75% 65%;--chart-5: 271 55% 70%}*{border-color:hsl(var(--border))}html,body,#root{height:100%;width:100%;overflow-x:hidden}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Google Sans,Inter,Segoe UI,PingFang SC,Noto Sans SC,sans-serif;font-feature-settings:"rlig" 1,"calt" 1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.-right-1{right:-.25rem}.-top-1{top:-.25rem}.bottom-4{bottom:1rem}.left-0{left:0}.left-2{left:.5rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-20{top:5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[-3px\]{top:-3px}.top-\[-6px\]{top:-6px}.top-\[50\%\]{top:50%}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.m-4{margin:1rem}.m-5{margin:1.25rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[280px\]{height:280px}.h-\[320px\]{height:320px}.h-\[40vh\]{height:40vh}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-40{max-height:10rem}.max-h-56{max-height:14rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[420px\]{max-height:420px}.max-h-\[78vh\]{max-height:78vh}.max-h-\[85vh\]{max-height:85vh}.max-h-screen{max-height:100vh}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[160px\]{min-height:160px}.min-h-\[180px\]{min-height:180px}.min-h-\[200px\]{min-height:200px}.min-h-\[220px\]{min-height:220px}.min-h-\[240px\]{min-height:240px}.min-h-\[260px\]{min-height:260px}.min-h-\[280px\]{min-height:280px}.min-h-\[320px\]{min-height:320px}.min-h-\[52px\]{min-height:52px}.min-h-\[80px\]{min-height:80px}.min-h-\[96px\]{min-height:96px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[1px\]{width:1px}.w-\[260px\]{width:260px}.w-\[3px\]{width:3px}.w-\[80px\]{width:80px}.w-\[min\(96vw\,1200px\)\]{width:min(96vw,1200px)}.w-\[var\(--radix-popover-trigger-width\)\]{width:var(--radix-popover-trigger-width)}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-14{min-width:3.5rem}.min-w-5{min-width:1.25rem}.min-w-\[1480px\]{min-width:1480px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-\[100px\]{max-width:100px}.max-w-\[1200px\]{max-width:1200px}.max-w-\[120px\]{max-width:120px}.max-w-\[90px\]{max-width:90px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2,.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-start{scroll-snap-align:start}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[minmax\(0\,1fr\)_auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-5{row-gap:1.25rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl,.rounded-\[1rem\]{border-radius:1rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[hsl\(var\(--success\)\/0\.2\)\]{border-color:hsl(var(--success)/.2)}.border-\[hsl\(var\(--success\)\/0\.3\)\]{border-color:hsl(var(--success)/.3)}.border-\[hsl\(var\(--warning\)\/0\.3\)\]{border-color:hsl(var(--warning)/.3)}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-300\/60{border-color:#fcd34d99}.border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/70{border-color:hsl(var(--border) / .7)}.border-border\/80{border-color:hsl(var(--border) / .8)}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-destructive\/20{border-color:hsl(var(--destructive) / .2)}.border-destructive\/30{border-color:hsl(var(--destructive) / .3)}.border-destructive\/35{border-color:hsl(var(--destructive) / .35)}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-emerald-300{--tw-border-opacity: 1;border-color:rgb(110 231 183 / var(--tw-border-opacity, 1))}.border-emerald-500\/30{border-color:#10b9814d}.border-indigo-200{--tw-border-opacity: 1;border-color:rgb(199 210 254 / var(--tw-border-opacity, 1))}.border-indigo-300{--tw-border-opacity: 1;border-color:rgb(165 180 252 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-pink-200{--tw-border-opacity: 1;border-color:rgb(251 207 232 / var(--tw-border-opacity, 1))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/15{border-color:hsl(var(--primary) / .15)}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-rose-200{--tw-border-opacity: 1;border-color:rgb(254 205 211 / var(--tw-border-opacity, 1))}.border-rose-300{--tw-border-opacity: 1;border-color:rgb(253 164 175 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-violet-200{--tw-border-opacity: 1;border-color:rgb(221 214 254 / var(--tw-border-opacity, 1))}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-l-amber-500{--tw-border-opacity: 1;border-left-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-l-destructive{border-left-color:hsl(var(--destructive))}.border-l-emerald-500{--tw-border-opacity: 1;border-left-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#1E1E2E\]{--tw-bg-opacity: 1;background-color:rgb(30 30 46 / var(--tw-bg-opacity, 1))}.bg-\[\#F1F3F4\]{--tw-bg-opacity: 1;background-color:rgb(241 243 244 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(var\(--success-bg\)\)\]{background-color:hsl(var(--success-bg))}.bg-\[hsl\(var\(--warning-bg\)\)\]{background-color:hsl(var(--warning-bg))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-200{--tw-bg-opacity: 1;background-color:rgb(253 230 138 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/60{background-color:#fffbeb99}.bg-amber-50\/70{background-color:#fffbebb3}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-200{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/70{background-color:#eff6ffb3}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-cyan-50{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-destructive\/95{background-color:hsl(var(--destructive) / .95)}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-50\/95{background-color:#ecfdf5f2}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))}.bg-foreground{background-color:hsl(var(--foreground))}.bg-indigo-100{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.bg-indigo-50{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.bg-indigo-50\/70{background-color:#eef2ffb3}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground\/50{background-color:hsl(var(--muted-foreground) / .5)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/35{background-color:hsl(var(--muted) / .35)}.bg-muted\/45{background-color:hsl(var(--muted) / .45)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/70{background-color:hsl(var(--muted) / .7)}.bg-muted\/95{background-color:hsl(var(--muted) / .95)}.bg-pink-50{--tw-bg-opacity: 1;background-color:rgb(253 242 248 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-rose-50{--tw-bg-opacity: 1;background-color:rgb(255 241 242 / var(--tw-bg-opacity, 1))}.bg-rose-50\/70{background-color:#fff1f2b3}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/90{background-color:hsl(var(--secondary) / .9)}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-50\/70{background-color:#f8fafcb3}.bg-slate-950\/95{background-color:#020617f2}.bg-transparent{background-color:transparent}.bg-violet-100{--tw-bg-opacity: 1;background-color:rgb(237 233 254 / var(--tw-bg-opacity, 1))}.bg-violet-50{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.fill-current{fill:currentColor}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-\[1px\]{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-10{padding-bottom:2.5rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-\[-0\.01em\]{letter-spacing:-.01em}.tracking-\[-0\.02em\]{letter-spacing:-.02em}.tracking-\[-0\.03em\]{letter-spacing:-.03em}.tracking-\[0\.02em\]{letter-spacing:.02em}.tracking-\[0\.14em\]{letter-spacing:.14em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[hsl\(var\(--success\)\/1\)\]{color:hsl(var(--success)/1)}.text-\[hsl\(var\(--warning\)\/1\)\]{color:hsl(var(--warning)/1)}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-800\/85{color:#92400ed9}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-background{color:hsl(var(--background))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-blue-800\/85{color:#1e40afd9}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-cyan-700{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-emerald-800{--tw-text-opacity: 1;color:rgb(6 95 70 / var(--tw-text-opacity, 1))}.text-emerald-900{--tw-text-opacity: 1;color:rgb(6 78 59 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-indigo-500{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.text-indigo-700{--tw-text-opacity: 1;color:rgb(67 56 202 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-muted-foreground\/90{color:hsl(var(--muted-foreground) / .9)}.text-pink-700{--tw-text-opacity: 1;color:rgb(190 24 93 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-primary\/80{color:hsl(var(--primary) / .8)}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-rose-700{--tw-text-opacity: 1;color:rgb(190 18 60 / var(--tw-text-opacity, 1))}.text-rose-800\/85{color:#9f1239d9}.text-rose-900{--tw-text-opacity: 1;color:rgb(136 19 55 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-violet-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.shadow-\[0_0_0_1px_rgba\(139\,92\,246\,0\.35\)\]{--tw-shadow: 0 0 0 1px rgba(139,92,246,.35);--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_rgba\(255\,255\,255\,0\.9\)\]{--tw-shadow: 0 0 0 1px rgba(255,255,255,.9);--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_3px_10px_rgba\(15\,23\,42\,0\.18\)\]{--tw-shadow: 0 3px 10px rgba(15,23,42,.18);--tw-shadow-colored: 0 3px 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_8px_18px_-14px_rgba\(59\,130\,246\,0\.7\)\]{--tw-shadow: 0 8px 18px -14px rgba(59,130,246,.7);--tw-shadow-colored: 0 8px 18px -14px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_8px_20px_-12px_hsl\(var\(--primary\)\/0\.4\)\]{--tw-shadow: 0 8px 20px -12px hsl(var(--primary)/.4);--tw-shadow-colored: 0 8px 20px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_8px_20px_-12px_rgba\(220\,38\,38\,0\.55\)\]{--tw-shadow: 0 8px 20px -12px rgba(220,38,38,.55);--tw-shadow-colored: 0 8px 20px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_8px_20px_-12px_rgba\(59\,130\,246\,0\.65\)\]{--tw-shadow: 0 8px 20px -12px rgba(59,130,246,.65);--tw-shadow-colored: 0 8px 20px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[inset_0_0_0_1px_rgba\(15\,23\,42\,0\.06\)\]{--tw-shadow: inset 0 0 0 1px rgba(15,23,42,.06);--tw-shadow-colored: inset 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-ring{--tw-ring-color: hsl(var(--ring))}.ring-offset-2{--tw-ring-offset-width: 2px}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.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{--tw-backdrop-blur: blur(8px);-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)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}@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))}}@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))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in,.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.slide-in-from-bottom-4{--tw-enter-translate-y: 1rem}.slide-in-from-left{--tw-enter-translate-x: -100%}.slide-in-from-top-2{--tw-enter-translate-y: -.5rem}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.running{animation-play-state:running}.\[grid-template-columns\:repeat\(auto-fit\,minmax\(280px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-thumb{border-radius:9999px;background-color:hsl(var(--border))}::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--muted-foreground) / .4)}*:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: hsl(var(--primary));--tw-ring-offset-width: 2px;--tw-ring-offset-color: hsl(var(--background))}::-moz-selection{background-color:hsl(var(--primary) / .15);color:hsl(var(--foreground))}::selection{background-color:hsl(var(--primary) / .15);color:hsl(var(--foreground))}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fadeIn .2s ease-out}.animate-slide-in{animation:slideInUp .25s ease-out}.table-container{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}@media (hover: none) and (pointer: coarse){button,a,[role=button]{min-height:44px}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}@keyframes toastIn{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes toastOut{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}.animate-toast-in{animation:toastIn .3s ease-out}.animate-toast-out{animation:toastOut .2s ease-in forwards}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-slate-400::-moz-placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.placeholder\:text-slate-400::placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.hover\:-translate-y-0\.5:hover{--tw-translate-y: -.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-border:hover{border-color:hsl(var(--border))}.hover\:border-destructive\/20:hover{border-color:hsl(var(--destructive) / .2)}.hover\:border-primary\/20:hover{border-color:hsl(var(--primary) / .2)}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-accent\/50:hover{background-color:hsl(var(--accent) / .5)}.hover\:bg-amber-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-500\/90:hover{background-color:#f59e0be6}.hover\:bg-cyan-100:hover{--tw-bg-opacity: 1;background-color:rgb(207 250 254 / var(--tw-bg-opacity, 1))}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/95:hover{background-color:hsl(var(--destructive) / .95)}.hover\:bg-emerald-100:hover{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-500\/90:hover{background-color:#10b981e6}.hover\:bg-foreground\/90:hover{background-color:hsl(var(--foreground) / .9)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-pink-100:hover{--tw-bg-opacity: 1;background-color:rgb(252 231 243 / var(--tw-bg-opacity, 1))}.hover\:bg-primary\/15:hover{background-color:hsl(var(--primary) / .15)}.hover\:bg-primary\/5:hover{background-color:hsl(var(--primary) / .05)}.hover\:bg-primary\/95:hover{background-color:hsl(var(--primary) / .95)}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-rose-500\/90:hover{background-color:#f43f5ee6}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50\/40:hover{background-color:#f8fafc66}.hover\:bg-violet-100:hover{--tw-bg-opacity: 1;background-color:rgb(237 233 254 / var(--tw-bg-opacity, 1))}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-slate-700:hover{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_14px_28px_-14px_hsl\(var\(--primary\)\/0\.45\)\]:hover{--tw-shadow: 0 14px 28px -14px hsl(var(--primary)/.45);--tw-shadow-colored: 0 14px 28px -14px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:absolute:focus{position:absolute}.focus\:z-50:focus{z-index:50}.focus\:m-4:focus{margin:1rem}.focus\:rounded-md:focus{border-radius:calc(var(--radius) - 2px)}.focus\:border-primary\/40:focus{border-color:hsl(var(--primary) / .4)}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-primary:focus{background-color:hsl(var(--primary))}.focus\:px-4:focus{padding-left:1rem;padding-right:1rem}.focus\:py-2:focus{padding-top:.5rem;padding-bottom:.5rem}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-primary-foreground:focus{color:hsl(var(--primary-foreground))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-muted\/60:disabled{background-color:hsl(var(--muted) / .6)}.disabled\:text-muted-foreground:disabled{color:hsl(var(--muted-foreground))}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group:hover .group-hover\:text-foreground{color:hsl(var(--foreground))}.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:border-muted\/40{border-color:hsl(var(--muted) / .4)}.group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover{border-color:hsl(var(--destructive) / .3)}.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover{background-color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{color:hsl(var(--destructive-foreground))}.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity: 1;color:rgb(254 242 242 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color: #dc2626}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x: var(--radix-toast-swipe-end-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x: var(--radix-toast-swipe-move-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=selected\]\:bg-primary\/10[data-state=selected]{background-color:hsl(var(--primary) / .1)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity: .8}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-top-full[data-state=open]{--tw-enter-translate-y: -100%}.dark\:border-amber-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-amber-700\/50:is([data-theme=dark] *){border-color:#b4530980}.dark\:border-amber-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-amber-900:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(120 53 15 / var(--tw-border-opacity, 1))}.dark\:border-blue-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-border:is([data-theme=dark] *){border-color:hsl(var(--border))}.dark\:border-cyan-900:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(22 78 99 / var(--tw-border-opacity, 1))}.dark\:border-emerald-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(4 120 87 / var(--tw-border-opacity, 1))}.dark\:border-emerald-900:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(6 78 59 / var(--tw-border-opacity, 1))}.dark\:border-pink-900:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(131 24 67 / var(--tw-border-opacity, 1))}.dark\:border-primary\/25:is([data-theme=dark] *){border-color:hsl(var(--primary) / .25)}.dark\:border-red-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.dark\:border-red-900:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity, 1))}.dark\:border-rose-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(159 18 57 / var(--tw-border-opacity, 1))}.dark\:border-violet-900:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(76 29 149 / var(--tw-border-opacity, 1))}.dark\:bg-amber-900\/20:is([data-theme=dark] *){background-color:#78350f33}.dark\:bg-amber-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(69 26 3 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-950\/30:is([data-theme=dark] *){background-color:#451a034d}.dark\:bg-amber-950\/60:is([data-theme=dark] *){background-color:#451a0399}.dark\:bg-blue-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(23 37 84 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-950\/30:is([data-theme=dark] *){background-color:#1725544d}.dark\:bg-cyan-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(8 51 68 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-950\/60:is([data-theme=dark] *){background-color:#08334499}.dark\:bg-emerald-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(2 44 34 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-950\/60:is([data-theme=dark] *){background-color:#022c2299}.dark\:bg-emerald-950\/85:is([data-theme=dark] *){background-color:#022c22d9}.dark\:bg-pink-950\/60:is([data-theme=dark] *){background-color:#50072499}.dark\:bg-primary\/15:is([data-theme=dark] *){background-color:hsl(var(--primary) / .15)}.dark\:bg-red-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity, 1))}.dark\:bg-red-950\/60:is([data-theme=dark] *){background-color:#450a0a99}.dark\:bg-rose-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(76 5 25 / var(--tw-bg-opacity, 1))}.dark\:bg-rose-950\/30:is([data-theme=dark] *){background-color:#4c05194d}.dark\:bg-secondary\/70:is([data-theme=dark] *){background-color:hsl(var(--secondary) / .7)}.dark\:bg-slate-900:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:bg-violet-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(46 16 101 / var(--tw-bg-opacity, 1))}.dark\:bg-violet-950\/60:is([data-theme=dark] *){background-color:#2e106599}.dark\:text-amber-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.dark\:text-amber-100\/80:is([data-theme=dark] *){color:#fef3c7cc}.dark\:text-amber-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-100\/80:is([data-theme=dark] *){color:#dbeafecc}.dark\:text-blue-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.dark\:text-cyan-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.dark\:text-emerald-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(209 250 229 / var(--tw-text-opacity, 1))}.dark\:text-emerald-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-muted-foreground:is([data-theme=dark] *){color:hsl(var(--muted-foreground))}.dark\:text-pink-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(249 168 212 / var(--tw-text-opacity, 1))}.dark\:text-primary-foreground:is([data-theme=dark] *){color:hsl(var(--primary-foreground))}.dark\:text-red-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-rose-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(255 228 230 / var(--tw-text-opacity, 1))}.dark\:text-rose-100\/80:is([data-theme=dark] *){color:#ffe4e6cc}.dark\:text-rose-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.dark\:text-rose-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.dark\:text-secondary-foreground:is([data-theme=dark] *){color:hsl(var(--secondary-foreground))}.dark\:text-slate-50:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-violet-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.dark\:hover\:bg-accent:hover:is([data-theme=dark] *){background-color:hsl(var(--accent))}@media (min-width: 640px){.sm\:bottom-0{bottom:0}.sm\:right-0{right:0}.sm\:top-auto{top:auto}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:w-7{width:1.75rem}.sm\:w-9{width:2.25rem}.sm\:w-\[168px\]{width:168px}.sm\:w-auto{width:auto}.sm\:flex-none{flex:none}.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\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-col{flex-direction:column}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:gap-3{gap:.75rem}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:self-auto{align-self:auto}.sm\:text-left{text-align:left}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y: 100%}}@media (min-width: 768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:block{display:block}.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:w-48{width:12rem}.md\:w-\[160px\]{width:160px}.md\:w-\[220px\]{width:220px}.md\:w-auto{width:auto}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[minmax\(0\,1fr\)_auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto}.md\:flex-row{flex-direction:row}.md\:flex-wrap{flex-wrap:wrap}.md\:items-start{align-items:flex-start}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}}@media (min-width: 1024px){.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-auto{width:auto}.lg\:min-w-\[360px\]{min-width:360px}.lg\:min-w-\[420px\]{min-width:420px}.lg\:flex-1{flex:1 1 0%}.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\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,0\.85fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,.85fr)}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,360px\)\]{grid-template-columns:minmax(0,1fr) minmax(0,360px)}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(400px\,0\.8fr\)\]{grid-template-columns:minmax(0,1fr) minmax(400px,.8fr)}.lg\:flex-row{flex-direction:row}.lg\:flex-wrap{flex-wrap:wrap}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-8{padding-top:2rem;padding-bottom:2rem}}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:block{display:block}.xl\:hidden{display:none}.xl\:w-auto{width:auto}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.xl\:grid-cols-\[minmax\(0\,0\.9fr\)_minmax\(0\,1\.1fr\)\]{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr)}.xl\:grid-cols-\[minmax\(0\,1\.3fr\)_minmax\(320px\,0\.9fr\)\]{grid-template-columns:minmax(0,1.3fr) minmax(320px,.9fr)}.xl\:grid-cols-\[minmax\(0\,1\.4fr\)_minmax\(320px\,0\.9fr\)\]{grid-template-columns:minmax(0,1.4fr) minmax(320px,.9fr)}.xl\:grid-cols-\[minmax\(0\,1fr\)_180px_auto\]{grid-template-columns:minmax(0,1fr) 180px auto}.xl\:grid-cols-\[minmax\(0\,1fr\)_220px_auto\]{grid-template-columns:minmax(0,1fr) 220px auto}.xl\:grid-cols-\[minmax\(0\,1fr\)_280px\]{grid-template-columns:minmax(0,1fr) 280px}.xl\:flex-row{flex-direction:row}.xl\:flex-nowrap{flex-wrap:nowrap}.xl\:items-start{align-items:flex-start}.xl\:items-center{align-items:center}.xl\:justify-start{justify-content:flex-start}.xl\:justify-between{justify-content:space-between}.xl\:text-right{text-align:right}}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}.\[\&_tr\]\:border-border\/60 tr{border-color:hsl(var(--border) / .6)}