llm-simple-router 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/logs.js +2 -2
- package/dist/admin/routes.js +2 -0
- package/dist/admin/settings.d.ts +7 -0
- package/dist/admin/settings.js +16 -0
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.js +19 -3
- package/dist/db/log-cleaner.d.ts +10 -0
- package/dist/db/log-cleaner.js +42 -0
- package/dist/db/logs.d.ts +27 -8
- package/dist/db/logs.js +40 -6
- package/dist/db/migrations/020_drop_log_redundancy.sql +8 -0
- package/dist/db/migrations/021_merge_metrics_columns.sql +28 -0
- package/dist/db/settings.d.ts +2 -0
- package/dist/db/settings.js +7 -0
- package/dist/index.js +13 -1
- package/dist/monitor/types.d.ts +3 -0
- package/dist/proxy/log-helpers.d.ts +0 -2
- package/dist/proxy/log-helpers.js +3 -5
- package/dist/proxy/orchestrator.d.ts +2 -0
- package/dist/proxy/orchestrator.js +1 -0
- package/dist/proxy/proxy-handler.js +29 -4
- package/dist/proxy/proxy-logging.d.ts +0 -1
- package/dist/proxy/proxy-logging.js +8 -10
- package/frontend-dist/assets/{CardContent-fmM_iiuR.js → CardContent-3ytnac7B.js} +1 -1
- package/frontend-dist/assets/CardTitle-BHZE8Rty.js +1 -0
- package/frontend-dist/assets/Checkbox-CMYgDuxw.js +1 -0
- package/frontend-dist/assets/CollapsibleTrigger-DooxvEnx.js +1 -0
- package/frontend-dist/assets/Collection-GDvpW_uY.js +3 -0
- package/frontend-dist/assets/Dashboard-BJslVTg8.js +3 -0
- package/frontend-dist/assets/DialogTitle-lj6NAA5R.js +1 -0
- package/frontend-dist/assets/{Input-BhvZ-Up7.js → Input-JApdUstN.js} +1 -1
- package/frontend-dist/assets/Label-IbQFgxLe.js +1 -0
- package/frontend-dist/assets/Login-BjuVvrPV.js +1 -0
- package/frontend-dist/assets/Logs-J08HyZWA.js +1 -0
- package/frontend-dist/assets/ModelMappings-DWVmxMy6.js +1 -0
- package/frontend-dist/assets/Monitor-BTEW0evp.js +1 -0
- package/frontend-dist/assets/{PopperContent-CHNw_qb6.js → PopperContent-ZhhkKJo0.js} +1 -1
- package/frontend-dist/assets/{Providers-C9ZAqHxO.js → Providers-BqLSKXuv.js} +1 -1
- package/frontend-dist/assets/ProxyEnhancement-TAHOKnxW.js +5 -0
- package/frontend-dist/assets/RetryRules-Cn6KHzgB.js +1 -0
- package/frontend-dist/assets/RouterKeys-CBgWAJ6-.js +1 -0
- package/frontend-dist/assets/SelectValue-DS4Z8y0u.js +1 -0
- package/frontend-dist/assets/Setup-QKmeMDtB.js +1 -0
- package/frontend-dist/assets/Switch-BYebebrY.js +1 -0
- package/frontend-dist/assets/TableHeader-B2A48qgy.js +1 -0
- package/frontend-dist/assets/TabsContent-BcNBY5CB.js +1 -0
- package/frontend-dist/assets/TabsTrigger-8W_mNsGI.js +1 -0
- package/frontend-dist/assets/UnifiedRequestDialog-BmEamR1L.js +3 -0
- package/frontend-dist/assets/UnifiedRequestDialog-Dk3IIDDx.css +1 -0
- package/frontend-dist/assets/VisuallyHidden-DPKPka_x.js +1 -0
- package/frontend-dist/assets/{VisuallyHiddenInput-cjeTgyDe.js → VisuallyHiddenInput-Bnglr6yR.js} +1 -1
- package/frontend-dist/assets/{alert-dialog-BoGRIC1Q.js → alert-dialog-BzyDZnoE.js} +1 -1
- package/frontend-dist/assets/{badge-DIO8W_W9.js → badge-BTjuxlp4.js} +1 -1
- package/frontend-dist/assets/{button-qxGNBunr.js → button-BKJB3nEQ.js} +2 -2
- package/frontend-dist/assets/{createLucideIcon-jHUFhqKn.js → createLucideIcon-igIAnu_Y.js} +1 -1
- package/frontend-dist/assets/dialog-C0B-Xn-S.js +1 -0
- package/frontend-dist/assets/file-text-Ci7Mgh3F.js +1 -0
- package/frontend-dist/assets/index-BrDOp_gc.js +1 -0
- package/frontend-dist/assets/index-DMdVJThL.css +1 -0
- package/frontend-dist/assets/lib-BGW4QyKP.js +1 -0
- package/frontend-dist/assets/{ohash.D__AXeF1-nmJ7gFbh.js → ohash.D__AXeF1-CsY_LBk-.js} +1 -1
- package/frontend-dist/assets/{useClipboard-CmLp2YGk.js → useClipboard-wnGQAe3I.js} +1 -1
- package/frontend-dist/assets/{useForwardExpose-awoGXQkg.js → useForwardExpose-bqtcPo63.js} +1 -1
- package/frontend-dist/assets/useNonce-DN0Hrw3l.js +1 -0
- package/frontend-dist/assets/x-Cy_v5hrA.js +1 -0
- package/frontend-dist/index.html +8 -7
- package/package.json +1 -1
- package/frontend-dist/assets/CardHeader-BzzFzZ1B.js +0 -1
- package/frontend-dist/assets/CardTitle-09d7O-11.js +0 -1
- package/frontend-dist/assets/Checkbox-DH8iqXQd.js +0 -1
- package/frontend-dist/assets/CollapsibleTrigger-DCRRORrU.js +0 -1
- package/frontend-dist/assets/Collection-DY9-Yue9.js +0 -3
- package/frontend-dist/assets/Dashboard-BEzoZuSm.js +0 -3
- package/frontend-dist/assets/DialogTitle-BeMGJzYO.js +0 -1
- package/frontend-dist/assets/Label-DjtouWZ7.js +0 -1
- package/frontend-dist/assets/LogDetailDialog-BjRsy_FR.js +0 -3
- package/frontend-dist/assets/Login-hOCPB-34.js +0 -1
- package/frontend-dist/assets/Logs-C5c3BJsg.js +0 -1
- package/frontend-dist/assets/ModelMappings-CDjxwyyz.js +0 -1
- package/frontend-dist/assets/Monitor-CPAvIREG.js +0 -1
- package/frontend-dist/assets/ProxyEnhancement-Ct5WbiB7.js +0 -5
- package/frontend-dist/assets/RetryRules-CbgyrP6w.js +0 -1
- package/frontend-dist/assets/RouterKeys-zmqgFEKp.js +0 -1
- package/frontend-dist/assets/SelectValue-CP4Sh7LP.js +0 -1
- package/frontend-dist/assets/Setup-BXDEPt4o.js +0 -1
- package/frontend-dist/assets/Switch-DF6awXqs.js +0 -1
- package/frontend-dist/assets/TableHeader-BKE_yVML.js +0 -1
- package/frontend-dist/assets/TabsTrigger-D8R7lxaI.js +0 -1
- package/frontend-dist/assets/TooltipTrigger-BjQXeFem.js +0 -1
- package/frontend-dist/assets/VisuallyHidden-B_NnkONE.js +0 -1
- package/frontend-dist/assets/dialog-D8pIXeSs.js +0 -1
- package/frontend-dist/assets/index-C_disqMY.js +0 -1
- package/frontend-dist/assets/index-DDp6SHfg.css +0 -1
- package/frontend-dist/assets/lib-DjpgwSRA.js +0 -1
- package/frontend-dist/assets/useNonce-_2e-GL-A.js +0 -1
- package/frontend-dist/assets/x-B0G-wIAB.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{B as e,Bt as t,Ct as n,Dt as r,Ft as i,G as a,H as o,K as s,L as c,Lt as l,O as u,U as d,V as f,W as p,at as m,gt as h,n as g,nt as _,st as v,yt as y,z as b}from"./button-qxGNBunr.js";import{a as x,i as S,n as C,r as w,t as T}from"./SelectValue-CP4Sh7LP.js";import{i as ee,o as te,r as ne,s as re,t as ie}from"./dialog-D8pIXeSs.js";import{a as ae,i as E,n as D,o as oe,r as O,t as se}from"./TableHeader-BKE_yVML.js";import{t as ce}from"./Label-DjtouWZ7.js";import{t as k}from"./badge-DIO8W_W9.js";import{n as A}from"./lib-DjpgwSRA.js";import{t as j}from"./Input-BhvZ-Up7.js";import{n as le,t as ue}from"./LogDetailDialog-BjRsy_FR.js";import{t as M}from"./format-CPdJtjZ5.js";var N={key:1,class:`ml-4 text-muted-foreground text-xs`},P={class:`font-mono`},F={key:2,class:`text-muted-foreground`},I={key:1,class:`text-muted-foreground`},L={key:1,class:`text-muted-foreground`},R=s({__name:`LogTableRow`,props:{log:{},isChild:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1}},emits:[`toggleExpand`,`openDetail`],setup(n,{emit:r}){let s=r;function u(e){if(!e)return`未知`;try{let t=JSON.parse(e);return t.action?t.detail?`${t.action}: ${t.detail}`:t.action:e}catch{return`未知`}}return(r,h)=>(m(),f(i(O),{class:l({"bg-destructive/10":!n.isChild&&(n.log.status_code??0)>=400,"bg-muted/20":n.isChild})},{default:y(()=>[a(i(E),{class:`w-10`},{default:y(()=>[!n.isChild&&n.log.child_count?(m(),f(i(g),{key:0,variant:`ghost`,size:`xs`,onClick:h[0]||=e=>s(`toggleExpand`,n.log)},{default:y(()=>[e(`span`,{class:l([`text-xs transition-transform`,n.expanded?``:`-rotate-90`])},`▼`,2)]),_:1})):o(``,!0),n.isChild?(m(),d(`span`,N,`└`)):o(``,!0)]),_:1}),a(i(E),{class:`font-mono text-xs text-muted-foreground`,title:n.log.id},{default:y(()=>[p(t(n.log.id.slice(0,8)),1)]),_:1},8,[`title`]),a(i(E),{class:`text-muted-foreground`},{default:y(()=>[p(t(i(M)(n.log.created_at)),1)]),_:1}),a(i(E),null,{default:y(()=>[a(i(k),{variant:n.log.api_type===`openai`?`default`:`secondary`},{default:y(()=>[p(t(n.log.api_type),1)]),_:1},8,[`variant`])]),_:1}),a(i(E),{class:`font-mono text-xs`},{default:y(()=>[p(t(n.log.model||`-`)+` `,1),!n.isChild&&n.log.original_model?(m(),f(i(k),{key:0,variant:`secondary`,class:`ml-1 text-xs`},{default:y(()=>[...h[2]||=[p(`已替换`,-1)]]),_:1})):o(``,!0)]),_:1}),a(i(E),{class:`text-xs`},{default:y(()=>[!n.isChild&&n.log.provider_id===i(`router`)?(m(),f(i(k),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:y(()=>[p(` 代理增强:`+t(u(n.log.upstream_request)),1)]),_:1})):n.log.backend_model||n.log.provider_name?(m(),d(c,{key:1},[e(`span`,P,t(n.log.backend_model||`-`),1),h[3]||=e(`span`,{class:`text-muted-foreground`},` @ `,-1),a(i(k),{variant:`outline`,class:`text-[10px] px-1 py-0`},{default:y(()=>[p(t(n.log.provider_name||n.log.provider_id||`-`),1)]),_:1})],64)):(m(),d(`span`,F,`-`))]),_:1}),a(i(E),null,{default:y(()=>[a(i(k),{variant:(n.log.status_code??0)<400?`default`:`destructive`},{default:y(()=>[p(t(n.log.status_code||`-`),1)]),_:1},8,[`variant`])]),_:1}),a(i(E),null,{default:y(()=>[p(t(n.log.latency_ms?n.log.latency_ms+`ms`:`-`),1)]),_:1}),a(i(E),null,{default:y(()=>[p(t(n.log.is_stream?`Yes`:`No`),1)]),_:1}),a(i(E),null,{default:y(()=>[n.log.is_retry?(m(),f(i(k),{key:0,variant:`outline`,class:`text-warning-dark border-warning`},{default:y(()=>[...h[4]||=[p(`重试`,-1)]]),_:1})):(m(),d(`span`,I,`-`))]),_:1}),a(i(E),null,{default:y(()=>[n.log.is_failover?(m(),f(i(k),{key:0,variant:`outline`,class:`text-danger-dark border-danger`},{default:y(()=>[...h[5]||=[p(`故障转移`,-1)]]),_:1})):(m(),d(`span`,L,`-`))]),_:1}),a(i(E),{class:`text-destructive text-xs`},{default:y(()=>[p(t(n.log.error_message||`-`),1)]),_:1}),a(i(E),null,{default:y(()=>[a(i(g),{variant:`ghost`,size:`sm`,onClick:h[1]||=e=>s(`openDetail`,n.log.id)},{default:y(()=>[...h[6]||=[p(`详情`,-1)]]),_:1})]),_:1})]),_:1},8,[`class`]))}}),z=[{label:`1h`,value:`1h`},{label:`5h`,value:`5h`},{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`}];function de(){let e=r(`5h`),t=r({start:``,end:``}),n=r(`all`),i=r(`all`),a=r(`all`),o=r(`all`),s=r([]),c=r([]),l=r([]),d=b(()=>t.value.start&&t.value.end&&t.value.start<t.value.end),f=b(()=>{let{start:e,end:n}=t.value;return!e||!n?``:e>=n?`结束时间须晚于开始时间`:``}),p=b(()=>{if(n.value===`all`)return l.value;let e=s.value.find(e=>e.id===n.value);if(!e)return l.value;let t=new Set(e.models);return l.value.filter(e=>t.has(e))});function m(e){return e.includes(`T`)?`${e}:00.000Z`:`${e}T00:00:00.000Z`}function h(e){return e.includes(`T`)?`${e}:59.999Z`:`${e}T23:59:59.999Z`}let g={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function v(){let r={};if(d.value)r.start_time=m(t.value.start),r.end_time=h(t.value.end);else{let t=g[e.value];t&&(r.start_time=new Date(Date.now()-t).toISOString())}return o.value!==`all`&&(r.api_type=o.value),n.value!==`all`&&(r.provider_id=n.value),i.value!==`all`&&(r.model=i.value),a.value!==`all`&&(r.router_key_id=a.value),r}function y(){t.value={start:``,end:``}}async function x(){try{s.value=await u.getProviders()}catch(e){console.error(`Failed to load providers:`,e),A.error(`加载供应商列表失败`)}}async function S(){try{c.value=await u.getRouterKeys()}catch(e){console.error(`Failed to load router keys:`,e),A.error(`加载密钥列表失败`)}}async function C(){try{let e=await u.getMetricsSummary({period:`30d`});l.value=[...new Set(e.map(e=>e.backend_model))]}catch{l.value=[]}}return _(()=>{Promise.allSettled([x(),S(),C()])}),{PERIODS:z,period:e,dateRange:t,dateRangeError:f,providerFilter:n,modelFilter:i,keyFilter:a,apiTypeFilter:o,providers:s,routerKeys:c,filteredModelOptions:p,hasDateRange:d,clearDateRange:y,buildFilterParams:v}}var fe={class:`p-6`},pe={class:`flex items-center justify-between mb-4`},me={class:`flex flex-wrap items-center gap-2 mb-4`},he={class:`flex gap-1`},ge={class:`flex items-center gap-1`},_e={key:1,class:`text-xs text-destructive whitespace-nowrap`},ve={class:`bg-card rounded-lg border overflow-hidden`},ye={class:`flex items-center justify-between mt-4`},be={class:`text-sm text-muted-foreground`},xe={class:`flex gap-1`},Se={class:`px-3 py-1 text-sm text-muted-foreground`},Ce={class:`mb-4`},B=20,V=13,we=300,H=s({__name:`Logs`,setup(s){let{PERIODS:l,period:b,dateRange:k,dateRangeError:M,providerFilter:N,modelFilter:P,keyFilter:F,providers:I,routerKeys:L,filteredModelOptions:z,clearDateRange:H,buildFilterParams:Te}=de(),U=r([]),W=r(0),G=r(1),K=r(!1),q=r(30),J=r(new Set),Y=r({}),X=r({}),Z=r(!1),Ee=r(null);async function De(e){let t=e.id;if(J.value.has(t)){J.value.delete(t);return}if(J.value.add(t),!Y.value[t]){X.value[t]=!0;try{let e=await u.getLogChildren(t);Y.value[t]=e.data}catch(e){console.error(`Failed to load child logs:`,e),A.error(`加载子请求失败`)}finally{X.value[t]=!1}}}function Oe(e){Z.value=!0,Ee.value?.load(e)}async function Q(){try{let e=Te(),t=await u.getLogs({page:G.value,limit:B,view:`grouped`,...e});U.value=t.data,W.value=t.total,J.value.clear(),Y.value={},X.value={}}catch(e){console.error(`Failed to load logs:`,e),A.error(`加载日志失败`)}}function ke(){G.value>1&&(G.value--,Q())}function Ae(){G.value++,Q()}async function je(){try{let e=new Date(Date.now()-q.value*864e5).toISOString(),t=await u.deleteLogsBefore(e);K.value=!1,G.value=1,await Q(),A.success(`已清理 ${t.deleted} 条日志`)}catch(e){console.error(`Failed to cleanup logs:`,e),A.error(`清理日志失败`)}}let $=null;return h([b,k,N,P,F],()=>{G.value=1,$&&clearTimeout($),$=setTimeout(()=>Q(),we)},{deep:!0}),_(()=>{Q()}),(r,s)=>(m(),d(`div`,fe,[e(`div`,pe,[s[11]||=e(`h2`,{class:`text-lg font-semibold text-foreground`},`请求日志`,-1),a(i(g),{variant:`outline`,class:`text-destructive border-destructive hover:bg-destructive/10`,onClick:s[0]||=e=>K.value=!0},{default:y(()=>[...s[10]||=[p(` 清理日志 `,-1)]]),_:1})]),e(`div`,me,[e(`div`,he,[(m(!0),d(c,null,v(i(l),e=>(m(),f(i(g),{key:e.value,variant:i(b)===e.value?`default`:`ghost`,size:`sm`,onClick:t=>b.value=e.value},{default:y(()=>[p(t(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),e(`div`,ge,[a(i(j),{type:`datetime-local`,modelValue:i(k).start,"onUpdate:modelValue":s[1]||=e=>i(k).start=e,class:`w-44`},null,8,[`modelValue`]),s[13]||=e(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),a(i(j),{type:`datetime-local`,modelValue:i(k).end,"onUpdate:modelValue":s[2]||=e=>i(k).end=e,class:`w-44`},null,8,[`modelValue`]),i(k).start||i(k).end?(m(),f(i(g),{key:0,variant:`ghost`,size:`sm`,onClick:i(H)},{default:y(()=>[...s[12]||=[p(`清除`,-1)]]),_:1},8,[`onClick`])):o(``,!0),i(M)?(m(),d(`span`,_e,t(i(M)),1)):o(``,!0)]),a(i(x),{modelValue:i(N),"onUpdate:modelValue":s[3]||=e=>n(N)?N.value=e:null},{default:y(()=>[a(i(C),{class:`w-28 truncate`},{default:y(()=>[a(i(T),{placeholder:`全部供应商`})]),_:1}),a(i(S),null,{default:y(()=>[a(i(w),{value:`all`},{default:y(()=>[...s[14]||=[p(`全部供应商`,-1)]]),_:1}),(m(!0),d(c,null,v(i(I),e=>(m(),f(i(w),{key:e.id,value:e.id},{default:y(()=>[p(t(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),a(i(x),{modelValue:i(P),"onUpdate:modelValue":s[4]||=e=>n(P)?P.value=e:null},{default:y(()=>[a(i(C),{class:`w-32 truncate`},{default:y(()=>[a(i(T),{placeholder:`全部模型`})]),_:1}),a(i(S),null,{default:y(()=>[a(i(w),{value:`all`},{default:y(()=>[...s[15]||=[p(`全部模型`,-1)]]),_:1}),(m(!0),d(c,null,v(i(z),e=>(m(),f(i(w),{key:e,value:e},{default:y(()=>[p(t(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),a(i(x),{modelValue:i(F),"onUpdate:modelValue":s[5]||=e=>n(F)?F.value=e:null},{default:y(()=>[a(i(C),{class:`w-32 truncate`},{default:y(()=>[a(i(T),{placeholder:`全部密钥`})]),_:1}),a(i(S),null,{default:y(()=>[a(i(w),{value:`all`},{default:y(()=>[...s[16]||=[p(`全部密钥`,-1)]]),_:1}),(m(!0),d(c,null,v(i(L),e=>(m(),f(i(w),{key:e.id,value:e.id},{default:y(()=>[p(t(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`])]),e(`div`,ve,[a(i(oe),null,{default:y(()=>[a(i(se),null,{default:y(()=>[a(i(O),{class:`bg-muted`},{default:y(()=>[a(i(D),{class:`w-10`}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[17]||=[p(`ID`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[18]||=[p(`时间`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[19]||=[p(`类型`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[20]||=[p(`模型`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[21]||=[p(`实际转发`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[22]||=[p(`状态码`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[23]||=[p(`延迟`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[24]||=[p(`流式`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[25]||=[p(`重试`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[26]||=[p(`故障转移`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[27]||=[p(`错误`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[28]||=[p(`操作`,-1)]]),_:1})]),_:1})]),_:1}),a(i(ae),null,{default:y(()=>[(m(!0),d(c,null,v(U.value,e=>(m(),d(c,{key:e.id},[a(R,{log:e,expanded:J.value.has(e.id),onToggleExpand:De,onOpenDetail:Oe},null,8,[`log`,`expanded`]),J.value.has(e.id)?(m(),d(c,{key:0},[X.value[e.id]?(m(),f(i(O),{key:0},{default:y(()=>[a(i(E),{colspan:V,class:`text-center py-2 pl-10`},{default:y(()=>[a(i(le),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):Y.value[e.id]?.length?(m(!0),d(c,{key:1},v(Y.value[e.id],e=>(m(),f(R,{key:e.id,log:e,"is-child":!0,onOpenDetail:Oe},null,8,[`log`]))),128)):o(``,!0)],64)):o(``,!0)],64))),128)),U.value.length===0?(m(),f(i(O),{key:0},{default:y(()=>[a(i(E),{colspan:V,class:`text-center text-muted-foreground py-8`},{default:y(()=>[...s[29]||=[p(`暂无日志`,-1)]]),_:1})]),_:1})):o(``,!0)]),_:1})]),_:1})]),e(`div`,ye,[e(`p`,be,`共 `+t(W.value)+` 条`,1),e(`div`,xe,[a(i(g),{variant:`outline`,size:`sm`,onClick:ke,disabled:G.value<=1},{default:y(()=>[...s[30]||=[p(`上一页`,-1)]]),_:1},8,[`disabled`]),e(`span`,Se,`第 `+t(G.value)+` 页`,1),a(i(g),{variant:`outline`,size:`sm`,onClick:Ae,disabled:U.value.length<B},{default:y(()=>[...s[31]||=[p(`下一页`,-1)]]),_:1},8,[`disabled`])])]),a(ue,{ref_key:`logDetailRef`,ref:Ee,open:Z.value,"onUpdate:open":s[6]||=e=>Z.value=e},null,8,[`open`]),a(i(re),{open:K.value,"onUpdate:open":s[9]||=e=>K.value=e},{default:y(()=>[a(i(te),null,{default:y(()=>[a(i(ne),null,{default:y(()=>[a(i(ie),null,{default:y(()=>[...s[32]||=[p(`清理日志`,-1)]]),_:1})]),_:1}),s[36]||=e(`p`,{class:`text-sm text-muted-foreground`},`删除指定天数之前的日志`,-1),e(`div`,Ce,[a(i(ce),{class:`block text-sm font-medium text-foreground mb-1`},{default:y(()=>[...s[33]||=[p(`保留最近天数`,-1)]]),_:1}),a(i(j),{modelValue:q.value,"onUpdate:modelValue":s[7]||=e=>q.value=e,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),a(i(ee),null,{default:y(()=>[a(i(g),{variant:`outline`,onClick:s[8]||=e=>K.value=!1},{default:y(()=>[...s[34]||=[p(`取消`,-1)]]),_:1}),a(i(g),{variant:`destructive`,onClick:je},{default:y(()=>[...s[35]||=[p(`确认清理`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{H as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{B as e,Bt as t,Dt as n,Ft as r,G as i,H as a,I as o,K as s,L as c,O as l,U as u,V as d,W as f,at as p,gt as m,n as h,nt as g,st as _,yt as v,z as y}from"./button-qxGNBunr.js";import{a as b,i as x,n as S,r as C,t as w}from"./SelectValue-CP4Sh7LP.js";import{n as T,r as E,t as D}from"./CollapsibleTrigger-DCRRORrU.js";import{a as O,i as k,o as A,r as j,s as M,t as N}from"./dialog-D8pIXeSs.js";import{a as P,c as F,i as I,n as L,o as R,r as z,t as B}from"./alert-dialog-BoGRIC1Q.js";import{t as V}from"./Label-DjtouWZ7.js";import{t as H}from"./badge-DIO8W_W9.js";import{n as U}from"./lib-DjpgwSRA.js";import{n as W,t as ee}from"./CardContent-fmM_iiuR.js";import{t as te}from"./CardHeader-BzzFzZ1B.js";import{t as G}from"./CardTitle-09d7O-11.js";import{t as K}from"./Input-BhvZ-Up7.js";var q={key:0,class:`text-sm text-destructive mt-1`},J={class:`border rounded-lg p-3 space-y-3`},Y={class:`flex gap-3`},X={class:`flex-1`},Z={key:0,class:`text-sm text-destructive mt-1`},Q={class:`flex-1`},ne={key:0,class:`text-sm text-destructive mt-1`},re={class:`border rounded-lg p-3 space-y-3`},ie={class:`flex items-center justify-between`},ae={class:`flex items-end gap-2`},oe={class:`w-24`},se={key:0,class:`text-sm text-destructive mt-1`},ce={class:`w-24`},le={key:0,class:`text-sm text-destructive mt-1`},ue={class:`flex gap-3`},de={class:`flex-1`},fe={key:0,class:`text-sm text-destructive mt-1`},pe={class:`flex-1`},me={key:0,class:`text-sm text-destructive mt-1`},he={key:0,class:`text-sm text-muted-foreground`},ge={key:1,class:`border rounded-lg p-3 space-y-3`},_e={class:`flex items-center justify-between`},ve={key:0,class:`text-sm text-destructive`},ye={class:`flex gap-3`},be={class:`flex-1`},xe={key:0,class:`text-sm text-destructive mt-1`},Se={class:`flex-1`},Ce={key:0,class:`text-sm text-destructive mt-1`},we={class:`flex justify-end gap-1`},Te={key:1,class:`text-sm text-muted-foreground`},Ee=s({__name:`MappingGroupFormDialog`,props:{open:{type:Boolean},editingId:{},form:{},providers:{},providerModels:{}},emits:[`update:open`,`save`,`addWindow`,`removeWindow`,`addTarget`,`removeTarget`,`moveTargetUp`,`moveTargetDown`],setup(s,{emit:l}){let g=s,T=l,E=y(()=>g.providerModels.get(g.form.default.provider_id)||[]);function D(e){let t=g.form.windows[e]?.target?.provider_id;return t&&g.providerModels.get(t)||[]}function P(e){if(typeof e!=`string`)return;g.form.default.provider_id=e;let t=g.providerModels.get(e)||[];g.form.default.backend_model=t[0]||``}function F(e,t){if(typeof t!=`string`)return;g.form.windows[e].target.provider_id=t;let n=g.providerModels.get(t)||[];g.form.windows[e].target.backend_model=n[0]||``}function I(e){let t=g.form.targets[e]?.provider_id;return t&&g.providerModels.get(t)||[]}function L(e,t){if(typeof t!=`string`)return;g.form.targets[e].provider_id=t;let n=g.providerModels.get(t)||[];g.form.targets[e].backend_model=n[0]||``}function R(){H()&&T(`save`)}let z=/^\d{2}:\d{2}$/,B=n({});function H(){let e={};return g.form.client_model.trim()||(e.client_model=`请输入客户端模型名称`),g.form.strategy===`scheduled`?(g.form.default.provider_id||(e[`default.provider_id`]=`请选择供应商`),g.form.default.backend_model||(e[`default.backend_model`]=`请选择后端模型`),g.form.windows.forEach((t,n)=>{z.test(t.start)||(e[`window.${n}.start`]=`格式:HH:MM`),z.test(t.end)||(e[`window.${n}.end`]=`格式:HH:MM`),t.target.provider_id||(e[`window.${n}.provider_id`]=`请选择供应商`),t.target.backend_model||(e[`window.${n}.backend_model`]=`请选择后端模型`)})):(g.form.targets.length===0&&(e.targets=`至少添加一个目标`),g.form.targets.forEach((t,n)=>{t.provider_id||(e[`target.${n}.provider_id`]=`请选择供应商`),t.backend_model||(e[`target.${n}.backend_model`]=`请选择后端模型`)})),B.value=e,Object.keys(e).length===0}return m(()=>g.open,e=>{e&&(B.value={})}),(n,l)=>(p(),d(r(M),{open:s.open,"onUpdate:open":l[7]||=e=>T(`update:open`,e)},{default:v(()=>[i(r(A),{class:`max-w-2xl`},{default:v(()=>[i(r(j),null,{default:v(()=>[i(r(N),null,{default:v(()=>[f(t(s.editingId?`编辑分组`:`添加分组`),1)]),_:1}),i(r(O),null,{default:v(()=>[...l[8]||=[f(`配置客户端模型到后端供应商模型的映射规则`,-1)]]),_:1})]),_:1}),e(`form`,{onSubmit:o(R,[`prevent`]),class:`space-y-4`},[e(`div`,null,[i(r(V),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[...l[9]||=[f(`客户端模型`,-1)]]),_:1}),i(r(K),{modelValue:s.form.client_model,"onUpdate:modelValue":l[0]||=e=>s.form.client_model=e,type:`text`,required:``,onInput:l[1]||=e=>delete B.value.client_model},null,8,[`modelValue`]),B.value.client_model?(p(),u(`p`,q,t(B.value.client_model),1)):a(``,!0)]),e(`div`,null,[i(r(V),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[...l[10]||=[f(`策略`,-1)]]),_:1}),i(r(b),{modelValue:s.form.strategy,"onUpdate:modelValue":l[2]||=e=>s.form.strategy=e},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:`选择策略`})]),_:1}),i(r(x),null,{default:v(()=>[i(r(C),{value:`scheduled`},{default:v(()=>[...l[11]||=[f(`定时切换 (scheduled)`,-1)]]),_:1}),i(r(C),{value:`round-robin`},{default:v(()=>[...l[12]||=[f(`轮询 (round-robin)`,-1)]]),_:1}),i(r(C),{value:`random`},{default:v(()=>[...l[13]||=[f(`随机 (random)`,-1)]]),_:1}),i(r(C),{value:`failover`},{default:v(()=>[...l[14]||=[f(`故障转移 (failover)`,-1)]]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),s.form.strategy===`scheduled`?(p(),u(c,{key:0},[e(`div`,J,[l[17]||=e(`div`,{class:`text-sm font-medium text-foreground`},`默认目标`,-1),e(`div`,Y,[e(`div`,X,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[15]||=[f(`供应商`,-1)]]),_:1}),i(r(b),{"model-value":s.form.default.provider_id,"onUpdate:modelValue":P},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:`选择供应商`})]),_:1}),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(s.providers,e=>(p(),d(r(C),{key:e.id,value:e.id},{default:v(()=>[f(t(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`]),B.value[`default.provider_id`]?(p(),u(`p`,Z,t(B.value[`default.provider_id`]),1)):a(``,!0)]),e(`div`,Q,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[16]||=[f(`后端模型`,-1)]]),_:1}),i(r(b),{modelValue:s.form.default.backend_model,"onUpdate:modelValue":l[3]||=e=>s.form.default.backend_model=e,disabled:E.value.length===0},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:E.value.length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:1}),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(E.value,e=>(p(),d(r(C),{key:e,value:e},{default:v(()=>[f(t(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`,`disabled`]),B.value[`default.backend_model`]?(p(),u(`p`,ne,t(B.value[`default.backend_model`]),1)):a(``,!0)])])]),e(`div`,re,[e(`div`,ie,[l[19]||=e(`div`,{class:`text-sm font-medium text-foreground`},`时间窗口`,-1),i(r(h),{type:`button`,variant:`outline`,size:`sm`,onClick:l[4]||=e=>T(`addWindow`)},{default:v(()=>[...l[18]||=[f(`添加窗口`,-1)]]),_:1})]),(p(!0),u(c,null,_(s.form.windows,(n,o)=>(p(),u(`div`,{key:o,class:`border rounded-md p-2 space-y-2`},[e(`div`,ae,[e(`div`,oe,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[20]||=[f(`开始`,-1)]]),_:1}),i(r(K),{modelValue:n.start,"onUpdate:modelValue":e=>n.start=e,type:`text`,placeholder:`HH:MM`,required:``,onInput:e=>delete B.value[`window.${o}.start`]},null,8,[`modelValue`,`onUpdate:modelValue`,`onInput`]),B.value[`window.${o}.start`]?(p(),u(`p`,se,t(B.value[`window.${o}.start`]),1)):a(``,!0)]),l[23]||=e(`span`,{class:`text-muted-foreground pb-1.5`},`-`,-1),e(`div`,ce,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[21]||=[f(`结束`,-1)]]),_:1}),i(r(K),{modelValue:n.end,"onUpdate:modelValue":e=>n.end=e,type:`text`,placeholder:`HH:MM`,required:``,onInput:e=>delete B.value[`window.${o}.end`]},null,8,[`modelValue`,`onUpdate:modelValue`,`onInput`]),B.value[`window.${o}.end`]?(p(),u(`p`,le,t(B.value[`window.${o}.end`]),1)):a(``,!0)]),l[24]||=e(`div`,{class:`flex-1`},null,-1),i(r(h),{type:`button`,variant:`ghost`,size:`sm`,class:`text-destructive shrink-0`,onClick:e=>T(`removeWindow`,o)},{default:v(()=>[...l[22]||=[f(`删除`,-1)]]),_:1},8,[`onClick`])]),e(`div`,ue,[e(`div`,de,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[25]||=[f(`供应商`,-1)]]),_:1}),i(r(b),{"model-value":n.target.provider_id,"onUpdate:modelValue":e=>F(o,e)},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:`选择供应商`})]),_:1}),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(s.providers,e=>(p(),d(r(C),{key:e.id,value:e.id},{default:v(()=>[f(t(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`]),B.value[`window.${o}.provider_id`]?(p(),u(`p`,fe,t(B.value[`window.${o}.provider_id`]),1)):a(``,!0)]),e(`div`,pe,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[26]||=[f(`后端模型`,-1)]]),_:1}),i(r(b),{modelValue:n.target.backend_model,"onUpdate:modelValue":e=>n.target.backend_model=e,disabled:D(o).length===0},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:D(o).length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:2},1024),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(D(o),e=>(p(),d(r(C),{key:e,value:e},{default:v(()=>[f(t(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1024)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`disabled`]),B.value[`window.${o}.backend_model`]?(p(),u(`p`,me,t(B.value[`window.${o}.backend_model`]),1)):a(``,!0)])])]))),128)),s.form.windows.length===0?(p(),u(`div`,he,`暂无窗口`)):a(``,!0)])],64)):(p(),u(`div`,ge,[e(`div`,_e,[l[28]||=e(`div`,{class:`text-sm font-medium text-foreground`},`目标列表`,-1),i(r(h),{type:`button`,variant:`outline`,size:`sm`,onClick:l[5]||=e=>T(`addTarget`)},{default:v(()=>[...l[27]||=[f(`添加目标`,-1)]]),_:1})]),B.value.targets?(p(),u(`p`,ve,t(B.value.targets),1)):a(``,!0),(p(!0),u(c,null,_(s.form.targets,(n,o)=>(p(),u(`div`,{key:o,class:`border rounded-md p-2 space-y-2`},[e(`div`,ye,[e(`div`,be,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[29]||=[f(`供应商`,-1)]]),_:1}),i(r(b),{"model-value":n.provider_id,"onUpdate:modelValue":e=>L(o,e)},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:`选择供应商`})]),_:1}),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(s.providers,e=>(p(),d(r(C),{key:e.id,value:e.id},{default:v(()=>[f(t(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`]),B.value[`target.${o}.provider_id`]?(p(),u(`p`,xe,t(B.value[`target.${o}.provider_id`]),1)):a(``,!0)]),e(`div`,Se,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[30]||=[f(`后端模型`,-1)]]),_:1}),i(r(b),{modelValue:n.backend_model,"onUpdate:modelValue":e=>n.backend_model=e,disabled:I(o).length===0},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:I(o).length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:2},1024),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(I(o),e=>(p(),d(r(C),{key:e,value:e},{default:v(()=>[f(t(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1024)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`disabled`]),B.value[`target.${o}.backend_model`]?(p(),u(`p`,Ce,t(B.value[`target.${o}.backend_model`]),1)):a(``,!0)])]),e(`div`,we,[s.form.strategy===`failover`?(p(),d(r(h),{key:0,type:`button`,variant:`ghost`,size:`sm`,disabled:o===0,onClick:e=>T(`moveTargetUp`,o)},{default:v(()=>[...l[31]||=[f(`↑`,-1)]]),_:1},8,[`disabled`,`onClick`])):a(``,!0),s.form.strategy===`failover`?(p(),d(r(h),{key:1,type:`button`,variant:`ghost`,size:`sm`,disabled:o===s.form.targets.length-1,onClick:e=>T(`moveTargetDown`,o)},{default:v(()=>[...l[32]||=[f(`↓`,-1)]]),_:1},8,[`disabled`,`onClick`])):a(``,!0),i(r(h),{type:`button`,variant:`ghost`,size:`sm`,class:`text-destructive shrink-0`,onClick:e=>T(`removeTarget`,o)},{default:v(()=>[...l[33]||=[f(`删除`,-1)]]),_:1},8,[`onClick`])])]))),128)),s.form.targets.length===0?(p(),u(`div`,Te,`暂无目标`)):a(``,!0)])),i(r(k),null,{default:v(()=>[i(r(h),{type:`button`,variant:`outline`,onClick:l[6]||=e=>T(`update:open`,!1)},{default:v(()=>[...l[34]||=[f(`取消`,-1)]]),_:1}),i(r(h),{type:`submit`},{default:v(()=>[...l[35]||=[f(`保存`,-1)]]),_:1})]),_:1})],32)]),_:1})]),_:1},8,[`open`]))}}),De=s({__name:`MappingGroupDeleteDialog`,props:{target:{}},emits:[`confirm`,`cancel`],setup(e,{emit:n}){let a=n;return(n,o)=>(p(),d(r(F),{open:!!e.target,"onUpdate:open":o[1]||=e=>{e||a(`cancel`)}},{default:v(()=>[i(r(P),null,{default:v(()=>[i(r(L),null,{default:v(()=>[i(r(B),null,{default:v(()=>[...o[2]||=[f(`确认删除`,-1)]]),_:1}),i(r(I),null,{default:v(()=>[f(`确定要删除分组「`+t(e.target?.client_model)+`」吗?`,1)]),_:1})]),_:1}),i(r(z),null,{default:v(()=>[i(r(R),null,{default:v(()=>[...o[3]||=[f(`取消`,-1)]]),_:1}),i(r(h),{variant:`destructive`,onClick:o[0]||=e=>a(`confirm`)},{default:v(()=>[...o[4]||=[f(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`]))}}),Oe={class:`p-6`},ke={class:`flex items-center justify-between mb-4`},Ae={class:`space-y-4`},je={class:`flex items-center gap-3`},Me={class:`flex items-center gap-2`},Ne={key:0,class:`space-y-3`},Pe={class:`flex items-center gap-2 text-sm`},$={class:`font-mono`},Fe={key:0,class:`space-y-2`},Ie={class:`font-mono text-xs bg-muted px-2 py-0.5 rounded`},Le={class:`font-mono`},Re={key:1,class:`text-sm text-muted-foreground`},ze={key:1,class:`space-y-2`},Be={key:0,class:`text-muted-foreground text-xs`},Ve={class:`font-mono`},He={key:0,class:`text-sm text-muted-foreground`},Ue={key:0,class:`text-center text-muted-foreground py-12 bg-card rounded-xl border`},We=s({__name:`ModelMappings`,setup(o){let s={client_model:``,strategy:`scheduled`,default:{backend_model:``,provider_id:``},windows:[],targets:[]},m=n([]),b=n([]),x=n(!1),S=n(null),C=n(null),w=n({...s}),O=y(()=>{let e=new Map;for(let t of b.value)e.set(t.id,t.name);return e}),k=y(()=>{let e=new Map;for(let t of b.value){let n=t.models;Array.isArray(n)&&n.length>0&&e.set(t.id,[...n])}return e}),A=y(()=>m.value.map(e=>{let t={};try{t=JSON.parse(e.rule)}catch{}return{...e,parsedRule:t}}));async function j(){let e=await Promise.allSettled([l.getMappingGroups(),l.getProviders()]);e[0].status===`fulfilled`?m.value=e[0].value:console.error(`Failed to load groups:`,e[0].reason),e[1].status===`fulfilled`?b.value=e[1].value:(console.error(`Failed to load providers:`,e[1].reason),U.error(`加载供应商失败`))}function M(){S.value=null;let e=b.value[0]?.id||``;w.value={client_model:``,strategy:`scheduled`,default:{backend_model:(k.value.get(e)||[])[0]||``,provider_id:e},windows:[],targets:[]},x.value=!0}function N(e){S.value=e.id;let t={};try{t=JSON.parse(e.rule)}catch{}if(e.strategy===`scheduled`)w.value={...s,client_model:e.client_model,strategy:e.strategy,default:{backend_model:t.default?.backend_model||``,provider_id:t.default?.provider_id||b.value[0]?.id||``},windows:t.windows?JSON.parse(JSON.stringify(t.windows)):[]};else{let n=b.value[0]?.id||``,r=k.value.get(n)||[];w.value={...s,client_model:e.client_model,strategy:e.strategy,targets:Array.isArray(t.targets)?t.targets.map(e=>({backend_model:e.backend_model||``,provider_id:e.provider_id||n})):[{backend_model:r[0]||``,provider_id:n}]}}x.value=!0}function P(){let e=b.value[0]?.id||``,t=k.value.get(e)||[];w.value.windows.push({start:``,end:``,target:{backend_model:t[0]||``,provider_id:e}})}function F(e){w.value.windows.splice(e,1)}function I(){let e=b.value[0]?.id||``,t=k.value.get(e)||[];w.value.targets.push({backend_model:t[0]||``,provider_id:e})}function L(e){w.value.targets.splice(e,1)}function R(e){if(e<=0)return;let t=w.value.targets;[t[e-1],t[e]]=[t[e],t[e-1]]}function z(e){let t=w.value.targets;e>=t.length-1||([t[e],t[e+1]]=[t[e+1],t[e]])}async function B(){try{let e;e=w.value.strategy===`scheduled`?JSON.stringify({default:w.value.default,windows:w.value.windows}):JSON.stringify({targets:w.value.targets});let t={client_model:w.value.client_model,strategy:w.value.strategy,rule:e};S.value?await l.updateMappingGroup(S.value,t):await l.createMappingGroup(t),x.value=!1,await j()}catch(e){console.error(`Failed to save mapping group:`,e),U.error(`保存分组失败`)}}async function V(){let e=C.value;if(e){C.value=null;try{await l.deleteMappingGroup(e.id),await j()}catch(e){console.error(`Failed to delete mapping group:`,e),U.error(`删除分组失败`)}}}return g(j),(n,o)=>(p(),u(`div`,Oe,[e(`div`,ke,[o[3]||=e(`h2`,{class:`text-lg font-semibold text-foreground`},`模型映射`,-1),i(r(h),{onClick:M,class:`flex items-center gap-1`},{default:v(()=>[...o[2]||=[e(`svg`,{class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 4v16m8-8H4`})],-1),f(` 添加分组 `,-1)]]),_:1})]),e(`div`,Ae,[(p(!0),u(c,null,_(A.value,n=>(p(),d(r(W),{key:n.id},{default:v(()=>[i(r(E),{"default-open":!0},{default:v(()=>[i(r(te),{class:`flex flex-row items-center justify-between gap-4`},{default:v(()=>[e(`div`,je,[i(r(G),{class:`font-mono text-sm`},{default:v(()=>[f(t(n.client_model),1)]),_:2},1024),i(r(H),{variant:`secondary`},{default:v(()=>[f(t(n.strategy),1)]),_:2},1024)]),e(`div`,Me,[i(r(D),{"as-child":``},{default:v(()=>[i(r(h),{variant:`ghost`,size:`sm`},{default:v(()=>[...o[4]||=[f(` 展开 `,-1)]]),_:1})]),_:1}),i(r(h),{variant:`ghost`,size:`sm`,onClick:e=>N(n)},{default:v(()=>[...o[5]||=[f(`编辑`,-1)]]),_:1},8,[`onClick`]),i(r(h),{variant:`ghost`,size:`sm`,class:`text-destructive hover:text-destructive`,onClick:e=>C.value=n},{default:v(()=>[...o[6]||=[f(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:2},1024),i(r(T),null,{default:v(()=>[i(r(ee),null,{default:v(()=>[n.strategy===`scheduled`?(p(),u(`div`,Ne,[e(`div`,Pe,[o[7]||=e(`span`,{class:`text-muted-foreground`},`默认模型:`,-1),e(`span`,$,t(n.parsedRule.default?.backend_model||`-`),1),o[8]||=e(`span`,{class:`text-muted-foreground`},`/`,-1),e(`span`,null,t(O.value.get(n.parsedRule.default?.provider_id||``)||`-`),1)]),n.parsedRule.windows?.length?(p(),u(`div`,Fe,[o[10]||=e(`div`,{class:`text-sm text-muted-foreground`},`时间窗口`,-1),(p(!0),u(c,null,_(n.parsedRule.windows,(n,r)=>(p(),u(`div`,{key:r,class:`flex items-center gap-2 text-sm`},[e(`span`,Ie,t(n.start)+` - `+t(n.end),1),e(`span`,Le,t(n.target.backend_model),1),o[9]||=e(`span`,{class:`text-muted-foreground`},`/`,-1),e(`span`,null,t(O.value.get(n.target.provider_id)||n.target.provider_id),1)]))),128))])):(p(),u(`div`,Re,`无时间窗口`))])):(p(),u(`div`,ze,[(p(!0),u(c,null,_(n.parsedRule.targets||[],(r,i)=>(p(),u(`div`,{key:i,class:`flex items-center gap-2 text-sm`},[n.strategy===`failover`?(p(),u(`span`,Be,t(i+1)+`.`,1)):a(``,!0),e(`span`,Ve,t(r.backend_model),1),o[11]||=e(`span`,{class:`text-muted-foreground`},`/`,-1),e(`span`,null,t(O.value.get(r.provider_id)||r.provider_id),1)]))),128)),(n.parsedRule.targets||[]).length?a(``,!0):(p(),u(`div`,He,`无目标`))]))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128)),m.value.length===0?(p(),u(`div`,Ue,` 暂无映射分组 `)):a(``,!0)]),i(Ee,{open:x.value,"onUpdate:open":o[0]||=e=>x.value=e,"editing-id":S.value,form:w.value,providers:b.value,"provider-models":k.value,onSave:B,onAddWindow:P,onRemoveWindow:F,onAddTarget:I,onRemoveTarget:L,onMoveTargetUp:R,onMoveTargetDown:z},null,8,[`open`,`editing-id`,`form`,`providers`,`provider-models`]),i(De,{target:C.value,onConfirm:V,onCancel:o[1]||=e=>C.value=null},null,8,[`target`])]))}});export{We as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,B as t,Bt as n,Ct as r,Dt as i,E as a,Ft as o,G as s,H as c,J as l,K as u,L as d,Lt as f,Mt as p,O as m,Rt as h,U as g,V as _,W as v,_t as y,at as b,b as x,ct as S,et as C,f as w,gt as T,i as E,n as ee,nt as D,r as O,rt as k,st as A,w as j,yt as M,z as N,zt as P}from"./button-qxGNBunr.js";import{t as F}from"./createLucideIcon-jHUFhqKn.js";import{n as I,t as te}from"./useNonce-_2e-GL-A.js";import{S as L,c as R,h as ne,l as z}from"./Collection-DY9-Yue9.js";import{t as B}from"./useForwardExpose-awoGXQkg.js";import{n as re,r as ie,t as ae}from"./CollapsibleTrigger-DCRRORrU.js";import{n as oe,r as se,s as ce,t as le}from"./dialog-D8pIXeSs.js";import{a as ue,i as V,n as H,o as de,r as fe,t as pe}from"./TableHeader-BKE_yVML.js";import{i as me,n as he,r as ge,t as _e}from"./TabsTrigger-D8R7lxaI.js";import{t as U}from"./badge-DIO8W_W9.js";import{n as W,t as G}from"./CardContent-fmM_iiuR.js";import{t as K}from"./CardHeader-BzzFzZ1B.js";import{t as q}from"./CardTitle-09d7O-11.js";import{t as ve}from"./LogDetailDialog-BjRsy_FR.js";var ye=F(`brain`,[[`path`,{d:`M12 18V5`,key:`adv99a`}],[`path`,{d:`M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4`,key:`1e3is1`}],[`path`,{d:`M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5`,key:`1gqd8o`}],[`path`,{d:`M17.997 5.125a4 4 0 0 1 2.526 5.77`,key:`iwvgf7`}],[`path`,{d:`M18 18a4 4 0 0 0 2-7.464`,key:`efp6ie`}],[`path`,{d:`M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517`,key:`1gq6am`}],[`path`,{d:`M6 18a4 4 0 0 1-2-7.464`,key:`k1g0md`}],[`path`,{d:`M6.003 5.125a4 4 0 0 0-2.526 5.77`,key:`q97ue3`}]]),be=F(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),xe=F(`message-square`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]),Se=F(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]),[J,Ce]=L(`ScrollAreaRoot`),we=u({__name:`ScrollAreaRoot`,props:{type:{type:String,required:!1,default:`hover`},dir:{type:String,required:!1},scrollHideDelay:{type:Number,required:!1,default:600},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e,{expose:t}){let n=e,r=i(0),a=i(0),s=i(),c=i(),l=i(),u=i(),d=i(!1),f=i(!1),{type:m,dir:h,scrollHideDelay:g}=p(n),v=ne(h);function y(){s.value?.scrollTo({top:0})}function x(){s.value?.scrollTo({top:0,left:0})}t({viewport:s,scrollTop:y,scrollTopLeft:x});let{forwardRef:C,currentElement:w}=B();return Ce({type:m,dir:v,scrollHideDelay:g,scrollArea:w,viewport:s,onViewportChange:e=>{s.value=e||void 0},content:c,onContentChange:e=>{c.value=e},scrollbarX:l,scrollbarXEnabled:d,scrollbarY:u,scrollbarYEnabled:f,onScrollbarXChange:e=>{l.value=e||void 0},onScrollbarYChange:e=>{u.value=e||void 0},onScrollbarXEnabledChange:e=>{d.value=e},onScrollbarYEnabledChange:e=>{f.value=e},onCornerWidthChange:e=>{r.value=e},onCornerHeightChange:e=>{a.value=e}}),(e,t)=>(b(),_(o(E),{ref:o(C),"as-child":n.asChild,as:e.as,dir:o(v),style:P({position:`relative`,"--reka-scroll-area-corner-width":`${r.value}px`,"--reka-scroll-area-corner-height":`${a.value}px`})},{default:M(()=>[S(e.$slots,`default`)]),_:3},8,[`as-child`,`as`,`dir`,`style`]))}}),Te=u({__name:`ScrollAreaCornerImpl`,setup(t){let n=J(),r=i(0),a=i(0),s=N(()=>!!r.value&&!!a.value);function l(){let e=n.scrollbarX.value?.offsetHeight||0;n.onCornerHeightChange(e),a.value=e}function u(){let e=n.scrollbarY.value?.offsetWidth||0;n.onCornerWidthChange(e),r.value=e}return w(n.scrollbarX.value,l),w(n.scrollbarY.value,u),T(()=>n.scrollbarX.value,l),T(()=>n.scrollbarY.value,u),(t,i)=>s.value?(b(),_(o(E),e({key:0,style:{width:`${r.value}px`,height:`${a.value}px`,position:`absolute`,right:o(n).dir.value===`ltr`?0:void 0,left:o(n).dir.value===`rtl`?0:void 0,bottom:0}},t.$parent?.$props),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`style`])):c(`v-if`,!0)}}),Ee=u({__name:`ScrollAreaCorner`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let n=t,{forwardRef:r}=B(),i=J(),a=N(()=>!!i.scrollbarX.value&&!!i.scrollbarY.value),s=N(()=>i.type.value!==`scroll`&&a.value);return(t,i)=>s.value?(b(),_(Te,e({key:0},n,{ref:o(r)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16)):c(`v-if`,!0)}});function De(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function Y(e){let t=Oe(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function Oe(e,t){let n=e/t;return Number.isNaN(n)?0:n}function ke(e,t=()=>{}){let n={left:e.scrollLeft,top:e.scrollTop},r=0;return(function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(r)}function Ae(e,t,n=`ltr`){let r=Y(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=n===`ltr`?[0,o]:[o*-1,0],l=I(e,c[0],c[1]);return De([0,o],[0,s])(l)}function X(e){return e?Number.parseInt(e,10):0}function je(e,t,n,r=`ltr`){let i=Y(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return De([c,l],d)(e)}function Me(e,t){return e>0&&e<t}var Ne=u({__name:`ScrollAreaScrollbarX`,setup(e){let t=J(),n=Q(),{forwardRef:r,currentElement:i}=B();D(()=>{i.value&&t.onScrollbarXChange(i.value)});let a=N(()=>n.sizes.value);return(e,i)=>(b(),_(Ue,{ref:o(r),"is-horizontal":!0,"data-orientation":`horizontal`,style:P({bottom:0,left:o(t).dir.value===`rtl`?`var(--reka-scroll-area-corner-width)`:0,right:o(t).dir.value===`ltr`?`var(--reka-scroll-area-corner-width)`:0,"--reka-scroll-area-thumb-width":a.value?`${o(Y)(a.value)}px`:void 0}),onOnDragScroll:i[0]||=e=>o(n).onDragScroll(e.x)},{default:M(()=>[S(e.$slots,`default`)]),_:3},8,[`style`]))}}),Pe=u({__name:`ScrollAreaScrollbarY`,setup(e){let t=J(),n=Q(),{forwardRef:r,currentElement:i}=B();D(()=>{i.value&&t.onScrollbarYChange(i.value)});let a=N(()=>n.sizes.value);return(e,i)=>(b(),_(Ue,{ref:o(r),"is-horizontal":!1,"data-orientation":`vertical`,style:P({top:0,right:o(t).dir.value===`ltr`?0:void 0,left:o(t).dir.value===`rtl`?0:void 0,bottom:`var(--reka-scroll-area-corner-height)`,"--reka-scroll-area-thumb-height":a.value?`${o(Y)(a.value)}px`:void 0}),onOnDragScroll:i[0]||=e=>o(n).onDragScroll(e.y)},{default:M(()=>[S(e.$slots,`default`)]),_:3},8,[`style`]))}}),Fe=u({__name:`ScrollAreaScrollbarAuto`,props:{forceMount:{type:Boolean,required:!1}},setup(t){let n=J(),r=Z(),{forwardRef:a}=B(),c=i(!1),l=j(()=>{if(n.viewport.value){let e=n.viewport.value.offsetWidth<n.viewport.value.scrollWidth,t=n.viewport.value.offsetHeight<n.viewport.value.scrollHeight;c.value=r.isHorizontal.value?e:t}},10);return D(()=>l()),w(n.viewport,l),w(n.content,l),(t,n)=>(b(),_(o(R),{present:t.forceMount||c.value},{default:M(()=>[s(He,e(t.$attrs,{ref:o(a),"data-state":c.value?`visible`:`hidden`}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),Ie=u({inheritAttrs:!1,__name:`ScrollAreaScrollbarGlimpse`,props:{forceMount:{type:Boolean,required:!1}},setup(t){let n=J(),r=Z(),{forwardRef:i}=B(),{state:a,dispatch:c}=z(`hidden`,{hidden:{POINTER_ENTER:`glimpse`,SCROLL:`scrolling`},glimpse:{HIDE:`hidden`,POINTER_LEAVE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`glimpse`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}}),l=N(()=>a.value!==`hidden`);function u(){c(`POINTER_ENTER`)}function d(){c(`POINTER_LEAVE`)}let f=j(()=>c(`SCROLL_END`),100);return y(e=>{if(a.value===`glimpse`){let t=window.setTimeout(c,n.scrollHideDelay.value,`HIDE`);e(()=>{window.clearTimeout(t)})}}),y(e=>{if(a.value===`idle`){let t=window.setTimeout(c,n.scrollHideDelay.value,`HIDE`);e(()=>{window.clearTimeout(t)})}}),y(e=>{let t=n.viewport.value,i=r.isHorizontal.value?`scrollLeft`:`scrollTop`;if(t){let n=t[i],r=()=>{let e=t[i];n!==e&&(c(`SCROLL`),f()),n=e};t.addEventListener(`scroll`,r),e(()=>{t.removeEventListener(`scroll`,r)})}}),D(()=>{let e=n.scrollArea.value;e&&(e.addEventListener(`pointerenter`,u),e.addEventListener(`pointerleave`,d))}),k(()=>{let e=n.scrollArea.value;e&&(e.removeEventListener(`pointerenter`,u),e.removeEventListener(`pointerleave`,d))}),(t,n)=>(b(),_(o(R),{present:t.forceMount||l.value},{default:M(()=>[s(Fe,e(t.$attrs,{ref:o(i),"data-state":l.value?`visible`:`hidden`}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),Le=u({inheritAttrs:!1,__name:`ScrollAreaScrollbarHover`,props:{forceMount:{type:Boolean,required:!1}},setup(t){let n=J(),{forwardRef:r}=B(),a,c=i(!1);function l(){window.clearTimeout(a),c.value=!0}function u(){a=window.setTimeout(()=>{c.value=!1},n.scrollHideDelay.value)}return D(()=>{let e=n.scrollArea.value;e&&(e.addEventListener(`pointerenter`,l),e.addEventListener(`pointerleave`,u))}),k(()=>{let e=n.scrollArea.value;e&&(window.clearTimeout(a),e.removeEventListener(`pointerenter`,l),e.removeEventListener(`pointerleave`,u))}),(t,n)=>(b(),_(o(R),{present:t.forceMount||c.value},{default:M(()=>[s(Fe,e(t.$attrs,{ref:o(r),"data-state":c.value?`visible`:`hidden`}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),Re=u({__name:`ScrollAreaScrollbarScroll`,props:{forceMount:{type:Boolean,required:!1}},setup(t){let n=J(),r=Z(),{forwardRef:i}=B(),{state:a,dispatch:c}=z(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}}),l=N(()=>a.value!==`hidden`);y(e=>{if(a.value===`idle`){let t=window.setTimeout(c,n.scrollHideDelay.value,`HIDE`);e(()=>{window.clearTimeout(t)})}});let u=j(()=>c(`SCROLL_END`),100);return y(e=>{let t=n.viewport.value,i=r.isHorizontal.value?`scrollLeft`:`scrollTop`;if(t){let n=t[i],r=()=>{let e=t[i];n!==e&&(c(`SCROLL`),u()),n=e};t.addEventListener(`scroll`,r),e(()=>{t.removeEventListener(`scroll`,r)})}}),(t,n)=>(b(),_(o(R),{present:t.forceMount||l.value},{default:M(()=>[s(He,e(t.$attrs,{ref:o(i),"data-state":l.value?`visible`:`hidden`}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),[Z,ze]=L(`ScrollAreaScrollbar`),Be=u({inheritAttrs:!1,__name:`ScrollAreaScrollbar`,props:{orientation:{type:String,required:!1,default:`vertical`},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`div`}},setup(t){let n=t,{forwardRef:r}=B(),i=J(),a=N(()=>n.orientation===`horizontal`);T(a,()=>{a.value?i.onScrollbarXEnabledChange(!0):i.onScrollbarYEnabledChange(!0)},{immediate:!0}),k(()=>{i.onScrollbarXEnabledChange(!1),i.onScrollbarYEnabledChange(!1)});let{orientation:s,forceMount:l,asChild:u,as:d}=p(n);return ze({orientation:s,forceMount:l,isHorizontal:a,as:d,asChild:u}),(t,n)=>o(i).type.value===`hover`?(b(),_(Le,e({key:0},t.$attrs,{ref:o(r),"force-mount":o(l)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`force-mount`])):o(i).type.value===`scroll`?(b(),_(Re,e({key:1},t.$attrs,{ref:o(r),"force-mount":o(l)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`force-mount`])):o(i).type.value===`glimpse`?(b(),_(Ie,e({key:2},t.$attrs,{ref:o(r),"force-mount":o(l)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`force-mount`])):o(i).type.value===`auto`?(b(),_(Fe,e({key:3},t.$attrs,{ref:o(r),"force-mount":o(l)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`force-mount`])):o(i).type.value===`always`?(b(),_(He,e({key:4},t.$attrs,{ref:o(r),"data-state":`visible`}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16)):c(`v-if`,!0)}}),[Q,Ve]=L(`ScrollAreaScrollbarVisible`),He=u({__name:`ScrollAreaScrollbarVisible`,setup(t){let n=J(),r=Z(),{forwardRef:a}=B(),s=i({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),c=N(()=>{let e=Oe(s.value.viewport,s.value.content);return e>0&&e<1}),l=i(),u=i(0);function d(e,t){if(g.value){let r=n.viewport.value.scrollLeft+e.deltaY;n.viewport.value.scrollLeft=r,Me(r,t)&&e.preventDefault()}else{let r=n.viewport.value.scrollTop+e.deltaY;n.viewport.value.scrollTop=r,Me(r,t)&&e.preventDefault()}}function f(e,t){g.value?u.value=t.x:u.value=t.y}function p(e){u.value=0}function m(e){s.value=e}function h(e,t){return je(e,u.value,s.value,t)}let g=N(()=>r.isHorizontal.value);function v(e){g.value?n.viewport.value.scrollLeft=h(e,n.dir.value):n.viewport.value.scrollTop=h(e)}function y(){if(g.value){if(n.viewport.value&&l.value){let e=n.viewport.value.scrollLeft,t=Ae(e,s.value,n.dir.value);l.value.style.transform=`translate3d(${t}px, 0, 0)`}}else if(n.viewport.value&&l.value){let e=n.viewport.value.scrollTop,t=Ae(e,s.value);l.value.style.transform=`translate3d(0, ${t}px, 0)`}}function x(e){l.value=e}return Ve({sizes:s,hasThumb:c,handleWheelScroll:d,handleThumbDown:f,handleThumbUp:p,handleSizeChange:m,onThumbPositionChange:y,onThumbChange:x,onDragScroll:v}),(t,n)=>g.value?(b(),_(Ne,e({key:0},t.$attrs,{ref:o(a)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16)):(b(),_(Pe,e({key:1},t.$attrs,{ref:o(a)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16))}}),Ue=u({__name:`ScrollAreaScrollbarImpl`,props:{isHorizontal:{type:Boolean,required:!0}},emits:[`onDragScroll`,`onWheelScroll`,`onThumbPointerDown`],setup(e,{emit:t}){let n=e,r=t,a=J(),s=Q(),c=Z(),{forwardRef:l,currentElement:u}=B(),d=i(``),f=i();function p(e){f.value&&r(`onDragScroll`,{x:e.clientX-f.value?.left,y:e.clientY-f.value?.top})}function m(e){e.button===0&&(e.target.setPointerCapture(e.pointerId),f.value=u.value.getBoundingClientRect(),d.value=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,a.viewport&&(a.viewport.value.style.scrollBehavior=`auto`),p(e))}function h(e){p(e)}function g(e){let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=d.value,a.viewport&&(a.viewport.value.style.scrollBehavior=``),f.value=void 0}function v(e){let t=e.target,n=u.value?.contains(t),r=s.sizes.value.content-s.sizes.value.viewport;n&&s.handleWheelScroll(e,r)}D(()=>{document.addEventListener(`wheel`,v,{passive:!1})}),k(()=>{document.removeEventListener(`wheel`,v)});function y(){u.value&&(n.isHorizontal?s.handleSizeChange({content:a.viewport.value?.scrollWidth??0,viewport:a.viewport.value?.offsetWidth??0,scrollbar:{size:u.value.clientWidth??0,paddingStart:X(getComputedStyle(u.value).paddingLeft),paddingEnd:X(getComputedStyle(u.value).paddingRight)}}):s.handleSizeChange({content:a.viewport.value?.scrollHeight??0,viewport:a.viewport.value?.offsetHeight??0,scrollbar:{size:u.value?.clientHeight??0,paddingStart:X(getComputedStyle(u.value).paddingTop),paddingEnd:X(getComputedStyle(u.value).paddingBottom)}}),s.onThumbPositionChange())}return w(u,y),w(a.content,y),(e,t)=>(b(),_(o(E),{ref:o(l),style:{position:`absolute`},"data-scrollbarimpl":``,as:o(c).as.value,"as-child":o(c).asChild.value,onPointerdown:m,onPointermove:h,onPointerup:g},{default:M(()=>[S(e.$slots,`default`)]),_:3},8,[`as`,`as-child`]))}}),We=u({__name:`ScrollAreaThumb`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,n=J(),r=Q();function s(e){let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,i=e.clientY-t.top;r.handleThumbDown(e,{x:n,y:i})}function c(e){r.handleThumbUp(e)}let{forwardRef:l,currentElement:u}=B(),d=i(),f=N(()=>n.viewport.value);function p(){d.value||(d.value=ke(f.value,r.onThumbPositionChange),r.onThumbPositionChange())}return a(N(()=>r.sizes.value),()=>{r.onThumbChange(u.value),f.value&&(r.onThumbPositionChange(),f.value.addEventListener(`scroll`,p))}),k(()=>{f.value.removeEventListener(`scroll`,p),n.viewport.value?.removeEventListener(`scroll`,p)}),(e,n)=>(b(),_(o(E),{ref:o(l),"data-state":o(r).hasThumb?`visible`:`hidden`,style:{width:`var(--reka-scroll-area-thumb-width)`,height:`var(--reka-scroll-area-thumb-height)`},"as-child":t.asChild,as:e.as,onPointerdown:s,onPointerup:c},{default:M(()=>[S(e.$slots,`default`)]),_:3},8,[`data-state`,`as-child`,`as`]))}}),Ge=u({inheritAttrs:!1,__name:`ScrollAreaViewport`,props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n,{expose:r}){let a=n,{nonce:c}=p(a),l=te(c),u=J(),f=i();D(()=>{u.onViewportChange(f.value),u.onContentChange(h.value)}),r({viewportElement:f});let{forwardRef:m,currentElement:h}=B();return(n,r)=>(b(),g(d,null,[t(`div`,e({ref_key:`viewportElement`,ref:f,"data-reka-scroll-area-viewport":``,style:{overflowX:o(u).scrollbarXEnabled.value?`scroll`:`hidden`,overflowY:o(u).scrollbarYEnabled.value?`scroll`:`hidden`}},n.$attrs,{tabindex:0}),[s(o(E),{ref:o(m),style:P({minWidth:o(u).scrollbarXEnabled.value?`fit-content`:void 0}),"as-child":a.asChild,as:n.as},{default:M(()=>[S(n.$slots,`default`)]),_:3},8,[`style`,`as-child`,`as`])],16),s(o(E),{as:`style`,nonce:o(l)},{default:M(()=>r[0]||=[v(` /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-reka-scroll-area-viewport] { scrollbar-width:none; -ms-overflow-style:none; -webkit-overflow-scrolling:touch; } [data-reka-scroll-area-viewport]::-webkit-scrollbar { display:none; } `)]),_:1,__:[0]},8,[`nonce`])],64))}}),Ke=u({__name:`BaseSeparator`,props:{orientation:{type:String,required:!1,default:`horizontal`},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let n=t,r=[`horizontal`,`vertical`];function i(e){return r.includes(e)}let a=N(()=>i(n.orientation)?n.orientation:`horizontal`),s=N(()=>a.value===`vertical`?n.orientation:void 0),c=N(()=>n.decorative?{role:`none`}:{"aria-orientation":s.value,role:`separator`});return(t,n)=>(b(),_(o(E),e({as:t.as,"as-child":t.asChild,"data-orientation":a.value},c.value),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`as`,`as-child`,`data-orientation`]))}}),qe=u({__name:`Separator`,props:{orientation:{type:String,required:!1,default:`horizontal`},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e;return(e,n)=>(b(),_(Ke,h(l(t)),{default:M(()=>[S(e.$slots,`default`)]),_:3},16))}}),Je=u({__name:`ScrollBar`,props:{orientation:{default:`vertical`},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t,r=x(n,`class`);return(i,a)=>(b(),_(o(Be),e({"data-slot":`scroll-area-scrollbar`,"data-orientation":t.orientation},o(r),{class:o(O)(`data-[orientation=horizontal]:h-2.5 data-[orientation=horizontal]:flex-col data-[orientation=horizontal]:border-t data-[orientation=horizontal]:border-t-transparent data-[orientation=vertical]:h-full data-[orientation=vertical]:w-2.5 data-[orientation=vertical]:border-l data-[orientation=vertical]:border-l-transparent flex touch-none p-px transition-colors select-none`,n.class)}),{default:M(()=>[s(o(We),{"data-slot":`scroll-area-thumb`,class:`rounded-full relative flex-1 bg-border`})]),_:1},16,[`data-orientation`,`class`]))}}),Ye=u({__name:`ScrollArea`,props:{type:{},dir:{},scrollHideDelay:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t,r=x(n,`class`);return(t,i)=>(b(),_(o(we),e({"data-slot":`scroll-area`},o(r),{class:o(O)(`relative`,n.class)}),{default:M(()=>[s(o(Ge),{"data-slot":`scroll-area-viewport`,class:`size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1`},{default:M(()=>[S(t.$slots,`default`)]),_:3}),s(Je),s(o(Ee))]),_:3},16,[`class`]))}}),Xe={class:`grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6`},Ze={class:`text-2xl font-bold text-foreground mt-1`},Qe={class:`text-xs text-muted-foreground mt-1`},$e={class:`text-2xl font-bold text-foreground mt-1`},et={class:`text-xs text-muted-foreground mt-1`},tt={class:`text-2xl font-bold text-foreground mt-1`},nt={class:`text-xs text-muted-foreground mt-1`},rt={class:`text-2xl font-bold text-foreground mt-1`},it={class:`text-xs text-muted-foreground mt-1`},at=u({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{}},setup(e){let r=e,i=N(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.errorCount/r.stats.totalRequests*100).toFixed(1)),a=N(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.retryCount/r.stats.totalRequests*100).toFixed(1)),c=N(()=>r.stats?r.stats.p50LatencyMs.toFixed(0):`--`);return(r,l)=>(b(),g(`div`,Xe,[s(o(W),null,{default:M(()=>[s(o(G),{class:`p-4`},{default:M(()=>[l[0]||=t(`p`,{class:`text-sm text-muted-foreground`},`活跃请求`,-1),t(`p`,Ze,n(e.activeCount),1),t(`p`,Qe,n(e.streamCount)+` 流式 / `+n(e.activeCount-e.streamCount)+` 非流式 `,1)]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(G),{class:`p-4`},{default:M(()=>[l[1]||=t(`p`,{class:`text-sm text-muted-foreground`},`错误率`,-1),t(`p`,$e,n(i.value)+`%`,1),t(`p`,et,n(e.stats?.errorCount??0)+` / `+n(e.stats?.totalRequests??0),1)]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(G),{class:`p-4`},{default:M(()=>[l[2]||=t(`p`,{class:`text-sm text-muted-foreground`},`P50 延迟`,-1),t(`p`,tt,n(c.value)+`ms`,1),t(`p`,nt,` 平均 `+n(e.stats?.avgLatencyMs?.toFixed(0)??`--`)+`ms `,1)]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(G),{class:`p-4`},{default:M(()=>[l[3]||=t(`p`,{class:`text-sm text-muted-foreground`},`重试率`,-1),t(`p`,rt,n(a.value)+`%`,1),t(`p`,it,n(e.stats?.retryCount??0)+` / `+n(e.stats?.totalRequests??0),1)]),_:1})]),_:1})]))}}),ot={class:`space-y-3`},st={key:0,class:`text-sm text-muted-foreground`},ct={class:`flex items-center justify-between text-sm`},lt={class:`font-medium text-foreground`},ut={class:`text-muted-foreground`},dt={key:0,class:`h-2 bg-muted rounded-full overflow-hidden`},ft={key:1,class:`flex gap-3 text-xs text-muted-foreground`},pt=u({__name:`ConcurrencyPanel`,props:{providers:{}},setup(e){function r(e,t){let n=e/t;return n>=1?`bg-red-500`:n>=.8?`bg-orange-500`:n>=.5?`bg-yellow-500`:`bg-green-500`}return(i,a)=>(b(),g(`div`,ot,[e.providers.length===0?(b(),g(`div`,st,` 暂无并发数据 `)):c(``,!0),(b(!0),g(d,null,A(e.providers,e=>(b(),g(`div`,{key:e.providerId,class:`space-y-1`},[t(`div`,ct,[t(`span`,lt,n(e.providerName),1),t(`span`,ut,[e.maxConcurrency===0?(b(),g(d,{key:0},[v(`未限制`)],64)):(b(),g(d,{key:1},[v(n(e.active)+` / `+n(e.maxConcurrency),1)],64))])]),e.maxConcurrency>0?(b(),g(`div`,dt,[t(`div`,{class:f([`h-full rounded-full transition-all duration-300`,r(e.active,e.maxConcurrency)]),style:P({width:`${Math.min(100,e.active/e.maxConcurrency*100)}%`})},null,6)])):c(``,!0),e.maxConcurrency>0?(b(),g(`div`,ft,[t(`span`,null,`排队: `+n(e.queued),1),t(`span`,null,`队列上限: `+n(e.maxQueueSize),1)])):c(``,!0)]))),128))]))}}),mt={key:0,class:`text-sm text-muted-foreground`},ht={key:1,class:`grid grid-cols-2 gap-3 text-sm`},gt={class:`font-medium text-foreground`},_t={class:`font-medium text-foreground`},vt={class:`col-span-2`},yt={class:`flex items-center justify-between`},bt={class:`text-muted-foreground`},xt={class:`h-2 bg-muted rounded-full overflow-hidden mt-1`},St={class:`font-medium text-foreground`},Ct={class:`font-medium text-foreground`},wt={class:`col-span-2`},Tt={class:`font-medium text-foreground`},Et=u({__name:`RuntimePanel`,props:{runtime:{}},setup(e){let r=e,i=N(()=>!r.runtime||r.runtime.memoryUsage.heapTotal===0?0:Math.min(100,r.runtime.memoryUsage.heapUsed/r.runtime.memoryUsage.heapTotal*100));function a(e){let t=Math.floor(e/1e3);return`${Math.floor(t/3600)}h ${Math.floor(t%3600/60)}m ${t%60}s`}function o(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}return(r,s)=>e.runtime?(b(),g(`div`,ht,[t(`div`,null,[s[0]||=t(`p`,{class:`text-muted-foreground`},`运行时间`,-1),t(`p`,gt,n(a(e.runtime.uptimeMs)),1)]),t(`div`,null,[s[1]||=t(`p`,{class:`text-muted-foreground`},`内存 RSS`,-1),t(`p`,_t,n(o(e.runtime.memoryUsage.rss)),1)]),t(`div`,vt,[t(`div`,yt,[s[2]||=t(`p`,{class:`text-muted-foreground`},`Heap 使用`,-1),t(`p`,bt,n(o(e.runtime.memoryUsage.heapUsed))+` / `+n(o(e.runtime.memoryUsage.heapTotal)),1)]),t(`div`,xt,[t(`div`,{class:`h-full bg-blue-500 rounded-full transition-all duration-300`,style:P({width:`${i.value}%`})},null,4)])]),t(`div`,null,[s[3]||=t(`p`,{class:`text-muted-foreground`},`Active Handles`,-1),t(`p`,St,n(e.runtime.activeHandles),1)]),t(`div`,null,[s[4]||=t(`p`,{class:`text-muted-foreground`},`Active Requests`,-1),t(`p`,Ct,n(e.runtime.activeRequests),1)]),t(`div`,wt,[s[5]||=t(`p`,{class:`text-muted-foreground`},`Event Loop 延迟`,-1),t(`p`,Tt,n(e.runtime.eventLoopDelayMs.toFixed(2))+`ms`,1)])])):(b(),g(`div`,mt,`暂无运行时数据`))}}),Dt={key:0,class:`text-sm text-muted-foreground`},Ot={key:1,class:`space-y-2`},kt={class:`flex items-center justify-between text-sm`},At={class:`text-muted-foreground`},jt={class:`h-2 bg-muted rounded-full overflow-hidden`},Mt=u({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(e){let r=e,i=N(()=>Object.values(r.byStatusCode).reduce((e,t)=>e+t,0)),a=N(()=>{let e=r.byStatusCode,t=i.value||1,n=o(e,200,299),a=o(e,400,499)-(e[429]||0),s=e[429]||0,c=o(e,500,599);return[{label:`2xx 成功`,count:n,percent:(n/t*100).toFixed(1),textClass:`text-green-600 dark:text-green-400`,barClass:`bg-green-500`},{label:`4xx 客户端错误`,count:a,percent:(a/t*100).toFixed(1),textClass:`text-yellow-600 dark:text-yellow-400`,barClass:`bg-yellow-500`},{label:`429 限流`,count:s,percent:(s/t*100).toFixed(1),textClass:`text-orange-600 dark:text-orange-400`,barClass:`bg-orange-500`},{label:`5xx 服务端错误`,count:c,percent:(c/t*100).toFixed(1),textClass:`text-red-600 dark:text-red-400`,barClass:`bg-red-500`}].filter(e=>e.count>0)});function o(e,t,n){let r=0;for(let[i,a]of Object.entries(e)){let e=Number(i);e>=t&&e<=n&&(r+=a)}return r}return(e,r)=>i.value===0?(b(),g(`div`,Dt,`暂无状态码数据`)):(b(),g(`div`,Ot,[(b(!0),g(d,null,A(a.value,e=>(b(),g(`div`,{key:e.label,class:`space-y-1`},[t(`div`,kt,[t(`span`,{class:f(e.textClass)},n(e.label),3),t(`span`,At,n(e.count)+` (`+n(e.percent)+`%) `,1)]),t(`div`,jt,[t(`div`,{class:f([`h-full rounded-full transition-all duration-300`,e.barClass]),style:P({width:`${e.percent}%`})},null,6)])]))),128))]))}}),$=u({__name:`Separator`,props:{orientation:{default:`horizontal`},decorative:{type:Boolean,default:!0},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t,r=x(n,`class`);return(t,i)=>(b(),_(o(qe),e({"data-slot":`separator`},o(r),{class:o(O)(`shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch`,n.class)}),null,16,[`class`]))}}),Nt={key:0,class:`text-sm text-muted-foreground py-4 text-center`},Pt={key:1,class:`space-y-3`},Ft={class:`flex items-center gap-2`},It={class:`font-medium text-foreground`},Lt={class:`text-xs text-muted-foreground font-mono`},Rt={class:`space-y-1.5 text-sm`},zt={class:`flex justify-between`},Bt={class:`font-medium text-foreground`},Vt={class:`flex justify-between`},Ht={class:`font-medium text-foreground text-right max-w-[140px] truncate`},Ut={class:`flex justify-between`},Wt={class:`font-medium text-foreground`},Gt={class:`flex justify-between`},Kt={class:`font-medium text-foreground`},qt={class:`flex justify-between`},Jt={class:`font-medium text-foreground`},Yt={class:`flex justify-between`},Xt={class:`font-medium text-foreground`},Zt={class:`flex justify-between`},Qt={class:`font-medium text-foreground`},$t={key:0,class:`flex items-center gap-1.5`},en={key:1,class:`flex items-center gap-1.5`},tn={key:2},nn={class:`space-y-1`},rn={class:`text-muted-foreground w-4`},an={class:`text-muted-foreground`},on={key:0,class:`text-red-500 truncate`},sn={key:3,class:`text-xs text-muted-foreground`},cn={key:4,class:`pt-2`},ln=u({__name:`RequestDetailPanel`,props:{request:{}},emits:[`viewDetail`],setup(e){let r=e,i=N(()=>r.request?(((r.request.completedAt??Date.now())-r.request.startTime)/1e3).toFixed(1):`--`),a=N(()=>{if(!r.request?.streamMetrics)return`--`;let e=r.request.streamMetrics;if(e.outputTokens==null||e.ttftMs==null)return`--`;let t=(r.request.completedAt??Date.now())-r.request.startTime;return t<=0?`--`:`${(e.outputTokens/(t/1e3)).toFixed(1)} tok/s`});function l(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function u(e){switch(e){case`pending`:return`进行中`;case`failed`:return`失败`;case`completed`:return`完成`;default:return e}}return(r,p)=>e.request?(b(),g(`div`,Pt,[t(`div`,Ft,[t(`span`,It,n(e.request.model),1),e.request.isStream?(b(),_(o(U),{key:0,variant:`outline`,class:`text-xs`},{default:M(()=>[...p[1]||=[v(`SSE`,-1)]]),_:1})):c(``,!0),s(o(U),{variant:l(e.request.status)},{default:M(()=>[v(n(u(e.request.status)),1)]),_:1},8,[`variant`])]),t(`p`,Lt,n(e.request.id.slice(0,8)),1),t(`div`,Rt,[t(`div`,zt,[p[2]||=t(`span`,{class:`text-muted-foreground`},`API 类型`,-1),t(`span`,Bt,n(e.request.apiType.toUpperCase()),1)]),s(o($)),t(`div`,Vt,[p[3]||=t(`span`,{class:`text-muted-foreground`},`Provider`,-1),t(`span`,Ht,n(e.request.providerName),1)]),s(o($)),t(`div`,Ut,[p[4]||=t(`span`,{class:`text-muted-foreground`},`耗时`,-1),t(`span`,Wt,n(i.value)+`s`,1)]),s(o($)),t(`div`,Gt,[p[5]||=t(`span`,{class:`text-muted-foreground`},`TTFT`,-1),t(`span`,Kt,n(e.request.streamMetrics?.ttftMs==null?`--`:`${e.request.streamMetrics.ttftMs.toFixed(0)}ms`),1)]),s(o($)),t(`div`,qt,[p[6]||=t(`span`,{class:`text-muted-foreground`},`Input Tokens`,-1),t(`span`,Jt,n(e.request.streamMetrics?.inputTokens??`--`),1)]),s(o($)),t(`div`,Yt,[p[7]||=t(`span`,{class:`text-muted-foreground`},`Output Tokens`,-1),t(`span`,Xt,n(e.request.streamMetrics?.outputTokens==null?`--`:e.request.streamMetrics.outputTokens),1)]),s(o($)),t(`div`,Zt,[p[8]||=t(`span`,{class:`text-muted-foreground`},`速度`,-1),t(`span`,Qt,n(a.value),1)])]),e.request.streamMetrics?.isComplete?(b(),g(`div`,$t,[s(o(U),{variant:`secondary`},{default:M(()=>[...p[9]||=[v(`已完成`,-1)]]),_:1}),e.request.streamMetrics.stopReason?(b(),_(o(U),{key:0,variant:`outline`},{default:M(()=>[v(n(e.request.streamMetrics.stopReason),1)]),_:1})):c(``,!0)])):e.request.status===`pending`?(b(),g(`div`,en,[s(o(U),null,{default:M(()=>[...p[10]||=[v(`进行中`,-1)]]),_:1})])):c(``,!0),e.request.attempts.length>0?(b(),g(`div`,tn,[p[11]||=t(`p`,{class:`text-xs text-muted-foreground mb-1`},`尝试历史`,-1),t(`div`,nn,[(b(!0),g(d,null,A(e.request.attempts,(e,r)=>(b(),g(`div`,{key:r,class:`flex items-center gap-2 text-xs bg-muted/50 rounded px-2 py-1`},[t(`span`,rn,`#`+n(r+1),1),t(`span`,{class:f(e.statusCode&&e.statusCode<400?`text-green-600`:`text-red-500`)},n(e.statusCode??`N/A`),3),t(`span`,an,n(e.latencyMs.toFixed(0))+`ms`,1),e.error?(b(),g(`span`,on,n(e.error),1)):c(``,!0)]))),128))])])):c(``,!0),e.request.clientIp?(b(),g(`div`,sn,` IP: `+n(e.request.clientIp),1)):c(``,!0),e.request.status===`completed`||e.request.status===`failed`?(b(),g(`div`,cn,[s(o(ee),{variant:`outline`,size:`sm`,class:`w-full`,onClick:p[0]||=t=>r.$emit(`viewDetail`,e.request.id)},{default:M(()=>[...p[12]||=[v(` 查看完整日志 `,-1)]]),_:1})])):c(``,!0)])):(b(),g(`div`,Nt,` 点击请求查看详情 `))}}),un={key:0},dn={key:0,class:`rounded-md border bg-card`},fn={class:`flex items-center gap-1.5 px-2.5 py-1.5 border-b`},pn={class:`px-2.5 py-2`},mn={class:`text-xs overflow-y-auto whitespace-pre-wrap break-words max-h-80`},hn={key:1,class:`flex items-center justify-center h-full text-sm text-muted-foreground`},gn={key:2,class:`flex items-center justify-center h-full text-sm text-muted-foreground`},_n={key:1,class:`flex items-center justify-center h-full text-sm text-muted-foreground`},vn={key:0,class:`space-y-2`},yn={class:`rounded-md border bg-card`},bn={class:`flex items-center gap-1.5 px-2.5 py-1.5 cursor-pointer hover:bg-muted/50 rounded-t-md`},xn={class:`text-xs text-muted-foreground`},Sn={class:`px-2.5 pb-2`},Cn={class:`text-xs bg-muted/50 rounded p-2 overflow-y-auto whitespace-pre-wrap break-words max-h-60 text-muted-foreground italic`},wn={key:1,class:`rounded-md border bg-card`},Tn={class:`flex items-center gap-1.5 px-2.5 py-1.5 border-b`},En={class:`px-2.5 py-2`},Dn={class:`rounded-md border bg-card`},On={class:`flex items-center gap-1.5 px-2.5 py-1.5 cursor-pointer hover:bg-muted/50 rounded-t-md`},kn={class:`px-2.5 pb-2`},An={class:`text-xs bg-muted/50 rounded p-2 overflow-y-auto whitespace-pre-wrap break-words max-h-60`},jn={key:1},Mn={class:`rounded-md border bg-card`},Nn={class:`flex items-center gap-1.5 px-2.5 py-1.5 border-b`},Pn={class:`px-2.5 py-2`},Fn={key:2,class:`text-sm text-muted-foreground py-4 text-center`},In={key:0,class:`text-xs bg-muted/50 rounded p-2 overflow-y-auto whitespace-pre-wrap break-words max-h-[60vh]`},Ln={key:1,class:`text-sm text-muted-foreground py-4 text-center`},Rn=u({__name:`StreamResponseViewer`,props:{metrics:{},isStream:{type:Boolean},streamContent:{},nonStreamBody:{},loadingBody:{type:Boolean}},setup(e){let r=e,a=i(null),l=i([]),u=i({}),p=i({}),m=N(()=>{let e=r.streamContent?.blocks;return!!(e&&e.length>0&&e.some(e=>e.type!==`text`||e.content.length>0))});return T(()=>r.streamContent?.textContent,()=>{C(()=>{a.value&&(a.value.scrollTop=a.value.scrollHeight);for(let e of l.value)e.scrollTop=e.scrollHeight})}),(r,i)=>e.isStream?e.streamContent?(b(),_(o(me),{key:2,"default-value":`structured`,class:`flex flex-col h-full`},{default:M(()=>[s(o(he),{class:`w-fit`},{default:M(()=>[s(o(_e),{value:`structured`},{default:M(()=>[...i[1]||=[v(`响应内容`,-1)]]),_:1}),s(o(_e),{value:`raw`},{default:M(()=>[...i[2]||=[v(`原始 SSE`,-1)]]),_:1})]),_:1}),s(o(ge),{value:`structured`,class:`flex-1 overflow-y-auto mt-2`},{default:M(()=>[m.value?(b(),g(`div`,vn,[(b(!0),g(d,null,A(e.streamContent.blocks,(e,r)=>(b(),g(d,{key:r},[e.type===`thinking`&&e.content?(b(),_(o(ie),{key:0,open:u.value[r]??!0,"onUpdate:open":e=>u.value[r]=e},{default:M(()=>[t(`div`,yn,[s(o(ae),{"as-child":``},{default:M(()=>[t(`div`,bn,[s(o(be),{class:f([`h-3 w-3 transition-transform`,{"rotate-90":u.value[r]??!0}])},null,8,[`class`]),s(o(ye),{class:`h-3.5 w-3.5 text-muted-foreground`}),i[3]||=t(`span`,{class:`text-xs font-medium`},`Thinking`,-1),t(`span`,xn,`(`+n(e.content.length)+` 字符)`,1)])]),_:2},1024),s(o(re),null,{default:M(()=>[t(`div`,Sn,[t(`pre`,Cn,[t(`code`,null,n(e.content),1)])])]),_:2},1024)])]),_:2},1032,[`open`,`onUpdate:open`])):e.type===`text`&&e.content?(b(),g(`div`,wn,[t(`div`,Tn,[s(o(xe),{class:`h-3.5 w-3.5 text-muted-foreground`}),i[4]||=t(`span`,{class:`text-xs font-medium`},`Reply`,-1)]),t(`div`,En,[t(`pre`,{ref_for:!0,ref_key:`textContentRefs`,ref:l,class:`text-xs overflow-y-auto whitespace-pre-wrap break-words max-h-60`},[t(`code`,null,n(e.content),1)],512)])])):e.type===`tool_use`?(b(),_(o(ie),{key:2,open:p.value[r]??!1,"onUpdate:open":e=>p.value[r]=e},{default:M(()=>[t(`div`,Dn,[s(o(ae),{"as-child":``},{default:M(()=>[t(`div`,On,[s(o(be),{class:f([`h-3 w-3 transition-transform`,{"rotate-90":p.value[r]??!1}])},null,8,[`class`]),s(o(Se),{class:`h-3.5 w-3.5 text-muted-foreground`}),i[5]||=t(`span`,{class:`text-xs font-medium`},`Tool Use`,-1),e.name?(b(),_(o(U),{key:0,variant:`outline`,class:`text-xs`},{default:M(()=>[v(n(e.name),1)]),_:2},1024)):c(``,!0)])]),_:2},1024),s(o(re),null,{default:M(()=>[t(`div`,kn,[t(`pre`,An,[t(`code`,null,n(e.content||`(等待数据...)`),1)])])]),_:2},1024)])]),_:2},1032,[`open`,`onUpdate:open`])):c(``,!0)],64))),128))])):e.streamContent.textContent?(b(),g(`div`,jn,[t(`div`,Mn,[t(`div`,Nn,[s(o(xe),{class:`h-3.5 w-3.5 text-muted-foreground`}),i[6]||=t(`span`,{class:`text-xs font-medium`},`Reply`,-1)]),t(`div`,Pn,[t(`pre`,{ref_key:`textContentRef`,ref:a,class:`text-xs overflow-y-auto whitespace-pre-wrap break-words max-h-80`},[t(`code`,null,n(e.streamContent.textContent),1)],512)])])])):(b(),g(`div`,Fn,` 暂无内容 `))]),_:1}),s(o(ge),{value:`raw`,class:`flex-1 overflow-y-auto mt-2`},{default:M(()=>[e.streamContent.rawChunks?(b(),g(`pre`,In,[t(`code`,null,n(e.streamContent.rawChunks),1)])):(b(),g(`div`,Ln,` 暂无数据 `))]),_:1})]),_:1})):(b(),g(`div`,_n,` 等待流数据... `)):(b(),g(`div`,un,[e.nonStreamBody?(b(),g(`div`,dn,[t(`div`,fn,[s(o(xe),{class:`h-3.5 w-3.5 text-muted-foreground`}),i[0]||=t(`span`,{class:`text-xs font-medium`},`Response`,-1)]),t(`div`,pn,[t(`pre`,mn,[t(`code`,null,n(e.nonStreamBody),1)])])])):e.loadingBody?(b(),g(`div`,hn,` 加载中... `)):(b(),g(`div`,gn,` 非流式请求无实时内容 `))]))}}),zn={key:0,class:`text-sm text-muted-foreground py-4 text-center`},Bn={key:1,class:`text-sm text-muted-foreground py-4 text-center`},Vn={class:`flex flex-wrap gap-1`},Hn={key:0,class:`text-xs text-muted-foreground`},Un=u({__name:`ProviderStatsTable`,props:{stats:{}},setup(e){let r=e,i=N(()=>r.stats?Object.entries(r.stats.byProvider).filter(([e])=>typeof e==`string`).map(([e,t])=>({id:e,name:t.providerName,stats:t,successRate:t.totalRequests>0?t.successCount/t.totalRequests*100:0,retryRate:t.totalRequests>0?t.retryCount/t.totalRequests*100:0,p99Latency:r.stats.p99LatencyMs.toFixed(0)+`ms`})):[]);return(r,a)=>e.stats?i.value.length===0?(b(),g(`div`,Bn,` 暂无 Provider 统计 `)):(b(),_(o(de),{key:2},{default:M(()=>[s(o(pe),null,{default:M(()=>[s(o(fe),null,{default:M(()=>[s(o(H),null,{default:M(()=>[...a[0]||=[v(`Provider`,-1)]]),_:1}),s(o(H),{class:`text-right`},{default:M(()=>[...a[1]||=[v(`请求数`,-1)]]),_:1}),s(o(H),{class:`text-right`},{default:M(()=>[...a[2]||=[v(`成功率`,-1)]]),_:1}),s(o(H),{class:`text-right`},{default:M(()=>[...a[3]||=[v(`平均延迟`,-1)]]),_:1}),s(o(H),{class:`text-right`},{default:M(()=>[...a[4]||=[v(`P99 延迟`,-1)]]),_:1}),s(o(H),{class:`text-right`},{default:M(()=>[...a[5]||=[v(`重试率`,-1)]]),_:1}),s(o(H),null,{default:M(()=>[...a[6]||=[v(`Top Errors`,-1)]]),_:1})]),_:1})]),_:1}),s(o(ue),null,{default:M(()=>[(b(!0),g(d,null,A(i.value,e=>(b(),_(o(fe),{key:e.id},{default:M(()=>[s(o(V),{class:`font-medium`},{default:M(()=>[v(n(e.name),1)]),_:2},1024),s(o(V),{class:`text-right`},{default:M(()=>[v(n(e.stats.totalRequests),1)]),_:2},1024),s(o(V),{class:`text-right`},{default:M(()=>[t(`span`,{class:f(e.successRate>=95?`text-green-600`:e.successRate>=80?`text-yellow-600`:`text-red-500`)},n(e.successRate.toFixed(1))+`% `,3)]),_:2},1024),s(o(V),{class:`text-right`},{default:M(()=>[v(n(e.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),s(o(V),{class:`text-right`},{default:M(()=>[v(n(e.p99Latency),1)]),_:2},1024),s(o(V),{class:`text-right`},{default:M(()=>[t(`span`,{class:f(e.retryRate>10?`text-yellow-600`:``)},n(e.retryRate.toFixed(1))+`% `,3)]),_:2},1024),s(o(V),null,{default:M(()=>[t(`div`,Vn,[(b(!0),g(d,null,A(e.stats.topErrors.slice(0,3),e=>(b(),_(o(U),{key:e.code,variant:`destructive`,class:`text-xs`},{default:M(()=>[v(n(e.code)+` (`+n(e.count)+`) `,1)]),_:2},1024))),128)),e.stats.topErrors.length===0?(b(),g(`span`,Hn,`--`)):c(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(b(),g(`div`,zn,` 暂无数据 `))}});function Wn(e,t,n){let r=null,i=null;function a(){if(!r){r=new EventSource(e),r.onopen=()=>{n?.onOpen?.()};for(let[e,n]of Object.entries(t))r.addEventListener(e,n);r.onerror=()=>{o(),n?.onClose?.(),i=setTimeout(a,3e3)}}}function o(){i&&=(clearTimeout(i),null),r&&=(r.close(),null)}return k(()=>{o(),n?.onClose?.()}),{connect:a,disconnect:o}}var Gn=200;function Kn(){let e=i([]),t=i([]),n=i(null),r=i([]),a=i(null),o=i(!1),s=N(()=>e.value.filter(e=>e.isStream).length),c=N(()=>e.value.filter(e=>!e.queued)),l=N(()=>e.value.filter(e=>e.queued===!0));function u(i){let o;try{o=JSON.parse(i.data)}catch{return}switch(i.type){case`request_start`:{let n=o;t.value.some(e=>e.id===n.id)||e.value.unshift(n);break}case`request_update`:e.value=o;break;case`request_complete`:{let n=o;e.value=e.value.filter(e=>e.id!==n.id),t.value.unshift(n),t.value.length>Gn&&(t.value.length=Gn);break}case`concurrency_update`:r.value=o;break;case`stats_update`:n.value=o;break;case`runtime_update`:a.value=o;break}}function d(){o.value=!0}function f(){o.value=!1}async function p(){try{let[i,o,s,c,l]=await Promise.allSettled([m.getMonitorActive(),m.getMonitorRecent(),m.getMonitorStats(),m.getMonitorConcurrency(),m.getMonitorRuntime()]);i.status===`fulfilled`&&(e.value=i.value),o.status===`fulfilled`&&(t.value=o.value),s.status===`fulfilled`&&(n.value=s.value),c.status===`fulfilled`&&(r.value=c.value),l.status===`fulfilled`&&(a.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),n.value=null,r.value=[],a.value=null}}let h=i(void 0),g=i(!1),_=i(0);async function v(n){let r=++_.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i||i.isStream||i.status===`pending`){h.value=void 0;return}g.value=!0,h.value=void 0;try{let e=await m.getLogDetail(n);if(r!==_.value)return;h.value=e.response_body??void 0}catch(e){if(r!==_.value)return;console.warn(`Failed to load non-stream body:`,e),h.value=void 0}finally{r===_.value&&(g.value=!1)}}let y=i(null),b=i(!1);function x(e){y.value=e,b.value=!0,v(e)}return{activeRequests:e,recentCompleted:t,stats:n,concurrency:r,runtime:a,connected:o,streamCount:s,streamingRequests:c,queuedRequests:l,selectedRequestId:y,selectedRequest:N(()=>y.value?e.value.find(e=>e.id===y.value)??t.value.find(e=>e.id===y.value)??null:null),requestDetailOpen:b,selectRequest:x,nonStreamBody:h,nonStreamBodyLoading:g,handleSSEMessage:u,handleSSEOpen:d,handleSSEClose:f,loadInitialData:p}}var qn={class:`p-6`},Jn={class:`flex items-center justify-between mb-4`},Yn={class:`flex items-center gap-2`},Xn={class:`grid grid-cols-3 gap-4 mb-6`},Zn={class:`flex items-center justify-between`},Qn={key:0,class:`text-sm text-muted-foreground py-2`},$n=[`onClick`],er={class:`text-sm text-foreground truncate flex-1`},tr={class:`text-xs text-muted-foreground shrink-0`},nr={class:`flex items-center justify-between`},rr={key:0,class:`text-sm text-muted-foreground py-2`},ir=[`onClick`],ar={class:`text-sm text-foreground truncate flex-1`},or={class:`text-xs text-muted-foreground shrink-0`},sr={class:`flex items-center justify-between`},cr={key:0,class:`text-sm text-muted-foreground py-2`},lr=[`onClick`],ur={class:`text-sm text-foreground truncate flex-1`},dr={class:`grid grid-cols-1 lg:grid-cols-3 gap-4`},fr={key:0,class:`flex gap-4 min-h-0`},pr={class:`w-[260px] shrink-0 overflow-y-auto pr-2 border-r`},mr={class:`flex-1 min-w-0 overflow-y-auto`},hr={key:1,class:`text-sm text-muted-foreground py-4 text-center`},gr=1e3,_r=u({__name:`Monitor`,setup(e){let{activeRequests:a,recentCompleted:l,stats:u,concurrency:p,runtime:m,connected:h,streamCount:y,streamingRequests:x,queuedRequests:S,selectedRequestId:C,selectedRequest:w,requestDetailOpen:T,selectRequest:E,nonStreamBody:ee,nonStreamBodyLoading:O,handleSSEMessage:k,handleSSEOpen:j,handleSSEClose:N,loadInitialData:P}=Kn(),{connect:F}=Wn(`/admin/api/monitor/stream`,{request_start:k,request_update:k,request_complete:k,concurrency_update:k,stats_update:k,runtime_update:k},{onOpen:j,onClose:N}),I=i(!1),te=i(null);function L(e){T.value=!1,I.value=!0,te.value?.load(e)}function R(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function ne(e){switch(e){case`pending`:return`进行中`;case`failed`:return`失败`;case`completed`:return`完成`;default:return e}}function z(e){return((Date.now()-e)/gr).toFixed(1)}return D(async()=>{await P(),F()}),(e,i)=>(b(),g(`div`,qn,[t(`div`,Jn,[i[2]||=t(`h2`,{class:`text-lg font-semibold text-foreground`},`实时监控`,-1),t(`div`,Yn,[s(o(U),{variant:o(h)?`default`:`destructive`},{default:M(()=>[v(n(o(h)?`已连接`:`未连接`),1)]),_:1},8,[`variant`])])]),s(at,{stats:o(u),"active-count":o(a).length,"stream-count":o(y)},null,8,[`stats`,`active-count`,`stream-count`]),t(`div`,Xn,[s(o(W),null,{default:M(()=>[s(o(K),{class:`pb-2`},{default:M(()=>[t(`div`,Zn,[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[3]||=[v(`活跃请求`,-1)]]),_:1}),s(o(U),{variant:`secondary`},{default:M(()=>[v(n(o(x).length),1)]),_:1})])]),_:1}),s(o(G),null,{default:M(()=>[s(o(Ye),{class:`h-64`},{default:M(()=>[o(x).length===0?(b(),g(`div`,Qn,` 暂无活跃请求 `)):c(``,!0),(b(!0),g(d,null,A(o(x),e=>(b(),g(`div`,{key:e.id,class:f([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":o(C)===e.id}]),onClick:t=>o(E)(e.id)},[s(o(U),{variant:R(e.status),class:`shrink-0`},{default:M(()=>[v(n(ne(e.status)),1)]),_:2},1032,[`variant`]),t(`span`,er,n(e.model),1),s(o(U),{variant:`outline`,class:`shrink-0 text-xs`},{default:M(()=>[v(n(e.providerName),1)]),_:2},1024),t(`span`,tr,n(z(e.startTime))+`s`,1),e.isStream?(b(),_(o(U),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:M(()=>[...i[4]||=[v(`SSE`,-1)]]),_:1})):c(``,!0)],10,$n))),128))]),_:1})]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(K),{class:`pb-2`},{default:M(()=>[t(`div`,nr,[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[5]||=[v(`队列请求`,-1)]]),_:1}),s(o(U),{variant:`secondary`},{default:M(()=>[v(n(o(S).length),1)]),_:1})])]),_:1}),s(o(G),null,{default:M(()=>[s(o(Ye),{class:`h-64`},{default:M(()=>[o(S).length===0?(b(),g(`div`,rr,` 暂无排队请求 `)):c(``,!0),(b(!0),g(d,null,A(o(S),e=>(b(),g(`div`,{key:e.id,class:f([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":o(C)===e.id}]),onClick:t=>o(E)(e.id)},[s(o(U),{variant:`outline`,class:`shrink-0`},{default:M(()=>[...i[6]||=[v(` 排队 `,-1)]]),_:1}),t(`span`,ar,n(e.model),1),s(o(U),{variant:`outline`,class:`shrink-0 text-xs`},{default:M(()=>[v(n(e.providerName),1)]),_:2},1024),t(`span`,or,n(z(e.startTime))+`s`,1)],10,ir))),128))]),_:1})]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(K),{class:`pb-2`},{default:M(()=>[t(`div`,sr,[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[7]||=[v(`已完成`,-1)]]),_:1}),s(o(U),{variant:`secondary`},{default:M(()=>[v(n(o(l).length),1)]),_:1})])]),_:1}),s(o(G),null,{default:M(()=>[s(o(Ye),{class:`h-64`},{default:M(()=>[o(l).length===0?(b(),g(`div`,cr,` 暂无已完成请求 `)):c(``,!0),(b(!0),g(d,null,A(o(l),e=>(b(),g(`div`,{key:e.id,class:f([`flex items-center gap-2 py-1.5 px-2 rounded cursor-pointer opacity-60 hover:opacity-80 hover:bg-muted/50 transition-colors`,{"bg-muted":o(C)===e.id}]),onClick:t=>o(E)(e.id)},[s(o(U),{variant:R(e.status),class:`shrink-0`},{default:M(()=>[v(n(ne(e.status)),1)]),_:2},1032,[`variant`]),t(`span`,ur,n(e.model),1),s(o(U),{variant:`outline`,class:`shrink-0 text-xs`},{default:M(()=>[v(n(e.providerName),1)]),_:2},1024),e.isStream?(b(),_(o(U),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:M(()=>[...i[8]||=[v(`SSE`,-1)]]),_:1})):c(``,!0)],10,lr))),128))]),_:1})]),_:1})]),_:1})]),s(o(W),{class:`mb-4`},{default:M(()=>[s(o(K),null,{default:M(()=>[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[9]||=[v(`Provider 统计`,-1)]]),_:1})]),_:1}),s(o(G),null,{default:M(()=>[s(Un,{stats:o(u)},null,8,[`stats`])]),_:1})]),_:1}),t(`div`,dr,[s(o(W),null,{default:M(()=>[s(o(K),null,{default:M(()=>[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[10]||=[v(`并发度`,-1)]]),_:1})]),_:1}),s(o(G),null,{default:M(()=>[s(pt,{providers:o(p)},null,8,[`providers`])]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(K),null,{default:M(()=>[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[11]||=[v(`状态码分布`,-1)]]),_:1})]),_:1}),s(o(G),null,{default:M(()=>[s(Mt,{"by-status-code":o(u)?.byStatusCode??{}},null,8,[`by-status-code`])]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(K),null,{default:M(()=>[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[12]||=[v(`运行时`,-1)]]),_:1})]),_:1}),s(o(G),null,{default:M(()=>[s(Et,{runtime:o(m)},null,8,[`runtime`])]),_:1})]),_:1})]),s(o(ce),{open:o(T),"onUpdate:open":i[0]||=e=>r(T)?T.value=e:null},{default:M(()=>[s(o(oe),{class:`max-w-5xl max-h-[80vh]`},{default:M(()=>[s(o(se),null,{default:M(()=>[s(o(le),null,{default:M(()=>[...i[13]||=[v(`请求详情`,-1)]]),_:1})]),_:1}),o(w)?(b(),g(`div`,fr,[t(`div`,pr,[s(ln,{request:o(w),onViewDetail:L},null,8,[`request`])]),t(`div`,mr,[s(Rn,{metrics:o(w).streamMetrics??null,"is-stream":o(w).isStream,"stream-content":o(w).streamContent??void 0,"non-stream-body":o(ee),"loading-body":o(O)},null,8,[`metrics`,`is-stream`,`stream-content`,`non-stream-body`,`loading-body`])])])):(b(),g(`div`,hr,` 点击请求查看详情 `))]),_:1})]),_:1},8,[`open`]),s(ve,{ref_key:`logDetailDialog`,ref:te,open:I.value,"onUpdate:open":i[1]||=e=>I.value=e},null,8,[`open`])]))}});export{_r as default};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{B as e,Bt as t,Dt as n,Ft as r,G as i,H as a,K as o,L as s,Lt as c,O as l,U as u,V as d,W as f,at as p,ct as m,n as h,nt as g,r as _,st as v,yt as y}from"./button-qxGNBunr.js";import{i as b,n as x,r as S,t as C}from"./TooltipTrigger-BjQXeFem.js";import{n as w,r as T,t as E}from"./CollapsibleTrigger-DCRRORrU.js";import{a as D,c as O,i as k,n as A,o as j,r as M,s as N,t as P}from"./alert-dialog-BoGRIC1Q.js";import{a as F,i as I,n as L,o as R,r as z,t as ee}from"./TableHeader-BKE_yVML.js";import{t as te}from"./Label-DjtouWZ7.js";import{t as ne}from"./Switch-DF6awXqs.js";import{i as re,n as B,r as V,t as H}from"./TabsTrigger-D8R7lxaI.js";import{t as U}from"./badge-DIO8W_W9.js";import{n as W}from"./lib-DjpgwSRA.js";import{n as G,t as K}from"./CardContent-fmM_iiuR.js";import{t as q}from"./CardHeader-BzzFzZ1B.js";import{t as J}from"./CardTitle-09d7O-11.js";import{t as Y}from"./format-CPdJtjZ5.js";var X=o({__name:`CardDescription`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(p(),u(`div`,{"data-slot":`card-description`,class:c(r(_)(`text-muted-foreground text-sm`,t.class))},[m(e.$slots,`default`)],2))}}),ie={key:0,class:`py-8 text-center text-muted-foreground`},ae={key:1,class:`py-8 text-center text-muted-foreground`},oe={class:`cursor-default font-mono text-xs`},se={class:`font-mono text-xs`},ce={key:0,class:`text-muted-foreground`},le={key:1,class:`text-muted-foreground`},ue={class:`flex items-center gap-2`},de={class:`space-y-2`},fe={class:`text-muted-foreground whitespace-nowrap`},pe={class:`text-muted-foreground`},me={class:`font-medium`},he=8,Z=6e4,Q=60,$=24,ge=o({__name:`SessionTable`,props:{sessions:{},loading:{type:Boolean},historyMap:{}},emits:[`clear`,`viewHistory`],setup(o,{emit:c}){let l=c,m=n(!1),g=n(null);function _(e){g.value=e,m.value=!0}function w(){g.value&&=(l(`clear`,g.value),null)}function T(e){return e.slice(0,he)+`...`}function E(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/Z);if(n<1)return`刚刚`;if(n<Q)return`${n} 分钟前`;let r=Math.floor(n/Q);return r<$?`${r} 小时前`:`${Math.floor(r/$)} 天前`}return(n,c)=>(p(),u(s,null,[o.loading?(p(),u(`div`,ie,`加载中...`)):o.sessions.length===0?(p(),u(`div`,ae,`暂无活跃 Session`)):(p(),d(r(R),{key:2},{default:y(()=>[i(r(ee),null,{default:y(()=>[i(r(z),null,{default:y(()=>[i(r(L),null,{default:y(()=>[...c[1]||=[f(`密钥名称`,-1)]]),_:1}),i(r(L),null,{default:y(()=>[...c[2]||=[f(`Session ID`,-1)]]),_:1}),i(r(L),null,{default:y(()=>[...c[3]||=[f(`当前模型`,-1)]]),_:1}),i(r(L),null,{default:y(()=>[...c[4]||=[f(`原始模型`,-1)]]),_:1}),i(r(L),null,{default:y(()=>[...c[5]||=[f(`最后活跃`,-1)]]),_:1}),i(r(L),null,{default:y(()=>[...c[6]||=[f(`操作`,-1)]]),_:1})]),_:1})]),_:1}),i(r(F),null,{default:y(()=>[(p(!0),u(s,null,v(o.sessions,l=>(p(),u(s,{key:l.id},[i(r(z),null,{default:y(()=>[i(r(I),{class:`font-medium`},{default:y(()=>[f(t(l.router_key_name),1)]),_:2},1024),i(r(I),null,{default:y(()=>[i(r(x),null,{default:y(()=>[i(r(b),null,{default:y(()=>[i(r(C),{"as-child":``},{default:y(()=>[e(`span`,oe,t(T(l.session_id)),1)]),_:2},1024),i(r(S),null,{default:y(()=>[e(`p`,se,t(l.session_id),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024),i(r(I),null,{default:y(()=>[i(r(U),{variant:`secondary`},{default:y(()=>[f(t(l.current_model),1)]),_:2},1024)]),_:2},1024),i(r(I),null,{default:y(()=>[l.original_model?(p(),u(`span`,ce,t(l.original_model),1)):(p(),u(`span`,le,`-`))]),_:2},1024),i(r(I),{class:`text-muted-foreground text-sm`},{default:y(()=>[f(t(E(l.last_active_at)),1)]),_:2},1024),i(r(I),null,{default:y(()=>[e(`div`,ue,[i(r(h),{variant:`ghost`,size:`sm`,onClick:e=>n.$emit(`viewHistory`,l)},{default:y(()=>[f(t(o.historyMap[l.session_id]?`收起`:`历史`),1)]),_:2},1032,[`onClick`]),i(r(h),{variant:`ghost`,size:`sm`,class:`text-destructive hover:text-destructive`,onClick:e=>_(l)},{default:y(()=>[...c[7]||=[f(` 清除 `,-1)]]),_:1},8,[`onClick`])])]),_:2},1024)]),_:2},1024),o.historyMap[l.session_id]?(p(),d(r(z),{key:0},{default:y(()=>[i(r(I),{colspan:`6`,class:`bg-muted/50 px-6 py-3`},{default:y(()=>[e(`div`,de,[c[9]||=e(`p`,{class:`text-sm font-medium text-foreground`},`切换历史`,-1),(p(!0),u(s,null,v(o.historyMap[l.session_id],n=>(p(),u(`div`,{key:n.id,class:`flex items-center gap-3 text-sm`},[e(`span`,fe,t(r(Y)(n.created_at)),1),i(r(U),{variant:`outline`,class:`text-xs`},{default:y(()=>[f(t(n.trigger_type),1)]),_:2},1024),e(`span`,null,[e(`span`,pe,t(n.old_model||`默认`),1),c[8]||=e(`span`,{class:`mx-1`},`→`,-1),e(`span`,me,t(n.new_model),1)])]))),128))])]),_:2},1024)]),_:2},1024)):a(``,!0)],64))),128))]),_:1})]),_:1})),i(r(O),{open:m.value,"onUpdate:open":c[0]||=e=>m.value=e},{default:y(()=>[i(r(D),null,{default:y(()=>[i(r(A),null,{default:y(()=>[i(r(P),null,{default:y(()=>[...c[10]||=[f(`确认清除 Session`,-1)]]),_:1}),i(r(k),null,{default:y(()=>[...c[11]||=[f(` 清除后,该 Session 将恢复使用默认模型映射。此操作不可撤销。 `,-1)]]),_:1})]),_:1}),i(r(M),null,{default:y(()=>[i(r(j),null,{default:y(()=>[...c[12]||=[f(`取消`,-1)]]),_:1}),i(r(N),{onClick:w},{default:y(()=>[...c[13]||=[f(`确认清除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])],64))}}),_e={class:`p-6`},ve={class:`flex items-center justify-between mb-4`},ye={key:0,class:`flex items-center gap-1`},be={key:1},xe={class:`flex items-center gap-3`},Se={class:`flex items-center justify-between`},Ce=`---
|
|
2
|
-
description: 切换代理路由模型
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
[router-command: select-model $ARGUMENTS]`,we=o({__name:`ProxyEnhancement`,setup(a){let o=n(!1),s=n(!1),d=n(!0),m=n([]),_=n(!1),v=n({});async function b(){try{o.value=(await l.getProxyEnhancement()).claude_code_enabled}catch(e){console.error(`Failed to load proxy enhancement config:`,e),W.error(`加载配置失败`)}}async function x(){s.value=!0;try{await l.updateProxyEnhancement({claude_code_enabled:o.value}),W.success(`保存成功`)}catch(e){console.error(`Failed to save proxy enhancement config:`,e),W.error(`保存失败`)}finally{s.value=!1}}async function S(){_.value=!0;try{m.value=await l.getSessionStates()}catch(e){console.error(`Failed to load sessions:`,e),W.error(`加载 Session 列表失败`)}finally{_.value=!1}}async function C(e){try{await l.deleteSessionState(e.router_key_id,e.session_id),W.success(`Session 已清除`),S()}catch(e){console.error(`Failed to clear session:`,e),W.error(`清除 Session 失败`)}}async function D(e){let t=e.session_id;if(v.value[t]){delete v.value[t];return}try{let n=await l.getSessionHistory(e.router_key_id,e.session_id);v.value[t]=n}catch(e){console.error(`Failed to load history:`,e),W.error(`加载历史记录失败`)}}return g(()=>{b(),S()}),(n,a)=>(p(),u(`div`,_e,[e(`div`,ve,[a[3]||=e(`h2`,{class:`text-lg font-semibold text-foreground`},`代理增强(实验性)`,-1),i(r(h),{disabled:s.value,onClick:x},{default:y(()=>[s.value?(p(),u(`span`,ye,[...a[2]||=[e(`svg`,{class:`w-4 h-4 animate-spin`,fill:`none`,viewBox:`0 0 24 24`},[e(`circle`,{class:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,"stroke-width":`4`}),e(`path`,{class:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})],-1),f(` 保存中... `,-1)]])):(p(),u(`span`,be,`保存`))]),_:1},8,[`disabled`])]),i(r(re),{"default-value":`claude-code`},{default:y(()=>[i(r(B),null,{default:y(()=>[i(r(H),{value:`claude-code`},{default:y(()=>[...a[4]||=[f(`Claude Code`,-1)]]),_:1}),i(r(H),{value:`opencode`},{default:y(()=>[...a[5]||=[f(`OpenCode`,-1)]]),_:1})]),_:1}),i(r(V),{value:`claude-code`},{default:y(()=>[i(r(G),null,{default:y(()=>[i(r(q),null,{default:y(()=>[i(r(J),null,{default:y(()=>[...a[6]||=[f(`Claude Code 动态模型切换`,-1)]]),_:1}),i(r(X),null,{default:y(()=>[...a[7]||=[f(` 在 Claude Code 对话中通过 /select-model 命令动态切换后端模型。模型选择在当前会话内有效(24h),不影响路由配置。 `,-1)]]),_:1})]),_:1}),i(r(K),null,{default:y(()=>[e(`div`,xe,[i(r(ne),{id:`claude-code-toggle`,modelValue:o.value,"onUpdate:modelValue":a[0]||=e=>o.value=e},null,8,[`modelValue`]),i(r(te),{for:`claude-code-toggle`},{default:y(()=>[f(t(o.value?`已启用`:`已禁用`),1)]),_:1})])]),_:1})]),_:1}),i(r(T),{open:d.value,"onUpdate:open":a[1]||=e=>d.value=e,class:`mt-4`},{default:y(()=>[i(r(E),{"as-child":``},{default:y(()=>[i(r(h),{variant:`ghost`,class:`w-full justify-between`},{default:y(()=>[a[9]||=e(`span`,null,`使用说明`,-1),(p(),u(`svg`,{class:c([`w-4 h-4 transition-transform`,{"rotate-180":d.value}]),fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[...a[8]||=[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M19 9l-7 7-7-7`},null,-1)]],2))]),_:1})]),_:1}),i(r(w),{class:`mt-2`},{default:y(()=>[i(r(G),null,{default:y(()=>[i(r(K),{class:`space-y-4 text-sm`},{default:y(()=>[e(`div`,null,[a[10]||=e(`p`,{class:`font-medium text-foreground mb-1 leading-relaxed`},`配置方法`,-1),a[11]||=e(`p`,{class:`text-muted-foreground leading-relaxed`},` 在 Claude Code 项目级或全局级目录下创建 Command 文件: `,-1),a[12]||=e(`code`,{class:`block mt-1 px-3 py-2 bg-muted rounded text-xs font-mono whitespace-pre-wrap leading-relaxed`},[f(` # 项目级 .claude/commands/select-model.md`),e(`br`),f(` # 全局级 ~/.claude/commands/select-model.md `)],-1),a[13]||=e(`p`,{class:`text-muted-foreground leading-relaxed mt-2`},` 文件内容: `,-1),e(`code`,{class:`block mt-1 px-3 py-2 bg-muted rounded text-xs font-mono whitespace-pre-wrap leading-relaxed`,textContent:Ce})]),a[14]||=e(`div`,null,[e(`p`,{class:`font-medium text-foreground mb-1 leading-relaxed`},`使用方法`),e(`p`,{class:`text-muted-foreground leading-relaxed`},` 查看可用模型列表(格式为 provider_name/backend_model): `),e(`code`,{class:`block mt-1 px-3 py-2 bg-muted rounded text-xs font-mono whitespace-pre-wrap leading-relaxed`},` /select-model `),e(`p`,{class:`text-muted-foreground leading-relaxed mt-2`},` 选择模型并记住到当前会话: `),e(`code`,{class:`block mt-1 px-3 py-2 bg-muted rounded text-xs font-mono whitespace-pre-wrap leading-relaxed`},` /select-model provider_name/backend_model `),e(`p`,{class:`text-muted-foreground leading-relaxed mt-2`},` 切换后在下方活跃 Session 表中确认状态,请求日志中可验证路由是否生效。 `)],-1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`]),i(r(G),{class:`mt-4`},{default:y(()=>[i(r(q),null,{default:y(()=>[e(`div`,Se,[e(`div`,null,[i(r(J),null,{default:y(()=>[...a[15]||=[f(`活跃 Session`,-1)]]),_:1}),i(r(X),null,{default:y(()=>[...a[16]||=[f(`查看和管理当前已配置模型的 session`,-1)]]),_:1})]),i(r(h),{variant:`outline`,size:`sm`,onClick:S,disabled:_.value},{default:y(()=>[...a[17]||=[f(`刷新`,-1)]]),_:1},8,[`disabled`])])]),_:1}),i(r(K),null,{default:y(()=>[i(ge,{sessions:m.value,loading:_.value,"history-map":v.value,onClear:C,onViewHistory:D},null,8,[`sessions`,`loading`,`history-map`])]),_:1})]),_:1})]),_:1}),i(r(V),{value:`opencode`},{default:y(()=>[...a[18]||=[e(`div`,{class:`flex flex-col items-center justify-center py-16 text-muted-foreground`},[e(`p`,{class:`text-lg`},`暂未支持 OpenCode 增强`)],-1)]]),_:1})]),_:1})]))}});export{we as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{B as e,Bt as t,Dt as n,Ft as r,G as i,H as a,I as ee,K as o,L as s,Lt as c,O as l,U as u,V as d,W as f,at as p,n as m,nt as te,st as h,yt as g,z as ne}from"./button-qxGNBunr.js";import{a as re,i as ie,n as ae,o as oe,r as _,t as se}from"./SelectValue-CP4Sh7LP.js";import{t as v}from"./Checkbox-DH8iqXQd.js";import{n as ce,r as y,t as b}from"./CollapsibleTrigger-DCRRORrU.js";import{i as x,o as S,r as le,s as ue,t as de}from"./dialog-D8pIXeSs.js";import{a as fe,c as pe,i as me,n as he,o as ge,r as _e,t as ve}from"./alert-dialog-BoGRIC1Q.js";import{a as C,i as w,n as T,o as E,r as D,t as O}from"./TableHeader-BKE_yVML.js";import{t as k}from"./Label-DjtouWZ7.js";import{t as A}from"./badge-DIO8W_W9.js";import{n as j}from"./lib-DjpgwSRA.js";import{n as M,t as N}from"./CardContent-fmM_iiuR.js";import{t as P}from"./CardHeader-BzzFzZ1B.js";import{t as F}from"./CardTitle-09d7O-11.js";import{t as I}from"./Input-BhvZ-Up7.js";var ye={class:`p-6`},be={class:`flex items-center justify-between mb-4`},xe={class:`bg-card rounded-lg border overflow-hidden`},Se={class:`flex items-center gap-2`},L={class:`text-xs text-muted-foreground`},Ce={key:0,class:`text-sm text-destructive mt-1`},we={key:0,class:`text-sm text-destructive mt-1`},Te={key:0,class:`text-sm text-destructive mt-1`},Ee={class:`grid grid-cols-2 gap-3`},De={key:0,class:`text-sm text-destructive mt-1`},Oe={key:0,class:`text-sm text-destructive mt-1`},ke={key:0},Ae={key:0,class:`text-sm text-destructive mt-1`},je={class:`flex items-center gap-2`},Me={class:`flex items-center justify-between`},Ne={class:`flex items-center justify-between mb-3`},Pe={class:`flex items-center gap-2`},R=100,z=599,B=100,V=100,H=o({__name:`RetryRules`,setup(o){let H={name:``,status_code:429,body_pattern:``,is_active:!0,retry_strategy:`exponential`,retry_delay_ms:5e3,max_retries:10,max_delay_ms:6e4},U=n([]),W=n(!1),G=n(null),K=n(null),q=n({...H}),J=n({});function Fe(){let e={};q.value.name.trim()||(e.name=`请输入名称`);let t=Number(q.value.status_code);if((!Number.isInteger(t)||t<R||t>z)&&(e.status_code=`范围 ${R}-${z}`),!q.value.body_pattern.trim())e.body_pattern=`请输入匹配规则`;else try{new RegExp(q.value.body_pattern)}catch{e.body_pattern=`不是合法的正则表达式`}let n=Number(q.value.retry_delay_ms);(!n||n<B)&&(e.retry_delay_ms=`不能小于 ${B}ms`);let r=Number(q.value.max_retries);if((!Number.isInteger(r)||r<0||r>V)&&(e.max_retries=`范围 0-${V}`),q.value.retry_strategy===`exponential`){let t=Number(q.value.max_delay_ms);(!t||t<B)&&(e.max_delay_ms=`不能小于 ${B}ms`)}return J.value=e,Object.keys(e).length===0}async function Y(){try{U.value=await l.getRetryRules()}catch(e){console.error(`Failed to load retry rules:`,e),j.error(`加载数据失败`)}}function Ie(){G.value=null,q.value={...H},J.value={},W.value=!0}function Le(e){G.value=e.id,q.value={name:e.name,status_code:e.status_code,body_pattern:e.body_pattern,is_active:!!e.is_active,retry_strategy:e.retry_strategy,retry_delay_ms:e.retry_delay_ms,max_retries:e.max_retries,max_delay_ms:e.max_delay_ms},J.value={},W.value=!0}async function Re(){if(Fe())try{let e={name:q.value.name,status_code:Number(q.value.status_code),body_pattern:q.value.body_pattern,is_active:+!!q.value.is_active,retry_strategy:q.value.retry_strategy,retry_delay_ms:Number(q.value.retry_delay_ms),max_retries:Number(q.value.max_retries),max_delay_ms:Number(q.value.max_delay_ms)};G.value?await l.updateRetryRule(G.value,e):await l.createRetryRule(e),W.value=!1,await Y()}catch(e){console.error(`Failed to save retry rule:`,e),j.error(`保存规则失败`)}}function ze(e){K.value=e}async function Be(){let e=K.value;if(e){K.value=null;try{await l.deleteRetryRule(e.id),await Y()}catch(e){console.error(`Failed to delete retry rule:`,e),j.error(`删除规则失败`)}}}let X=n(!1),Z=n([]),Q=n(new Set),Ve=ne(()=>Z.value.length>0&&Q.value.size===Z.value.length);async function $(){try{Z.value=await l.recommended.getRetryRules()}catch{Z.value=[]}}function He(e){let t=new Set(Q.value);t.has(e)?t.delete(e):t.add(e),Q.value=t}function Ue(e){Q.value=e===!0?new Set(Z.value.map(e=>e.name)):new Set}async function We(){let e=Z.value.filter(e=>Q.value.has(e.name));for(let t of e)await l.createRetryRule({name:t.name,status_code:t.status_code,body_pattern:t.body_pattern,is_active:1,retry_strategy:t.retry_strategy,retry_delay_ms:t.retry_delay_ms,max_retries:t.max_retries,max_delay_ms:t.max_delay_ms});j.success(`已添加 ${e.length} 条规则`),Q.value=new Set,await Promise.allSettled([$(),Y()])}return te(()=>{Y(),$()}),(n,o)=>(p(),u(`div`,ye,[e(`div`,be,[o[19]||=e(`h2`,{class:`text-lg font-semibold text-foreground`},`重试规则`,-1),i(r(m),{onClick:Ie,class:`flex items-center gap-1`},{default:g(()=>[...o[18]||=[e(`svg`,{class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 4v16m8-8H4`})],-1),f(` 添加规则 `,-1)]]),_:1})]),e(`div`,xe,[i(r(E),null,{default:g(()=>[i(r(O),null,{default:g(()=>[i(r(D),{class:`bg-muted`},{default:g(()=>[i(r(T),{class:`text-muted-foreground`},{default:g(()=>[...o[20]||=[f(`名称`,-1)]]),_:1}),i(r(T),{class:`text-muted-foreground`},{default:g(()=>[...o[21]||=[f(`HTTP 状态码`,-1)]]),_:1}),i(r(T),{class:`text-muted-foreground`},{default:g(()=>[...o[22]||=[f(`响应体匹配`,-1)]]),_:1}),i(r(T),{class:`text-muted-foreground`},{default:g(()=>[...o[23]||=[f(`重试策略`,-1)]]),_:1}),i(r(T),{class:`text-muted-foreground`},{default:g(()=>[...o[24]||=[f(`状态`,-1)]]),_:1}),i(r(T),{class:`text-right text-muted-foreground`},{default:g(()=>[...o[25]||=[f(`操作`,-1)]]),_:1})]),_:1})]),_:1}),i(r(C),null,{default:g(()=>[(p(!0),u(s,null,h(U.value,n=>(p(),d(r(D),{key:n.id},{default:g(()=>[i(r(w),{class:`font-mono text-sm`},{default:g(()=>[f(t(n.name),1)]),_:2},1024),i(r(w),null,{default:g(()=>[f(t(n.status_code),1)]),_:2},1024),i(r(w),{class:`font-mono text-xs text-muted-foreground`},{default:g(()=>[f(t(n.body_pattern),1)]),_:2},1024),i(r(w),null,{default:g(()=>[e(`div`,Se,[i(r(A),{variant:`outline`},{default:g(()=>[f(t(n.retry_strategy===`fixed`?`固定间隔`:`指数退避`),1)]),_:2},1024),e(`span`,L,[f(t(n.retry_delay_ms/1e3)+`s · `+t(n.max_retries)+`次 `,1),n.retry_strategy===`exponential`?(p(),u(s,{key:0},[f(` · 上限`+t(n.max_delay_ms/1e3)+`s`,1)],64)):a(``,!0)])])]),_:2},1024),i(r(w),null,{default:g(()=>[i(r(A),{variant:n.is_active?`default`:`secondary`},{default:g(()=>[f(t(n.is_active?`启用`:`禁用`),1)]),_:2},1032,[`variant`])]),_:2},1024),i(r(w),{class:`text-right`},{default:g(()=>[i(r(m),{variant:`ghost`,size:`sm`,onClick:e=>Le(n),class:`mr-2`},{default:g(()=>[...o[26]||=[f(`编辑`,-1)]]),_:1},8,[`onClick`]),i(r(m),{variant:`ghost`,size:`sm`,class:`text-destructive hover:text-destructive`,onClick:e=>ze(n)},{default:g(()=>[...o[27]||=[f(`删除`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1024))),128)),U.value.length===0?(p(),d(r(D),{key:0},{default:g(()=>[i(r(w),{colspan:`6`,class:`text-center text-muted-foreground py-8`},{default:g(()=>[...o[28]||=[f(`暂无规则`,-1)]]),_:1})]),_:1})):a(``,!0)]),_:1})]),_:1})]),i(r(ue),{open:W.value,"onUpdate:open":o[15]||=e=>W.value=e},{default:g(()=>[i(r(S),null,{default:g(()=>[i(r(le),null,{default:g(()=>[i(r(de),null,{default:g(()=>[f(t(G.value?`编辑规则`:`添加规则`),1)]),_:1})]),_:1}),e(`form`,{onSubmit:ee(Re,[`prevent`]),class:`space-y-3`},[e(`div`,null,[i(r(k),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[...o[29]||=[f(`名称`,-1)]]),_:1}),i(r(I),{modelValue:q.value.name,"onUpdate:modelValue":o[0]||=e=>q.value.name=e,type:`text`,required:``,onInput:o[1]||=e=>delete J.value.name},null,8,[`modelValue`]),J.value.name?(p(),u(`p`,Ce,t(J.value.name),1)):a(``,!0)]),e(`div`,null,[i(r(k),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[...o[30]||=[f(`HTTP 状态码`,-1)]]),_:1}),i(r(I),{modelValue:q.value.status_code,"onUpdate:modelValue":o[2]||=e=>q.value.status_code=e,modelModifiers:{number:!0},type:`number`,required:``,onInput:o[3]||=e=>delete J.value.status_code},null,8,[`modelValue`]),J.value.status_code?(p(),u(`p`,we,t(J.value.status_code),1)):a(``,!0)]),e(`div`,null,[i(r(k),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[...o[31]||=[f(`响应体匹配`,-1)]]),_:1}),i(r(I),{modelValue:q.value.body_pattern,"onUpdate:modelValue":o[4]||=e=>q.value.body_pattern=e,type:`text`,placeholder:`正则表达式,例如 .*rate_limit.*`,required:``,onInput:o[5]||=e=>delete J.value.body_pattern},null,8,[`modelValue`]),J.value.body_pattern?(p(),u(`p`,Te,t(J.value.body_pattern),1)):a(``,!0)]),e(`div`,null,[i(r(k),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[...o[32]||=[f(`重试策略`,-1)]]),_:1}),i(r(re),{modelValue:q.value.retry_strategy,"onUpdate:modelValue":o[6]||=e=>q.value.retry_strategy=e},{default:g(()=>[i(r(ae),{class:`w-full`},{default:g(()=>[i(r(se),{placeholder:`选择策略`})]),_:1}),i(r(ie),null,{default:g(()=>[i(r(_),{value:`exponential`},{default:g(()=>[...o[33]||=[f(`指数退避`,-1)]]),_:1}),i(r(_),{value:`fixed`},{default:g(()=>[...o[34]||=[f(`固定间隔`,-1)]]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),e(`div`,Ee,[e(`div`,null,[i(r(k),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[f(t(q.value.retry_strategy===`fixed`?`间隔时间 (ms)`:`初始延迟 (ms)`),1)]),_:1}),i(r(I),{modelValue:q.value.retry_delay_ms,"onUpdate:modelValue":o[7]||=e=>q.value.retry_delay_ms=e,modelModifiers:{number:!0},type:`number`,min:100,required:``,onInput:o[8]||=e=>delete J.value.retry_delay_ms},null,8,[`modelValue`]),J.value.retry_delay_ms?(p(),u(`p`,De,t(J.value.retry_delay_ms),1)):a(``,!0)]),e(`div`,null,[i(r(k),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[...o[35]||=[f(`最大重试次数`,-1)]]),_:1}),i(r(I),{modelValue:q.value.max_retries,"onUpdate:modelValue":o[9]||=e=>q.value.max_retries=e,modelModifiers:{number:!0},type:`number`,min:0,max:100,required:``,onInput:o[10]||=e=>delete J.value.max_retries},null,8,[`modelValue`]),J.value.max_retries?(p(),u(`p`,Oe,t(J.value.max_retries),1)):a(``,!0)])]),q.value.retry_strategy===`exponential`?(p(),u(`div`,ke,[i(r(k),{class:`block text-sm font-medium text-foreground mb-1`},{default:g(()=>[...o[36]||=[f(`延迟上限 (ms)`,-1)]]),_:1}),i(r(I),{modelValue:q.value.max_delay_ms,"onUpdate:modelValue":o[11]||=e=>q.value.max_delay_ms=e,modelModifiers:{number:!0},type:`number`,min:100,required:``,onInput:o[12]||=e=>delete J.value.max_delay_ms},null,8,[`modelValue`]),J.value.max_delay_ms?(p(),u(`p`,Ae,t(J.value.max_delay_ms),1)):a(``,!0)])):a(``,!0),e(`div`,je,[i(r(v),{modelValue:q.value.is_active,"onUpdate:modelValue":o[13]||=e=>q.value.is_active=e,id:`rule-active`},null,8,[`modelValue`]),i(r(k),{for:`rule-active`,class:`text-sm text-foreground`},{default:g(()=>[...o[37]||=[f(`启用`,-1)]]),_:1})]),i(r(x),null,{default:g(()=>[i(r(m),{type:`button`,variant:`outline`,onClick:o[14]||=e=>W.value=!1},{default:g(()=>[...o[38]||=[f(`取消`,-1)]]),_:1}),i(r(m),{type:`submit`},{default:g(()=>[...o[39]||=[f(`保存`,-1)]]),_:1})]),_:1})],32)]),_:1})]),_:1},8,[`open`]),i(r(pe),{open:!!K.value,"onUpdate:open":o[16]||=e=>{e||(K.value=null)}},{default:g(()=>[i(r(fe),null,{default:g(()=>[i(r(he),null,{default:g(()=>[i(r(ve),null,{default:g(()=>[...o[40]||=[f(`确认删除`,-1)]]),_:1}),i(r(me),null,{default:g(()=>[f(`确定要删除规则「`+t(K.value?.name)+`」吗?`,1)]),_:1})]),_:1}),i(r(_e),null,{default:g(()=>[i(r(ge),null,{default:g(()=>[...o[41]||=[f(`取消`,-1)]]),_:1}),i(r(m),{variant:`destructive`,onClick:Be},{default:g(()=>[...o[42]||=[f(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`]),Z.value.length>0?(p(),d(r(M),{key:0,class:`mt-6`},{default:g(()=>[i(r(y),{open:X.value,"onUpdate:open":o[17]||=e=>X.value=e},{default:g(()=>[i(r(b),{"as-child":``},{default:g(()=>[i(r(P),{class:`cursor-pointer hover:bg-muted/50 transition-colors`},{default:g(()=>[e(`div`,Me,[i(r(F),{class:`text-sm font-medium`},{default:g(()=>[f(`推荐重试规则 (`+t(Z.value.length)+`)`,1)]),_:1}),i(r(oe),{class:c([`h-4 w-4 text-muted-foreground transition-transform`,{"rotate-180":X.value}])},null,8,[`class`])])]),_:1})]),_:1}),i(r(ce),null,{default:g(()=>[i(r(N),null,{default:g(()=>[e(`div`,Ne,[e(`div`,Pe,[i(r(v),{"model-value":Ve.value,"onUpdate:modelValue":Ue},null,8,[`model-value`]),o[43]||=e(`span`,{class:`text-sm text-muted-foreground`},`全选`,-1)]),i(r(m),{size:`sm`,disabled:Q.value.size===0,onClick:We},{default:g(()=>[f(` 添加选中 (`+t(Q.value.size)+`) `,1)]),_:1},8,[`disabled`])]),i(r(E),null,{default:g(()=>[i(r(O),null,{default:g(()=>[i(r(D),null,{default:g(()=>[i(r(T),{class:`w-10`}),i(r(T),null,{default:g(()=>[...o[44]||=[f(`名称`,-1)]]),_:1}),i(r(T),null,{default:g(()=>[...o[45]||=[f(`状态码`,-1)]]),_:1}),i(r(T),null,{default:g(()=>[...o[46]||=[f(`匹配模式`,-1)]]),_:1}),i(r(T),null,{default:g(()=>[...o[47]||=[f(`策略`,-1)]]),_:1})]),_:1})]),_:1}),i(r(C),null,{default:g(()=>[(p(!0),u(s,null,h(Z.value,e=>(p(),d(r(D),{key:e.name},{default:g(()=>[i(r(w),null,{default:g(()=>[i(r(v),{"model-value":Q.value.has(e.name),"onUpdate:modelValue":()=>He(e.name)},null,8,[`model-value`,`onUpdate:modelValue`])]),_:2},1024),i(r(w),null,{default:g(()=>[f(t(e.name),1)]),_:2},1024),i(r(w),null,{default:g(()=>[f(t(e.status_code),1)]),_:2},1024),i(r(w),{class:`font-mono text-xs max-w-[200px] truncate`},{default:g(()=>[f(t(e.body_pattern),1)]),_:2},1024),i(r(w),null,{default:g(()=>[f(t(e.retry_strategy===`fixed`?`固定间隔`:`指数退避`),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]),_:1})):a(``,!0)]))}});export{H as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{B as e,Bt as t,Dt as n,Ft as r,G as i,H as a,I as o,K as s,L as c,Lt as l,O as u,U as d,V as f,W as p,at as m,n as h,nt as ee,st as g,yt as _}from"./button-qxGNBunr.js";import{t as v}from"./Checkbox-DH8iqXQd.js";import{i as te,o as ne,r as re,s as ie,t as ae}from"./dialog-D8pIXeSs.js";import{a as oe,c as y,i as b,n as x,o as S,r as C,t as se}from"./alert-dialog-BoGRIC1Q.js";import{a as ce,i as w,n as T,o as E,r as D,t as O}from"./TableHeader-BKE_yVML.js";import{t as k}from"./Label-DjtouWZ7.js";import{t as A}from"./badge-DIO8W_W9.js";import{n as j}from"./lib-DjpgwSRA.js";import{t as M}from"./Input-BhvZ-Up7.js";import{t as N}from"./useClipboard-CmLp2YGk.js";var P={class:`p-6`},F={class:`flex items-center justify-between mb-4`},I={class:`bg-card rounded-lg border overflow-hidden`},L={class:`flex items-center gap-1`},R={class:`font-mono text-xs text-muted-foreground`},z={key:0,class:`w-3.5 h-3.5`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},B={key:1,class:`w-3.5 h-3.5 text-success`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},V={key:0,class:`flex flex-wrap gap-1`},H={key:0,class:`text-sm text-destructive mt-1`},U={class:`border rounded-md p-3 max-h-48 overflow-y-auto space-y-2 bg-muted`},le={class:`font-mono text-xs`},W={key:0,class:`text-muted-foreground text-sm text-center py-2`},ue={key:0,class:`flex flex-wrap gap-1 mt-2`},de={key:0,class:`flex items-center gap-2`},G=s({__name:`RouterKeys`,setup(s){let G={name:``,allowed_models:[],is_active:!0},K=n([]),q=n([]),J=n(!1),Y=n(null),X=n(null),Z=n({...G,allowed_models:[]}),Q=n({}),{copied:fe,copy:pe}=N();function me(e){return e?e.slice(0,7)+`*`.repeat(7):``}function he(e){return new Date(e).toLocaleString(`zh-CN`)}function ge(e){let t=Z.value.allowed_models.indexOf(e);t>=0&&Z.value.allowed_models.splice(t,1)}async function $(){try{let[e,t]=await Promise.allSettled([u.getRouterKeys(),u.getAvailableModels()]);e.status===`fulfilled`&&(K.value=e.value),t.status===`fulfilled`&&(q.value=t.value)}catch(e){console.error(`Failed to load data:`,e),j.error(`加载数据失败`)}}function _e(){Y.value=null,Z.value={...G,allowed_models:[]},Q.value={},J.value=!0}function ve(e){Y.value=e.id,Z.value={name:e.name,allowed_models:e.allowed_models?[...e.allowed_models]:[],is_active:!!e.is_active},Q.value={},J.value=!0}function ye(){return{name:Z.value.name,allowed_models:Z.value.allowed_models.length>0?Z.value.allowed_models:null,is_active:+!!Z.value.is_active}}function be(){return{name:Z.value.name,allowed_models:Z.value.allowed_models.length>0?Z.value.allowed_models:null}}async function xe(){let e={};if(Z.value.name.trim()||(e.name=`请输入名称`),Q.value=e,!(Object.keys(e).length>0))try{Y.value?await u.updateRouterKey(Y.value,ye()):await u.createRouterKey(be()),J.value=!1,await $()}catch(e){console.error(`Failed to save router key:`,e),j.error(`保存密钥失败`)}}function Se(e){X.value=e}async function Ce(){let e=X.value;if(e){X.value=null;try{await u.deleteRouterKey(e.id),await $()}catch(e){console.error(`Failed to delete router key:`,e),j.error(`删除密钥失败`)}}}return ee($),(n,s)=>(m(),d(`div`,P,[e(`div`,F,[s[7]||=e(`h2`,{class:`text-lg font-semibold text-foreground`},`API 密钥`,-1),i(r(h),{onClick:_e,class:`flex items-center gap-1`},{default:_(()=>[...s[6]||=[e(`svg`,{class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 4v16m8-8H4`})],-1),p(` 创建密钥 `,-1)]]),_:1})]),e(`div`,I,[i(r(E),null,{default:_(()=>[i(r(O),null,{default:_(()=>[i(r(D),{class:`bg-muted`},{default:_(()=>[i(r(T),{class:`text-muted-foreground`},{default:_(()=>[...s[8]||=[p(`名称`,-1)]]),_:1}),i(r(T),{class:`text-muted-foreground`},{default:_(()=>[...s[9]||=[p(`密钥`,-1)]]),_:1}),i(r(T),{class:`text-muted-foreground`},{default:_(()=>[...s[10]||=[p(`白名单模型`,-1)]]),_:1}),i(r(T),{class:`text-muted-foreground`},{default:_(()=>[...s[11]||=[p(`状态`,-1)]]),_:1}),i(r(T),{class:`text-muted-foreground`},{default:_(()=>[...s[12]||=[p(`创建时间`,-1)]]),_:1}),i(r(T),{class:`text-right text-muted-foreground`},{default:_(()=>[...s[13]||=[p(`操作`,-1)]]),_:1})]),_:1})]),_:1}),i(r(ce),null,{default:_(()=>[(m(!0),d(c,null,g(K.value,n=>(m(),f(r(D),{key:n.id,class:l({"opacity-60":!n.is_active})},{default:_(()=>[i(r(w),{class:`font-medium`},{default:_(()=>[p(t(n.name),1)]),_:2},1024),i(r(w),null,{default:_(()=>[e(`div`,L,[e(`span`,R,t(me(n.key)),1),i(r(h),{variant:`ghost`,size:`sm`,class:`h-6 w-6 p-0`,onClick:e=>n.key&&r(pe)(n.key)},{default:_(()=>[r(fe)?(m(),d(`svg`,B,[...s[15]||=[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 13l4 4L19 7`},null,-1)]])):(m(),d(`svg`,z,[...s[14]||=[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z`},null,-1)]]))]),_:1},8,[`onClick`])])]),_:2},1024),i(r(w),null,{default:_(()=>[n.allowed_models&&n.allowed_models.length>0?(m(),d(`div`,V,[(m(!0),d(c,null,g(n.allowed_models,e=>(m(),f(r(A),{key:e,variant:`outline`,class:`text-xs`},{default:_(()=>[p(t(e),1)]),_:2},1024))),128))])):(m(),f(r(A),{key:1,variant:`secondary`},{default:_(()=>[...s[16]||=[p(`全部模型`,-1)]]),_:1}))]),_:2},1024),i(r(w),null,{default:_(()=>[i(r(A),{variant:n.is_active?`default`:`secondary`},{default:_(()=>[p(t(n.is_active?`启用`:`禁用`),1)]),_:2},1032,[`variant`])]),_:2},1024),i(r(w),{class:`text-muted-foreground text-sm`},{default:_(()=>[p(t(he(n.created_at)),1)]),_:2},1024),i(r(w),{class:`text-right`},{default:_(()=>[i(r(h),{variant:`ghost`,size:`sm`,onClick:e=>ve(n),class:`text-muted-foreground hover:text-primary mr-2`},{default:_(()=>[...s[17]||=[p(`编辑`,-1)]]),_:1},8,[`onClick`]),i(r(h),{variant:`ghost`,size:`sm`,onClick:e=>Se(n),class:`text-muted-foreground hover:text-destructive`},{default:_(()=>[...s[18]||=[p(`删除`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1032,[`class`]))),128)),K.value.length===0?(m(),f(r(D),{key:0},{default:_(()=>[i(r(w),{colspan:`6`,class:`text-center text-muted-foreground py-8`},{default:_(()=>[...s[19]||=[p(`暂无密钥`,-1)]]),_:1})]),_:1})):a(``,!0)]),_:1})]),_:1})]),i(r(ie),{open:J.value,"onUpdate:open":s[4]||=e=>J.value=e},{default:_(()=>[i(r(ne),{class:`sm:max-w-lg`},{default:_(()=>[i(r(re),null,{default:_(()=>[i(r(ae),null,{default:_(()=>[p(t(Y.value?`编辑密钥`:`创建密钥`),1)]),_:1})]),_:1}),e(`form`,{onSubmit:o(xe,[`prevent`]),class:`space-y-4`},[e(`div`,null,[i(r(k),{class:`block text-sm font-medium text-foreground mb-1`},{default:_(()=>[...s[20]||=[p(`名称`,-1)]]),_:1}),i(r(M),{modelValue:Z.value.name,"onUpdate:modelValue":s[0]||=e=>Z.value.name=e,type:`text`,required:``,placeholder:`例如:生产环境`,onInput:s[1]||=e=>delete Q.value.name},null,8,[`modelValue`]),Q.value.name?(m(),d(`p`,H,t(Q.value.name),1)):a(``,!0)]),e(`div`,null,[i(r(k),{class:`block text-sm font-medium text-foreground mb-1`},{default:_(()=>[...s[21]||=[p(`白名单模型`,-1)]]),_:1}),s[23]||=e(`div`,{class:`text-xs text-muted-foreground mb-2`},`不选择 = 允许所有模型`,-1),e(`div`,U,[(m(!0),d(c,null,g(q.value,n=>(m(),f(r(k),{key:n,class:`flex items-center gap-2 cursor-pointer text-sm font-normal`},{default:_(()=>[i(r(v),{"model-value":Z.value.allowed_models.includes(n),"onUpdate:modelValue":e=>{if(e&&e!==`indeterminate`&&!Z.value.allowed_models.includes(n))Z.value.allowed_models.push(n);else if(!e){let e=Z.value.allowed_models.indexOf(n);e>=0&&Z.value.allowed_models.splice(e,1)}}},null,8,[`model-value`,`onUpdate:modelValue`]),e(`span`,le,t(n),1)]),_:2},1024))),128)),q.value.length===0?(m(),d(`div`,W,` 暂无可用模型,请先配置模型映射 `)):a(``,!0)]),Z.value.allowed_models.length>0?(m(),d(`div`,ue,[(m(!0),d(c,null,g(Z.value.allowed_models,e=>(m(),f(r(A),{key:e,variant:`outline`,class:`text-xs`},{default:_(()=>[p(t(e)+` `,1),i(r(h),{type:`button`,variant:`ghost`,size:`sm`,class:`ml-1 h-4 w-4 p-0 text-muted-foreground hover:text-destructive`,onClick:t=>ge(e)},{default:_(()=>[...s[22]||=[p(`×`,-1)]]),_:1},8,[`onClick`])]),_:2},1024))),128))])):a(``,!0)]),Y.value?(m(),d(`div`,de,[i(r(v),{modelValue:Z.value.is_active,"onUpdate:modelValue":s[2]||=e=>Z.value.is_active=e,id:`key-active`},null,8,[`modelValue`]),i(r(k),{for:`key-active`,class:`text-sm text-foreground`},{default:_(()=>[...s[24]||=[p(`启用`,-1)]]),_:1})])):a(``,!0),i(r(te),null,{default:_(()=>[i(r(h),{type:`button`,variant:`outline`,onClick:s[3]||=e=>J.value=!1},{default:_(()=>[...s[25]||=[p(`取消`,-1)]]),_:1}),i(r(h),{type:`submit`},{default:_(()=>[...s[26]||=[p(`保存`,-1)]]),_:1})]),_:1})],32)]),_:1})]),_:1},8,[`open`]),i(r(y),{open:!!X.value,"onUpdate:open":s[5]||=e=>{e||(X.value=null)}},{default:_(()=>[i(r(oe),null,{default:_(()=>[i(r(x),null,{default:_(()=>[i(r(se),null,{default:_(()=>[...s[27]||=[p(`确认删除`,-1)]]),_:1}),i(r(b),null,{default:_(()=>[p(`确定要删除密钥「`+t(X.value?.name)+`」吗?使用此密钥的所有请求将被拒绝,此操作不可撤销。`,1)]),_:1})]),_:1}),i(r(C),null,{default:_(()=>[i(r(S),null,{default:_(()=>[...s[28]||=[p(`取消`,-1)]]),_:1}),i(r(h),{variant:`destructive`,onClick:Ce},{default:_(()=>[...s[29]||=[p(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{G as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,B as t,Bt as n,Dt as r,Ft as i,G as a,H as o,I as s,J as c,K as l,L as u,Lt as d,Mt as f,R as p,Rt as m,U as h,V as g,W as _,_t as v,at as y,b,ct as x,et as S,f as C,gt as w,i as T,l as E,nt as D,p as O,r as k,rt as A,st as j,tt as ee,ut as te,v as ne,x as re,yt as M,z as N,zt as ie}from"./button-qxGNBunr.js";import{t as P}from"./createLucideIcon-jHUFhqKn.js";import{n as ae,t as oe}from"./ohash.D__AXeF1-nmJ7gFbh.js";import{n as F,t as se}from"./useNonce-_2e-GL-A.js";import{S as I,a as ce,b as le,c as ue,d as de,f as L,g as fe,h as pe,n as me,o as he,p as R,r as z,t as B,u as V,x as H,y as U}from"./Collection-DY9-Yue9.js";import{n as ge,t as _e}from"./VisuallyHidden-B_NnkONE.js";import{t as W}from"./useForwardExpose-awoGXQkg.js";import{i as ve,r as ye,t as be}from"./PopperContent-CHNw_qb6.js";var G=P(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),xe=P(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),K=0;function Se(){v(e=>{if(!ne)return;let t=document.querySelectorAll(`[data-reka-focus-guard]`);document.body.insertAdjacentElement(`afterbegin`,t[0]??q()),document.body.insertAdjacentElement(`beforeend`,t[1]??q()),K++,e(()=>{K===1&&document.querySelectorAll(`[data-reka-focus-guard]`).forEach(e=>e.remove()),K--})})}function q(){let e=document.createElement(`span`);return e.setAttribute(`data-reka-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}function J(e){let t=re(``,1e3);return{search:t,handleTypeaheadSearch:(n,r)=>{if(t.value+=n,e)e(n);else{let e=H(),n=r.map(e=>({...e,textValue:e.value?.textValue??e.ref.textContent?.trim()??``})),i=n.find(t=>t.ref===e),a=we(n.map(e=>e.textValue),t.value,i?.textValue),o=n.find(e=>e.textValue===a);return o&&o.ref.focus(),o?.ref}},resetTypeahead:()=>{t.value=``}}}function Ce(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function we(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=Ce(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}var Te=[` `,`Enter`,`ArrowUp`,`ArrowDown`],Ee=[` `,`Enter`];function Y(e,t,n){return e===void 0?!1:Array.isArray(e)?e.some(e=>X(e,t,n)):X(e,t,n)}function X(e,t,n){return e===void 0||t===void 0?!1:typeof e==`string`?e===t:typeof n==`function`?n(e,t):typeof n==`string`?e?.[n]===t?.[n]:oe(e,t)}function De(e){return e==null||e===``||Array.isArray(e)&&e.length===0}var Oe={key:0,value:``},[Z,ke]=I(`SelectRoot`),Ae=l({inheritAttrs:!1,__name:`SelectRoot`,props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},by:{type:[String,Function],required:!1},dir:{type:String,required:!1},multiple:{type:Boolean,required:!1},autocomplete:{type:String,required:!1},disabled:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:[`update:modelValue`,`update:open`],setup(t,{emit:n}){let a=t,s=n,{required:c,disabled:l,multiple:d,dir:p}=f(a),m=O(a,`modelValue`,s,{defaultValue:a.defaultValue??(d.value?[]:void 0),passive:a.modelValue===void 0,deep:!0}),_=O(a,`open`,s,{defaultValue:a.defaultOpen,passive:a.open===void 0}),v=r(),b=r(),S=r({x:0,y:0}),C=N(()=>d.value&&Array.isArray(m.value)?m.value?.length===0:U(m.value));B({isProvider:!0});let w=pe(p),T=ge(v),E=r(new Set),D=N(()=>Array.from(E.value).map(e=>e.value).join(`;`));function k(e){if(d.value){let t=Array.isArray(m.value)?[...m.value]:[],n=t.findIndex(t=>X(t,e,a.by));n===-1?t.push(e):t.splice(n,1),m.value=[...t]}else m.value=e}function A(e){return Array.from(E.value).find(t=>Y(e,t.value,a.by))}return ke({triggerElement:v,onTriggerChange:e=>{v.value=e},valueElement:b,onValueElementChange:e=>{b.value=e},contentId:``,modelValue:m,onValueChange:k,by:a.by,open:_,multiple:d,required:c,onOpenChange:e=>{_.value=e},dir:w,triggerPointerDownPosRef:S,disabled:l,isEmptyModelValue:C,optionsSet:E,onOptionAdd:e=>{let t=A(e.value);t&&E.value.delete(t),E.value.add(e)},onOptionRemove:e=>{let t=A(e.value);t&&E.value.delete(t)}}),(t,n)=>(y(),g(i(ve),null,{default:M(()=>[x(t.$slots,`default`,{modelValue:i(m),open:i(_)}),i(T)&&t.name?(y(),g(je,{key:D.value,"aria-hidden":`true`,tabindex:`-1`,multiple:i(d),required:i(c),name:t.name,autocomplete:t.autocomplete,disabled:i(l),value:i(m)},{default:M(()=>[i(U)(i(m))?(y(),h(`option`,Oe)):o(`v-if`,!0),(y(!0),h(u,null,j(Array.from(E.value),t=>(y(),h(`option`,e({key:t.value??``},{ref_for:!0},t),null,16))),128))]),_:1},8,[`multiple`,`required`,`name`,`autocomplete`,`disabled`,`value`])):o(`v-if`,!0)]),_:3}))}}),je=l({__name:`BubbleSelect`,props:{autocomplete:{type:String,required:!1},autofocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},form:{type:String,required:!1},multiple:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1},size:{type:Number,required:!1},value:{type:null,required:!1}},setup(n){let a=n,o=r(),s=Z();w(()=>a.value,(e,t)=>{let n=window.HTMLSelectElement.prototype,r=Object.getOwnPropertyDescriptor(n,`value`).set;if(e!==t&&r&&o.value){let t=new Event(`change`,{bubbles:!0});r.call(o.value,e),o.value.dispatchEvent(t)}});function c(e){s.onValueChange(e.target.value)}return(n,r)=>(y(),g(i(_e),{"as-child":``},{default:M(()=>[t(`select`,e({ref_key:`selectElement`,ref:o},a,{onInput:c}),[x(n.$slots,`default`)],16)]),_:3}))}}),Me=l({__name:`SelectPopperPosition`,props:{side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1,default:`start`},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1,default:10},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let n=R(t);return(t,r)=>(y(),g(i(be),e(i(n),{style:{boxSizing:`border-box`,"--reka-select-content-transform-origin":`var(--reka-popper-transform-origin)`,"--reka-select-content-available-width":`var(--reka-popper-available-width)`,"--reka-select-content-available-height":`var(--reka-popper-available-height)`,"--reka-select-trigger-width":`var(--reka-popper-anchor-width)`,"--reka-select-trigger-height":`var(--reka-popper-anchor-height)`}}),{default:M(()=>[x(t.$slots,`default`)]),_:3},16))}}),Ne={onViewportChange:()=>{},itemTextRefCallback:()=>{},itemRefCallback:()=>{}},[Q,Pe]=I(`SelectContent`),Fe=l({__name:`SelectContentImpl`,props:{position:{type:String,required:!1,default:`item-aligned`},bodyLock:{type:Boolean,required:!1,default:!0},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1,default:`start`},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:!0}},emits:[`closeAutoFocus`,`escapeKeyDown`,`pointerDownOutside`],setup(t,{emit:n}){let o=t,c=n,l=Z();Se(),fe(o.bodyLock);let{CollectionSlot:u,getItems:d}=B(),f=r();de(f);let{search:p,handleTypeaheadSearch:m}=J(),h=r(),_=r(),b=r(),S=r(!1),C=r(!1),T=r(!1);function D(){_.value&&f.value&&z([_.value,f.value])}w(S,()=>{D()});let{onOpenChange:O,triggerPointerDownPosRef:k}=l;v(e=>{if(!f.value)return;let t={x:0,y:0},n=e=>{t={x:Math.abs(Math.round(e.pageX)-(k.value?.x??0)),y:Math.abs(Math.round(e.pageY)-(k.value?.y??0))}},r=e=>{e.pointerType!==`touch`&&(t.x<=10&&t.y<=10?e.preventDefault():f.value?.contains(e.target)||O(!1),document.removeEventListener(`pointermove`,n),k.value=null)};k.value!==null&&(document.addEventListener(`pointermove`,n),document.addEventListener(`pointerup`,r,{capture:!0,once:!0})),e(()=>{document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r,{capture:!0})})});function A(e){let t=e.ctrlKey||e.altKey||e.metaKey;if(e.key===`Tab`&&e.preventDefault(),!t&&e.key.length===1&&m(e.key,d()),[`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key)){let t=[...d().map(e=>e.ref)];if([`ArrowUp`,`End`].includes(e.key)&&(t=t.slice().reverse()),[`ArrowUp`,`ArrowDown`].includes(e.key)){let n=e.target,r=t.indexOf(n);t=t.slice(r+1)}setTimeout(()=>z(t)),e.preventDefault()}}let j=R(N(()=>o.position===`popper`?o:{}).value);return Pe({content:f,viewport:h,onViewportChange:e=>{h.value=e},itemRefCallback:(e,t,n)=>{let r=!C.value&&!n,i=Y(l.modelValue.value,t,l.by);if(l.multiple.value){if(T.value)return;(i||r)&&(_.value=e,i&&(T.value=!0))}else (i||r)&&(_.value=e);r&&(C.value=!0)},selectedItem:_,selectedItemText:b,onItemLeave:()=>{f.value?.focus()},itemTextRefCallback:(e,t,n)=>{let r=!C.value&&!n;(Y(l.modelValue.value,t,l.by)||r)&&(b.value=e)},focusSelectedItem:D,position:o.position,isPositioned:S,searchRef:p}),(t,n)=>(y(),g(i(u),null,{default:M(()=>[a(i(ce),{"as-child":``,onMountAutoFocus:n[6]||=s(()=>{},[`prevent`]),onUnmountAutoFocus:n[7]||=e=>{c(`closeAutoFocus`,e),!e.defaultPrevented&&(i(l).triggerElement.value?.focus({preventScroll:!0}),e.preventDefault())}},{default:M(()=>[a(i(he),{"as-child":``,"disable-outside-pointer-events":t.disableOutsidePointerEvents,onFocusOutside:n[2]||=s(()=>{},[`prevent`]),onDismiss:n[3]||=e=>i(l).onOpenChange(!1),onEscapeKeyDown:n[4]||=e=>c(`escapeKeyDown`,e),onPointerDownOutside:n[5]||=e=>c(`pointerDownOutside`,e)},{default:M(()=>[(y(),g(te(t.position===`popper`?Me:Le),e({...t.$attrs,...i(j)},{id:i(l).contentId,ref:e=>{if(!e)return;let t=i(E)(e);t?.hasAttribute(`data-reka-popper-content-wrapper`)?f.value=t.firstElementChild:f.value=t},role:`listbox`,"data-state":i(l).open.value?`open`:`closed`,dir:i(l).dir.value,style:{display:`flex`,flexDirection:`column`,outline:`none`},onContextmenu:n[0]||=s(()=>{},[`prevent`]),onPlaced:n[1]||=e=>S.value=!0,onKeydown:A}),{default:M(()=>[x(t.$slots,`default`)]),_:3},16,[`id`,`data-state`,`dir`,`onKeydown`]))]),_:3},8,[`disable-outside-pointer-events`])]),_:3})]),_:3}))}}),[$,Ie]=I(`SelectItemAlignedPosition`),Le=l({inheritAttrs:!1,__name:`SelectItemAlignedPosition`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`placed`],setup(t,{emit:n}){let o=t,s=n,{getItems:c}=B(),l=Z(),u=Q(),d=r(!1),f=r(!0),p=r(),{forwardRef:m,currentElement:g}=W(),{viewport:_,selectedItem:v,selectedItemText:b,focusSelectedItem:w}=u;function E(){if(l.triggerElement.value&&l.valueElement.value&&p.value&&g.value&&_?.value&&v?.value&&b?.value){let e=l.triggerElement.value.getBoundingClientRect(),t=g.value.getBoundingClientRect(),n=l.valueElement.value.getBoundingClientRect(),r=b.value.getBoundingClientRect();if(l.dir.value!==`rtl`){let i=r.left-t.left,a=n.left-i,o=e.left-a,s=e.width+o,c=Math.max(s,t.width),l=window.innerWidth-10,u=F(a,10,Math.max(10,l-c));p.value.style.minWidth=`${s}px`,p.value.style.left=`${u}px`}else{let i=t.right-r.right,a=window.innerWidth-n.right-i,o=window.innerWidth-e.right-a,s=e.width+o,c=Math.max(s,t.width),l=window.innerWidth-10,u=F(a,10,Math.max(10,l-c));p.value.style.minWidth=`${s}px`,p.value.style.right=`${u}px`}let i=c().map(e=>e.ref),a=window.innerHeight-20,o=_.value.scrollHeight,u=window.getComputedStyle(g.value),f=Number.parseInt(u.borderTopWidth,10),m=Number.parseInt(u.paddingTop,10),h=Number.parseInt(u.borderBottomWidth,10),y=Number.parseInt(u.paddingBottom,10),x=f+m+o+y+h,S=Math.min(v.value.offsetHeight*5,x),C=window.getComputedStyle(_.value),w=Number.parseInt(C.paddingTop,10),T=Number.parseInt(C.paddingBottom,10),E=e.top+e.height/2-10,D=a-E,O=v.value.offsetHeight/2,k=v.value.offsetTop+O,A=f+m+k,j=x-A;if(A<=E){let e=v.value===i.at(-1);p.value.style.bottom=`0px`;let t=g.value.clientHeight-_.value.offsetTop-_.value.offsetHeight,n=A+Math.max(D,O+(e?T:0)+t+h);p.value.style.height=`${n}px`}else{let e=v.value===i[0];p.value.style.top=`0px`;let t=Math.max(E,f+_.value.offsetTop+(e?w:0)+O)+j;p.value.style.height=`${t}px`,_.value.scrollTop=A-E+_.value.offsetTop}p.value.style.margin=`10px 0`,p.value.style.minHeight=`${S}px`,p.value.style.maxHeight=`${a}px`,s(`placed`),requestAnimationFrame(()=>d.value=!0)}}let O=r(``);D(async()=>{await S(),E(),g.value&&(O.value=window.getComputedStyle(g.value).zIndex)});function k(e){e&&f.value===!0&&(E(),w?.(),f.value=!1)}return C(l.triggerElement,()=>{E()}),Ie({contentWrapper:p,shouldExpandOnScrollRef:d,onScrollButtonChange:k}),(t,n)=>(y(),h(`div`,{ref_key:`contentWrapperElement`,ref:p,style:ie({display:`flex`,flexDirection:`column`,position:`fixed`,zIndex:O.value})},[a(i(T),e({ref:i(m),style:{boxSizing:`border-box`,maxHeight:`100%`}},{...t.$attrs,...o}),{default:M(()=>[x(t.$slots,`default`)]),_:3},16)],4))}}),Re=l({inheritAttrs:!1,__name:`SelectProvider`,props:{context:{type:Object,required:!0}},setup(e){return ke(e.context),Pe(Ne),(e,t)=>x(e.$slots,`default`)}}),ze={key:1},Be=l({inheritAttrs:!1,__name:`SelectContent`,props:{forceMount:{type:Boolean,required:!1},position:{type:String,required:!1},bodyLock:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:[`closeAutoFocus`,`escapeKeyDown`,`pointerDownOutside`],setup(e,{emit:t}){let n=e,s=L(n,t),l=Z(),u=r();D(()=>{u.value=new DocumentFragment});let d=r(),f=N(()=>n.forceMount||l.open.value),_=r(f.value);return w(f,()=>{setTimeout(()=>_.value=f.value)}),(e,t)=>f.value||_.value||d.value?.present?(y(),g(i(ue),{key:0,ref_key:`presenceRef`,ref:d,present:f.value},{default:M(()=>[a(Fe,m(c({...i(s),...e.$attrs})),{default:M(()=>[x(e.$slots,`default`)]),_:3},16)]),_:3},8,[`present`])):u.value?(y(),h(`div`,ze,[(y(),g(p,{to:u.value},[a(Re,{context:i(l)},{default:M(()=>[x(e.$slots,`default`)]),_:3},8,[`context`])],8,[`to`]))])):o(`v-if`,!0)}}),Ve=l({__name:`SelectIcon`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){return(e,t)=>(y(),g(i(T),{"aria-hidden":`true`,as:e.as,"as-child":e.asChild},{default:M(()=>[x(e.$slots,`default`,{},()=>[t[0]||=_(`▼`)])]),_:3},8,[`as`,`as-child`]))}}),[He,Ue]=I(`SelectItem`),We=l({__name:`SelectItem`,props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`select`],setup(e,{emit:t}){let n=e,o=t,{disabled:c}=f(n),l=Z(),u=Q(),{forwardRef:d,currentElement:p}=W(),{CollectionItem:m}=B(),h=N(()=>Y(l.modelValue?.value,n.value,l.by)),_=r(!1),v=r(n.textValue??``),b=V(void 0,`reka-select-item-text`);async function C(e){e.defaultPrevented||le(`select.select`,w,{originalEvent:e,value:n.value})}async function w(e){await S(),o(`select`,e),!e.defaultPrevented&&(c.value||(l.onValueChange(n.value),l.multiple.value||l.onOpenChange(!1)))}async function E(e){await S(),!e.defaultPrevented&&(c.value?u.onItemLeave?.():e.currentTarget?.focus({preventScroll:!0}))}async function O(e){await S(),!e.defaultPrevented&&e.currentTarget===H()&&u.onItemLeave?.()}async function k(e){await S(),!e.defaultPrevented&&(u.searchRef?.value!==``&&e.key===` `||(Ee.includes(e.key)&&C(e),e.key===` `&&e.preventDefault()))}if(n.value===``)throw Error(`A <SelectItem /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.`);return D(()=>{p.value&&u.itemRefCallback(p.value,n.value,n.disabled)}),Ue({value:n.value,disabled:c,textId:b,isSelected:h,onItemTextChange:e=>{v.value=((v.value||e?.textContent)??``).trim()}}),(e,t)=>(y(),g(i(m),{value:{textValue:v.value}},{default:M(()=>[a(i(T),{ref:i(d),role:`option`,"aria-labelledby":i(b),"data-highlighted":_.value?``:void 0,"aria-selected":h.value,"data-state":h.value?`checked`:`unchecked`,"aria-disabled":i(c)||void 0,"data-disabled":i(c)?``:void 0,tabindex:i(c)?void 0:-1,as:e.as,"as-child":e.asChild,onFocus:t[0]||=e=>_.value=!0,onBlur:t[1]||=e=>_.value=!1,onPointerup:C,onPointerdown:t[2]||=e=>{e.currentTarget.focus({preventScroll:!0})},onTouchend:t[3]||=s(()=>{},[`prevent`,`stop`]),onPointermove:E,onPointerleave:O,onKeydown:k},{default:M(()=>[x(e.$slots,`default`)]),_:3},8,[`aria-labelledby`,`data-highlighted`,`aria-selected`,`data-state`,`aria-disabled`,`data-disabled`,`tabindex`,`as`,`as-child`])]),_:3},8,[`value`]))}}),Ge=l({__name:`SelectItemIndicator`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(t){let n=t,r=He();return(t,a)=>i(r).isSelected.value?(y(),g(i(T),e({key:0,"aria-hidden":`true`},n),{default:M(()=>[x(t.$slots,`default`)]),_:3},16)):o(`v-if`,!0)}}),Ke=l({inheritAttrs:!1,__name:`SelectItemText`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(t){let n=t,r=Z(),a=Q(),o=He(),{forwardRef:s,currentElement:c}=W(),l=N(()=>({value:o.value,disabled:o.disabled.value,textContent:c.value?.textContent??o.value?.toString()??``}));return D(()=>{c.value&&(o.onItemTextChange(c.value),a.itemTextRefCallback(c.value,o.value,o.disabled.value),r.onOptionAdd(l.value))}),A(()=>{r.onOptionRemove(l.value)}),(t,r)=>(y(),g(i(T),e({id:i(o).textId,ref:i(s)},{...n,...t.$attrs}),{default:M(()=>[x(t.$slots,`default`)]),_:3},16,[`id`]))}}),qe=l({__name:`SelectPortal`,props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){let t=e;return(e,n)=>(y(),g(i(me),m(c(t)),{default:M(()=>[x(e.$slots,`default`)]),_:3},16))}}),Je=l({__name:`SelectScrollButtonImpl`,emits:[`autoScroll`],setup(t,{emit:n}){let a=n,{getItems:o}=B(),s=Q(),c=r(null);function l(){c.value!==null&&(window.clearInterval(c.value),c.value=null)}v(()=>{o().map(e=>e.ref).find(e=>e===H())?.scrollIntoView({block:`nearest`})});function u(){c.value===null&&(c.value=window.setInterval(()=>{a(`autoScroll`)},50))}function d(){s.onItemLeave?.(),c.value===null&&(c.value=window.setInterval(()=>{a(`autoScroll`)},50))}return ee(()=>l()),(t,n)=>(y(),g(i(T),e({"aria-hidden":`true`,style:{flexShrink:0}},t.$parent?.$props,{onPointerdown:u,onPointermove:d,onPointerleave:n[0]||=()=>{l()}}),{default:M(()=>[x(t.$slots,`default`)]),_:3},16))}}),Ye=l({__name:`SelectScrollDownButton`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=Q(),n=t.position===`item-aligned`?$():void 0,{forwardRef:a,currentElement:s}=W(),c=r(!1);return v(e=>{if(t.viewport?.value&&t.isPositioned?.value){let n=t.viewport.value;function r(){let e=n.scrollHeight-n.clientHeight;c.value=Math.ceil(n.scrollTop)<e}r(),n.addEventListener(`scroll`,r),e(()=>n.removeEventListener(`scroll`,r))}}),w(s,()=>{s.value&&n?.onScrollButtonChange(s.value)}),(e,n)=>c.value?(y(),g(Je,{key:0,ref:i(a),onAutoScroll:n[0]||=()=>{let{viewport:e,selectedItem:n}=i(t);e?.value&&n?.value&&(e.value.scrollTop=e.value.scrollTop+n.value.offsetHeight)}},{default:M(()=>[x(e.$slots,`default`)]),_:3},512)):o(`v-if`,!0)}}),Xe=l({__name:`SelectScrollUpButton`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=Q(),n=t.position===`item-aligned`?$():void 0,{forwardRef:a,currentElement:s}=W(),c=r(!1);return v(e=>{if(t.viewport?.value&&t.isPositioned?.value){let n=t.viewport.value;function r(){c.value=n.scrollTop>0}r(),n.addEventListener(`scroll`,r),e(()=>n.removeEventListener(`scroll`,r))}}),w(s,()=>{s.value&&n?.onScrollButtonChange(s.value)}),(e,n)=>c.value?(y(),g(Je,{key:0,ref:i(a),onAutoScroll:n[0]||=()=>{let{viewport:e,selectedItem:n}=i(t);e?.value&&n?.value&&(e.value.scrollTop=e.value.scrollTop-n.value.offsetHeight)}},{default:M(()=>[x(e.$slots,`default`)]),_:3},512)):o(`v-if`,!0)}}),Ze=l({__name:`SelectTrigger`,props:{disabled:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(e){let t=e,n=Z(),{forwardRef:r,currentElement:o}=W(),c=N(()=>n.disabled?.value||t.disabled);n.contentId||=V(void 0,`reka-select-content`),D(()=>{n.onTriggerChange(o.value)});let{getItems:l}=B(),{search:u,handleTypeaheadSearch:d,resetTypeahead:f}=J();function p(){c.value||(n.onOpenChange(!0),f())}function m(e){p(),n.triggerPointerDownPosRef.value={x:Math.round(e.pageX),y:Math.round(e.pageY)}}return(e,t)=>(y(),g(i(ye),{"as-child":``,reference:e.reference},{default:M(()=>[a(i(T),{ref:i(r),role:`combobox`,type:e.as===`button`?`button`:void 0,"aria-controls":i(n).contentId,"aria-expanded":i(n).open.value||!1,"aria-required":i(n).required?.value,"aria-autocomplete":`none`,disabled:c.value,dir:i(n)?.dir.value,"data-state":i(n)?.open.value?`open`:`closed`,"data-disabled":c.value?``:void 0,"data-placeholder":i(De)(i(n).modelValue?.value)?``:void 0,"as-child":e.asChild,as:e.as,onClick:t[0]||=e=>{(e?.currentTarget)?.focus()},onPointerdown:t[1]||=e=>{if(e.pointerType===`touch`)return e.preventDefault();let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&(m(e),e.preventDefault())},onPointerup:t[2]||=s(e=>{e.pointerType===`touch`&&m(e)},[`prevent`]),onKeydown:t[3]||=e=>{let t=i(u)!==``;!(e.ctrlKey||e.altKey||e.metaKey)&&e.key.length===1&&t&&e.key===` `||(i(d)(e.key,i(l)()),i(Te).includes(e.key)&&(p(),e.preventDefault()))}},{default:M(()=>[x(e.$slots,`default`)]),_:3},8,[`type`,`aria-controls`,`aria-expanded`,`aria-required`,`disabled`,`dir`,`data-state`,`data-disabled`,`data-placeholder`,`as-child`,`as`])]),_:3},8,[`reference`]))}}),Qe=l({__name:`SelectValue`,props:{placeholder:{type:String,required:!1,default:``},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){let t=e,{forwardRef:r,currentElement:a}=W(),o=Z();D(()=>{o.valueElement=a});let s=N(()=>{let e=[],t=Array.from(o.optionsSet.value),n=e=>t.find(t=>Y(e,t.value,o.by));return e=Array.isArray(o.modelValue.value)?o.modelValue.value.map(e=>n(e)?.textContent??``):[n(o.modelValue.value)?.textContent??``],e.filter(Boolean)}),c=N(()=>s.value.length?s.value.join(`, `):t.placeholder);return(e,a)=>(y(),g(i(T),{ref:i(r),as:e.as,"as-child":e.asChild,style:{pointerEvents:`none`},"data-placeholder":s.value.length?void 0:t.placeholder},{default:M(()=>[x(e.$slots,`default`,{selectedLabel:s.value,modelValue:i(o).modelValue.value},()=>[_(n(c.value),1)])]),_:3},8,[`as`,`as-child`,`data-placeholder`]))}}),$e=l({__name:`SelectViewport`,props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let n=t,{nonce:o}=f(n),s=se(o),c=Q(),l=c.position===`item-aligned`?$():void 0,{forwardRef:d,currentElement:p}=W();D(()=>{c?.onViewportChange(p.value)});let m=r(0);function g(e){let t=e.currentTarget,{shouldExpandOnScrollRef:n,contentWrapper:r}=l??{};if(n?.value&&r?.value){let e=Math.abs(m.value-t.scrollTop);if(e>0){let n=window.innerHeight-20,i=Number.parseFloat(r.value.style.minHeight),a=Number.parseFloat(r.value.style.height),o=Math.max(i,a);if(o<n){let i=o+e,a=Math.min(n,i),s=i-a;r.value.style.height=`${a}px`,r.value.style.bottom===`0px`&&(t.scrollTop=s>0?s:0,r.value.style.justifyContent=`flex-end`)}}}m.value=t.scrollTop}return(t,r)=>(y(),h(u,null,[a(i(T),e({ref:i(d),"data-reka-select-viewport":``,role:`presentation`},{...t.$attrs,...n},{style:{position:`relative`,flex:1,overflow:`hidden auto`},onScroll:g}),{default:M(()=>[x(t.$slots,`default`)]),_:3},16),a(i(T),{as:`style`,nonce:i(s)},{default:M(()=>r[0]||=[_(` /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-reka-select-viewport] { scrollbar-width:none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } [data-reka-select-viewport]::-webkit-scrollbar { display: none; } `)]),_:1,__:[0]},8,[`nonce`])],64))}}),et=l({__name:`Select`,props:{open:{type:Boolean},defaultOpen:{type:Boolean},defaultValue:{},modelValue:{},by:{type:[String,Function]},dir:{},multiple:{type:Boolean},autocomplete:{},disabled:{type:Boolean},name:{},required:{type:Boolean}},emits:[`update:modelValue`,`update:open`],setup(t,{emit:n}){let r=L(t,n);return(t,n)=>(y(),g(i(Ae),e({"data-slot":`select`},i(r)),{default:M(e=>[x(t.$slots,`default`,m(c(e)))]),_:3},16))}}),tt=l({inheritAttrs:!1,__name:`SelectContent`,props:{forceMount:{type:Boolean},position:{default:`item-aligned`},bodyLock:{type:Boolean},side:{},sideOffset:{},sideFlip:{type:Boolean},align:{default:`center`},alignOffset:{},alignFlip:{type:Boolean},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},hideShiftedArrow:{type:Boolean},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},asChild:{type:Boolean},as:{},disableOutsidePointerEvents:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]}},emits:[`closeAutoFocus`,`escapeKeyDown`,`pointerDownOutside`],setup(t,{emit:n}){let r=t,o=n,s=L(b(r,`class`),o);return(n,o)=>(y(),g(i(qe),null,{default:M(()=>[a(i(Be),e({"data-slot":`select-content`,"data-align-trigger":t.position===`item-aligned`},{...n.$attrs,...i(s)},{class:i(k)(`bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 cn-menu-translucent relative z-dropdown max-h-(--reka-select-content-available-height) origin-(--reka-select-content-transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none`,t.position===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,r.class)}),{default:M(()=>[a(i(at)),a(i($e),{"data-position":t.position,class:d(i(k)(`data-[position=popper]:h-[var(--reka-select-trigger-height)] data-[position=popper]:w-full data-[position=popper]:min-w-[var(--reka-select-trigger-width)]`))},{default:M(()=>[x(n.$slots,`default`)]),_:3},8,[`data-position`,`class`]),a(i(it))]),_:3},16,[`data-align-trigger`,`class`])]),_:3}))}}),nt={class:`pointer-events-none absolute right-2 flex size-4 items-center justify-center`},rt=l({__name:`SelectItem`,props:{value:{},disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(n){let r=n,o=R(b(r,`class`));return(n,s)=>(y(),g(i(We),e({"data-slot":`select-item`},i(o),{class:i(k)(`focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*=size-])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0`,r.class)}),{default:M(()=>[t(`span`,nt,[a(i(Ge),null,{default:M(()=>[x(n.$slots,`indicator-icon`,{},()=>[a(i(ae),{class:`pointer-events-none`})])]),_:3})]),a(i(Ke),null,{default:M(()=>[x(n.$slots,`default`)]),_:3})]),_:3},16,[`class`]))}}),it=l({__name:`SelectScrollDownButton`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t,r=R(b(n,`class`));return(t,o)=>(y(),g(i(Ye),e({"data-slot":`select-scroll-down-button`},i(r),{class:i(k)(`bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*=size-])]:size-4`,n.class)}),{default:M(()=>[x(t.$slots,`default`,{},()=>[a(i(G))])]),_:3},16,[`class`]))}}),at=l({__name:`SelectScrollUpButton`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t,r=R(b(n,`class`));return(t,o)=>(y(),g(i(Xe),e({"data-slot":`select-scroll-up-button`},i(r),{class:i(k)(`bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*=size-])]:size-4`,n.class)}),{default:M(()=>[x(t.$slots,`default`,{},()=>[a(i(xe))])]),_:3},16,[`class`]))}}),ot=l({__name:`SelectTrigger`,props:{disabled:{type:Boolean},reference:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},size:{default:`default`}},setup(t){let n=t,r=R(b(n,`class`,`size`));return(o,s)=>(y(),g(i(Ze),e({"data-slot":`select-trigger`,"data-size":t.size},i(r),{class:i(k)(`border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm transition-colors select-none focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-md *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*=size-])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0`,n.class)}),{default:M(()=>[x(o.$slots,`default`),a(i(Ve),{"as-child":``},{default:M(()=>[a(i(G),{class:`text-muted-foreground size-4 pointer-events-none`})]),_:1})]),_:3},16,[`data-size`,`class`]))}}),st=l({__name:`SelectValue`,props:{placeholder:{},asChild:{type:Boolean},as:{}},setup(t){let n=t;return(t,r)=>(y(),g(i(Qe),e({"data-slot":`select-value`},n),{default:M(()=>[x(t.$slots,`default`)]),_:3},16))}});export{et as a,tt as i,ot as n,G as o,rt as r,st as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{B as e,Bt as t,Dt as n,Ft as r,G as i,H as a,I as o,K as s,O as c,U as l,W as u,at as d,j as f,n as p,yt as m}from"./button-qxGNBunr.js";import{t as h}from"./Label-DjtouWZ7.js";import{n as g,t as _}from"./CardContent-fmM_iiuR.js";import{t as v}from"./Input-BhvZ-Up7.js";var y={class:`min-h-screen flex items-center justify-center bg-background`},b={key:0,class:`text-destructive text-sm`},x=s({__name:`Setup`,setup(s){let x=f(),S=n(``),C=n(``),w=n(``),T=n(!1);async function E(){if(!S.value||!C.value){w.value=`请输入密码`;return}if(S.value!==C.value){w.value=`两次密码不一致`;return}if(S.value.length<6){w.value=`密码至少 6 位`;return}w.value=``,T.value=!0;try{await c.initializeSetup(S.value),x.push(`/admin/dashboard`)}catch(e){w.value=e.response?.data?.error?.message||`设置失败`}finally{T.value=!1}}return(n,s)=>(d(),l(`div`,y,[i(r(g),{class:`w-full max-w-sm shadow-lg`},{default:m(()=>[i(r(_),{class:`pt-6`},{default:m(()=>[s[4]||=e(`div`,{class:`text-center mb-6`},[e(`div`,{class:`w-12 h-12 bg-primary rounded-lg mx-auto mb-3 flex items-center justify-center`},[e(`svg`,{class:`w-7 h-7 text-white`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z`})])]),e(`h1`,{class:`text-xl font-semibold text-foreground`},`LLM Simple Router`),e(`p`,{class:`text-sm text-muted-foreground mt-1`},`初始设置 — 设置管理员密码`)],-1),e(`form`,{onSubmit:o(E,[`prevent`]),class:`space-y-4`},[e(`div`,null,[i(r(h),{class:`block text-sm font-medium text-foreground mb-1`},{default:m(()=>[...s[2]||=[u(`密码`,-1)]]),_:1}),i(r(v),{modelValue:S.value,"onUpdate:modelValue":s[0]||=e=>S.value=e,type:`password`,placeholder:`至少 6 位`,disabled:T.value},null,8,[`modelValue`,`disabled`])]),e(`div`,null,[i(r(h),{class:`block text-sm font-medium text-foreground mb-1`},{default:m(()=>[...s[3]||=[u(`确认密码`,-1)]]),_:1}),i(r(v),{modelValue:C.value,"onUpdate:modelValue":s[1]||=e=>C.value=e,type:`password`,placeholder:`再次输入密码`,disabled:T.value},null,8,[`modelValue`,`disabled`])]),w.value?(d(),l(`p`,b,t(w.value),1)):a(``,!0),i(r(p),{type:`submit`,class:`w-full`,disabled:T.value},{default:m(()=>[u(t(T.value?`设置中...`:`完成设置`),1)]),_:1},8,[`disabled`])],32)]),_:1})]),_:1})]))}});export{x as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,F as t,Ft as n,G as r,H as i,I as a,J as o,K as s,Mt as c,Rt as l,V as u,at as d,b as f,ct as p,i as m,p as h,r as g,yt as _,z as v}from"./button-qxGNBunr.js";import{S as y,f as b}from"./Collection-DY9-Yue9.js";import{n as x}from"./VisuallyHidden-B_NnkONE.js";import{t as S}from"./useForwardExpose-awoGXQkg.js";import{t as C}from"./VisuallyHiddenInput-cjeTgyDe.js";var[w,T]=y(`SwitchRoot`),E=s({__name:`SwitchRoot`,props:{defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},disabled:{type:Boolean,required:!1},id:{type:String,required:!1},value:{type:String,required:!1,default:`on`},trueValue:{type:null,required:!1,default:()=>!0},falseValue:{type:null,required:!1,default:()=>!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:[`update:modelValue`],setup(r,{emit:o}){let s=r,l=o,{disabled:f}=c(s),g=h(s,`modelValue`,l,{defaultValue:s.defaultValue??s.falseValue,passive:s.modelValue===void 0}),y=v(()=>g.value===s.trueValue);function b(){f.value||(g.value=y.value?s.falseValue:s.trueValue)}let{forwardRef:w,currentElement:E}=S(),D=x(E),O=v(()=>s.id&&E.value?document.querySelector(`[for="${s.id}"]`)?.innerText:void 0);return T({checked:y,toggleCheck:b,disabled:f}),(r,o)=>(d(),u(n(m),e(r.$attrs,{id:r.id,ref:n(w),role:`switch`,type:r.as===`button`?`button`:void 0,value:r.value,"aria-label":r.$attrs[`aria-label`]||O.value,"aria-checked":y.value,"aria-required":r.required,"data-state":y.value?`checked`:`unchecked`,"data-disabled":n(f)?``:void 0,"as-child":r.asChild,as:r.as,disabled:n(f),onClick:b,onKeydown:t(a(b,[`prevent`]),[`enter`])}),{default:_(()=>[p(r.$slots,`default`,{modelValue:n(g),checked:y.value}),n(D)&&r.name?(d(),u(n(C),{key:0,type:`checkbox`,name:r.name,disabled:n(f),required:r.required,value:r.value,checked:y.value},null,8,[`name`,`disabled`,`required`,`value`,`checked`])):i(`v-if`,!0)]),_:3},16,[`id`,`type`,`value`,`aria-label`,`aria-checked`,`aria-required`,`data-state`,`data-disabled`,`as-child`,`as`,`disabled`,`onKeydown`]))}}),D=s({__name:`SwitchThumb`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){let t=w();return S(),(e,r)=>(d(),u(n(m),{"data-state":n(t).checked.value?`checked`:`unchecked`,"data-disabled":n(t).disabled.value?``:void 0,"as-child":e.asChild,as:e.as},{default:_(()=>[p(e.$slots,`default`)]),_:3},8,[`data-state`,`data-disabled`,`as-child`,`as`]))}}),O=s({__name:`Switch`,props:{defaultValue:{},modelValue:{},disabled:{type:Boolean},id:{},value:{},trueValue:{},falseValue:{},asChild:{type:Boolean},as:{},name:{},required:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]},size:{default:`default`}},emits:[`update:modelValue`],setup(t,{emit:i}){let a=t,s=i,c=b(f(a,`class`,`size`),s);return(i,s)=>(d(),u(n(E),e({"data-slot":`switch`,"data-size":t.size},n(c),{class:n(g)(`data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-[state=unchecked]:bg-input/80 shrink-0 rounded-full border border-transparent focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] peer group/switch relative inline-flex items-center transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50`,a.class)}),{default:_(e=>[r(n(D),{"data-slot":`switch-thumb`,class:`bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-[state=checked]:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-[state=checked]:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-[state=unchecked]:translate-x-0 group-data-[size=sm]/switch:data-[state=unchecked]:translate-x-0 pointer-events-none block ring-0 transition-transform`},{default:_(()=>[p(i.$slots,`thumb`,l(o(e)))]),_:2},1024)]),_:3},16,[`data-size`,`class`]))}});export{O as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{B as e,Dt as t,Ft as n,G as r,K as i,Lt as a,Mt as o,U as s,V as c,at as l,ct as u,et as d,i as f,nt as p,p as m,r as h,rt as g,yt as _,z as v}from"./button-qxGNBunr.js";import{S as y,h as b,t as x,u as S,x as C}from"./Collection-DY9-Yue9.js";var w=`rovingFocusGroup.onEntryFocus`,T={bubbles:!1,cancelable:!0},E={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function D(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function O(e,t,n){let r=D(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return E[r]}function k(e,t=!1){let n=C();for(let r of e)if(r===n||(r.focus({preventScroll:t}),C()!==n))return}function A(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var[j,M]=y(`RovingFocusGroup`),N=i({__name:`RovingFocusGroup`,props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`entryFocus`,`update:currentTabStopId`],setup(e,{expose:i,emit:a}){let s=e,d=a,{loop:p,orientation:h,dir:g}=o(s),v=b(g),y=m(s,`currentTabStopId`,d,{defaultValue:s.defaultCurrentTabStopId,passive:s.currentTabStopId===void 0}),S=t(!1),C=t(!1),E=t(0),{getItems:D,CollectionSlot:O}=x({isProvider:!0});function A(e){let t=!C.value;if(e.currentTarget&&e.target===e.currentTarget&&t&&!S.value){let t=new CustomEvent(w,T);if(e.currentTarget.dispatchEvent(t),d(`entryFocus`,t),!t.defaultPrevented){let e=D().map(e=>e.ref).filter(e=>e.dataset.disabled!==``);k([e.find(e=>e.getAttribute(`data-active`)===``),e.find(e=>e.getAttribute(`data-highlighted`)===``),e.find(e=>e.id===y.value),...e].filter(Boolean),s.preventScrollOnEntryFocus)}}C.value=!1}function j(){setTimeout(()=>{C.value=!1},1)}return i({getItems:D}),M({loop:p,dir:v,orientation:h,currentTabStopId:y,onItemFocus:e=>{y.value=e},onItemShiftTab:()=>{S.value=!0},onFocusableItemAdd:()=>{E.value++},onFocusableItemRemove:()=>{E.value--}}),(e,t)=>(l(),c(n(O),null,{default:_(()=>[r(n(f),{tabindex:S.value||E.value===0?-1:0,"data-orientation":n(h),as:e.as,"as-child":e.asChild,dir:n(v),style:{outline:`none`},onMousedown:t[0]||=e=>C.value=!0,onMouseup:j,onFocus:A,onBlur:t[1]||=e=>S.value=!1},{default:_(()=>[u(e.$slots,`default`)]),_:3},8,[`tabindex`,`data-orientation`,`as`,`as-child`,`dir`])]),_:3}))}}),P=i({__name:`RovingFocusItem`,props:{tabStopId:{type:String,required:!1},focusable:{type:Boolean,required:!1,default:!0},active:{type:Boolean,required:!1},allowShiftKey:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){let t=e,i=j(),a=S(),o=v(()=>t.tabStopId||a),s=v(()=>i.currentTabStopId.value===o.value),{getItems:m,CollectionItem:h}=x();p(()=>{t.focusable&&i.onFocusableItemAdd()}),g(()=>{t.focusable&&i.onFocusableItemRemove()});function y(e){if(e.key===`Tab`&&e.shiftKey){i.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let n=O(e,i.orientation.value,i.dir.value);if(n!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||!t.allowShiftKey&&e.shiftKey)return;e.preventDefault();let r=[...m().map(e=>e.ref).filter(e=>e.dataset.disabled!==``)];if(n===`last`)r.reverse();else if(n===`prev`||n===`next`){n===`prev`&&r.reverse();let t=r.indexOf(e.currentTarget);r=i.loop.value?A(r,t+1):r.slice(t+1)}d(()=>k(r))}}return(e,t)=>(l(),c(n(h),null,{default:_(()=>[r(n(f),{tabindex:s.value?0:-1,"data-orientation":n(i).orientation.value,"data-active":e.active?``:void 0,"data-disabled":e.focusable?void 0:``,as:e.as,"as-child":e.asChild,onMousedown:t[0]||=t=>{e.focusable?n(i).onItemFocus(o.value):t.preventDefault()},onFocus:t[1]||=e=>n(i).onItemFocus(o.value),onKeydown:y},{default:_(()=>[u(e.$slots,`default`)]),_:3},8,[`tabindex`,`data-orientation`,`data-active`,`data-disabled`,`as`,`as-child`])]),_:3}))}}),F={"data-slot":`table-container`,class:`relative w-full overflow-x-auto`},I=i({__name:`Table`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(t){let r=t;return(t,i)=>(l(),s(`div`,F,[e(`table`,{"data-slot":`table`,class:a(n(h)(`w-full caption-bottom text-sm`,r.class))},[u(t.$slots,`default`)],2)]))}}),L=i({__name:`TableBody`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,r)=>(l(),s(`tbody`,{"data-slot":`table-body`,class:a(n(h)(`[&_tr:last-child]:border-0`,t.class))},[u(e.$slots,`default`)],2))}}),R=i({__name:`TableCell`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,r)=>(l(),s(`td`,{"data-slot":`table-cell`,class:a(n(h)(`p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0`,t.class))},[u(e.$slots,`default`)],2))}}),z=i({__name:`TableRow`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,r)=>(l(),s(`tr`,{"data-slot":`table-row`,class:a(n(h)(`hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors has-aria-expanded:bg-muted/50`,t.class))},[u(e.$slots,`default`)],2))}}),B=i({__name:`TableHead`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,r)=>(l(),s(`th`,{"data-slot":`table-head`,class:a(n(h)(`text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0`,t.class))},[u(e.$slots,`default`)],2))}}),V=i({__name:`TableHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,r)=>(l(),s(`thead`,{"data-slot":`table-header`,class:a(n(h)(`[&_tr]:border-b`,t.class))},[u(e.$slots,`default`)],2))}});export{L as a,N as c,R as i,B as n,I as o,z as r,P as s,V as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,Dt as t,F as n,Ft as r,G as i,H as a,I as o,J as s,K as c,Mt as l,Rt as u,V as d,at as f,b as p,ct as m,i as h,kt as g,nt as _,p as v,r as y,tt as b,yt as x,z as S,zt as C}from"./button-qxGNBunr.js";import{S as w,c as T,f as E,h as D,p as O,u as k}from"./Collection-DY9-Yue9.js";import{t as A}from"./useForwardExpose-awoGXQkg.js";import{c as j,s as M}from"./TableHeader-BKE_yVML.js";var[N,P]=w(`TabsRoot`),F=c({__name:`TabsRoot`,props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:`horizontal`},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:`automatic`},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`update:modelValue`],setup(e,{emit:n}){let i=e,a=n,{orientation:o,unmountOnHide:s,dir:c}=l(i),u=D(c);A();let p=v(i,`modelValue`,a,{defaultValue:i.defaultValue,passive:i.modelValue===void 0}),_=t(),y=g(new Set);return P({modelValue:p,changeModelValue:e=>{p.value=e},orientation:o,dir:u,unmountOnHide:s,activationMode:i.activationMode,baseId:k(void 0,`reka-tabs`),tabsList:_,contentIds:y,registerContent:e=>{y.value=new Set([...y.value,e])},unregisterContent:e=>{let t=new Set(y.value);t.delete(e),y.value=t}}),(e,t)=>(f(),d(r(h),{dir:r(u),"data-orientation":r(o),"as-child":e.asChild,as:e.as},{default:x(()=>[m(e.$slots,`default`,{modelValue:r(p)})]),_:3},8,[`dir`,`data-orientation`,`as-child`,`as`]))}});function I(e,t){return`${e}-trigger-${t}`}function L(e,t){return`${e}-content-${t}`}var R=c({__name:`TabsContent`,props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let n=e,{forwardRef:o}=A(),s=N(),c=S(()=>I(s.baseId,n.value)),l=S(()=>L(s.baseId,n.value)),u=S(()=>n.value===s.modelValue.value),p=t(u.value);return _(()=>{s.registerContent(n.value),requestAnimationFrame(()=>{p.value=!1})}),b(()=>{s.unregisterContent(n.value)}),(e,t)=>(f(),d(r(T),{present:e.forceMount||u.value,"force-mount":``},{default:x(({present:t})=>[i(r(h),{id:l.value,ref:r(o),"as-child":e.asChild,as:e.as,role:`tabpanel`,"data-state":u.value?`active`:`inactive`,"data-orientation":r(s).orientation.value,"aria-labelledby":c.value,hidden:!t,tabindex:`0`,style:C({animationDuration:p.value?`0s`:void 0})},{default:x(()=>[!r(s).unmountOnHide.value||t?m(e.$slots,`default`,{key:0}):a(`v-if`,!0)]),_:2},1032,[`id`,`as-child`,`as`,`data-state`,`data-orientation`,`aria-labelledby`,`hidden`,`style`])]),_:3},8,[`present`]))}}),z=c({__name:`TabsList`,props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let{loop:t}=l(e),{forwardRef:n,currentElement:a}=A(),o=N();return o.tabsList=a,(e,a)=>(f(),d(r(j),{"as-child":``,orientation:r(o).orientation.value,dir:r(o).dir.value,loop:r(t)},{default:x(()=>[i(r(h),{ref:r(n),role:`tablist`,"as-child":e.asChild,as:e.as,"aria-orientation":r(o).orientation.value},{default:x(()=>[m(e.$slots,`default`)]),_:3},8,[`as-child`,`as`,`aria-orientation`])]),_:3},8,[`orientation`,`dir`,`loop`]))}}),B=c({__name:`TabsTrigger`,props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(e){let t=e,{forwardRef:a}=A(),s=N(),c=S(()=>I(s.baseId,t.value)),l=S(()=>s.contentIds.value.has(t.value)?L(s.baseId,t.value):void 0),u=S(()=>t.value===s.modelValue.value);return(e,t)=>(f(),d(r(M),{"as-child":``,focusable:!e.disabled,active:u.value},{default:x(()=>[i(r(h),{id:c.value,ref:r(a),role:`tab`,type:e.as===`button`?`button`:void 0,as:e.as,"as-child":e.asChild,"aria-selected":u.value?`true`:`false`,"aria-controls":l.value,"data-state":u.value?`active`:`inactive`,disabled:e.disabled,"data-disabled":e.disabled?``:void 0,"data-orientation":r(s).orientation.value,onMousedown:t[0]||=o(t=>{!e.disabled&&t.ctrlKey===!1?r(s).changeModelValue(e.value):t.preventDefault()},[`left`]),onKeydown:t[1]||=n(t=>r(s).changeModelValue(e.value),[`enter`,`space`]),onFocus:t[2]||=()=>{let t=r(s).activationMode!==`manual`;!u.value&&!e.disabled&&t&&r(s).changeModelValue(e.value)}},{default:x(()=>[m(e.$slots,`default`)]),_:3},8,[`id`,`type`,`as`,`as-child`,`aria-selected`,`aria-controls`,`data-state`,`disabled`,`data-disabled`,`data-orientation`])]),_:3},8,[`focusable`,`active`]))}}),V=c({__name:`Tabs`,props:{defaultValue:{},orientation:{},dir:{},activationMode:{},modelValue:{},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(t,{emit:n}){let i=t,a=n,o=E(p(i,`class`),a);return(t,n)=>(f(),d(r(F),e({"data-slot":`tabs`,"data-orientation":r(o).orientation||`horizontal`},r(o),{class:r(y)(`gap-2 group/tabs flex data-[orientation=horizontal]:flex-col`,i.class)}),{default:x(e=>[m(t.$slots,`default`,u(s(e)))]),_:3},16,[`data-orientation`,`class`]))}}),H=c({__name:`TabsContent`,props:{value:{},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t,i=p(n,`class`);return(t,a)=>(f(),d(r(R),e({"data-slot":`tabs-content`,class:r(y)(`text-sm flex-1 outline-none`,n.class)},r(i)),{default:x(()=>[m(t.$slots,`default`)]),_:3},16,[`class`]))}}),U=c({__name:`TabsList`,props:{loop:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},variant:{default:`default`}},setup(t){let n=t,i=p(n,`class`,`variant`);return(a,o)=>(f(),d(r(z),e({"data-slot":`tabs-list`,"data-variant":t.variant},r(i),{class:r(y)(`rounded-lg p-[3px] group-data-[orientation=horizontal]/tabs:h-8 data-[variant=line]:rounded-none group/tabs-list inline-flex w-fit items-center justify-center text-muted-foreground group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col`,t.variant===`default`&&`bg-muted`,t.variant===`line`&&`gap-1 bg-transparent`,n.class)}),{default:x(()=>[m(a.$slots,`default`)]),_:3},16,[`data-variant`,`class`]))}}),W=c({__name:`TabsTrigger`,props:{value:{},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t,i=O(p(n,`class`));return(t,a)=>(f(),d(r(B),e({"data-slot":`tabs-trigger`,class:r(y)(`gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg:not([class*=size-])]:size-4 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent`,`data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground`,`after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100`,n.class)},r(i)),{default:x(()=>[m(t.$slots,`default`)]),_:3},16,[`class`]))}});export{V as i,U as n,H as r,W as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,Bt as t,C as n,Dt as r,Ft as i,G as a,I as o,J as s,K as c,Mt as l,Rt as u,T as d,U as f,V as p,W as m,_t as h,at as g,b as _,ct as v,dt as y,gt as b,h as x,i as S,nt as C,p as w,r as T,u as E,ut as ee,x as te,yt as D,z as O,zt as k}from"./button-qxGNBunr.js";import{S as A,_ as ne,c as re,f as j,n as ie,o as M,p as N,u as P}from"./Collection-DY9-Yue9.js";import{t as F}from"./VisuallyHidden-B_NnkONE.js";import{t as I}from"./useForwardExpose-awoGXQkg.js";import{i as L,n as R,r as z,t as B}from"./PopperContent-CHNw_qb6.js";function V(e,t){let i=te(!1,300);n(()=>{i.value=!1});let a=r(null),o=x();function s(){a.value=null,i.value=!1}function c(e,t){if(!t)return;let n=e.currentTarget,r={x:e.clientX,y:e.clientY},o=U(r,H(r,n.getBoundingClientRect()),1),s=W(t.getBoundingClientRect());a.value=K([...o,...s]),i.value=!0}return h(n=>{if(e.value&&t.value){let r=e=>c(e,t.value),i=t=>c(t,e.value);e.value.addEventListener(`pointerleave`,r),t.value.addEventListener(`pointerleave`,i),n(()=>{e.value?.removeEventListener(`pointerleave`,r),t.value?.removeEventListener(`pointerleave`,i)})}}),h(n=>{if(a.value){let r=n=>{if(!a.value||!(n.target instanceof Element))return;let r=n.target,i={x:n.clientX,y:n.clientY},c=e.value?.contains(r)||t.value?.contains(r),l=!G(i,a.value),u=!!r.closest(`[data-grace-area-trigger]`);c?s():(l||u)&&(s(),o.trigger())};e.value?.ownerDocument.addEventListener(`pointermove`,r),n(()=>e.value?.ownerDocument.removeEventListener(`pointermove`,r))}}),{isPointerInTransit:i,onPointerExit:o.on}}function H(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}function U(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function W(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}function G(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e].x,s=t[e].y,c=t[a].x,l=t[a].y;s>r!=l>r&&n<(c-o)*(r-s)/(l-s)+o&&(i=!i)}return i}function K(e){let t=e.slice();return t.sort((e,t)=>e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:+(e.y>t.y)),q(t)}function q(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n<e.length;n++){let r=e[n];for(;t.length>=2;){let e=t.at(-1),n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n.at(-1),t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var ae={key:0,d:`M0 0L6 6L12 0`},J={key:1,d:`M0 0L4.58579 4.58579C5.36683 5.36683 6.63316 5.36684 7.41421 4.58579L12 0`},oe=c({__name:`Arrow`,props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`svg`}},setup(t){let n=t;return I(),(t,r)=>(g(),p(i(S),e(n,{width:t.width,height:t.height,viewBox:t.asChild?void 0:`0 0 12 6`,preserveAspectRatio:t.asChild?void 0:`none`}),{default:D(()=>[v(t.$slots,`default`,{},()=>[t.rounded?(g(),f(`path`,J)):(g(),f(`path`,ae))])]),_:3},16,[`width`,`height`,`viewBox`,`preserveAspectRatio`]))}}),se={top:`bottom`,right:`left`,bottom:`top`,left:`right`},ce=c({inheritAttrs:!1,__name:`PopperArrow`,props:{width:{type:Number,required:!1},height:{type:Number,required:!1},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`svg`}},setup(t){let{forwardRef:n}=I(),r=R(),o=O(()=>se[r.placedSide.value]);return(t,s)=>(g(),f(`span`,{ref:e=>{i(r).onArrowChange(e??void 0)},style:k({position:`absolute`,left:i(r).arrowX?.value?`${i(r).arrowX?.value}px`:void 0,top:i(r).arrowY?.value?`${i(r).arrowY?.value}px`:void 0,[o.value]:0,transformOrigin:{top:``,right:`0 0`,bottom:`center 0`,left:`100% 0`}[i(r).placedSide.value],transform:{top:`translateY(100%)`,right:`translateY(50%) rotate(90deg) translateX(-50%)`,bottom:`rotate(180deg)`,left:`translateY(50%) rotate(-90deg) translateX(50%)`}[i(r).placedSide.value],visibility:i(r).shouldHideArrow.value?`hidden`:void 0})},[a(oe,e(t.$attrs,{ref:i(n),style:{display:`block`},as:t.as,"as-child":t.asChild,rounded:t.rounded,width:t.width,height:t.height}),{default:D(()=>[v(t.$slots,`default`)]),_:3},16,[`as`,`as-child`,`rounded`,`width`,`height`])],4))}}),le=c({__name:`TooltipArrow`,props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`svg`}},setup(e){let t=e;return I(),(e,n)=>(g(),p(i(ce),u(s(t)),{default:D(()=>[v(e.$slots,`default`)]),_:3},16))}}),[Y,ue]=A(`TooltipProvider`),de=c({inheritAttrs:!1,__name:`TooltipProvider`,props:{delayDuration:{type:Number,required:!1,default:700},skipDelayDuration:{type:Number,required:!1,default:300},disableHoverableContent:{type:Boolean,required:!1,default:!1},disableClosingTrigger:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},ignoreNonKeyboardFocus:{type:Boolean,required:!1,default:!1},content:{type:Object,required:!1}},setup(e){let{delayDuration:t,skipDelayDuration:n,disableHoverableContent:i,disableClosingTrigger:a,ignoreNonKeyboardFocus:o,disabled:s,content:c}=l(e);I();let u=r(!0),f=r(!1),{start:p,stop:m}=d(()=>{u.value=!0},n,{immediate:!1});return ue({isOpenDelayed:u,delayDuration:t,onOpen(){m(),u.value=!1},onClose(){p()},isPointerInTransitRef:f,disableHoverableContent:i,disableClosingTrigger:a,disabled:s,ignoreNonKeyboardFocus:o,content:c}),(e,t)=>v(e.$slots,`default`)}}),X=`tooltip.open`,[Z,fe]=A(`TooltipRoot`),pe=c({__name:`TooltipRoot`,props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},delayDuration:{type:Number,required:!1,default:void 0},disableHoverableContent:{type:Boolean,required:!1,default:void 0},disableClosingTrigger:{type:Boolean,required:!1,default:void 0},disabled:{type:Boolean,required:!1,default:void 0},ignoreNonKeyboardFocus:{type:Boolean,required:!1,default:void 0}},emits:[`update:open`],setup(e,{emit:t}){let n=e,a=t;I();let o=Y(),s=O(()=>n.disableHoverableContent??o.disableHoverableContent.value),c=O(()=>n.disableClosingTrigger??o.disableClosingTrigger.value),l=O(()=>n.disabled??o.disabled.value),u=O(()=>n.delayDuration??o.delayDuration.value),f=O(()=>n.ignoreNonKeyboardFocus??o.ignoreNonKeyboardFocus.value),m=w(n,`open`,a,{defaultValue:n.defaultOpen,passive:n.open===void 0});b(m,e=>{o.onClose&&(e?(o.onOpen(),document.dispatchEvent(new CustomEvent(X))):o.onClose())});let h=r(!1),_=r(),y=O(()=>m.value?h.value?`delayed-open`:`instant-open`:`closed`),{start:x,stop:S}=d(()=>{h.value=!0,m.value=!0},u,{immediate:!1});function C(){S(),h.value=!1,m.value=!0}function T(){S(),m.value=!1}function E(){x()}return fe({contentId:``,open:m,stateAttribute:y,trigger:_,onTriggerChange(e){_.value=e},onTriggerEnter(){o.isOpenDelayed.value?E():C()},onTriggerLeave(){s.value?T():S()},onOpen:C,onClose:T,disableHoverableContent:s,disableClosingTrigger:c,disabled:l,ignoreNonKeyboardFocus:f}),(e,t)=>(g(),p(i(L),null,{default:D(()=>[v(e.$slots,`default`,{open:i(m)})]),_:3}))}}),Q=c({__name:`TooltipContentImpl`,props:{ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1,default:void 0},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1,default:void 0},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1,default:void 0},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},emits:[`escapeKeyDown`,`pointerDownOutside`],setup(n,{emit:r}){let s=n,c=r,l=Z(),u=Y(),{forwardRef:d,currentElement:f}=I(),h=O(()=>s.ariaLabel||f.value?.textContent),_=O(()=>{let{ariaLabel:e,...t}=s;return ne(t,u.content.value??{},{side:`top`,sideOffset:0,align:`center`,avoidCollisions:!0,collisionBoundary:[],collisionPadding:0,arrowPadding:0,sticky:`partial`,hideWhenDetached:!1})});return C(()=>{E(window,`scroll`,e=>{e.target?.contains(l.trigger.value)&&l.onClose()},{capture:!0}),E(window,X,l.onClose)}),(n,r)=>(g(),p(i(M),{"as-child":``,"disable-outside-pointer-events":!1,onEscapeKeyDown:r[0]||=e=>c(`escapeKeyDown`,e),onPointerDownOutside:r[1]||=e=>{i(l).disableClosingTrigger.value&&i(l).trigger.value?.contains(e.target)&&e.preventDefault(),c(`pointerDownOutside`,e)},onFocusOutside:r[2]||=o(()=>{},[`prevent`]),onDismiss:r[3]||=e=>i(l).onClose()},{default:D(()=>[a(i(B),e({ref:i(d),"data-state":i(l).stateAttribute.value},{...n.$attrs,..._.value},{style:{"--reka-tooltip-content-transform-origin":`var(--reka-popper-transform-origin)`,"--reka-tooltip-content-available-width":`var(--reka-popper-available-width)`,"--reka-tooltip-content-available-height":`var(--reka-popper-available-height)`,"--reka-tooltip-trigger-width":`var(--reka-popper-anchor-width)`,"--reka-tooltip-trigger-height":`var(--reka-popper-anchor-height)`}}),{default:D(()=>[v(n.$slots,`default`),a(i(F),{id:i(l).contentId,role:`tooltip`},{default:D(()=>[m(t(h.value),1)]),_:1},8,[`id`])]),_:3},16,[`data-state`])]),_:3}))}}),me=c({__name:`TooltipContentHoverable`,props:{ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},setup(t){let n=N(t),{forwardRef:r,currentElement:a}=I(),{trigger:o,onClose:s}=Z(),c=Y(),{isPointerInTransit:l,onPointerExit:u}=V(o,a);return c.isPointerInTransitRef=l,u(()=>{s()}),(t,a)=>(g(),p(Q,e({ref:i(r)},i(n)),{default:D(()=>[v(t.$slots,`default`)]),_:3},16))}}),he=c({__name:`TooltipContent`,props:{forceMount:{type:Boolean,required:!1},ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},emits:[`escapeKeyDown`,`pointerDownOutside`],setup(t,{emit:n}){let r=t,a=n,o=Z(),s=j(r,a),{forwardRef:c}=I();return(t,n)=>(g(),p(i(re),{present:t.forceMount||i(o).open.value},{default:D(()=>[(g(),p(ee(i(o).disableHoverableContent.value?Q:me),e({ref:i(c)},i(s)),{default:D(()=>[v(t.$slots,`default`)]),_:3},16))]),_:3},8,[`present`]))}}),ge=c({__name:`TooltipPortal`,props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){let t=e;return(e,n)=>(g(),p(i(ie),u(s(t)),{default:D(()=>[v(e.$slots,`default`)]),_:3},16))}}),$=c({__name:`TooltipTrigger`,props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(t){let n=t,o=Z(),s=Y();o.contentId||=P(void 0,`reka-tooltip-content`);let{forwardRef:c,currentElement:l}=I(),u=r(!1),d=r(!1),f=O(()=>o.disabled.value?{}:{click:T,focus:x,pointermove:_,pointerleave:b,pointerdown:h,blur:w});C(()=>{o.onTriggerChange(l.value)});function m(){setTimeout(()=>{u.value=!1},1)}function h(){o.open&&!o.disableClosingTrigger.value&&o.onClose(),u.value=!0,document.addEventListener(`pointerup`,m,{once:!0})}function _(e){e.pointerType!==`touch`&&!d.value&&!s.isPointerInTransitRef.value&&(o.onTriggerEnter(),d.value=!0)}function b(){o.onTriggerLeave(),d.value=!1}function x(e){u.value||o.ignoreNonKeyboardFocus.value&&!e.target.matches?.(`:focus-visible`)||o.onOpen()}function w(){o.onClose()}function T(){o.disableClosingTrigger.value||o.onClose()}return(t,r)=>(g(),p(i(z),{"as-child":``,reference:t.reference},{default:D(()=>[a(i(S),e({ref:i(c),"aria-describedby":i(o).open.value?i(o).contentId:void 0,"data-state":i(o).stateAttribute.value,as:t.as,"as-child":n.asChild,"data-grace-area-trigger":``},y(f.value)),{default:D(()=>[v(t.$slots,`default`)]),_:3},16,[`aria-describedby`,`data-state`,`as`,`as-child`])]),_:3},8,[`reference`]))}}),_e=c({__name:`Tooltip`,props:{defaultOpen:{type:Boolean},open:{type:Boolean},delayDuration:{},disableHoverableContent:{type:Boolean},disableClosingTrigger:{type:Boolean},disabled:{type:Boolean},ignoreNonKeyboardFocus:{type:Boolean}},emits:[`update:open`],setup(t,{emit:n}){let r=j(t,n);return(t,n)=>(g(),p(i(pe),e({"data-slot":`tooltip`},i(r)),{default:D(e=>[v(t.$slots,`default`,u(s(e)))]),_:3},16))}}),ve=c({inheritAttrs:!1,__name:`TooltipContent`,props:{forceMount:{type:Boolean},ariaLabel:{},asChild:{type:Boolean},as:{},side:{},sideOffset:{default:0},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`escapeKeyDown`,`pointerDownOutside`],setup(t,{emit:n}){let r=t,o=n,s=j(_(r,`class`),o);return(t,n)=>(g(),p(i(ge),null,{default:D(()=>[a(i(he),e({"data-slot":`tooltip-content`},{...i(s),...t.$attrs},{class:i(T)(`data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-dropdown **:data-[slot=kbd]:rounded-sm bg-foreground text-background z-dropdown w-fit max-w-xs origin-(--reka-tooltip-content-transform-origin)`,r.class)}),{default:D(()=>[v(t.$slots,`default`),a(i(le),{class:`size-2.5 rotate-45 rounded-[2px] bg-foreground fill-foreground z-dropdown translate-y-[calc(-50%_-_2px)]`})]),_:3},16,[`class`])]),_:3}))}}),ye=c({__name:`TooltipProvider`,props:{delayDuration:{default:0},skipDelayDuration:{},disableHoverableContent:{type:Boolean},disableClosingTrigger:{type:Boolean},disabled:{type:Boolean},ignoreNonKeyboardFocus:{type:Boolean},content:{}},setup(e){let t=e;return(e,n)=>(g(),p(i(de),u(s(t)),{default:D(()=>[v(e.$slots,`default`)]),_:3},16))}}),be=c({__name:`TooltipTrigger`,props:{reference:{},asChild:{type:Boolean},as:{}},setup(t){let n=t;return(t,r)=>(g(),p(i($),e({"data-slot":`tooltip-trigger`},n),{default:D(()=>[v(t.$slots,`default`)]),_:3},16))}});export{_e as i,ye as n,ve as r,be as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ft as e,K as t,Nt as n,V as r,at as i,ct as a,i as o,l as s,yt as c,z as l}from"./button-qxGNBunr.js";function u(e){return l(()=>n(e)?!!s(e)?.closest(`form`):!0)}var d=t({__name:`VisuallyHidden`,props:{feature:{type:String,required:!1,default:`focusable`},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(t){return(t,n)=>(i(),r(e(o),{as:t.as,"as-child":t.asChild,"aria-hidden":t.feature===`focusable`?`true`:void 0,"data-hidden":t.feature===`fully-hidden`?``:void 0,tabindex:t.feature===`fully-hidden`?`-1`:void 0,style:{position:`absolute`,border:0,width:`1px`,height:`1px`,padding:0,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`,wordWrap:`normal`,top:`-1px`,left:`-1px`}},{default:c(()=>[a(t.$slots,`default`)]),_:3},8,[`as`,`as-child`,`aria-hidden`,`data-hidden`,`tabindex`]))}});export{u as n,d as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,B as t,Ft as n,G as r,H as i,J as a,K as o,Lt as s,Rt as c,U as l,V as u,W as d,at as f,b as p,ct as m,n as h,r as g,yt as _}from"./button-qxGNBunr.js";import{t as v}from"./x-B0G-wIAB.js";import{f as y,n as b,p as x}from"./Collection-DY9-Yue9.js";import{a as S,i as C,n as w,o as T,r as E,t as D}from"./DialogTitle-BeMGJzYO.js";var O=o({__name:`DialogPortal`,props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){let t=e;return(e,r)=>(f(),u(n(b),c(a(t)),{default:_(()=>[m(e.$slots,`default`)]),_:3},16))}}),k=o({__name:`Dialog`,props:{open:{type:Boolean},defaultOpen:{type:Boolean},modal:{type:Boolean}},emits:[`update:open`],setup(t,{emit:r}){let i=y(t,r);return(t,r)=>(f(),u(n(T),e({"data-slot":`dialog`},n(i)),{default:_(e=>[m(t.$slots,`default`,c(a(e)))]),_:3},16))}}),A=o({__name:`DialogOverlay`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let r=t,i=p(r,`class`);return(t,a)=>(f(),u(n(w),e({"data-slot":`dialog-overlay`},n(i),{class:n(g)(`data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-overlay-light duration-fast supports-backdrop-filter:backdrop-blur-xs fixed inset-0 isolate z-modal`,r.class)}),{default:_(()=>[m(t.$slots,`default`)]),_:3},16,[`class`]))}}),j=o({inheritAttrs:!1,__name:`DialogContent`,props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},showCloseButton:{type:Boolean,default:!0}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`],setup(a,{emit:o}){let s=a,c=o,l=y(p(s,`class`),c);return(o,c)=>(f(),u(n(O),null,{default:_(()=>[r(A),r(n(C),e({"data-slot":`dialog-content`},{...o.$attrs,...n(l)},{class:n(g)(`bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] max-h-[90vh] overflow-y-auto gap-4 rounded-xl p-4 text-sm ring-1 duration-fast sm:max-w-sm fixed top-1/2 left-1/2 z-modal w-full -translate-x-1/2 -translate-y-1/2 outline-none`,s.class)}),{default:_(()=>[m(o.$slots,`default`),a.showCloseButton?(f(),u(n(S),{key:0,"data-slot":`dialog-close`,"as-child":``},{default:_(()=>[r(n(h),{variant:`ghost`,class:`absolute top-2 right-2`,size:`icon-sm`},{default:_(()=>[r(n(v)),c[0]||=t(`span`,{class:`sr-only`},`Close`,-1)]),_:1})]),_:1})):i(``,!0)]),_:3},16,[`class`])]),_:3}))}}),M=o({__name:`DialogDescription`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let r=t,i=x(p(r,`class`));return(t,a)=>(f(),u(n(E),e({"data-slot":`dialog-description`},n(i),{class:n(g)(`text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3`,r.class)}),{default:_(()=>[m(t.$slots,`default`)]),_:3},16,[`class`]))}}),N=o({__name:`DialogFooter`,props:{class:{type:[Boolean,null,String,Object,Array]},showCloseButton:{type:Boolean,default:!1}},setup(e){let t=e;return(a,o)=>(f(),l(`div`,{"data-slot":`dialog-footer`,class:s(n(g)(`bg-muted/50 -mx-4 -mb-4 rounded-b-xl border-t p-4 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,t.class))},[m(a.$slots,`default`),e.showCloseButton?(f(),u(n(S),{key:0,"as-child":``},{default:_(()=>[r(n(h),{variant:`outline`},{default:_(()=>[...o[0]||=[d(` Close `,-1)]]),_:1})]),_:1})):i(``,!0)],2))}}),P=o({__name:`DialogHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,r)=>(f(),l(`div`,{"data-slot":`dialog-header`,class:s(n(g)(`gap-2 flex flex-col`,t.class))},[m(e.$slots,`default`)],2))}}),F=o({inheritAttrs:!1,__name:`DialogScrollContent`,props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`],setup(i,{emit:a}){let o=i,s=a,c=y(p(o,`class`),s);return(i,a)=>(f(),u(n(O),null,{default:_(()=>[r(n(w),{class:`fixed inset-0 z-modal grid place-items-center overflow-y-auto bg-overlay data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`},{default:_(()=>[r(n(C),e({class:n(g)(`relative z-modal grid w-full max-w-lg my-8 gap-4 border border-border bg-background p-6 shadow-elevated duration-normal sm:rounded-lg md:w-full overflow-y-auto`,o.class)},{...i.$attrs,...n(c)},{onPointerDownOutside:a[0]||=e=>{let t=e.detail.originalEvent,n=t.target;(t.offsetX>n.clientWidth||t.offsetY>n.clientHeight)&&e.preventDefault()}}),{default:_(()=>[m(i.$slots,`default`),r(n(S),{class:`absolute top-4 right-4 p-0.5 transition-colors rounded-md hover:bg-secondary`},{default:_(()=>[r(n(v),{class:`w-4 h-4`}),a[1]||=t(`span`,{class:`sr-only`},`Close`,-1)]),_:1})]),_:3},16,[`class`])]),_:3})]),_:3}))}}),I=o({__name:`DialogTitle`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let r=t,i=x(p(r,`class`));return(t,a)=>(f(),u(n(D),e({"data-slot":`dialog-title`},n(i),{class:n(g)(`text-base leading-none font-medium cn-font-heading`,r.class)}),{default:_(()=>[m(t.$slots,`default`)]),_:3},16,[`class`]))}});export{M as a,N as i,F as n,j as o,P as r,k as s,I as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,A as t,B as n,Bt as r,Dt as i,Ft as a,G as o,K as s,L as c,Lt as l,N as u,O as d,U as f,V as p,W as m,at as h,gt as g,j as _,k as v,lt as y,n as b,r as x,st as S,ut as C,yt as w}from"./button-qxGNBunr.js";import{t as T}from"./createLucideIcon-jHUFhqKn.js";import{t as E}from"./x-B0G-wIAB.js";import{t as D}from"./badge-DIO8W_W9.js";import{t as O}from"./lib-DjpgwSRA.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var k=T(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),A=T(`arrow-left-right`,[[`path`,{d:`M8 3 4 7l4 4`,key:`9rb6wj`}],[`path`,{d:`M4 7h16`,key:`6tx8e3`}],[`path`,{d:`m16 21 4-4-4-4`,key:`siv7j2`}],[`path`,{d:`M20 17H4`,key:`h6l3hr`}]]),j=T(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),M=T(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),N=T(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),P=T(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),F=T(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),I=T(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),L=T(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),R=T(`octagon-x`,[[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z`,key:`2d38gg`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),z=T(`refresh-ccw`,[[`path`,{d:`M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`14sxne`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16`,key:`1hlbsb`}],[`path`,{d:`M16 16h5v5`,key:`ccwih5`}]]),B=T(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),V=T(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),H=T(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),U={class:`w-56 bg-sidebar text-sidebar-foreground flex-shrink-0 flex flex-col`},W={class:`p-4 border-b border-sidebar-border`},G={class:`flex items-center gap-2`},K={class:`flex-1 p-2 space-y-1`},q={class:`p-3 border-t border-sidebar-border`},J=s({__name:`Sidebar`,setup(e){let i=[{path:`/`,label:`仪表盘`,icon:F},{path:`/providers`,label:`供应商`,icon:B},{path:`/mappings`,label:`模型映射`,icon:A},{path:`/router-keys`,label:`API 密钥`,icon:P},{path:`/retry-rules`,label:`重试规则`,icon:z},{path:`/proxy-enhancement`,label:`代理增强(实验性)`,icon:V},{path:`/monitor`,label:`实时监控`,icon:k},{path:`/logs`,label:`请求日志`,icon:M}],s=t(),u=_();function g(e){return e===`/`?s.path===`/`:s.path.startsWith(e)}async function v(){try{await d.logout()}finally{u.push(`/login`)}}return(e,t)=>{let s=y(`router-link`);return h(),f(`aside`,U,[n(`div`,W,[n(`div`,G,[t[0]||=n(`div`,{class:`w-8 h-8 bg-sidebar-primary rounded-lg flex items-center justify-center`},[n(`svg`,{class:`w-5 h-5 text-sidebar-primary-foreground`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[n(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z`})])],-1),t[1]||=n(`span`,{class:`font-semibold text-sm`},`LLM Router`,-1),o(a(D),{variant:`secondary`,class:`text-[10px] px-1.5 py-0 h-4 leading-none`},{default:w(()=>[m(`v`+r(a(`0.4.1`)),1)]),_:1})])]),n(`nav`,K,[(h(),f(c,null,S(i,e=>o(s,{key:e.path,to:e.path,class:l([`flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors`,g(e.path)?`bg-sidebar-accent text-sidebar-primary`:`text-sidebar-foreground hover:bg-sidebar-accent`])},{default:w(()=>[(h(),p(C(e.icon),{class:`w-4 h-4`})),m(` `+r(e.label),1)]),_:2},1032,[`to`,`class`])),64))]),n(`div`,q,[o(a(b),{variant:`ghost`,class:`w-full justify-start text-sidebar-foreground hover:text-sidebar-foreground hover:bg-sidebar-accent`,onClick:v},{default:w(()=>[o(a(L),{class:`w-4 h-4`}),t[2]||=m(` 登出 `,-1)]),_:1})])])}}}),Y=s({__name:`Sonner`,props:{id:{},invert:{type:Boolean},theme:{},position:{},closeButtonPosition:{},hotkey:{},richColors:{type:Boolean},expand:{type:Boolean},duration:{},gap:{},visibleToasts:{},closeButton:{type:Boolean},toastOptions:{},class:{},style:{},offset:{},mobileOffset:{},dir:{},swipeDirections:{},icons:{},containerAriaLabel:{}},setup(t){let r=t;return(t,i)=>(h(),p(a(O),e({class:a(x)(`toaster group`,r.class),style:{"--normal-bg":`var(--popover)`,"--normal-text":`var(--popover-foreground)`,"--normal-border":`var(--border)`,"--border-radius":`var(--radius)`}},r),{"success-icon":w(()=>[o(a(j),{class:`size-4`})]),"info-icon":w(()=>[o(a(N),{class:`size-4`})]),"warning-icon":w(()=>[o(a(H),{class:`size-4`})]),"error-icon":w(()=>[o(a(R),{class:`size-4`})]),"loading-icon":w(()=>[n(`div`,null,[o(a(I),{class:`size-4 animate-spin`})])]),"close-icon":w(()=>[o(a(E),{class:`size-4`})]),_:1},16,[`class`]))}}),X={key:0,class:`min-h-screen flex`},Z={class:`flex-1 overflow-auto bg-muted`},Q=u(s({__name:`App`,setup(e){let r=_(),s=t(),l=i(!1),u=[`/login`,`/setup`];async function m(){if(u.includes(s.path)){l.value=!1;return}try{await d.getStats(),l.value=!0}catch{l.value=!1,r.push(`/login`)}}return m(),g(()=>s.path,m),(e,t)=>{let r=y(`router-view`);return h(),f(c,null,[l.value?(h(),f(`div`,X,[o(J),n(`main`,Z,[o(r)])])):(h(),p(r,{key:1})),o(a(Y),{richColors:``,position:`top-center`})],64)}}}));Q.use(v),Q.mount(`#app`);
|