@chenpu17/cc-gw 0.7.14 → 0.7.16

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 (27) hide show
  1. package/package.json +1 -1
  2. package/src/server/dist/index.js +10 -5
  3. package/src/web/dist/assets/{About-fTyYr_7_.js → About-B0Jdm3Q_.js} +2 -2
  4. package/src/web/dist/assets/{ApiKeys-COxudt4y.js → ApiKeys-BJZYNk8v.js} +1 -1
  5. package/src/web/dist/assets/{Dashboard-CRZSX4WH.js → Dashboard-Yk4Gcz4p.js} +1 -1
  6. package/src/web/dist/assets/{Events-DwrpTFJe.js → Events-B5zZ5_PB.js} +1 -1
  7. package/src/web/dist/assets/{Help-DJuFaFMQ.js → Help-75v5moMf.js} +1 -1
  8. package/src/web/dist/assets/{Login-BZpVFqdA.js → Login-DwQ6YKZt.js} +1 -1
  9. package/src/web/dist/assets/{Logs-BUTkiezt.js → Logs-8o1cRVE6.js} +1 -1
  10. package/src/web/dist/assets/ModelManagement-C9OoP4WI.js +1 -0
  11. package/src/web/dist/assets/{PageHeader-Dv7R86Dg.js → PageHeader-Q48thbsH.js} +1 -1
  12. package/src/web/dist/assets/{PageSection-DUuFinvy.js → PageSection-DhdaIOwG.js} +1 -1
  13. package/src/web/dist/assets/{Settings-C3bRnhS2.js → Settings-D7724_w1.js} +1 -1
  14. package/src/web/dist/assets/{card-CAKB0pt0.js → card-lw0mNbtE.js} +1 -1
  15. package/src/web/dist/assets/{copy-CLcieQsI.js → copy-BSxv1vw0.js} +1 -1
  16. package/src/web/dist/assets/{dialog-CK_RVQQW.js → dialog-_9cV4Ss_.js} +1 -1
  17. package/src/web/dist/assets/{index-CtnhnMlm.js → index-BZJu9-Md.js} +1 -1
  18. package/src/web/dist/assets/{index-Jop5ul3v.js → index-CwxoiOJ7.js} +23 -23
  19. package/src/web/dist/assets/{info-9rRhMFNN.js → info-Ch3uesoo.js} +1 -1
  20. package/src/web/dist/assets/{input-Be5Jxax8.js → input-DuU4V_4o.js} +1 -1
  21. package/src/web/dist/assets/{label-DP0-fRMI.js → label-CPyOyofK.js} +1 -1
  22. package/src/web/dist/assets/{refresh-cw-DFU4zfeO.js → refresh-cw-lIS96np_.js} +1 -1
  23. package/src/web/dist/assets/{select-BiIA6TXa.js → select-Bas7KWYt.js} +1 -1
  24. package/src/web/dist/assets/{switch-B71CBCBL.js → switch-C9znB46C.js} +1 -1
  25. package/src/web/dist/assets/{useApiQuery-CxgXaI6F.js → useApiQuery-BenuGU61.js} +1 -1
  26. package/src/web/dist/index.html +1 -1
  27. package/src/web/dist/assets/ModelManagement-BGcUP7l1.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chenpu17/cc-gw",
3
- "version": "0.7.14",
3
+ "version": "0.7.16",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -10092,9 +10092,8 @@ function parseConfig(raw) {
10092
10092
  data.providers = data.providers.map((provider) => {
10093
10093
  if (!provider || typeof provider !== "object")
10094
10094
  return provider;
10095
- if (provider.type === "anthropic") {
10096
- provider.authMode = provider.authMode === "authToken" ? "authToken" : "apiKey";
10097
- } else if ("authMode" in provider) {
10095
+ const validAuthModes = ["apiKey", "authToken", "xAuthToken"];
10096
+ if (provider.authMode && !validAuthModes.includes(provider.authMode)) {
10098
10097
  delete provider.authMode;
10099
10098
  }
10100
10099
  return provider;
@@ -12347,7 +12346,11 @@ function createOpenAIConnector(config, options) {
12347
12346
  headers.Accept = headers.Accept || headers.accept || "text/event-stream";
12348
12347
  }
12349
12348
  if (config.apiKey) {
12350
- headers["Authorization"] = `Bearer ${config.apiKey}`;
12349
+ if (config.authMode === "xAuthToken") {
12350
+ headers["X-Auth-Token"] = config.apiKey;
12351
+ } else {
12352
+ headers["Authorization"] = `Bearer ${config.apiKey}`;
12353
+ }
12351
12354
  }
12352
12355
  const body = {
12353
12356
  ...request.body,
@@ -12482,9 +12485,11 @@ function createAnthropicConnector(config) {
12482
12485
  delete headers.authorization;
12483
12486
  delete headers["x-api-key"];
12484
12487
  if (config.apiKey) {
12485
- const mode = config.authMode === "authToken" ? "authToken" : "apiKey";
12488
+ const mode = config.authMode ?? "apiKey";
12486
12489
  if (mode === "authToken") {
12487
12490
  headers.authorization = `Bearer ${config.apiKey}`;
12491
+ } else if (mode === "xAuthToken") {
12492
+ headers["x-auth-token"] = config.apiKey;
12488
12493
  } else {
12489
12494
  headers["x-api-key"] = config.apiKey;
12490
12495
  }
@@ -1,6 +1,6 @@
1
- import{c as j,u as g,b as v,r as i,j as e,e as d,a5 as N}from"./index-Jop5ul3v.js";import{u as y}from"./useApiQuery-CxgXaI6F.js";import{P as E}from"./PageHeader-Dv7R86Dg.js";import{P as n}from"./PageSection-DUuFinvy.js";import{C as m,a as p}from"./card-CAKB0pt0.js";import{I}from"./info-9rRhMFNN.js";import{R as T}from"./refresh-cw-DFU4zfeO.js";/**
1
+ import{c as j,u as g,b as v,r as i,j as e,e as d,a5 as N}from"./index-CwxoiOJ7.js";import{u as y}from"./useApiQuery-BenuGU61.js";import{P as E}from"./PageHeader-Q48thbsH.js";import{P as n}from"./PageSection-DhdaIOwG.js";import{C as m,a as p}from"./card-lw0mNbtE.js";import{I}from"./info-Ch3uesoo.js";import{R as T}from"./refresh-cw-lIS96np_.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const k=j("Sparkles",[["path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z",key:"17u4zn"}],["path",{d:"M5 3v4",key:"bklmnn"}],["path",{d:"M19 17v4",key:"iiml17"}],["path",{d:"M3 5h4",key:"nem4j1"}],["path",{d:"M17 19h4",key:"lbex7p"}]]),_="0.7.14",w={version:_},L={VITE_BUILD_TIME:"2025-12-24T12:50:25.157Z",VITE_NODE_VERSION:"v22.16.0"};function u({items:t}){return t.length===0?null:e.jsx("dl",{className:"grid gap-4 sm:grid-cols-2",children:t.map(a=>e.jsx(m,{children:e.jsxs(p,{className:"pt-4",children:[e.jsx("dt",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:a.label}),e.jsx("dd",{className:"mt-1 text-sm font-semibold",children:a.value}),a.hint&&e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:a.hint})]})},a.label))})}function D(){const{t}=g(),{pushToast:a}=v(),s=y(["status","gateway"],{url:"/api/status",method:"GET"},{staleTime:6e4});i.useEffect(()=>{s.isError&&s.error&&a({title:t("about.toast.statusError.title"),description:s.error.message,variant:"error"})},[s.isError,s.error,a,t]);const o=w.version,r=i.useMemo(()=>{const c=L,b=c.VITE_BUILD_TIME,f=c.VITE_NODE_VERSION;return{buildTime:b,nodeVersion:f}},[]),x=i.useMemo(()=>[{label:t("about.app.labels.name"),value:e.jsx("span",{className:"font-mono",children:"cc-gw"})},{label:t("about.app.labels.version"),value:e.jsxs("span",{className:"font-mono text-primary",children:["v",o]})},{label:t("about.app.labels.buildTime"),value:r.buildTime,hint:t("about.app.hint.buildTime")},{label:t("about.app.labels.node"),value:e.jsx("span",{className:"font-mono",children:r.nodeVersion})}],[o,r.buildTime,r.nodeVersion,t]),l=i.useMemo(()=>s.data?[{label:t("about.status.labels.host"),value:s.data.host??"127.0.0.1"},{label:t("about.status.labels.port"),value:s.data.port.toLocaleString()},{label:t("about.status.labels.providers"),value:s.data.providers.toLocaleString()},{label:t("about.status.labels.active"),value:(s.data.activeRequests??0).toLocaleString(),hint:t("about.status.hint.active")}]:[],[s.data,t]),h=()=>{a({title:t("about.toast.updatesPlanned"),variant:"info"})};return e.jsxs("div",{className:"space-y-6",children:[e.jsx(E,{icon:e.jsx(I,{className:"h-5 w-5","aria-hidden":"true"}),title:t("about.title"),description:t("about.description"),badge:`v${o}`,actions:e.jsxs(d,{onClick:h,children:[e.jsx(k,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),t("about.support.actions.checkUpdates")]})}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[e.jsx(n,{title:t("about.app.title"),description:t("about.app.subtitle"),children:e.jsx(u,{items:x})}),e.jsx(n,{title:t("about.status.title"),description:t("about.status.subtitle"),actions:e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>s.refetch(),disabled:s.isFetching,children:[e.jsx(T,{className:`mr-2 h-4 w-4 ${s.isFetching?"animate-spin":""}`,"aria-hidden":"true"}),s.isFetching?t("common.actions.refreshing"):t("common.actions.refresh")]}),children:s.isLoading?e.jsxs("div",{className:"flex h-32 flex-col items-center justify-center gap-2 text-center",children:[e.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("about.status.loading")})]}):l.length>0?e.jsx(u,{items:l}):e.jsxs("div",{className:"flex h-32 flex-col items-center justify-center gap-1 rounded-lg border border-dashed p-6 text-center",children:[e.jsx("p",{className:"text-sm font-medium",children:t("about.status.empty")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("common.actions.refresh")})]})})]}),e.jsx(n,{title:t("about.support.title"),description:e.jsxs("span",{className:"space-y-1",children:[e.jsx("span",{className:"block text-sm font-medium text-primary",children:t("about.support.subtitle")}),e.jsx("span",{children:t("about.support.description")})]}),children:e.jsx(m,{children:e.jsxs(p,{className:"flex flex-col gap-4 pt-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start gap-4",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 text-primary",children:e.jsx(N,{className:"h-5 w-5","aria-hidden":"true"})}),e.jsx("p",{className:"flex-1 text-sm text-muted-foreground",children:t("about.support.tip")})]}),e.jsx("code",{className:"inline-flex self-start rounded-md bg-muted px-3 py-1.5 text-xs font-medium",children:"~/.cc-gw/config.json"})]})})})]})}export{D as default};
6
+ */const k=j("Sparkles",[["path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z",key:"17u4zn"}],["path",{d:"M5 3v4",key:"bklmnn"}],["path",{d:"M19 17v4",key:"iiml17"}],["path",{d:"M3 5h4",key:"nem4j1"}],["path",{d:"M17 19h4",key:"lbex7p"}]]),_="0.7.16",w={version:_},L={VITE_BUILD_TIME:"2025-12-25T03:45:47.140Z",VITE_NODE_VERSION:"v22.16.0"};function u({items:t}){return t.length===0?null:e.jsx("dl",{className:"grid gap-4 sm:grid-cols-2",children:t.map(a=>e.jsx(m,{children:e.jsxs(p,{className:"pt-4",children:[e.jsx("dt",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:a.label}),e.jsx("dd",{className:"mt-1 text-sm font-semibold",children:a.value}),a.hint&&e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:a.hint})]})},a.label))})}function D(){const{t}=g(),{pushToast:a}=v(),s=y(["status","gateway"],{url:"/api/status",method:"GET"},{staleTime:6e4});i.useEffect(()=>{s.isError&&s.error&&a({title:t("about.toast.statusError.title"),description:s.error.message,variant:"error"})},[s.isError,s.error,a,t]);const o=w.version,r=i.useMemo(()=>{const c=L,b=c.VITE_BUILD_TIME,f=c.VITE_NODE_VERSION;return{buildTime:b,nodeVersion:f}},[]),x=i.useMemo(()=>[{label:t("about.app.labels.name"),value:e.jsx("span",{className:"font-mono",children:"cc-gw"})},{label:t("about.app.labels.version"),value:e.jsxs("span",{className:"font-mono text-primary",children:["v",o]})},{label:t("about.app.labels.buildTime"),value:r.buildTime,hint:t("about.app.hint.buildTime")},{label:t("about.app.labels.node"),value:e.jsx("span",{className:"font-mono",children:r.nodeVersion})}],[o,r.buildTime,r.nodeVersion,t]),l=i.useMemo(()=>s.data?[{label:t("about.status.labels.host"),value:s.data.host??"127.0.0.1"},{label:t("about.status.labels.port"),value:s.data.port.toLocaleString()},{label:t("about.status.labels.providers"),value:s.data.providers.toLocaleString()},{label:t("about.status.labels.active"),value:(s.data.activeRequests??0).toLocaleString(),hint:t("about.status.hint.active")}]:[],[s.data,t]),h=()=>{a({title:t("about.toast.updatesPlanned"),variant:"info"})};return e.jsxs("div",{className:"space-y-6",children:[e.jsx(E,{icon:e.jsx(I,{className:"h-5 w-5","aria-hidden":"true"}),title:t("about.title"),description:t("about.description"),badge:`v${o}`,actions:e.jsxs(d,{onClick:h,children:[e.jsx(k,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),t("about.support.actions.checkUpdates")]})}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[e.jsx(n,{title:t("about.app.title"),description:t("about.app.subtitle"),children:e.jsx(u,{items:x})}),e.jsx(n,{title:t("about.status.title"),description:t("about.status.subtitle"),actions:e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>s.refetch(),disabled:s.isFetching,children:[e.jsx(T,{className:`mr-2 h-4 w-4 ${s.isFetching?"animate-spin":""}`,"aria-hidden":"true"}),s.isFetching?t("common.actions.refreshing"):t("common.actions.refresh")]}),children:s.isLoading?e.jsxs("div",{className:"flex h-32 flex-col items-center justify-center gap-2 text-center",children:[e.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("about.status.loading")})]}):l.length>0?e.jsx(u,{items:l}):e.jsxs("div",{className:"flex h-32 flex-col items-center justify-center gap-1 rounded-lg border border-dashed p-6 text-center",children:[e.jsx("p",{className:"text-sm font-medium",children:t("about.status.empty")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("common.actions.refresh")})]})})]}),e.jsx(n,{title:t("about.support.title"),description:e.jsxs("span",{className:"space-y-1",children:[e.jsx("span",{className:"block text-sm font-medium text-primary",children:t("about.support.subtitle")}),e.jsx("span",{children:t("about.support.description")})]}),children:e.jsx(m,{children:e.jsxs(p,{className:"flex flex-col gap-4 pt-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start gap-4",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 text-primary",children:e.jsx(N,{className:"h-5 w-5","aria-hidden":"true"})}),e.jsx("p",{className:"flex-1 text-sm text-muted-foreground",children:t("about.support.tip")})]}),e.jsx("code",{className:"inline-flex self-start rounded-md bg-muted px-3 py-1.5 text-xs font-medium",children:"~/.cc-gw/config.json"})]})})})]})}export{D as default};
@@ -1,4 +1,4 @@
1
- import{c as D,r as c,j as e,a as $,u as Z,b as de,L as pe,e as o,K as me,v as ue,d as K}from"./index-Jop5ul3v.js";import{E as ye}from"./index-CtnhnMlm.js";import{u as w}from"./useApiQuery-CxgXaI6F.js";import{P as xe,B as q}from"./PageHeader-Dv7R86Dg.js";import{P as z}from"./PageSection-DUuFinvy.js";import{c as he}from"./clipboard-CALi6bTW.js";import{I as ge}from"./input-Be5Jxax8.js";import{L as I}from"./label-DP0-fRMI.js";import{C as T,a as S}from"./card-CAKB0pt0.js";import{P as fe,D as W,a as H,b as V,c as G,d as je,e as Q}from"./dialog-CK_RVQQW.js";import{C as U}from"./copy-CLcieQsI.js";/**
1
+ import{c as D,r as c,j as e,a as $,u as Z,b as de,L as pe,e as o,K as me,v as ue,d as K}from"./index-CwxoiOJ7.js";import{E as ye}from"./index-BZJu9-Md.js";import{u as w}from"./useApiQuery-BenuGU61.js";import{P as xe,B as q}from"./PageHeader-Q48thbsH.js";import{P as z}from"./PageSection-DhdaIOwG.js";import{c as he}from"./clipboard-CALi6bTW.js";import{I as ge}from"./input-DuU4V_4o.js";import{L as I}from"./label-CPyOyofK.js";import{C as T,a as S}from"./card-lw0mNbtE.js";import{P as fe,D as W,a as H,b as V,c as G,d as je,e as Q}from"./dialog-_9cV4Ss_.js";import{C as U}from"./copy-BSxv1vw0.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as O,r as d,j as e,a as f,u as I,b as ne,d as ie,t as le,L as ce,B as D,e as me}from"./index-Jop5ul3v.js";import{E as he}from"./index-CtnhnMlm.js";import{P as ue,B as k}from"./PageHeader-Dv7R86Dg.js";import{P as X}from"./PageSection-DUuFinvy.js";import{u as S}from"./useApiQuery-CxgXaI6F.js";import{C as G,a as Q}from"./card-CAKB0pt0.js";import{S as xe,a as pe,b as be,c as ge,d as q}from"./select-BiIA6TXa.js";/**
1
+ import{c as O,r as d,j as e,a as f,u as I,b as ne,d as ie,t as le,L as ce,B as D,e as me}from"./index-CwxoiOJ7.js";import{E as he}from"./index-BZJu9-Md.js";import{P as ue,B as k}from"./PageHeader-Q48thbsH.js";import{P as X}from"./PageSection-DhdaIOwG.js";import{u as S}from"./useApiQuery-BenuGU61.js";import{C as G,a as Q}from"./card-lw0mNbtE.js";import{S as xe,a as pe,b as be,c as ge,d as q}from"./select-Bas7KWYt.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as N,u as E,b as L,r as i,j as e,e as h,C as R,a as $,g as I,h as T,t as P}from"./index-Jop5ul3v.js";import{P as z,B as j}from"./PageHeader-Dv7R86Dg.js";import{I as F}from"./input-Be5Jxax8.js";import{C as w,a as C,b as V}from"./card-CAKB0pt0.js";import{S as B,a as D,b as K,c as H,d as f}from"./select-BiIA6TXa.js";import{R as J}from"./refresh-cw-DFU4zfeO.js";/**
1
+ import{c as N,u as E,b as L,r as i,j as e,e as h,C as R,a as $,g as I,h as T,t as P}from"./index-CwxoiOJ7.js";import{P as z,B as j}from"./PageHeader-Q48thbsH.js";import{I as F}from"./input-DuU4V_4o.js";import{C as w,a as C,b as V}from"./card-lw0mNbtE.js";import{S as B,a as D,b as K,c as H,d as f}from"./select-Bas7KWYt.js";import{R as J}from"./refresh-cw-lIS96np_.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as x,u,r as g,j as e,e as h}from"./index-Jop5ul3v.js";import{P as N}from"./PageHeader-Dv7R86Dg.js";import{P as d}from"./PageSection-DUuFinvy.js";import{c as p}from"./clipboard-CALi6bTW.js";import{C as j,a as f}from"./card-CAKB0pt0.js";import{I as v}from"./info-9rRhMFNN.js";/**
1
+ import{c as x,u,r as g,j as e,e as h}from"./index-CwxoiOJ7.js";import{P as N}from"./PageHeader-Q48thbsH.js";import{P as d}from"./PageSection-DhdaIOwG.js";import{c as p}from"./clipboard-CALi6bTW.js";import{C as j,a as f}from"./card-lw0mNbtE.js";import{I as v}from"./info-Ch3uesoo.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{u as C,ai as E,aj as F,ak as L,r as n,j as e,L as S,e as k}from"./index-Jop5ul3v.js";import{I as j}from"./input-Be5Jxax8.js";import{L as b}from"./label-DP0-fRMI.js";import{C as v,a as w,b as P,c as T,d as A,e as D}from"./card-CAKB0pt0.js";function H(){const{t:s}=C(),i=E(),u=F(),{authEnabled:l,isAuthenticated:m,loading:o,login:N,error:x}=L(),[t,f]=n.useState({username:"",password:""}),[p,d]=n.useState(null),[h,g]=n.useState(!1),c=n.useMemo(()=>{var r;const a=u.state;return((r=a==null?void 0:a.from)==null?void 0:r.pathname)??"/"},[u.state]);n.useEffect(()=>{if(!l&&!o){i(c,{replace:!0});return}l&&m&&!o&&i(c,{replace:!0})},[l,m,o,i,c]);const y=async a=>{if(a.preventDefault(),d(null),!t.username.trim()||!t.password){d(s("login.validation.required"));return}g(!0);try{await N(t.username.trim(),t.password),i(c,{replace:!0})}catch(r){d(r instanceof Error?r.message:s("login.validation.failed"))}finally{g(!1)}};return o?e.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background",children:e.jsx(v,{className:"w-full max-w-md",children:e.jsx(w,{className:"flex min-h-[320px] items-center justify-center",children:e.jsx(S,{})})})}):l?e.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background px-4",children:e.jsxs(v,{className:"w-full max-w-md",children:[e.jsxs(P,{className:"text-center",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl bg-primary text-lg font-bold text-primary-foreground",children:"GW"}),e.jsx(T,{className:"text-2xl",children:s("login.title")}),e.jsx(A,{className:"text-sm",children:s("login.description")})]}),e.jsx(w,{children:e.jsxs("form",{className:"space-y-4",onSubmit:y,children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{htmlFor:"username",children:s("login.fields.username")}),e.jsx(j,{id:"username",value:t.username,autoComplete:"username",autoFocus:!0,onChange:a=>f(r=>({...r,username:a.target.value})),placeholder:s("login.fields.usernamePlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{htmlFor:"password",children:s("login.fields.password")}),e.jsx(j,{id:"password",type:"password",value:t.password,autoComplete:"current-password",onChange:a=>f(r=>({...r,password:a.target.value})),placeholder:s("login.fields.passwordPlaceholder")})]}),(p||x)&&e.jsx("div",{className:"rounded-md border border-destructive/50 bg-destructive/10 px-4 py-3 text-sm text-destructive",children:p||x}),e.jsx(k,{type:"submit",className:"w-full",disabled:h,children:s(h?"common.actions.loading":"login.actions.submit")})]})}),e.jsx(D,{className:"justify-center",children:e.jsx("p",{className:"text-center text-xs text-muted-foreground",children:s("login.hint")})})]})}):null}export{H as default};
1
+ import{u as C,ai as E,aj as F,ak as L,r as n,j as e,L as S,e as k}from"./index-CwxoiOJ7.js";import{I as j}from"./input-DuU4V_4o.js";import{L as b}from"./label-CPyOyofK.js";import{C as v,a as w,b as P,c as T,d as A,e as D}from"./card-lw0mNbtE.js";function H(){const{t:s}=C(),i=E(),u=F(),{authEnabled:l,isAuthenticated:m,loading:o,login:N,error:x}=L(),[t,f]=n.useState({username:"",password:""}),[p,d]=n.useState(null),[h,g]=n.useState(!1),c=n.useMemo(()=>{var r;const a=u.state;return((r=a==null?void 0:a.from)==null?void 0:r.pathname)??"/"},[u.state]);n.useEffect(()=>{if(!l&&!o){i(c,{replace:!0});return}l&&m&&!o&&i(c,{replace:!0})},[l,m,o,i,c]);const y=async a=>{if(a.preventDefault(),d(null),!t.username.trim()||!t.password){d(s("login.validation.required"));return}g(!0);try{await N(t.username.trim(),t.password),i(c,{replace:!0})}catch(r){d(r instanceof Error?r.message:s("login.validation.failed"))}finally{g(!1)}};return o?e.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background",children:e.jsx(v,{className:"w-full max-w-md",children:e.jsx(w,{className:"flex min-h-[320px] items-center justify-center",children:e.jsx(S,{})})})}):l?e.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background px-4",children:e.jsxs(v,{className:"w-full max-w-md",children:[e.jsxs(P,{className:"text-center",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl bg-primary text-lg font-bold text-primary-foreground",children:"GW"}),e.jsx(T,{className:"text-2xl",children:s("login.title")}),e.jsx(A,{className:"text-sm",children:s("login.description")})]}),e.jsx(w,{children:e.jsxs("form",{className:"space-y-4",onSubmit:y,children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{htmlFor:"username",children:s("login.fields.username")}),e.jsx(j,{id:"username",value:t.username,autoComplete:"username",autoFocus:!0,onChange:a=>f(r=>({...r,username:a.target.value})),placeholder:s("login.fields.usernamePlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{htmlFor:"password",children:s("login.fields.password")}),e.jsx(j,{id:"password",type:"password",value:t.password,autoComplete:"current-password",onChange:a=>f(r=>({...r,password:a.target.value})),placeholder:s("login.fields.passwordPlaceholder")})]}),(p||x)&&e.jsx("div",{className:"rounded-md border border-destructive/50 bg-destructive/10 px-4 py-3 text-sm text-destructive",children:p||x}),e.jsx(k,{type:"submit",className:"w-full",disabled:h,children:s(h?"common.actions.loading":"login.actions.submit")})]})}),e.jsx(D,{className:"justify-center",children:e.jsx("p",{className:"text-center text-xs text-muted-foreground",children:s("login.hint")})})]})}):null}export{H as default};
@@ -1,4 +1,4 @@
1
- import{c as be,u as U,b as me,r as n,d as we,t as ke,j as e,e as k,a as L,F as _e,f as Se,X as Ee,L as Te}from"./index-Jop5ul3v.js";import{u as F}from"./useApiQuery-CxgXaI6F.js";import{P as Ce,B as xe}from"./PageHeader-Dv7R86Dg.js";import{c as Le}from"./clipboard-CALi6bTW.js";import{I as Q}from"./input-Be5Jxax8.js";import{L as S}from"./label-DP0-fRMI.js";import{C as re,a as ne}from"./card-CAKB0pt0.js";import{S as M,a as z,b as O,c as q,d as w}from"./select-BiIA6TXa.js";import{R as De}from"./refresh-cw-DFU4zfeO.js";/**
1
+ import{c as be,u as U,b as me,r as n,d as we,t as ke,j as e,e as k,a as L,F as _e,f as Se,X as Ee,L as Te}from"./index-CwxoiOJ7.js";import{u as F}from"./useApiQuery-BenuGU61.js";import{P as Ce,B as xe}from"./PageHeader-Q48thbsH.js";import{c as Le}from"./clipboard-CALi6bTW.js";import{I as Q}from"./input-DuU4V_4o.js";import{L as S}from"./label-CPyOyofK.js";import{C as re,a as ne}from"./card-lw0mNbtE.js";import{S as M,a as z,b as O,c as q,d as w}from"./select-Bas7KWYt.js";import{R as De}from"./refresh-cw-lIS96np_.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -0,0 +1 @@
1
+ var st=s=>{throw TypeError(s)};var Ie=(s,a,c)=>a.has(s)||st("Cannot "+c);var E=(s,a,c)=>(Ie(s,a,"read from private field"),c?c.call(s):a.get(s)),ce=(s,a,c)=>a.has(s)?st("Cannot add the same private member more than once"):a instanceof WeakSet?a.add(s):a.set(s,c),ue=(s,a,c,m)=>(Ie(s,a,"write to private field"),m?m.call(s,c):a.set(s,c),c),me=(s,a,c)=>(Ie(s,a,"access private method"),c);import{S as $t,s as Ft,i as at,k as zt,n as it,l as dt,r as f,m as Bt,o as Vt,u as Pe,j as e,b as ct,e as P,p as _t,a as Le,X as Be,d as X,q as ve,t as Re}from"./index-CwxoiOJ7.js";import{u as qt,a as Ht}from"./useApiQuery-BenuGU61.js";import{P as Qt,B as he}from"./PageHeader-Q48thbsH.js";import{I as pe}from"./input-DuU4V_4o.js";import{L as Z}from"./label-CPyOyofK.js";import{C as Ke,a as $e}from"./card-lw0mNbtE.js";import{S as ut}from"./switch-C9znB46C.js";import{S as mt,a as ht,b as pt,c as xt,d as De}from"./select-Bas7KWYt.js";import{P as Ve,D as Gt,a as Xt,b as Yt,c as Jt,d as Wt,e as Zt}from"./dialog-_9cV4Ss_.js";import{R as es}from"./refresh-cw-lIS96np_.js";var J,le,K,W,ee,Se,_e,ot,ts=(ot=class extends $t{constructor(a,c){super();ce(this,ee);ce(this,J);ce(this,le);ce(this,K);ce(this,W);ue(this,J,a),this.setOptions(c),this.bindMethods(),me(this,ee,Se).call(this)}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(a){var m;const c=this.options;this.options=E(this,J).defaultMutationOptions(a),Ft(this.options,c)||E(this,J).getMutationCache().notify({type:"observerOptionsUpdated",mutation:E(this,K),observer:this}),c!=null&&c.mutationKey&&this.options.mutationKey&&at(c.mutationKey)!==at(this.options.mutationKey)?this.reset():((m=E(this,K))==null?void 0:m.state.status)==="pending"&&E(this,K).setOptions(this.options)}onUnsubscribe(){var a;this.hasListeners()||(a=E(this,K))==null||a.removeObserver(this)}onMutationUpdate(a){me(this,ee,Se).call(this),me(this,ee,_e).call(this,a)}getCurrentResult(){return E(this,le)}reset(){var a;(a=E(this,K))==null||a.removeObserver(this),ue(this,K,void 0),me(this,ee,Se).call(this),me(this,ee,_e).call(this)}mutate(a,c){var m;return ue(this,W,c),(m=E(this,K))==null||m.removeObserver(this),ue(this,K,E(this,J).getMutationCache().build(E(this,J),this.options)),E(this,K).addObserver(this),E(this,K).execute(a)}},J=new WeakMap,le=new WeakMap,K=new WeakMap,W=new WeakMap,ee=new WeakSet,Se=function(){var c;const a=((c=E(this,K))==null?void 0:c.state)??zt();ue(this,le,{...a,isPending:a.status==="pending",isSuccess:a.status==="success",isError:a.status==="error",isIdle:a.status==="idle",mutate:this.mutate,reset:this.reset})},_e=function(a){it.batch(()=>{var c,m,g,y,o,h,N,p;if(E(this,W)&&this.hasListeners()){const R=E(this,le).variables,F=E(this,le).context,T={client:E(this,J),meta:this.options.meta,mutationKey:this.options.mutationKey};(a==null?void 0:a.type)==="success"?((m=(c=E(this,W)).onSuccess)==null||m.call(c,a.data,R,F,T),(y=(g=E(this,W)).onSettled)==null||y.call(g,a.data,null,R,F,T)):(a==null?void 0:a.type)==="error"&&((h=(o=E(this,W)).onError)==null||h.call(o,a.error,R,F,T),(p=(N=E(this,W)).onSettled)==null||p.call(N,void 0,a.error,R,F,T))}this.listeners.forEach(R=>{R(E(this,le))})})},ot);function rt(s,a){const c=dt(),[m]=f.useState(()=>new ts(c,s));f.useEffect(()=>{m.setOptions(s)},[m,s]);const g=f.useSyncExternalStore(f.useCallback(o=>m.subscribe(it.batchCalls(o)),[m]),()=>m.getCurrentResult(),()=>m.getCurrentResult()),y=f.useCallback((o,h)=>{m.mutate(o,h).catch(Bt)},[m]);if(g.error&&Vt(m.options.throwOnError,[g.error]))throw g.error;return{...g,mutate:y,mutateAsync:g.mutate}}function He(){return typeof globalThis.crypto<"u"&&typeof globalThis.crypto.randomUUID=="function"?globalThis.crypto.randomUUID():Math.random().toString(36).slice(2,10)}function ss(){return{_key:He(),id:"",label:""}}const Fe={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:{}};function lt(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(a=>({...a,_key:He()})),authMode:s.authMode??"apiKey"}:{id:"",label:"",baseUrl:"",apiKey:"",type:"custom",defaultModel:"",models:[],authMode:"apiKey"}}function as(s){return{_key:He(),id:s.id,label:s.label}}function rs({open:s,mode:a,provider:c,existingProviderIds:m,onClose:g,onSubmit:y}){const{t:o}=Pe(),[h,N]=f.useState(()=>lt(c)),[p,R]=f.useState({}),[F,T]=f.useState(!1),[z,B]=f.useState(null),k=f.useRef(null),M=f.useRef(null),O=f.useRef(null),[A,je]=f.useState(a==="edit");f.useEffect(()=>{s&&(N(lt(c)),R({}),B(null),T(!1),je(a==="edit"))},[s,c,a]),f.useEffect(()=>{if(!s)return;const u=b=>{b.key==="Escape"&&g()};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[s,g]),f.useEffect(()=>{if(s){if(a==="create"&&O.current){O.current.focus();return}M.current&&M.current.focus()}},[s,a]);const ye=f.useMemo(()=>h.models.filter(u=>u.id.trim().length>0),[h.models]),xe=u=>b=>{N(w=>({...w,[u]:b}))},ke=u=>{N(b=>{const v=!A||b.label.trim().length===0||b.label===b.id?u:b.label;return{...b,id:u,label:v}})},ne=u=>{N(b=>{var Me;const v=Fe[u??"custom"]??Fe.custom,C=Object.values(Fe).map(te=>te.baseUrl).filter(te=>!!te),H=!b.baseUrl||C.includes(b.baseUrl),L=a==="create"&&(b.models.length===0||b.models.every(te=>te.id.trim().length===0)),G={...b,type:u,authMode:b.authMode??"apiKey"};return v!=null&&v.baseUrl&&H&&(G.baseUrl=v.baseUrl),v!=null&&v.models&&L&&(G.models=v.models.map(as),G.defaultModel=v.defaultModel??((Me=v.models[0])==null?void 0:Me.id)??""),G})},I=(u,b)=>{N(w=>{const v=[...w.models];return v[u]={...v[u],...b},{...w,models:v}})},Oe=(u,b)=>{N(w=>{const v=[...w.models],C=v[u];if(!C)return w;const H=!A||!C.label||C.label===C.id,L={...C,id:b,label:H?b:C.label};v[u]=L;const G=w.defaultModel===C.id?b:w.defaultModel;return{...w,models:v,defaultModel:G}})},V=u=>{N(b=>{if(u<0||u>=b.models.length)return b;const w=b.models.filter((C,H)=>H!==u);let v=b.defaultModel;return w.some(C=>C.id===v)||(v=""),{...b,models:w,defaultModel:v}})},Te=()=>{N(u=>({...u,models:[...u.models,ss()]}))},oe=u=>{N(b=>({...b,authMode:u}))},Ne=()=>{const u={},b=h.id.trim(),w=h.baseUrl.trim();if(a==="create"&&(b.length===0?u.id=o("providers.drawer.errors.idRequired"):m.includes(b)&&(u.id=o("providers.drawer.errors.idDuplicate"))),a==="edit"&&b.length===0&&(u.id=o("providers.drawer.errors.idRequired")),w.length===0)u.baseUrl=o("providers.drawer.errors.baseUrlInvalid");else try{new URL(w)}catch{u.baseUrl=o("providers.drawer.errors.baseUrlInvalid")}if(h.models.length>0){const v=new Set;h.models.some(H=>{const L=H.id.trim();return L.length===0||v.has(L)?!0:(v.add(L),!1)})&&(u.models=o("providers.drawer.errors.modelInvalid"))}return h.defaultModel&&!h.models.some(v=>v.id===h.defaultModel)&&(u.models=o("providers.drawer.errors.defaultInvalid")),R(u),Object.keys(u).length===0},ge=()=>{const u=h.models.map(v=>{var C;return{id:v.id.trim(),label:(C=v.label)!=null&&C.trim()?v.label.trim():void 0}}).filter(v=>v.id.length>0),b=c!=null&&c.extraHeaders&&Object.keys(c.extraHeaders).length>0?c.extraHeaders:void 0,w=h.authMode!=="apiKey"?h.authMode:void 0;return{id:h.id.trim(),label:h.label.trim()||h.id.trim(),baseUrl:h.baseUrl.trim(),apiKey:h.apiKey.trim()||void 0,type:h.type??"custom",defaultModel:h.defaultModel||void 0,models:u.length>0?u:void 0,extraHeaders:b,authMode:w}},we=async()=>{if(B(null),!!Ne()){T(!0);try{const u=ge();await y(u)}catch(u){B(o("providers.drawer.toast.saveFailure",{message:u instanceof Error?u.message:"unknown"})),T(!1);return}T(!1),g()}},fe=a==="create";return s?e.jsxs("div",{className:"fixed inset-0 z-50 flex",children:[e.jsx("div",{className:"flex-1 bg-slate-900/60",onClick:g,"aria-hidden":"true"}),e.jsxs("aside",{ref:k,role:"dialog","aria-modal":"true","aria-labelledby":"provider-drawer-title","aria-describedby":"provider-drawer-desc",className:"flex h-full w-full max-w-3xl flex-col border-l border-slate-200 bg-white shadow-xl dark:border-slate-800 dark:bg-slate-900",children:[e.jsxs("header",{className:"flex items-center justify-between border-b border-slate-200 px-6 py-4 dark:border-slate-800",children:[e.jsxs("div",{children:[e.jsx("h2",{id:"provider-drawer-title",className:"text-lg font-semibold",children:o(fe?"providers.drawer.createTitle":"providers.drawer.editTitle")}),e.jsx("p",{id:"provider-drawer-desc",className:"text-xs text-slate-500 dark:text-slate-400",children:o("providers.drawer.description")})]}),e.jsx("button",{type:"button",ref:M,onClick:g,className:"rounded-md border border-slate-200 px-3 py-1 text-sm transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",children:o("common.actions.close")})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto px-6 py-5",children:[e.jsxs("section",{className:"space-y-4","aria-labelledby":"provider-basic-fields",children:[e.jsx("div",{id:"provider-basic-fields",className:"sr-only",children:o("providers.drawer.description")}),e.jsx("div",{className:"flex items-center justify-end",children:e.jsx("button",{type:"button",onClick:()=>je(u=>!u),className:"rounded-md border border-slate-200 px-3 py-1 text-xs transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",children:o(A?"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-slate-500 dark:text-slate-400",children:o("providers.drawer.fields.id")}),e.jsx("input",{value:h.id,ref:O,onChange:u=>ke(u.target.value),disabled:!fe,placeholder:o("providers.drawer.fields.idPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60","aria-invalid":!!p.id}),p.id?e.jsx("span",{className:"text-xs text-red-500",children:p.id}):null]}),A?e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:o("providers.drawer.fields.label")}),e.jsx("input",{value:h.label,onChange:u=>xe("label")(u.target.value),placeholder:o("providers.drawer.fields.labelPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60"})]}):null]}),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-slate-500 dark:text-slate-400",children:o("providers.drawer.fields.baseUrl")}),e.jsx("input",{value:h.baseUrl,onChange:u=>xe("baseUrl")(u.target.value),placeholder:o("providers.drawer.fields.baseUrlPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60","aria-invalid":!!p.baseUrl}),p.baseUrl?e.jsx("span",{className:"text-xs text-red-500",children:p.baseUrl}):null]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:o("providers.drawer.fields.type")}),e.jsxs("select",{value:h.type??"custom",onChange:u=>ne(u.target.value),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60",children:[e.jsx("option",{value:"openai",children:"OpenAI"}),e.jsx("option",{value:"deepseek",children:"DeepSeek"}),e.jsx("option",{value:"huawei",children:"华为云"}),e.jsx("option",{value:"kimi",children:"Kimi"}),e.jsx("option",{value:"anthropic",children:"Anthropic (Claude)"}),e.jsx("option",{value:"custom",children:"Custom"})]})]})]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:o("providers.drawer.fields.apiKey")}),e.jsx("input",{value:h.apiKey,onChange:u=>xe("apiKey")(u.target.value),placeholder:o("providers.drawer.fields.apiKeyPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60"})]}),e.jsxs("fieldset",{className:"grid gap-2 rounded-lg border border-slate-200 p-3 text-xs dark:border-slate-700",children:[e.jsx("legend",{className:"px-1 text-slate-500 dark:text-slate-400",children:o("providers.drawer.fields.authMode")}),e.jsx("p",{className:"text-[11px] text-slate-500 dark:text-slate-400",children:o("providers.drawer.fields.authModeHint")}),e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 rounded-md px-2 py-1 transition hover:bg-slate-100 dark:hover:bg-slate-800",children:[e.jsx("input",{type:"radio",name:"provider-auth-mode",value:"apiKey",checked:h.authMode==="apiKey",onChange:()=>oe("apiKey")}),e.jsx("span",{children:o("providers.drawer.fields.authModeApiKey")})]}),e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 rounded-md px-2 py-1 transition hover:bg-slate-100 dark:hover:bg-slate-800",children:[e.jsx("input",{type:"radio",name:"provider-auth-mode",value:"authToken",checked:h.authMode==="authToken",onChange:()=>oe("authToken")}),e.jsx("span",{children:o("providers.drawer.fields.authModeAuthToken")})]}),e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 rounded-md px-2 py-1 transition hover:bg-slate-100 dark:hover:bg-slate-800",children:[e.jsx("input",{type:"radio",name:"provider-auth-mode",value:"xAuthToken",checked:h.authMode==="xAuthToken",onChange:()=>oe("xAuthToken")}),e.jsx("span",{children:o("providers.drawer.fields.authModeXAuthToken")})]})]})]}),e.jsxs("section",{className:"mt-6 space-y-3","aria-labelledby":"provider-model-fields",children:[e.jsxs("header",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h3",{id:"provider-model-fields",className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:o("providers.drawer.fields.models")}),e.jsx("p",{className:"text-xs text-slate-500 dark:text-slate-400",children:o("providers.drawer.modelsDescription")})]}),e.jsx("button",{type:"button",onClick:Te,className:"rounded-md border border-slate-200 px-3 py-1 text-xs transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",children:o("providers.drawer.fields.addModel")})]}),p.models?e.jsx("p",{className:"text-xs text-red-500",children:p.models}):null,e.jsxs("div",{className:"space-y-4",children:[h.models.map((u,b)=>e.jsxs("div",{className:"rounded-lg border border-slate-200 bg-slate-50 p-4 dark:border-slate-700 dark:bg-slate-800/40",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-slate-500 dark:text-slate-400",children:o("providers.drawer.fields.modelId")}),e.jsx("input",{value:u.id,onChange:w=>Oe(b,w.target.value),placeholder:o("providers.drawer.fields.modelIdPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60"})]}),A?e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:o("providers.drawer.fields.modelLabel")}),e.jsx("input",{value:u.label??"",onChange:w=>I(b,{label:w.target.value}),placeholder:o("providers.drawer.fields.modelLabelPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60"})]}):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-slate-600 dark:text-slate-300",children:[e.jsx("input",{type:"radio",name:"defaultModel",value:u.id,checked:h.defaultModel===u.id,onChange:()=>N(w=>({...w,defaultModel:u.id})),disabled:u.id.trim().length===0}),o("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:()=>V(b),disabled:h.models.length===0,children:o("providers.drawer.fields.removeModel")})]})]},u._key)),h.models.length===0?e.jsx("div",{className:"rounded-xl border-2 border-amber-300 bg-gradient-to-br from-amber-50 to-yellow-50 p-5 shadow-md dark:border-amber-600/60 dark:from-amber-900/20 dark:to-yellow-900/20",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"flex-shrink-0 text-2xl",children:"💡"}),e.jsxs("div",{className:"flex-1 space-y-2",children:[e.jsx("p",{className:"text-sm font-semibold text-amber-900 dark:text-amber-200",children:o("providers.drawer.noModelsTitle")}),e.jsx("p",{className:"text-xs leading-relaxed text-amber-800 dark:text-amber-300",children:o("providers.drawer.noModelsHint",{providerId:h.id||"provider-id"})}),e.jsxs("div",{className:"rounded-md bg-amber-100/80 p-2.5 dark:bg-amber-800/40",children:[e.jsx("p",{className:"mb-1.5 text-xs font-medium text-amber-900 dark:text-amber-200",children:o("providers.drawer.routeExample")}),e.jsxs("code",{className:"block rounded bg-white px-2.5 py-1.5 font-mono text-xs text-amber-900 shadow-sm dark:bg-slate-900 dark:text-amber-100",children:['"claude-*": "',(h.id||"provider-id").trim()||"provider-id",':*"']})]})]})]})}):null]}),ye.length>1?e.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-400",children:o("providers.drawer.defaultHint",{model:h.defaultModel||o("providers.card.noDefault")})}):null]})]}),e.jsxs("footer",{className:"flex items-center justify-between gap-3 border-t border-slate-200 px-6 py-4 text-sm dark:border-slate-800",children:[e.jsx("div",{className:"flex flex-col text-xs text-red-500","aria-live":"polite",children:z?e.jsx("span",{children:z}):null}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{type:"button",onClick:g,className:"rounded-md border border-slate-200 px-4 py-2 transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",disabled:F,children:o("common.actions.cancel")}),e.jsx("button",{type:"button",onClick:we,className:"rounded-md bg-blue-600 px-4 py-2 text-white transition hover:bg-blue-700 disabled:opacity-60",disabled:F,children:o(F?"common.actions.saving":"common.actions.save")})]})]})]})]}):null}const ls=["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"],ns=["gpt-4o-mini","gpt-4o","o4-mini","o4-large","gpt-5-codex"];function qe(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():Math.random().toString(36).slice(2,10)}function Y(s){return s?Object.entries(s).map(([a,c])=>({id:qe(),source:a,target:c})):[]}function ze(s,a){var g,y,o;if(!s)return{};const c={},m=s.endpointRouting??{};c.anthropic=Y(((g=m.anthropic)==null?void 0:g.modelRoutes)??s.modelRoutes??{}),c.openai=Y(((y=m.openai)==null?void 0:y.modelRoutes)??{});for(const h of a)(o=h.routing)!=null&&o.modelRoutes?c[h.id]=Y(h.routing.modelRoutes):c[h.id]=[];return c}function os(s,a){if(s==="anthropic")return!0;const c=a.find(m=>m.id===s);return c?c.paths&&c.paths.length>0?c.paths.some(m=>m.protocol==="anthropic"):c.protocol==="anthropic":!1}function is(s,a,c){var g,y,o;if(!a)return;if(s==="anthropic"||s==="openai")return(y=(g=a.endpointRouting)==null?void 0:g[s])==null?void 0:y.validation;const m=c.find(h=>h.id===s);return(o=m==null?void 0:m.routing)==null?void 0:o.validation}function ws(){const{t:s}=Pe(),{pushToast:a}=ct(),c=dt(),m=qt(["config","full"],{url:"/api/config",method:"GET"}),{data:g}=Ht({queryKey:["custom-endpoints"],queryFn:ve.list,refetchInterval:1e4}),y=(g==null?void 0:g.endpoints)??[],o=f.useMemo(()=>{const t=[{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"]}],n=y.map(r=>{let l,i=[];if(r.paths&&r.paths.length>0){const d=r.paths.map(x=>`${x.path} (${x.protocol})`).join(", ");l=`${s("modelManagement.tabs.customEndpoint")}: ${d}`,i=[...new Set(r.paths.map(x=>x.protocol))]}else if(r.path){const d=r.protocol||"anthropic";l=`${s("modelManagement.tabs.customEndpoint")}: ${r.path} (${d})`,i=[d]}else l=s("modelManagement.tabs.customEndpoint");return{key:r.id,label:r.label,description:l,isSystem:!1,canDelete:r.deletable!==!1,protocols:i}});return[...t,...n]},[s,y]),[h,N]=f.useState("providers"),[p,R]=f.useState(null),[F,T]=f.useState(!1),[z,B]=f.useState("create"),[k,M]=f.useState(void 0),[O,A]=f.useState(null),[je,ye]=f.useState(!1),[xe,ke]=f.useState(void 0),[ne,I]=f.useState({}),[Oe,V]=f.useState({}),[Te,oe]=f.useState(null),[Ne,ge]=f.useState({}),[we,fe]=f.useState({}),[u,b]=f.useState({}),[w,v]=f.useState(null),[C,H]=f.useState(null),[L,G]=f.useState(null),[Me,te]=f.useState(!1),[Ue,Qe]=f.useState(null),[Ee,Ae]=f.useState(!0),[Ge,Xe]=f.useState({}),[gt,Ye]=f.useState(!1),_=(p==null?void 0:p.providers)??[],ft=_.length,be=f.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]);f.useEffect(()=>{var t,n;if(m.data){const r=m.data;R(r),I(ze(r,y)),V({});const l={anthropic:((t=r.routingPresets)==null?void 0:t.anthropic)??[],openai:((n=r.routingPresets)==null?void 0:n.openai)??[]};for(const i of y)l[i.id]=i.routingPresets??[];ge(l)}},[m.data,y]),f.useEffect(()=>{m.isError&&m.error&&a({title:s("providers.toast.loadFailure",{message:m.error.message}),variant:"error"})},[m.isError,m.error,a,s]);const bt=f.useMemo(()=>{const t=new Map;for(const n of _){if(!n.defaultModel||!n.models)continue;const r=n.models.find(l=>l.id===n.defaultModel);r&&t.set(n.id,nt(r))}return t},[_]),Je=f.useMemo(()=>{const t=[],n=new Set;for(const l of _){const i=l.label||l.id,d=l.models??[];if(d.length>0)for(const j of d){const S=`${l.id}:${j.id}`;n.has(S)||(n.add(S),t.push({value:S,label:`${i} · ${j.label??j.id}`}))}else if(l.defaultModel){const j=`${l.id}:${l.defaultModel}`;n.has(j)||(n.add(j),t.push({value:j,label:`${i} · ${l.defaultModel}`}))}const x=`${l.id}:*`;n.has(x)||(n.add(x),t.push({value:x,label:s("settings.routing.providerPassthroughOption",{provider:i})}))}const r=[...ne.anthropic||[],...ne.openai||[]];for(const l of r){const i=l.target.trim();i&&!n.has(i)&&(n.add(i),t.push({value:i,label:i}))}return t},[_,ne,s]),We=(t,n)=>{ge(r=>({...r,[t]:n})),R(r=>{if(!r)return r;if(t==="anthropic"||t==="openai")return{...r,routingPresets:{...r.routingPresets,[t]:n}};const l=r.customEndpoints??[],i=l.findIndex(x=>x.id===t);if(i===-1)return r;const d=[...l];return d[i]={...d[i],routingPresets:n},{...r,customEndpoints:d}})},se=()=>p?!0:(a({title:s("settings.toast.missingConfig"),variant:"error"}),m.refetch(),!1),vt=(t,n)=>{fe(r=>({...r,[t]:n})),n.trim()&&b(r=>({...r,[t]:null}))},jt=async t=>{if(!se())return;const n=we[t].trim();if(!n){b(r=>({...r,[t]:s("modelManagement.validation.presetName")}));return}if(Ne[t].some(r=>r.name.toLowerCase()===n.toLowerCase())){b(r=>({...r,[t]:s("modelManagement.validation.presetDuplicate",{name:n})}));return}v(t);try{const l=(await X.post(`/api/routing-presets/${t}`,{name:n})).data.presets??[];We(t,l),fe(i=>({...i,[t]:""})),b(i=>({...i,[t]:null})),a({title:s("modelManagement.toast.presetSaved",{name:n}),variant:"success"})}catch(r){a({title:s("modelManagement.toast.presetSaveFailure",{message:r instanceof Error?r.message:"unknown"}),variant:"error"})}finally{v(null),m.refetch()}},yt=async(t,n)=>{var r,l,i;if(se()){H({endpoint:t,name:n.name});try{const x=(await X.post(`/api/routing-presets/${t}/apply`,{name:n.name})).data.config;if(x){R(x),I(ze(x,y));const j={anthropic:((r=x.routingPresets)==null?void 0:r.anthropic)??[],openai:((l=x.routingPresets)==null?void 0:l.openai)??[]};for(const S of y){const U=(i=x.customEndpoints)==null?void 0:i.find($=>$.id===S.id);j[S.id]=(U==null?void 0:U.routingPresets)??[]}ge(j)}else I(j=>({...j,[t]:Y(n.modelRoutes)}));a({title:s("modelManagement.toast.presetApplySuccess",{name:n.name}),variant:"success"})}catch(d){a({title:s("modelManagement.toast.presetApplyFailure",{message:d instanceof Error?d.message:"unknown"}),variant:"error"})}finally{H(null),m.refetch()}}},kt=async(t,n)=>{if(!(!se()||!window.confirm(s("modelManagement.confirm.deletePreset",{name:n.name})))){G({endpoint:t,name:n.name});try{const i=(await X.delete(`/api/routing-presets/${t}/${encodeURIComponent(n.name)}`)).data.presets??[];We(t,i),a({title:s("modelManagement.toast.presetDeleteSuccess",{name:n.name}),variant:"success"})}catch(l){a({title:s("modelManagement.toast.presetDeleteFailure",{message:l instanceof Error?l.message:"unknown"}),variant:"error"})}finally{G(null),m.refetch()}}},Nt=()=>{se()&&(B("create"),M(void 0),T(!0))},wt=t=>{se()&&(B("edit"),M(t),T(!0))},Mt=async t=>{if(!p)throw new Error(s("settings.toast.missingConfig"));const n=z==="create"?[..._,t]:_.map(i=>k&&i.id===k.id?{...t,id:k.id}:i),r={...p,providers:n};await X.put("/api/config",r),R(r),I(ze(r,y)),m.refetch();const l=z==="create"?s("providers.toast.createSuccess",{name:t.label||t.id}):s("providers.toast.updateSuccess",{name:t.label||t.id});a({title:l,variant:"success"})},Et=async t=>{const n=y.find(r=>r.id===t);if(n&&n.deletable!==!1&&confirm(s("modelManagement.deleteEndpointConfirm",{label:n.label})))try{await ve.delete(t),c.invalidateQueries({queryKey:["custom-endpoints"]}),a({title:s("modelManagement.deleteEndpointSuccess"),variant:"success"}),h===t&&N("providers")}catch(r){const l=Re(r);a({title:s("modelManagement.deleteEndpointError",{error:l.message}),variant:"error"})}},Ze=async(t,n)=>{A(t.id);try{const r=n&&(n.headers||n.query)?{headers:n.headers&&Object.keys(n.headers).length>0?n.headers:void 0,query:n.query&&n.query.trim().length>0?n.query.trim():void 0}:void 0,l=await X.post(`/api/providers/${t.id}/test`,r);l.data.ok?a({title:s("providers.toast.testSuccess"),description:s("providers.toast.testSuccessDesc",{status:l.data.status,duration:l.data.durationMs?`${l.data.durationMs} ms`:"—"}),variant:"success"}):a({title:s("providers.toast.testFailure",{message:`${l.data.status} ${l.data.statusText}`}),variant:"error"})}catch(r){a({title:s("providers.toast.testFailure",{message:r instanceof Error?r.message:"unknown"}),variant:"error"})}finally{A(null)}},Ct=t=>{if(t.type==="anthropic"){const n=t.extraHeaders??{},r=new Map(be.map(d=>[d.key.toLowerCase(),d])),l={};let i=!0;for(const d of be){const x=Object.entries(n).find(([j])=>j.toLowerCase()===d.key.toLowerCase());if(x){const[j,S]=x;String(S??"")===d.value||(i=!1,l[j]=String(S??""))}}for(const[d,x]of Object.entries(n))r.has(d.toLowerCase())||(l[d]=String(x??""));Xe(l),Ae(i),Qe(t),te(!0);return}Ze(t)},et=()=>{te(!1),Qe(null),Ae(!0),Xe({})},St=async()=>{if(!Ue)return;const t={};if(Ee)for(const l of be)t[l.key]=l.value;const n=new Map(be.map(l=>[l.key.toLowerCase(),l]));for(const[l,i]of Object.entries(Ge)){const d=l.toLowerCase();n.get(d)&&Ee||(t[l]=i)}const r=Ue;et(),await Ze(r,{headers:Object.keys(t).length>0?t:void 0,query:Ee?"beta=true":void 0})},Rt=async t=>{var S,U,$,ae;if(!se()||!window.confirm(s("providers.confirm.delete",{name:t.label||t.id})))return;const r=_.filter(q=>q.id!==t.id),l=q=>{const ie={};if(!q)return ie;for(const[D,de]of Object.entries(q)){if(!de)continue;const[re]=de.split(":");re&&re===t.id||de===t.id||(ie[D]=de)}return ie},i=(p==null?void 0:p.endpointRouting)??{},d=l(((S=i.anthropic)==null?void 0:S.modelRoutes)??(p==null?void 0:p.modelRoutes)??{}),x=l(((U=i.openai)==null?void 0:U.modelRoutes)??{}),j={...p,providers:r,modelRoutes:d,endpointRouting:{anthropic:{defaults:(($=i.anthropic)==null?void 0:$.defaults)??p.defaults,modelRoutes:d},openai:{defaults:((ae=i.openai)==null?void 0:ae.defaults)??p.defaults,modelRoutes:x}}};try{await X.put("/api/config",j),R(j),I({anthropic:Y(d),openai:Y(x)}),a({title:s("providers.toast.deleteSuccess",{name:t.label||t.id}),variant:"success"}),m.refetch()}catch(q){a({title:s("providers.toast.deleteFailure",{message:q instanceof Error?q.message:"unknown"}),variant:"error"})}},Dt=t=>{I(n=>({...n,[t]:[...n[t]||[],{id:qe(),source:"",target:""}]})),V(n=>({...n,[t]:null}))},Pt=async(t,n)=>{if(se()){Ye(!0);try{if(t==="anthropic"||t==="openai"){const r=p.endpointRouting?{...p.endpointRouting}:{},l=r[t]??{defaults:p.defaults,modelRoutes:(t==="anthropic"?p.modelRoutes:{})??{}},i={defaults:l.defaults??p.defaults,modelRoutes:l.modelRoutes??{}};let d=l.validation;n?(d={...d??{},mode:"claude-code"},d.allowExperimentalBlocks===void 0&&(d.allowExperimentalBlocks=!0)):d=void 0;const x=d?{...i,validation:d}:{...i},j={...r,[t]:x},S={...p,endpointRouting:j};await X.put("/api/config",S),R(S)}else{const r=p.customEndpoints??[],l=r.findIndex(ae=>ae.id===t);if(l===-1)throw new Error(s("modelManagement.toast.endpointNotFound"));const i=r[l],d=i.routing??{defaults:p.defaults,modelRoutes:{}};let x=d.validation;n?(x={...x??{},mode:"claude-code"},x.allowExperimentalBlocks===void 0&&(x.allowExperimentalBlocks=!0)):x=void 0;const j=x?{...d,validation:x}:{...d},S={...i,routing:j},U=[...r];U[l]=S;const $={...p,customEndpoints:U};await X.put("/api/config",$),R($)}a({title:s(n?"modelManagement.toast.claudeValidationEnabled":"modelManagement.toast.claudeValidationDisabled"),variant:"success"}),m.refetch()}catch(r){const l=Re(r);a({title:s("modelManagement.toast.claudeValidationFailure",{message:l.message}),variant:"error"})}finally{Ye(!1)}}},Ot=(t,n)=>{I(r=>{const l=r[t]||[];return l.some(i=>i.source.trim()===n.trim())?r:{...r,[t]:[...l,{id:qe(),source:n,target:""}]}}),V(r=>({...r,[t]:null}))},Ce=(t,n,r,l)=>{I(i=>({...i,[t]:(i[t]||[]).map(d=>d.id===n?{...d,[r]:l}:d)})),V(i=>({...i,[t]:null}))},Tt=(t,n)=>{I(r=>({...r,[t]:(r[t]||[]).filter(l=>l.id!==n)})),V(r=>({...r,[t]:null}))},Ut=t=>{var r,l;if(!p)return;const n=y.find(i=>i.id===t);if(n){const i=((r=n.routing)==null?void 0:r.modelRoutes)??{};I(d=>({...d,[t]:Y(i)}))}else{const i=p.endpointRouting??{},d=t,x=d==="anthropic"?p.modelRoutes??{}:{},j=((l=i[d])==null?void 0:l.modelRoutes)??x;I(S=>({...S,[t]:Y(j)}))}V(i=>({...i,[t]:null}))},At=async t=>{var l;if(!se())return;const n=ne[t]||[],r={};for(const i of n){const d=i.source.trim(),x=i.target.trim();if(!(!d&&!x)){if(!d||!x){V(j=>({...j,[t]:s("settings.validation.routePair")}));return}if(r[d]){V(j=>({...j,[t]:s("settings.validation.routeDuplicate",{model:d})}));return}r[d]=x}}V(i=>({...i,[t]:null})),oe(t);try{const i=y.find(d=>d.id===t);if(i){const d={...i.routing||{},modelRoutes:r,defaults:((l=i.routing)==null?void 0:l.defaults)||p.defaults};await ve.update(t,{routing:d}),c.invalidateQueries({queryKey:["custom-endpoints"]}),a({title:s("modelManagement.toast.routesSaved"),variant:"success"})}else{const d=p.endpointRouting?{...p.endpointRouting}:{},x=t,j=d[x]??{defaults:p.defaults,modelRoutes:x==="anthropic"?p.modelRoutes??{}:{}},S={...j,defaults:j.defaults??p.defaults,modelRoutes:r},U={...d,[x]:S},$={...p,endpointRouting:U,modelRoutes:x==="anthropic"?r:p.modelRoutes??{}};await X.put("/api/config",$),R($),a({title:s("modelManagement.toast.routesSaved"),variant:"success"}),m.refetch()}I(d=>({...d,[t]:Y(r)}))}catch(i){a({title:s("modelManagement.toast.routesSaveFailure",{message:i instanceof Error?i.message:"unknown"}),variant:"error"})}finally{oe(null)}},It=()=>e.jsx(Ke,{children:e.jsxs($e,{className:"pt-6 space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold",children:s("providers.title")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:s("providers.description")})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx(he,{variant:"secondary",children:s("providers.count",{count:ft})}),e.jsxs(P,{variant:"outline",size:"sm",onClick:()=>m.refetch(),disabled:m.isFetching,children:[e.jsx(es,{className:Le("mr-2 h-4 w-4",m.isFetching&&"animate-spin")}),m.isFetching?s("common.actions.refreshing"):s("providers.actions.refresh")]}),e.jsxs(P,{size:"sm",onClick:Nt,children:[e.jsx(Ve,{className:"mr-2 h-4 w-4"}),s("providers.actions.add")]})]})]}),m.isPending||!p&&m.isFetching?e.jsx("div",{className:"flex min-h-[200px] items-center justify-center rounded-lg border bg-muted/50 text-sm text-muted-foreground",children:s("common.loading")}):_.length===0?e.jsxs("div",{className:"rounded-lg border border-dashed p-12 text-center text-sm text-muted-foreground",children:[e.jsx("p",{className:"font-medium",children:s("providers.emptyState")}),e.jsx("p",{className:"mt-2 text-xs",children:s("providers.emptyStateSub",{default:"点击上方按钮添加您的第一个提供商"})})]}):e.jsx("div",{className:"grid gap-4 md:grid-cols-2 xl:grid-cols-3",children:_.map(t=>e.jsx(Ke,{className:"flex flex-col",children:e.jsxs($e,{className:"flex flex-1 flex-col gap-4 pt-6",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h3",{className:"font-semibold",children:t.label||t.id}),t.type&&e.jsx(cs,{type:t.type})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["ID: ",t.id]}),e.jsx("p",{className:"text-xs text-muted-foreground break-all",children:t.baseUrl})]}),t.defaultModel?e.jsx(he,{variant:"default",className:"text-xs",children:bt.get(t.id)??t.defaultModel}):e.jsx(he,{variant:"secondary",className:"text-xs",children:s("providers.card.noDefault")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Z,{className:"text-xs",children:s("providers.card.modelsTitle")}),t.models&&t.models.length>0?e.jsx("div",{className:"flex flex-wrap gap-1",children:t.models.map(n=>e.jsx(he,{variant:"outline",className:"text-xs",children:nt(n)},n.id))}):e.jsx("p",{className:"text-xs text-muted-foreground",children:s("providers.card.noModels")})]}),e.jsxs("div",{className:"mt-auto flex flex-wrap gap-2 pt-4 border-t",children:[e.jsx(P,{variant:"outline",size:"sm",onClick:()=>wt(t),children:s("providers.actions.edit")}),e.jsx(P,{variant:"outline",size:"sm",onClick:()=>Ct(t),disabled:O===t.id,children:O===t.id?s("common.actions.testingConnection"):s("providers.actions.test")}),e.jsx(P,{variant:"destructive",size:"sm",onClick:()=>Rt(t),children:s("providers.actions.delete")})]})]})},t.id))})]})}),Lt=t=>{const n=Ne[t]??[],r=we[t]??"",l=u[t],i=w===t;return e.jsxs("div",{className:"rounded-lg border border-dashed bg-muted/30 p-6 space-y-4",children:[e.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"font-medium",children:s("modelManagement.presets.title")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:s("modelManagement.presets.description")})]}),e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center",children:[e.jsx(pe,{value:r,onChange:d=>vt(t,d.target.value),placeholder:s("modelManagement.presets.namePlaceholder"),disabled:i,className:"w-full md:w-48"}),e.jsx(P,{onClick:()=>void jt(t),disabled:i,children:s(i?"modelManagement.presets.saving":"modelManagement.presets.save")})]})]}),l&&e.jsx("p",{className:"text-sm text-destructive",children:l}),n.length===0?e.jsx("p",{className:"text-sm text-muted-foreground text-center py-4",children:s("modelManagement.presets.empty")}):e.jsx("div",{className:"grid gap-2 sm:grid-cols-2 lg:grid-cols-3",children:n.map(d=>{const x=(C==null?void 0:C.endpoint)===t&&(C==null?void 0:C.name)===d.name,j=(L==null?void 0:L.endpoint)===t&&(L==null?void 0:L.name)===d.name;return e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-lg border bg-card px-4 py-3",children:[e.jsx("span",{className:"truncate text-sm font-medium",children:d.name}),e.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[e.jsx(P,{size:"sm",onClick:()=>void yt(t,d),disabled:x||j,children:s(x?"modelManagement.presets.applying":"modelManagement.presets.apply")}),e.jsx(P,{variant:"destructive",size:"sm",onClick:()=>void kt(t,d),disabled:j||x,children:s(j?"modelManagement.presets.deleting":"modelManagement.presets.delete")})]})]},d.name)})})]})},Kt=t=>{var ie;const n=ne[t]||[],r=Oe[t],l=o.find(D=>D.key===t),d=((ie=l==null?void 0:l.protocols)==null?void 0:ie.includes("anthropic"))??t==="anthropic"?ls:ns,x=Te===t,j=(l==null?void 0:l.label)??s(`modelManagement.tabs.${t}`),S=(l==null?void 0:l.isSystem)===!1?l.description:s(`settings.routing.descriptionByEndpoint.${t}`),U=`route-source-${t}`,$=os(t,y),ae=is(t,p,y),q=$&&(ae==null?void 0:ae.mode)==="claude-code";return e.jsx(Ke,{children:e.jsxs($e,{className:"pt-6 space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h2",{className:"text-lg font-semibold",children:s("settings.routing.titleByEndpoint",{endpoint:j})}),e.jsx("p",{className:"max-w-3xl text-sm text-muted-foreground",children:S}),e.jsx("p",{className:"max-w-3xl text-xs text-muted-foreground",children:s("settings.routing.wildcardHint")})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(P,{variant:"outline",size:"sm",onClick:()=>Dt(t),disabled:x,children:s("settings.routing.add")}),e.jsx(P,{variant:"outline",size:"sm",onClick:()=>Ut(t),disabled:x,children:s("common.actions.reset")}),e.jsx(P,{size:"sm",onClick:()=>void At(t),disabled:x,children:s(x?"common.actions.saving":"modelManagement.actions.saveRoutes")})]})]}),$&&e.jsx("div",{className:"rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950",children:e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium text-blue-800 dark:text-blue-200",children:s("modelManagement.claudeValidation.title")}),e.jsx("p",{className:"text-xs text-blue-700 dark:text-blue-300",children:s("modelManagement.claudeValidation.description")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ut,{checked:q,onCheckedChange:D=>void Pt(t,D),disabled:gt}),e.jsx("span",{className:Le("text-xs font-medium",q?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"),children:s(q?"modelManagement.claudeValidation.statusEnabled":"modelManagement.claudeValidation.statusDisabled")})]})]})}),Lt(t),r&&e.jsx("p",{className:"text-sm text-destructive",children:r}),n.length===0?e.jsxs("div",{className:"rounded-lg border border-dashed p-12 text-center text-sm text-muted-foreground",children:[e.jsx("p",{className:"font-medium",children:s("settings.routing.empty")}),e.jsx("p",{className:"mt-2 text-xs",children:s("settings.routing.emptySub",{default:"点击上方按钮添加路由规则"})})]}):e.jsx("div",{className:"space-y-3",children:n.map((D,de)=>e.jsxs("div",{className:"rounded-lg border bg-card p-4",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[e.jsx(he,{variant:"secondary",children:de+1}),e.jsx("span",{className:"text-sm font-medium",children:"路由规则"})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto]",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Z,{children:s("settings.routing.source")}),e.jsx(pe,{value:D.source,onChange:re=>Ce(t,D.id,"source",re.target.value),placeholder:"claude-3.5-sonnet",list:U,disabled:x})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Z,{children:s("settings.routing.target")}),(()=>{const re=D.target.trim(),tt=Je.some(Q=>Q.value===re)?re:"__custom";return e.jsxs(e.Fragment,{children:[e.jsxs(mt,{value:tt,onValueChange:Q=>{Q==="__custom"?Ce(t,D.id,"target",re):Ce(t,D.id,"target",Q)},disabled:x,children:[e.jsx(ht,{children:e.jsx(pt,{})}),e.jsxs(xt,{children:[e.jsx(De,{value:"__custom",children:s("settings.routing.customTargetOption")}),Je.map(Q=>e.jsx(De,{value:Q.value,children:Q.label},Q.value))]})]}),tt==="__custom"&&e.jsx(pe,{value:D.target,onChange:Q=>Ce(t,D.id,"target",Q.target.value),placeholder:"providerId:modelId",disabled:x})]})})()]}),e.jsx("div",{className:"flex items-end",children:e.jsx(P,{variant:"destructive",size:"sm",onClick:()=>Tt(t,D.id),disabled:x,children:s("settings.routing.remove")})})]})]},D.id))}),e.jsxs("div",{className:"rounded-lg border bg-muted/50 p-4 space-y-3",children:[e.jsx(Z,{children:s("settings.routing.suggested")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:d.map(D=>e.jsx(P,{variant:"outline",size:"sm",onClick:()=>Ot(t,D),disabled:x,children:D},`${t}-${D}`))})]}),e.jsx("datalist",{id:U,children:d.map(D=>e.jsx("option",{value:D},`${U}-${D}`))})]})})};return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(Qt,{icon:e.jsx(_t,{className:"h-5 w-5","aria-hidden":"true"}),title:s("modelManagement.title"),description:s("modelManagement.description"),actions:e.jsxs(P,{onClick:()=>{ke(void 0),ye(!0)},children:[e.jsx(Ve,{className:"mr-2 h-4 w-4"}),s("modelManagement.addEndpoint")]})}),e.jsx("div",{className:"flex flex-wrap gap-3",children:o.map(t=>{const n=h===t.key;return e.jsxs("div",{className:"relative",children:[e.jsxs("button",{type:"button",onClick:()=>N(t.key),className:Le("flex min-w-[200px] flex-col gap-1 rounded-lg border px-4 py-3 text-left transition-all",n?"border-primary bg-primary/5 text-primary":"border-border bg-card hover:bg-accent"),children:[e.jsx("span",{className:"font-medium",children:t.label}),e.jsx("span",{className:"text-xs text-muted-foreground",children:t.description})]}),t.canDelete&&e.jsx("button",{onClick:r=>{r.stopPropagation(),Et(t.key)},className:"absolute -top-2 -right-2 flex h-5 w-5 items-center justify-center rounded-full bg-destructive text-destructive-foreground text-xs hover:bg-destructive/90",title:s("common.delete"),children:e.jsx(Be,{className:"h-3 w-3"})})]},t.key)})}),h==="providers"?It():Kt(h),e.jsx(rs,{open:F,mode:z,provider:z==="edit"?k:void 0,existingProviderIds:_.map(t=>t.id).filter(t=>z==="edit"&&k?t!==k.id:!0),onClose:()=>{T(!1),M(void 0),B("create")},onSubmit:Mt}),e.jsx(us,{open:je,endpoint:xe,onClose:()=>{ye(!1),ke(void 0)},onSuccess:()=>{c.invalidateQueries({queryKey:["custom-endpoints"]})}}),e.jsx(ds,{open:Me,provider:Ue,options:be,preservedExtras:Ge,usePreset:Ee,onPresetChange:Ae,onConfirm:St,onClose:et})]})}function ds({open:s,provider:a,options:c,usePreset:m,preservedExtras:g,onPresetChange:y,onConfirm:o,onClose:h}){const{t:N}=Pe();return a?e.jsx(Gt,{open:s,onOpenChange:p=>!p&&h(),children:e.jsxs(Xt,{children:[e.jsxs(Yt,{children:[e.jsx(Jt,{children:N("providers.testDialog.title")}),e.jsx(Wt,{children:N("providers.testDialog.subtitle",{name:a.label||a.id})})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:N("providers.testDialog.description")}),e.jsxs("div",{className:"flex items-start gap-3 rounded-lg border p-4",children:[e.jsx("input",{type:"checkbox",className:"mt-1 h-4 w-4 rounded border",checked:m,onChange:p=>y(p.target.checked)}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Z,{children:N("providers.testDialog.presetLabel")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:N("providers.testDialog.presetDescription")}),e.jsxs("details",{className:"rounded-md bg-muted p-2 text-xs",children:[e.jsx("summary",{className:"cursor-pointer text-primary hover:underline",children:N("providers.testDialog.presetPreviewSummary")}),e.jsx("div",{className:"mt-2 space-y-1",children:c.map(p=>e.jsxs("code",{className:"block rounded bg-background px-2 py-1 text-xs",children:[p.key,": ",p.value]},p.key))})]})]})]}),Object.keys(g).length>0&&e.jsxs("div",{className:"rounded-lg border bg-muted p-4 text-xs space-y-2",children:[e.jsx("p",{className:"font-medium",children:N("providers.testDialog.preservedInfo")}),Object.entries(g).map(([p,R])=>e.jsxs("code",{className:"block rounded bg-background px-2 py-1",children:[p,": ",R]},p))]}),e.jsxs(Zt,{children:[e.jsx(P,{variant:"outline",onClick:h,children:N("providers.testDialog.cancel")}),e.jsx(P,{onClick:()=>void o(),children:N("providers.testDialog.primary")})]})]})}):null}function nt(s){return s.label&&s.label.trim().length>0?`${s.label} (${s.id})`:s.id}function cs({type:s}){const a={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:m}=a[s]||a.custom;return e.jsx(he,{variant:m,className:"text-xs",children:c})}function us({open:s,endpoint:a,onClose:c,onSuccess:m}){const{t:g}=Pe(),{pushToast:y}=ct(),[o,h]=f.useState({id:"",label:"",paths:[{path:"",protocol:"openai-auto"}],enabled:!0});f.useEffect(()=>{if(a){let k;a.paths&&a.paths.length>0?k=a.paths:a.path&&a.protocol?k=[{path:a.path,protocol:a.protocol}]:k=[{path:"",protocol:"openai-auto"}],h({id:a.id,label:a.label,paths:k,enabled:a.enabled!==!1})}else h({id:"",label:"",paths:[{path:"",protocol:"openai-auto"}],enabled:!0})},[a,s]);const N=rt({mutationFn:ve.create,onSuccess:()=>{y({title:g("modelManagement.createEndpointSuccess"),variant:"success"}),m(),c()},onError:k=>{const M=Re(k);y({title:g("modelManagement.createEndpointError",{error:M.message}),variant:"error"})}}),p=rt({mutationFn:k=>ve.update(k.id,k.updates),onSuccess:()=>{y({title:g("modelManagement.updateEndpointSuccess"),variant:"success"}),m(),c()},onError:k=>{const M=Re(k);y({title:g("modelManagement.updateEndpointError",{error:M.message}),variant:"error"})}}),R=()=>{h({...o,paths:[...o.paths,{path:"",protocol:"anthropic"}]})},F=k=>{if(o.paths.length===1){y({title:g("modelManagement.atLeastOnePath"),variant:"error"});return}const M=o.paths.filter((O,A)=>A!==k);h({...o,paths:M})},T=(k,M,O)=>{const A=[...o.paths];A[k]={...A[k],[M]:O},h({...o,paths:A})},z=k=>{if(k.preventDefault(),!o.id.trim()||!o.label.trim()){y({title:g("modelManagement.endpointValidationError"),variant:"error"});return}for(const O of o.paths)if(!O.path.trim()){y({title:g("modelManagement.pathValidationError"),variant:"error"});return}const M=o.paths.map(O=>({path:O.path.trim(),protocol:O.protocol}));a?p.mutate({id:a.id,updates:{label:o.label.trim(),paths:M,enabled:o.enabled}}):N.mutate({id:o.id.trim(),label:o.label.trim(),paths:M,enabled:o.enabled})},B=N.isPending||p.isPending;return s?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 bg-background/80 backdrop-blur-sm z-40",onClick:c}),e.jsx("div",{className:"fixed inset-y-0 right-0 w-full max-w-md bg-card border-l shadow-xl z-50 overflow-y-auto",children:e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between p-6 border-b",children:[e.jsx("h2",{className:"text-lg font-semibold",children:g(a?"modelManagement.editEndpoint":"modelManagement.createEndpoint")}),e.jsx(P,{variant:"ghost",size:"sm",onClick:c,children:e.jsx(Be,{className:"h-4 w-4"})})]}),e.jsxs("form",{onSubmit:z,className:"flex-1 p-6 space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(Z,{children:[g("modelManagement.endpointId")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(pe,{value:o.id,onChange:k=>h({...o,id:k.target.value}),placeholder:g("modelManagement.endpointIdPlaceholder"),disabled:!!a,required:!0}),e.jsx("p",{className:"text-xs text-muted-foreground",children:g("modelManagement.endpointIdHint")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(Z,{children:[g("modelManagement.endpointLabel")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(pe,{value:o.label,onChange:k=>h({...o,label:k.target.value}),placeholder:g("modelManagement.endpointLabelPlaceholder"),required:!0})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(Z,{children:[g("modelManagement.endpointPaths")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsxs(P,{type:"button",variant:"ghost",size:"sm",onClick:R,children:[e.jsx(Ve,{className:"mr-1 h-3 w-3"}),g("modelManagement.addPath")]})]}),e.jsx("div",{className:"space-y-3",children:o.paths.map((k,M)=>e.jsxs("div",{className:"rounded-lg border p-3 space-y-2",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(pe,{value:k.path,onChange:O=>T(M,"path",O.target.value),placeholder:g("modelManagement.endpointPathPlaceholder"),required:!0}),e.jsxs(mt,{value:k.protocol,onValueChange:O=>T(M,"protocol",O),children:[e.jsx(ht,{children:e.jsx(pt,{})}),e.jsxs(xt,{children:[e.jsx(De,{value:"anthropic",children:g("modelManagement.protocolAnthropic")}),e.jsx(De,{value:"openai-auto",children:g("modelManagement.protocolOpenAI")})]})]})]}),o.paths.length>1&&e.jsx(P,{type:"button",variant:"ghost",size:"sm",onClick:()=>F(M),className:"text-destructive",children:e.jsx(Be,{className:"h-4 w-4"})})]}),M===0&&e.jsx("p",{className:"text-xs text-muted-foreground",children:g("modelManagement.endpointPathHint")})]},M))})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ut,{id:"enabled",checked:o.enabled,onCheckedChange:k=>h({...o,enabled:k})}),e.jsx(Z,{htmlFor:"enabled",children:g("modelManagement.endpointEnabled")})]}),!a&&e.jsx("div",{className:"rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950",children:e.jsx("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:g("modelManagement.endpointRoutingHint")})})]}),e.jsxs("div",{className:"flex gap-3 p-6 border-t",children:[e.jsx(P,{variant:"outline",className:"flex-1",onClick:c,disabled:B,children:g("common.cancel")}),e.jsx(P,{className:"flex-1",onClick:z,disabled:B,children:g(B?"common.saving":a?"common.save":"common.create")})]})]})})]}):null}export{ws as default};
@@ -1 +1 @@
1
- import{j as r,a as s,ah as n}from"./index-Jop5ul3v.js";const l=n("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 shadow-sm",{variants:{variant:{default:"border-primary/20 bg-primary/10 text-primary hover:bg-primary/15 dark:border-primary/30 dark:bg-primary/20 dark:text-primary-foreground",secondary:"border-slate-200 bg-slate-100 text-slate-700 hover:bg-slate-200 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300",destructive:"border-red-200 bg-gradient-to-r from-red-50 to-red-100 text-red-700 hover:from-red-100 hover:to-red-150 dark:border-red-800 dark:from-red-950 dark:to-red-900 dark:text-red-300",outline:"border-slate-300 bg-transparent text-slate-600 hover:bg-slate-50 dark:border-slate-600 dark:text-slate-400 dark:hover:bg-slate-800",success:"border-emerald-200 bg-gradient-to-r from-emerald-50 to-emerald-100 text-emerald-700 hover:from-emerald-100 hover:to-emerald-150 dark:border-emerald-800 dark:from-emerald-950 dark:to-emerald-900 dark:text-emerald-300",warning:"border-amber-200 bg-gradient-to-r from-amber-50 to-amber-100 text-amber-700 hover:from-amber-100 hover:to-amber-150 dark:border-amber-800 dark:from-amber-950 dark:to-amber-900 dark:text-amber-300",info:"border-cyan-200 bg-gradient-to-r from-cyan-50 to-cyan-100 text-cyan-700 hover:from-cyan-100 hover:to-cyan-150 dark:border-cyan-800 dark:from-cyan-950 dark:to-cyan-900 dark:text-cyan-300",purple:"border-violet-200 bg-gradient-to-r from-violet-50 to-violet-100 text-violet-700 hover:from-violet-100 hover:to-violet-150 dark:border-violet-800 dark:from-violet-950 dark:to-violet-900 dark:text-violet-300",pink:"border-pink-200 bg-gradient-to-r from-pink-50 to-pink-100 text-pink-700 hover:from-pink-100 hover:to-pink-150 dark:border-pink-800 dark:from-pink-950 dark:to-pink-900 dark:text-pink-300"}},defaultVariants:{variant:"default"}});function m({className:e,variant:t,...a}){return r.jsx("div",{className:s(l({variant:t}),e),...a})}function f({icon:e,title:t,description:a,badge:o,actions:d,className:i}){return r.jsxs("div",{className:s("flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",i),children:[r.jsxs("div",{className:"flex flex-1 flex-wrap items-start gap-4",children:[e&&r.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-lg bg-primary/10 text-primary",children:e}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[r.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:t}),o&&r.jsx(m,{variant:"secondary",children:o})]}),a&&r.jsx("p",{className:"max-w-2xl text-sm text-muted-foreground",children:a})]})]}),d&&r.jsx("div",{className:"flex shrink-0 flex-wrap items-center gap-2",children:d})]})}export{m as B,f as P};
1
+ import{j as r,a as s,ah as n}from"./index-CwxoiOJ7.js";const l=n("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 shadow-sm",{variants:{variant:{default:"border-primary/20 bg-primary/10 text-primary hover:bg-primary/15 dark:border-primary/30 dark:bg-primary/20 dark:text-primary-foreground",secondary:"border-slate-200 bg-slate-100 text-slate-700 hover:bg-slate-200 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300",destructive:"border-red-200 bg-gradient-to-r from-red-50 to-red-100 text-red-700 hover:from-red-100 hover:to-red-150 dark:border-red-800 dark:from-red-950 dark:to-red-900 dark:text-red-300",outline:"border-slate-300 bg-transparent text-slate-600 hover:bg-slate-50 dark:border-slate-600 dark:text-slate-400 dark:hover:bg-slate-800",success:"border-emerald-200 bg-gradient-to-r from-emerald-50 to-emerald-100 text-emerald-700 hover:from-emerald-100 hover:to-emerald-150 dark:border-emerald-800 dark:from-emerald-950 dark:to-emerald-900 dark:text-emerald-300",warning:"border-amber-200 bg-gradient-to-r from-amber-50 to-amber-100 text-amber-700 hover:from-amber-100 hover:to-amber-150 dark:border-amber-800 dark:from-amber-950 dark:to-amber-900 dark:text-amber-300",info:"border-cyan-200 bg-gradient-to-r from-cyan-50 to-cyan-100 text-cyan-700 hover:from-cyan-100 hover:to-cyan-150 dark:border-cyan-800 dark:from-cyan-950 dark:to-cyan-900 dark:text-cyan-300",purple:"border-violet-200 bg-gradient-to-r from-violet-50 to-violet-100 text-violet-700 hover:from-violet-100 hover:to-violet-150 dark:border-violet-800 dark:from-violet-950 dark:to-violet-900 dark:text-violet-300",pink:"border-pink-200 bg-gradient-to-r from-pink-50 to-pink-100 text-pink-700 hover:from-pink-100 hover:to-pink-150 dark:border-pink-800 dark:from-pink-950 dark:to-pink-900 dark:text-pink-300"}},defaultVariants:{variant:"default"}});function m({className:e,variant:t,...a}){return r.jsx("div",{className:s(l({variant:t}),e),...a})}function f({icon:e,title:t,description:a,badge:o,actions:d,className:i}){return r.jsxs("div",{className:s("flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",i),children:[r.jsxs("div",{className:"flex flex-1 flex-wrap items-start gap-4",children:[e&&r.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-lg bg-primary/10 text-primary",children:e}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[r.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:t}),o&&r.jsx(m,{variant:"secondary",children:o})]}),a&&r.jsx("p",{className:"max-w-2xl text-sm text-muted-foreground",children:a})]})]}),d&&r.jsx("div",{className:"flex shrink-0 flex-wrap items-center gap-2",children:d})]})}export{m as B,f as P};
@@ -1 +1 @@
1
- import{j as s,a as d}from"./index-Jop5ul3v.js";import{C as m,b as l,c as i,d as j,a as f}from"./card-CAKB0pt0.js";function p({title:a,description:e,actions:r,className:n,contentClassName:x,children:c}){const t=a||e||r;return s.jsxs(m,{className:n,children:[t&&s.jsxs(l,{className:"flex flex-row items-start justify-between space-y-0",children:[s.jsxs("div",{className:"space-y-1.5",children:[typeof a=="string"?s.jsx(i,{className:"text-base",children:a}):a,e&&(typeof e=="string"?s.jsx(j,{children:e}):s.jsx("div",{className:"text-sm text-muted-foreground",children:e}))]}),r&&s.jsx("div",{className:"flex shrink-0 items-center gap-2",children:r})]}),s.jsx(f,{className:d(!t&&"pt-6",x),children:c})]})}export{p as P};
1
+ import{j as s,a as d}from"./index-CwxoiOJ7.js";import{C as m,b as l,c as i,d as j,a as f}from"./card-lw0mNbtE.js";function p({title:a,description:e,actions:r,className:n,contentClassName:x,children:c}){const t=a||e||r;return s.jsxs(m,{className:n,children:[t&&s.jsxs(l,{className:"flex flex-row items-start justify-between space-y-0",children:[s.jsxs("div",{className:"space-y-1.5",children:[typeof a=="string"?s.jsx(i,{className:"text-base",children:a}):a,e&&(typeof e=="string"?s.jsx(j,{children:e}):s.jsx("div",{className:"text-sm text-muted-foreground",children:e}))]}),r&&s.jsx("div",{className:"flex shrink-0 items-center gap-2",children:r})]}),s.jsx(f,{className:d(!t&&"pt-6",x),children:c})]})}export{p as P};
@@ -1,4 +1,4 @@
1
- import{c as te,u as xe,b as be,r as u,j as e,e as S,U as fe,L as Z,d as K}from"./index-Jop5ul3v.js";import{u as ee}from"./useApiQuery-CxgXaI6F.js";import{P as je}from"./PageHeader-Dv7R86Dg.js";import{c as ye}from"./clipboard-CALi6bTW.js";import{I as f}from"./input-Be5Jxax8.js";import{L as l}from"./label-DP0-fRMI.js";import{C as F,a as H}from"./card-CAKB0pt0.js";import{S as L}from"./switch-B71CBCBL.js";import{S as ve,a as Ne,b as Pe,c as ke,d as we}from"./select-BiIA6TXa.js";import{C as Ce}from"./copy-CLcieQsI.js";/**
1
+ import{c as te,u as xe,b as be,r as u,j as e,e as S,U as fe,L as Z,d as K}from"./index-CwxoiOJ7.js";import{u as ee}from"./useApiQuery-BenuGU61.js";import{P as je}from"./PageHeader-Q48thbsH.js";import{c as ye}from"./clipboard-CALi6bTW.js";import{I as f}from"./input-DuU4V_4o.js";import{L as l}from"./label-CPyOyofK.js";import{C as F,a as H}from"./card-lw0mNbtE.js";import{S as L}from"./switch-C9znB46C.js";import{S as ve,a as Ne,b as Pe,c as ke,d as we}from"./select-Bas7KWYt.js";import{C as Ce}from"./copy-BSxv1vw0.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{r as s,j as t,a as d,ah as n}from"./index-Jop5ul3v.js";const i=n("rounded-xl border bg-card text-card-foreground transition-all duration-200",{variants:{variant:{default:"shadow-sm hover:shadow-md",elevated:"shadow-md hover:shadow-lg",outline:"shadow-none border-2",ghost:"border-transparent shadow-none bg-transparent",interactive:"shadow-sm hover:shadow-lg hover:-translate-y-0.5 cursor-pointer"}},defaultVariants:{variant:"default"}}),l=s.forwardRef(({className:a,variant:e,...r},o)=>t.jsx("div",{ref:o,className:d(i({variant:e}),a),...r}));l.displayName="Card";const c=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("flex flex-col space-y-1.5 p-5",a),...e}));c.displayName="CardHeader";const m=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("text-lg font-semibold leading-none tracking-tight",a),...e}));m.displayName="CardTitle";const f=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("text-sm text-muted-foreground",a),...e}));f.displayName="CardDescription";const p=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("p-5 pt-0",a),...e}));p.displayName="CardContent";const x=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("flex items-center p-5 pt-0",a),...e}));x.displayName="CardFooter";export{l as C,p as a,c as b,m as c,f as d,x as e};
1
+ import{r as s,j as t,a as d,ah as n}from"./index-CwxoiOJ7.js";const i=n("rounded-xl border bg-card text-card-foreground transition-all duration-200",{variants:{variant:{default:"shadow-sm hover:shadow-md",elevated:"shadow-md hover:shadow-lg",outline:"shadow-none border-2",ghost:"border-transparent shadow-none bg-transparent",interactive:"shadow-sm hover:shadow-lg hover:-translate-y-0.5 cursor-pointer"}},defaultVariants:{variant:"default"}}),l=s.forwardRef(({className:a,variant:e,...r},o)=>t.jsx("div",{ref:o,className:d(i({variant:e}),a),...r}));l.displayName="Card";const c=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("flex flex-col space-y-1.5 p-5",a),...e}));c.displayName="CardHeader";const m=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("text-lg font-semibold leading-none tracking-tight",a),...e}));m.displayName="CardTitle";const f=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("text-sm text-muted-foreground",a),...e}));f.displayName="CardDescription";const p=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("p-5 pt-0",a),...e}));p.displayName="CardContent";const x=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("flex items-center p-5 pt-0",a),...e}));x.displayName="CardFooter";export{l as C,p as a,c as b,m as c,f as d,x as e};
@@ -1,4 +1,4 @@
1
- import{c}from"./index-Jop5ul3v.js";/**
1
+ import{c}from"./index-CwxoiOJ7.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as J,r as i,y as K,j as n,z as Q,A as N,P as h,D as U,E as x,G as m,H as C,I as X,J as Y,M as Z,N as ee,O as te,Q as oe,T as ae,a as p,X as ne}from"./index-Jop5ul3v.js";/**
1
+ import{c as J,r as i,y as K,j as n,z as Q,A as N,P as h,D as U,E as x,G as m,H as C,I as X,J as Y,M as Z,N as ee,O as te,Q as oe,T as ae,a as p,X as ne}from"./index-CwxoiOJ7.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.