llm-simple-router 0.3.7 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -49
- package/dist/admin/constants.d.ts +1 -8
- package/dist/admin/constants.js +2 -8
- package/dist/admin/logs.js +18 -3
- package/dist/admin/router-keys.js +1 -2
- package/dist/cli.js +0 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.js +9 -0
- package/dist/db/index.d.ts +4 -4
- package/dist/db/index.js +2 -2
- package/dist/db/logs.d.ts +18 -33
- package/dist/db/logs.js +40 -17
- package/dist/db/metrics.d.ts +33 -0
- package/dist/db/metrics.js +7 -0
- package/dist/db/migrations/018_add_failover_field.sql +2 -0
- package/dist/db/retry-rules.d.ts +2 -2
- package/dist/db/retry-rules.js +26 -13
- package/dist/index.js +3 -5
- package/dist/monitor/request-tracker.d.ts +6 -0
- package/dist/monitor/request-tracker.js +23 -54
- package/dist/monitor/stream-extractor.d.ts +11 -0
- package/dist/monitor/stream-extractor.js +51 -0
- package/dist/proxy/anthropic.js +19 -32
- package/dist/proxy/log-helpers.d.ts +11 -4
- package/dist/proxy/log-helpers.js +5 -3
- package/dist/proxy/openai.js +18 -34
- package/dist/proxy/orchestrator.d.ts +52 -0
- package/dist/proxy/orchestrator.js +100 -0
- package/dist/proxy/proxy-core.d.ts +14 -26
- package/dist/proxy/proxy-core.js +40 -337
- package/dist/proxy/proxy-handler.d.ts +18 -0
- package/dist/proxy/proxy-handler.js +223 -0
- package/dist/proxy/proxy-logging.d.ts +28 -0
- package/dist/proxy/proxy-logging.js +122 -0
- package/dist/proxy/resilience.d.ts +63 -0
- package/dist/proxy/resilience.js +188 -0
- package/dist/proxy/scope.d.ts +18 -0
- package/dist/proxy/scope.js +37 -0
- package/dist/proxy/semaphore.d.ts +9 -2
- package/dist/proxy/semaphore.js +34 -7
- package/dist/proxy/stream-proxy.d.ts +7 -0
- package/dist/proxy/stream-proxy.js +263 -0
- package/dist/proxy/{upstream-call.d.ts → transport.d.ts} +25 -18
- package/dist/proxy/transport.js +128 -0
- package/dist/proxy/types.d.ts +58 -0
- package/dist/proxy/types.js +30 -0
- package/frontend-dist/assets/{CardContent-CucI6u41.js → CardContent-CTnwqTdL.js} +1 -1
- package/frontend-dist/assets/{CardHeader-d-DYsWxe.js → CardHeader-CfUeY7tk.js} +1 -1
- package/frontend-dist/assets/{CardTitle-CIDEQkWB.js → CardTitle-CWiDwWqd.js} +1 -1
- package/frontend-dist/assets/{Checkbox-CybCw3zS.js → Checkbox-BxNz70R_.js} +1 -1
- package/frontend-dist/assets/{CollapsibleTrigger-BFNhb19_.js → CollapsibleTrigger-Uz1aGdtH.js} +1 -1
- package/frontend-dist/assets/{Collection-DUBb4r6h.js → Collection-1EHC87X5.js} +1 -1
- package/frontend-dist/assets/{Dashboard-DLB6iqH1.js → Dashboard-C3FL30UN.js} +2 -2
- package/frontend-dist/assets/{DialogTitle-Dq-5o7nJ.js → DialogTitle-CAOFxr83.js} +1 -1
- package/frontend-dist/assets/{Input-HN3Il0-c.js → Input-DRIid2C6.js} +1 -1
- package/frontend-dist/assets/{Label-CXAeFn-r.js → Label-UyNN2jyE.js} +1 -1
- package/frontend-dist/assets/LogDetailDialog-8BT4vIlV.js +3 -0
- package/frontend-dist/assets/{Login-Br3qsdxf.js → Login-CnzH6TdS.js} +1 -1
- package/frontend-dist/assets/Logs-CbK8NB_X.js +1 -0
- package/frontend-dist/assets/{ModelMappings-DXC0sNH5.js → ModelMappings-DeRFgsYG.js} +1 -1
- package/frontend-dist/assets/Monitor-Dd80bdUn.js +1 -0
- package/frontend-dist/assets/{PopperContent-CnZejY31.js → PopperContent-B3fZao7v.js} +1 -1
- package/frontend-dist/assets/{Providers-8CHhW4uH.js → Providers-B_DbV-_y.js} +1 -1
- package/frontend-dist/assets/ProxyEnhancement-up1fnPzq.js +5 -0
- package/frontend-dist/assets/RetryRules-Dkuhjh0u.js +1 -0
- package/frontend-dist/assets/RouterKeys-CvMMAa4t.js +1 -0
- package/frontend-dist/assets/{RovingFocusItem-B7ZIkplZ.js → RovingFocusItem-X0bfqWWS.js} +1 -1
- package/frontend-dist/assets/{SelectValue-B32pgmTJ.js → SelectValue-zO8t-tx1.js} +1 -1
- package/frontend-dist/assets/{Setup-Df9IQo2x.js → Setup-ByT2ThOQ.js} +1 -1
- package/frontend-dist/assets/{Switch-CLeo7H6d.js → Switch-BEMjVugO.js} +1 -1
- package/frontend-dist/assets/{TableHeader-BpscAtT3.js → TableHeader-DpHWSnxK.js} +1 -1
- package/frontend-dist/assets/{TabsTrigger-DErAbTuM.js → TabsTrigger-Db6RqsZc.js} +1 -1
- package/frontend-dist/assets/{VisuallyHidden-CJBR3YB3.js → VisuallyHidden-hs8pj8OP.js} +1 -1
- package/frontend-dist/assets/{VisuallyHiddenInput-Cy0VuE1l.js → VisuallyHiddenInput-1m0nNADN.js} +1 -1
- package/frontend-dist/assets/{alert-dialog-BAR1JRmT.js → alert-dialog-PP91kaO8.js} +1 -1
- package/frontend-dist/assets/{button-D54q76GQ.js → button-Dcc0gF5i.js} +1 -1
- package/frontend-dist/assets/{client-Mb8fy_bC.js → client-DIIo9zPK.js} +2 -2
- package/frontend-dist/assets/{createLucideIcon-CCmQ9QKM.js → createLucideIcon-DGZkBjcJ.js} +1 -1
- package/frontend-dist/assets/{dialog-DSH5k5Kj.js → dialog-CxSyR-fN.js} +1 -1
- package/frontend-dist/assets/format-CPdJtjZ5.js +1 -0
- package/frontend-dist/assets/index-BL-LAtac.css +1 -0
- package/frontend-dist/assets/{index-BQBtSfem.js → index-CvT41fGL.js} +1 -1
- package/frontend-dist/assets/{lib-BgOqOzXI.js → lib-Bl0OuBjh.js} +1 -1
- package/frontend-dist/assets/{ohash.D__AXeF1-p4vp6Svt.js → ohash.D__AXeF1-B64hB831.js} +1 -1
- package/frontend-dist/assets/{useClipboard-DO-38TXr.js → useClipboard-CWc1cTDo.js} +1 -1
- package/frontend-dist/assets/{useForwardExpose-CzQFheaD.js → useForwardExpose-AkE0lq8y.js} +1 -1
- package/frontend-dist/assets/useNonce-DGyPxdjq.js +1 -0
- package/frontend-dist/assets/x-BuUpx9Fr.js +1 -0
- package/frontend-dist/index.html +7 -7
- package/package.json +1 -1
- package/dist/admin/services.d.ts +0 -7
- package/dist/admin/services.js +0 -63
- package/dist/proxy/retry.d.ts +0 -43
- package/dist/proxy/retry.js +0 -121
- package/dist/proxy/upstream-call.js +0 -208
- package/frontend-dist/assets/LogResponseViewer-CyBzv02a.js +0 -3
- package/frontend-dist/assets/Logs-Cu_IftdS.js +0 -1
- package/frontend-dist/assets/Monitor-CKlid1sC.js +0 -1
- package/frontend-dist/assets/ProxyEnhancement-CkYeXwgH.js +0 -5
- package/frontend-dist/assets/RetryRules-Csb7u9W4.js +0 -1
- package/frontend-dist/assets/RouterKeys-C6YIufmj.js +0 -1
- package/frontend-dist/assets/index-H-lnTkMr.css +0 -1
- package/frontend-dist/assets/useNonce-CU-NirfM.js +0 -1
- package/frontend-dist/assets/x-DEJ1xpi5.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as e,M as t,R as n,S as r,Y as i,_ as a,dt as o,k as s,mt as c,ot as l,v as u,x as d}from"./client-
|
|
1
|
+
import{F as e,M as t,R as n,S as r,Y as i,_ as a,dt as o,k as s,mt as c,ot as l,v as u,x as d}from"./client-DIIo9zPK.js";import{i as f,p}from"./button-Dcc0gF5i.js";import{S as m,a as h,c as g,d as _,g as v,i as y,m as b,o as x,u as S,x as C}from"./Collection-1EHC87X5.js";import{t as w}from"./useForwardExpose-AkE0lq8y.js";var[T,E]=m(`DialogRoot`),D=r({inheritAttrs:!1,__name:`DialogRoot`,props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1,default:!1},modal:{type:Boolean,required:!1,default:!0}},emits:[`update:open`],setup(e,{emit:t}){let r=e,i=p(r,`open`,t,{defaultValue:r.defaultOpen,passive:r.open===void 0}),a=l(),s=l(),{modal:u}=o(r);return E({open:i,modal:u,openModal:()=>{i.value=!0},onOpenChange:e=>{i.value=e},onOpenToggle:()=>{i.value=!i.value},contentId:``,titleId:``,descriptionId:``,triggerElement:a,contentElement:s}),(e,t)=>n(e.$slots,`default`,{open:c(i),close:()=>i.value=!1})}}),O=r({__name:`DialogClose`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(t){let r=t;w();let o=T();return(t,l)=>(e(),a(c(f),s(r,{type:t.as===`button`?`button`:void 0,onClick:l[0]||=e=>c(o).onOpenChange(!1)}),{default:i(()=>[n(t.$slots,`default`)]),_:3},16,[`type`]))}}),k=r({__name:`DialogContentImpl`,props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`],setup(r,{emit:o}){let l=r,u=o,f=T(),{forwardRef:p,currentElement:m}=w();return f.titleId||=S(void 0,`reka-dialog-title`),f.descriptionId||=S(void 0,`reka-dialog-description`),t(()=>{f.contentElement=m,C()!==document.body&&(f.triggerElement.value=C())}),(t,r)=>(e(),a(c(h),{"as-child":``,loop:``,trapped:l.trapFocus,onMountAutoFocus:r[5]||=e=>u(`openAutoFocus`,e),onUnmountAutoFocus:r[6]||=e=>u(`closeAutoFocus`,e)},{default:i(()=>[d(c(x),s({id:c(f).contentId,ref:c(p),as:t.as,"as-child":t.asChild,"disable-outside-pointer-events":t.disableOutsidePointerEvents,role:`dialog`,"aria-describedby":c(f).descriptionId,"aria-labelledby":c(f).titleId,"data-state":c(y)(c(f).open.value)},t.$attrs,{onDismiss:r[0]||=e=>c(f).onOpenChange(!1),onEscapeKeyDown:r[1]||=e=>u(`escapeKeyDown`,e),onFocusOutside:r[2]||=e=>u(`focusOutside`,e),onInteractOutside:r[3]||=e=>u(`interactOutside`,e),onPointerDownOutside:r[4]||=e=>u(`pointerDownOutside`,e)}),{default:i(()=>[n(t.$slots,`default`)]),_:3},16,[`id`,`as`,`as-child`,`disable-outside-pointer-events`,`aria-describedby`,`aria-labelledby`,`data-state`])]),_:3},8,[`trapped`]))}}),A=r({__name:`DialogContentModal`,props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`],setup(t,{emit:r}){let o=t,l=r,u=T(),d=b(l),{forwardRef:f,currentElement:p}=w();return _(p),(t,r)=>(e(),a(k,s({...o,...c(d)},{ref:c(f),"trap-focus":c(u).open.value,"disable-outside-pointer-events":!0,onCloseAutoFocus:r[0]||=e=>{e.defaultPrevented||(e.preventDefault(),c(u).triggerElement.value?.focus())},onPointerDownOutside:r[1]||=e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()},onFocusOutside:r[2]||=e=>{e.preventDefault()}}),{default:i(()=>[n(t.$slots,`default`)]),_:3},16,[`trap-focus`]))}}),j=r({__name:`DialogContentNonModal`,props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`],setup(t,{emit:r}){let o=t,u=b(r);w();let d=T(),f=l(!1),p=l(!1);return(t,r)=>(e(),a(k,s({...o,...c(u)},{"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:r[0]||=e=>{e.defaultPrevented||(f.value||c(d).triggerElement.value?.focus(),e.preventDefault()),f.value=!1,p.value=!1},onInteractOutside:r[1]||=e=>{e.defaultPrevented||(f.value=!0,e.detail.originalEvent.type===`pointerdown`&&(p.value=!0));let t=e.target;c(d).triggerElement.value?.contains(t)&&e.preventDefault(),e.detail.originalEvent.type===`focusin`&&p.value&&e.preventDefault()}}),{default:i(()=>[n(t.$slots,`default`)]),_:3},16))}}),M=r({__name:`DialogContent`,props:{forceMount:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`],setup(t,{emit:r}){let o=t,l=r,u=T(),d=b(l),{forwardRef:f}=w();return(t,r)=>(e(),a(c(g),{present:t.forceMount||c(u).open.value},{default:i(()=>[c(u).modal.value?(e(),a(A,s({key:0,ref:c(f)},{...o,...c(d),...t.$attrs}),{default:i(()=>[n(t.$slots,`default`)]),_:3},16)):(e(),a(j,s({key:1,ref:c(f)},{...o,...c(d),...t.$attrs}),{default:i(()=>[n(t.$slots,`default`)]),_:3},16))]),_:3},8,[`present`]))}}),N=r({__name:`DialogDescription`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`p`}},setup(t){let r=t;w();let o=T();return(t,l)=>(e(),a(c(f),s(r,{id:c(o).descriptionId}),{default:i(()=>[n(t.$slots,`default`)]),_:3},16,[`id`]))}}),P=r({__name:`DialogOverlayImpl`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let r=T();return v(!0),w(),(t,o)=>(e(),a(c(f),{as:t.as,"as-child":t.asChild,"data-state":c(r).open.value?`open`:`closed`,style:{"pointer-events":`auto`}},{default:i(()=>[n(t.$slots,`default`)]),_:3},8,[`as`,`as-child`,`data-state`]))}}),F=r({__name:`DialogOverlay`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let r=T(),{forwardRef:o}=w();return(t,l)=>c(r)?.modal.value?(e(),a(c(g),{key:0,present:t.forceMount||c(r).open.value},{default:i(()=>[d(P,s(t.$attrs,{ref:c(o),as:t.as,"as-child":t.asChild}),{default:i(()=>[n(t.$slots,`default`)]),_:3},16,[`as`,`as-child`])]),_:3},8,[`present`])):u(`v-if`,!0)}}),I=r({__name:`DialogTitle`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`h2`}},setup(t){let r=t,o=T();return w(),(t,l)=>(e(),a(c(f),s(r,{id:c(o).titleId}),{default:i(()=>[n(t.$slots,`default`)]),_:3},16,[`id`]))}});export{O as a,M as i,F as n,D as o,N as r,I as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as e,S as t,X as n,c as r,gt as i,mt as a,tt as o,y as s}from"./client-
|
|
1
|
+
import{F as e,S as t,X as n,c as r,gt as i,mt as a,tt as o,y as s}from"./client-DIIo9zPK.js";import{p as c,r as l}from"./button-Dcc0gF5i.js";var u=t({__name:`Input`,props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(t,{emit:u}){let d=t,f=c(d,`modelValue`,u,{passive:!0,defaultValue:d.defaultValue});return(t,c)=>n((e(),s(`input`,{"onUpdate:modelValue":c[0]||=e=>o(f)?f.value=e:null,"data-slot":`input`,class:i(a(l)(`dark:bg-input/30 border-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 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors file:h-6 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,d.class))},null,2)),[[r,a(f)]])}});export{u as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as e,R as t,S as n,Y as r,_ as i,k as a,mt as o}from"./client-
|
|
1
|
+
import{F as e,R as t,S as n,Y as r,_ as i,k as a,mt as o}from"./client-DIIo9zPK.js";import{b as s,i as c,r as l}from"./button-Dcc0gF5i.js";import{t as u}from"./useForwardExpose-AkE0lq8y.js";var d=n({__name:`Label`,props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`label`}},setup(n){let s=n;return u(),(n,l)=>(e(),i(o(c),a(s,{onMousedown:l[0]||=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()}}),{default:r(()=>[t(n.$slots,`default`)]),_:3},16))}}),f=n({__name:`Label`,props:{for:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(n){let c=n,u=s(c,`class`);return(n,s)=>(e(),i(o(d),a({"data-slot":`label`},o(u),{class:o(l)(`gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed`,c.class)}),{default:r(()=>[t(n.$slots,`default`)]),_:3},16,[`class`]))}});export{f as t};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{F as e,L as t,S as n,W as r,Y as i,_ as a,b as o,f as s,g as c,gt as l,h as u,it as ee,mt as d,ot as f,t as p,v as m,x as h,y as g,yt as _}from"./client-DIIo9zPK.js";import{n as v,r as y}from"./button-Dcc0gF5i.js";import{n as b,r as x,t as S}from"./CollapsibleTrigger-Uz1aGdtH.js";import{n as C,r as w,s as T,t as E}from"./dialog-CxSyR-fN.js";import{i as te,n as D,r as O,t as k}from"./TabsTrigger-Db6RqsZc.js";import{n as A,r as j}from"./lib-Bl0OuBjh.js";import{n as M,t as N}from"./CardContent-CTnwqTdL.js";import{t as P}from"./CardHeader-CfUeY7tk.js";import{a as ne,i as F,n as I,o as re,r as L,t as ie}from"./TableHeader-DpHWSnxK.js";import{t as ae}from"./useClipboard-CWc1cTDo.js";var R=n({__name:`Skeleton`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t;return(t,r)=>(e(),g(`div`,{"data-slot":`skeleton`,class:l(d(y)(`bg-muted rounded-md animate-pulse`,n.class))},null,2))}}),z={class:`relative`},B={class:`bg-background text-foreground rounded-md p-3 text-xs overflow-auto max-h-[40vh] whitespace-pre-wrap break-all border`},oe=n({__name:`JsonCopyBlock`,props:{content:{},hideCopyButton:{type:Boolean}},setup(t){let n=t,{copied:r,copy:s}=ae();async function l(){await s(n.content)}return(n,s)=>(e(),g(`div`,z,[t.hideCopyButton?m(``,!0):(e(),a(d(v),{key:0,variant:`outline`,size:`sm`,class:`absolute top-2 right-2 h-7 text-xs`,onClick:l},{default:i(()=>[o(_(d(r)?`已复制`:`复制`),1)]),_:1})),c(`pre`,B,_(t.content),1)]))}}),V={class:`opacity-70`},H=n({__name:`StatPill`,props:{label:{},value:{},highlight:{type:Boolean}},setup(t){return(n,r)=>(e(),a(d(j),{variant:t.highlight?`default`:`secondary`,class:`font-mono text-sm px-3 py-1.5 rounded-md gap-1`},{default:i(()=>[c(`span`,V,_(t.label)+`:`,1),o(` `+_(t.value),1)]),_:1},8,[`variant`]))}}),U=n({__name:`TagPill`,props:{label:{}},setup(t){return(n,r)=>(e(),a(d(j),{variant:`outline`,class:`font-mono text-[10px] rounded-full px-2 py-0.5`},{default:i(()=>[o(_(t.label),1)]),_:1}))}}),W={system:`bg-muted text-muted-foreground`,user:`bg-info-light text-info-dark dark:text-info`,assistant:`bg-success-light text-success-dark dark:text-success`,tool:`bg-warning-light text-warning-dark dark:text-warning`},G={thinking:`bg-info-light text-info-dark dark:text-info`,tool_use:`bg-warning-light text-warning-dark dark:text-warning`,tool_result:`bg-success-light text-success-dark dark:text-success`,text:`bg-success-light text-success-dark dark:text-success`,error:`bg-danger-light text-danger-dark dark:text-danger`},K={thinking:`border-info`,tool_use:`border-warning`,tool_result:`border-success`,text:`border-success`,error:`border-danger`},q={"system-reminder":`bg-muted text-muted-foreground`,thinking:`bg-info-light text-info-dark dark:text-info`,"antml:function_calls":`bg-warning-light text-warning-dark dark:text-warning`,"antml:function_results":`bg-success-light text-success-dark dark:text-success`,tool_use:`bg-warning-light text-warning-dark dark:text-warning`,tool_result:`bg-success-light text-success-dark dark:text-success`,"env-info":`bg-info-light text-info-dark dark:text-info`,feedback:`bg-warning-light text-warning-dark dark:text-warning`,error:`bg-danger-light text-danger-dark dark:text-danger`,"local-command-caveat":`bg-muted text-muted-foreground`,"local-command-stdout":`bg-muted text-muted-foreground`,"command-name":`bg-info-light text-info-dark dark:text-info`,"command-message":`bg-info-light text-info-dark dark:text-info`,"command-args":`bg-info-light text-info-dark dark:text-info`},J=`bg-muted text-muted-foreground`,se=e=>W[e]??J,Y=e=>G[e]??J,ce=e=>K[e]??`border-muted`,le=e=>q[e]??J,X={class:`w-8 h-8 rounded-full bg-teal-600 text-white flex items-center justify-center text-xs font-bold`},ue={class:`flex-1`},Z={class:`text-sm font-medium text-teal-900 dark:text-teal-100`},de={key:0,class:`text-xs text-teal-700 dark:text-teal-300`},Q={key:0,class:`text-right text-xs text-teal-700 dark:text-teal-300 space-y-0.5`},fe=n({__name:`InfoBanner`,props:{icon:{},title:{},subtitle:{},details:{}},setup(n){return(r,o)=>(e(),a(d(M),{class:`border-teal-200 dark:border-teal-800`},{default:i(()=>[h(d(N),{class:`p-3 flex items-center gap-3 bg-teal-50 dark:bg-teal-900`},{default:i(()=>[c(`div`,X,_(n.icon),1),c(`div`,ue,[c(`div`,Z,_(n.title),1),n.subtitle?(e(),g(`div`,de,_(n.subtitle),1)):m(``,!0)]),n.details?.length?(e(),g(`div`,Q,[(e(!0),g(s,null,t(n.details,t=>(e(),g(`div`,{key:t},_(t),1))),128))])):m(``,!0)]),_:1})]),_:1}))}}),pe=2,me=/<([a-zA-Z][a-zA-Z0-9:_-]*)(?:\s[^>]*)?>([\s\S]*?)<\/\1>/g;function he(e){let t=new RegExp(me.source,`g`),n=[],r=0,i;for(;(i=t.exec(e))!==null;){let a=e.slice(r,i.index).trim();a&&n.push({type:`text`,text:a}),n.push({type:i[1],text:i[2]}),r=t.lastIndex}let a=e.slice(r).trim();return a&&n.push({type:`text`,text:a}),n.length>0?n:[{type:`text`,text:e}]}function ge(e){return typeof e==`string`?he(e):Array.isArray(e)?e.flatMap(e=>{let t=e,n=String(t.type||`unknown`);if(n===`text`&&typeof t.text==`string`)return he(t.text);if(n===`image`)return[{type:`image`,text:``}];if(n===`tool_use`){let e=String(t.name||``);return[{type:`tool_use`,text:t.input?JSON.stringify(t.input,null,pe):``,label:e||void 0}]}if(n===`tool_result`){let e=t.content,n=``;return typeof e==`string`?n=e:Array.isArray(e)&&(n=e.map(e=>typeof e.text==`string`?e.text:JSON.stringify(e)).join(`
|
|
2
|
+
`)),[{type:`tool_result`,text:n}]}return n===`thinking`?[{type:`thinking`,text:String(t.thinking||``)}]:[{type:n,text:typeof t.text==`string`?t.text:``}]}):[{type:`text`,text:String(e??``)}]}var _e={key:0,class:`flex items-center justify-between py-2 border-b mb-2 sticky top-0 z-10 bg-background`},ve={key:0,class:`text-destructive text-sm`},ye={key:1,class:`text-xs text-muted-foreground break-all`},be={class:`flex flex-wrap gap-2`},xe={class:`rounded-md border overflow-hidden mt-1`},Se={key:2,class:`space-y-2`},Ce={key:0,class:`text-xs text-muted-foreground`},we={key:0},Te={key:0,class:`text-sm`},Ee={key:1,class:`text-sm whitespace-pre-wrap break-all`},De={key:1,class:`text-xs text-muted-foreground`},Oe={class:`mt-1 whitespace-pre-wrap break-all text-[11px] bg-muted rounded-md p-2 border`},ke={key:2,class:`text-xs`},Ae={key:3},je={class:`flex flex-wrap gap-1`},Me={key:4},Ne={key:0},Pe={class:`mt-1 whitespace-pre-wrap break-all text-xs bg-muted rounded p-2 border`},Fe=8,Ie=1024,Le=n({__name:`LogRequestViewer`,props:{raw:{},apiType:{},showUrl:{type:Boolean},mode:{}},setup(n){let r=n,p=f(!1),y=ee({}),C=f(!1),{copied:w,copy:T}=ae(),E=u(()=>{try{return JSON.parse(r.raw)}catch{return{}}}),A=u(()=>{try{return JSON.parse(r.raw),!1}catch{return!0}});async function R(){await T(r.raw)}let z=u(()=>{let e=E.value.headers||{},t=new Set(Object.keys(e));return Object.entries(e).filter(([e])=>t.has(e)).map(([e,t])=>e.toLowerCase()===`authorization`?[e,`Bearer sk-****`]:[e,t])}),B=u(()=>{let e=E.value.body;if(typeof e==`string`)try{return JSON.parse(e)}catch{return{}}return e||{}}),V=u(()=>(E.value.headers?.[`user-agent`]||``).includes(`claude-cli`)),W=u(()=>{let e=(E.value.headers?.[`user-agent`]||``).match(/claude-cli\/[^\s]+\s+\(([^)]+)\)/);return e?e[1]:`external, cli`}),G=u(()=>{let e=B.value.thinking;return e&&typeof e.budget_tokens==`number`?e.budget_tokens:void 0}),K=u(()=>{let e=B.value.tools;return Array.isArray(e)?e.length:void 0}),q=u(()=>{let e=[];return G.value!=null&&e.push(`thinking: ${G.value} tokens`),K.value!=null&&e.push(`tools: ${K.value} 个`),e}),J=u(()=>(B.value.messages||[]).map(e=>{let t=ge(e.content),n={};for(let e of t)e.type!==`text`&&e.text&&(n[e.type]=(n[e.type]||0)+1);let r=new Set(Object.keys(n)),i=Object.entries(n).filter(([e])=>r.has(e)).map(([e,t])=>`${e}${t>1?` x${t}`:``}`).join(`, `)||void 0;return{role:e.role,blocks:t,blockSummary:i}})),Y=u(()=>(B.value.tools||[]).map(e=>e.function?.name||e.name||`unknown`).filter(Boolean)),ce=u(()=>C.value?Y.value:Y.value.slice(0,Fe)),X=u(()=>{let e=B.value.system;return e?Array.isArray(e)?e.map(e=>({type:e.type||`text`,text:e.text||``})):typeof e==`string`?[{type:`text`,text:e}]:[{type:`unknown`,text:JSON.stringify(e)}]:[]}),ue=new Set([`model`,`stream`,`max_tokens`,`thinking`,`messages`,`tools`,`system`]),Z=u(()=>{let e={};for(let t of Object.keys(B.value))ue.has(t)||(e[t]=B.value[t]);return e}),de=u(()=>Object.keys(Z.value));function Q(e){let t=new TextEncoder().encode(e).length;return t<Ie?`${t}B`:`${(t/Ie).toFixed(1)}KB`}return(r,u)=>(e(),a(d(te),{"default-value":n.mode??`structured`,"model-value":n.mode,class:`w-full`},{default:i(()=>[n.mode?m(``,!0):(e(),g(`div`,_e,[h(d(D),null,{default:i(()=>[h(d(k),{value:`structured`},{default:i(()=>[...u[2]||=[o(`结构化`,-1)]]),_:1}),h(d(k),{value:`raw`},{default:i(()=>[...u[3]||=[o(`原始 JSON`,-1)]]),_:1})]),_:1}),h(d(v),{variant:`ghost`,size:`xs`,class:`h-auto py-1`,onClick:R},{default:i(()=>[o(_(d(w)?`已复制`:`复制 JSON`),1)]),_:1})])),h(d(O),{value:`structured`,class:`space-y-3`},{default:i(()=>[A.value?(e(),g(`div`,ve,`解析失败,请切换到原始 JSON 查看`)):(e(),g(s,{key:1},[V.value?(e(),a(fe,{key:0,icon:`CC`,title:`Claude Code 请求`,subtitle:`user-agent: ${W.value}`,details:q.value},null,8,[`subtitle`,`details`])):m(``,!0),n.showUrl&&E.value.url?(e(),g(`div`,ye,_(E.value.url),1)):m(``,!0),c(`div`,be,[E.value.body?.model?(e(),a(H,{key:0,label:`model`,value:String(E.value.body.model),highlight:!0},null,8,[`value`])):m(``,!0),E.value.body?.stream==null?m(``,!0):(e(),a(H,{key:1,label:`stream`,value:String(E.value.body.stream)},null,8,[`value`])),E.value.body?.max_tokens==null?m(``,!0):(e(),a(H,{key:2,label:`max_tokens`,value:String(E.value.body.max_tokens)},null,8,[`value`])),E.value.body?.thinking==null?m(``,!0):(e(),a(U,{key:3,label:`thinking`}))]),h(d(x),{open:p.value,"onUpdate:open":u[0]||=e=>p.value=e},{default:i(()=>[h(d(S),{"as-child":``},{default:i(()=>[h(d(v),{variant:`ghost`,size:`xs`,class:`px-0 h-auto`},{default:i(()=>[o(` Headers (`+_(z.value.length)+` 个) `,1)]),_:1})]),_:1}),h(d(b),null,{default:i(()=>[c(`div`,xe,[h(d(re),null,{default:i(()=>[h(d(ie),null,{default:i(()=>[h(d(L),null,{default:i(()=>[h(d(I),{class:`w-1/3`},{default:i(()=>[...u[4]||=[o(`Key`,-1)]]),_:1}),h(d(I),null,{default:i(()=>[...u[5]||=[o(`Value`,-1)]]),_:1})]),_:1})]),_:1}),h(d(ne),null,{default:i(()=>[(e(!0),g(s,null,t(z.value,([t,n])=>(e(),a(d(L),{key:t},{default:i(()=>[h(d(F),{class:`font-medium`},{default:i(()=>[o(_(t),1)]),_:2},1024),h(d(F),{class:`break-all`},{default:i(()=>[o(_(n),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})])]),_:1})]),_:1},8,[`open`]),J.value.length?(e(),g(`div`,Se,[u[7]||=c(`div`,{class:`text-xs font-medium text-muted-foreground`},`Messages`,-1),(e(!0),g(s,null,t(J.value,(n,r)=>(e(),a(d(M),{key:r,class:`bg-muted/40`},{default:i(()=>[h(d(P),{class:`pb-2 flex flex-row items-center gap-2`},{default:i(()=>[h(d(j),{class:l(d(se)(n.role))},{default:i(()=>[o(_(n.role),1)]),_:2},1032,[`class`]),n.blockSummary?(e(),g(`span`,Ce,_(n.blockSummary),1)):m(``,!0)]),_:2},1024),h(d(N),{class:`space-y-2`},{default:i(()=>[(e(!0),g(s,null,t(n.blocks,(t,n)=>(e(),g(`div`,{key:n},[t.type===`text`?(e(),g(`div`,we,[t.text.length>120&&!y[`${r}-${n}`]?(e(),g(`div`,Te,[o(_(t.text.slice(0,120))+` `,1),h(d(v),{variant:`link`,size:`xs`,class:`px-0 h-auto`,onClick:e=>y[`${r}-${n}`]=!0},{default:i(()=>[...u[6]||=[o(`展开`,-1)]]),_:1},8,[`onClick`])])):(e(),g(`div`,Ee,_(t.text),1))])):t.text?(e(),g(`div`,De,[h(d(x),null,{default:i(()=>[h(d(S),{"as-child":``},{default:i(()=>[h(d(v),{variant:`ghost`,size:`xs`,class:`px-0 h-auto`},{default:i(()=>[h(d(j),{class:l([d(le)(t.type),`mr-1`])},{default:i(()=>[o(_(t.label||t.type),1)]),_:2},1032,[`class`]),o(` `+_(Q(t.text)),1)]),_:2},1024)]),_:2},1024),h(d(b),null,{default:i(()=>[c(`pre`,Oe,_(t.text),1)]),_:2},1024)]),_:2},1024)])):(e(),g(`div`,ke,[h(d(j),{class:l([d(le)(t.type),`mr-1`])},{default:i(()=>[o(_(t.label||t.type),1)]),_:2},1032,[`class`])]))]))),128))]),_:2},1024)]),_:2},1024))),128))])):m(``,!0),Y.value.length?(e(),g(`div`,Ae,[u[8]||=c(`div`,{class:`text-xs font-medium text-muted-foreground mb-1`},`Tools`,-1),c(`div`,je,[(e(!0),g(s,null,t(ce.value,t=>(e(),a(U,{key:t,label:t},null,8,[`label`]))),128)),Y.value.length>8?(e(),a(d(v),{key:0,variant:`ghost`,size:`xs`,class:`px-1 h-5`,onClick:u[1]||=e=>C.value=!C.value},{default:i(()=>[o(_(C.value?`收起`:`+${Y.value.length-8}`),1)]),_:1})):m(``,!0)])])):m(``,!0),X.value.length?(e(),g(`div`,Me,[u[9]||=c(`div`,{class:`text-xs font-medium text-muted-foreground mb-1`},`System`,-1),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`space-y-2`},{default:i(()=>[(e(!0),g(s,null,t(X.value,(t,n)=>(e(),g(`div`,{key:n,class:`text-sm whitespace-pre-wrap break-all`},[h(d(j),{variant:`outline`,class:`mb-1`},{default:i(()=>[o(_(t.type),1)]),_:2},1024),t.text?(e(),g(`div`,Ne,_(t.text),1)):m(``,!0)]))),128))]),_:1})]),_:1})])):m(``,!0),de.value.length?(e(),a(d(x),{key:5},{default:i(()=>[h(d(S),{"as-child":``},{default:i(()=>[h(d(v),{variant:`ghost`,size:`xs`,class:`px-0 h-auto`},{default:i(()=>[...u[10]||=[o(` 其他字段 `,-1)]]),_:1})]),_:1}),h(d(b),null,{default:i(()=>[c(`pre`,Pe,_(JSON.stringify(Z.value,null,2)),1)]),_:1})]),_:1})):m(``,!0)],64))]),_:1}),h(d(O),{value:`raw`},{default:i(()=>[h(oe,{content:n.raw,"hide-copy-button":``},null,8,[`content`])]),_:1})]),_:1},8,[`default-value`,`model-value`]))}}),Re={class:`text-xs text-foreground`},$=n({__name:`SseEventLine`,props:{eventType:{},summary:{},highlight:{type:Boolean}},setup(t){return(n,r)=>(e(),g(`div`,{class:l([`px-3 py-2 flex items-center gap-2`,t.highlight?`bg-warning/10`:``])},[c(`span`,{class:l([`px-1.5 py-0.5 rounded text-[10px] font-medium`,{"bg-teal-200 text-teal-700 dark:bg-teal-800 dark:text-teal-300":t.eventType===`message_start`,"bg-teal-300 text-teal-700 dark:bg-teal-700 dark:text-teal-200":t.eventType===`content_block_start`,"bg-muted text-muted-foreground":t.eventType===`content_block_delta`,"bg-teal-500 text-white dark:bg-teal-600":t.eventType===`message_delta`,"bg-success-light text-success":t.eventType===`message_stop`}])},_(t.eventType),3),c(`span`,Re,_(t.summary),1)],2))}}),ze=5,Be=2,Ve=3;function He(e,t,n){let r=u(()=>{if(!t||!e.value)return[];let n=e.value.split(`
|
|
3
|
+
`),r=[];for(let e of n){let t=e.trim();if(!t.startsWith(`data:`))continue;let n=t.slice(ze).trim();if(n===`[DONE]`){r.push({type:`done`,data:n});continue}try{let e=JSON.parse(n);r.push({type:`data`,data:e})}catch{r.push({type:`raw`,data:n})}}return r});return{sseEvents:r,assembledBlocks:u(()=>{if(!t||!e.value)return[];let n=[],i=null;for(let e of r.value){if(e.type!==`data`)continue;let t=e.data;if(t.type===`content_block_start`){let e=t.content_block;if(i={type:String(e?.type||``),content:``,eventCount:0,toolName:e?.name?String(e.name):void 0},i.type===`tool_use`&&e?.input){let t=e.input;Object.keys(t).length>0&&(i.content=JSON.stringify(t,null,Be))}continue}if(t.type===`content_block_delta`&&i){let e=t.delta;i.content+=e.thinking||e.text||e.partial_json||``,i.eventCount++;continue}t.type===`content_block_stop`&&i&&(n.push(i),i=null)}return i&&n.push(i),n}),sseMeta:u(()=>{let e=``,t=``,n=0,i=0,a=``;for(let o of r.value){if(o.type!==`data`)continue;let r=o.data;if(r.type===`message_start`){let i=r.message;e=String(i?.id||``),t=String(i?.model||``),n=Number(i?.usage?.input_tokens??0)}if(r.type===`message_delta`){let e=r.delta,t=r.usage;a=String(e?.stop_reason||``),i=Number(t?.output_tokens??0)}}return{id:e,model:t,inputTokens:n,outputTokens:i,stopReason:a}}),openaiAssembled:u(()=>{if(n!==`openai`||!t)return null;let e=``,i=``,a=``,o=null,s=0;for(let t of r.value){if(t.type!==`data`)continue;let n=t.data,r=n.choices||[],c=r[0]?.delta;c?.role&&(e=String(c.role)),c?.content&&(i+=String(c.content),s++),r[0]?.finish_reason&&(a=String(r[0].finish_reason)),n.usage&&(o=n.usage)}return{role:e,content:i,contentEventCount:s,finishReason:a,usage:o}}),anthropicMessageStart:u(()=>{for(let e of r.value){if(e.type!==`data`)continue;let t=e.data;if(t.type===`message_start`){let e=t.message;return{id:String(e?.id||``),model:String(e?.model||``),input_tokens:Number(e?.usage?.input_tokens??0)}}}return null}),anthropicContentBlockStarts:u(()=>{let e=[];for(let t of r.value){if(t.type!==`data`)continue;let n=t.data;if(n.type===`content_block_start`){let t=n.content_block;e.push({index:Number(n.index??0),type:String(t?.type||``)})}}return e}),anthropicDeltaGroups:u(()=>{let e={};for(let t of r.value){if(t.type!==`data`)continue;let n=t.data;if(n.type!==`content_block_delta`)continue;let r=n.delta,i=String(r?.type||`unknown`);e[i]||(e[i]={deltaType:i,kept:0,folded:0,foldedChars:0});let a=e[i];if(a.kept<Ve)a.kept++;else{a.folded++;let e=r,t=String(e.thinking||e.text||e.partial_json||``);a.foldedChars+=t.length}}return Object.values(e).filter(e=>e.kept>0||e.folded>0)}),anthropicMessageDelta:u(()=>{for(let e of r.value){if(e.type!==`data`)continue;let t=e.data;if(t.type===`message_delta`){let e=t.delta,n=t.usage;return{output_tokens:Number(n?.output_tokens??0),stop_reason:String(e?.stop_reason||``)}}}return null}),anthropicMessageStop:u(()=>r.value.some(e=>e.type===`data`&&e.data.type===`message_stop`)),openaiSseRole:u(()=>{for(let e of r.value){if(e.type!==`data`)continue;let t=(e.data.choices||[])[0]?.delta;if(t?.role)return String(t.role)}return null}),openaiSseFirstContent:u(()=>{for(let e of r.value){if(e.type!==`data`)continue;let t=(e.data.choices||[])[0]?.delta;if(t?.content)return String(t.content)}return null}),openaiSseFinishReason:u(()=>{for(let e of r.value){if(e.type!==`data`)continue;let t=(e.data.choices||[])[0]?.finish_reason;if(t)return String(t)}return null}),openaiSseCollapsedCount:u(()=>{let e=0,t=!1;for(let n of r.value){if(n.type!==`data`)continue;let r=(n.data.choices||[])[0]?.delta;if(!t){r?.content&&(t=!0);continue}(r?.content||r?.role)&&e++}return e}),openaiSseUsage:u(()=>{for(let e=r.value.length-1;e>=0;e--){let t=r.value[e];if(t.type!==`data`)continue;let n=t.data.usage;if(n)return{prompt_tokens:n.prompt_tokens,completion_tokens:n.completion_tokens,total_tokens:n.total_tokens,cached_tokens:n.cached_tokens??n.prompt_tokens_details?.cached_tokens}}return null})}}var Ue={key:0,class:`flex items-center justify-between py-2 border-b mb-2 sticky top-0 z-10 bg-background`},We={key:0,class:`text-destructive text-sm`},Ge={class:`flex items-center gap-2`},Ke={class:`rounded-md border overflow-hidden mt-1`},qe={class:`flex flex-wrap gap-2`},Je={key:0,class:`space-y-2`},Ye={class:`mt-1 whitespace-pre-wrap break-all text-xs bg-muted rounded-md p-2 border`},Xe={key:1,class:`grid grid-cols-2 sm:grid-cols-4 gap-2`},Ze={class:`font-medium`},Qe={class:`font-medium`},$e={class:`font-medium`},et={class:`font-medium`},tt={class:`flex flex-wrap gap-2`},nt={key:0,class:`space-y-2`},rt={class:`flex items-center gap-2 mb-2`},it={key:0,class:`text-sm`},at={key:1,class:`grid grid-cols-2 sm:grid-cols-4 gap-2`},ot={class:`font-medium`},st={class:`font-medium`},ct={class:`font-medium`},lt={class:`font-medium`},ut={key:1,class:`space-y-3`},dt={class:`flex gap-1`},ft={class:`flex flex-wrap gap-2`},pt={class:`flex items-center gap-2 mb-2`},mt={class:`text-xs text-muted-foreground`},ht={key:0,class:`text-xs font-mono`},gt={class:`whitespace-pre-wrap break-all text-sm bg-muted rounded-md p-3 border`},_t={key:1,class:`whitespace-pre-wrap break-all text-sm bg-muted rounded-md p-3 border max-h-[40vh] overflow-auto`},vt={class:`flex flex-wrap gap-2`},yt={class:`flex flex-wrap gap-2`},bt={class:`whitespace-pre-wrap break-all text-sm bg-muted rounded-md p-3 max-h-[40vh] overflow-auto`},xt={key:0,class:`grid grid-cols-2 sm:grid-cols-4 gap-2`},St={class:`font-medium`},Ct={class:`font-medium`},wt={class:`font-medium`},Tt={key:0,class:`text-sm`},Et={key:1,class:`text-sm`},Dt={key:2,class:`text-sm`},Ot={key:3,class:`text-xs text-muted-foreground`},kt={key:4,class:`grid grid-cols-2 sm:grid-cols-4 gap-2`},At={class:`font-medium`},jt={class:`font-medium`},Mt={class:`font-medium`},Nt={class:`font-medium`},Pt=400,Ft=n({__name:`LogResponseViewer`,props:{raw:{},apiType:{},isStream:{type:Boolean},mode:{}},setup(n){let r=n,p=u(()=>{try{return JSON.parse(r.raw)}catch{return null}}),y=u(()=>p.value===null),C=u(()=>(p.value?.statusCode??0)>=Pt?`destructive`:`default`),w=u(()=>{let e=p.value?.headers||{};return Object.entries(e)}),T=u(()=>{if(!r.isStream&&p.value?.body)try{return JSON.parse(p.value.body)}catch{return{}}return{}}),E=u(()=>(T.value.choices||[]).map(e=>({role:e.message?.role||`assistant`,content:e.message?.content||``,finish_reason:e.finish_reason||``}))),A=u(()=>{let e=T.value.usage;return e?{prompt_tokens:e.prompt_tokens,completion_tokens:e.completion_tokens,total_tokens:e.total_tokens,cached_tokens:e.cached_tokens??e.prompt_tokens_details?.cached_tokens}:null}),R=u(()=>T.value.content||[]),z=u(()=>{let e=T.value.usage;return e?{input_tokens:e.input_tokens,output_tokens:e.output_tokens,cache_creation_input_tokens:e.cache_creation_input_tokens,cache_read_input_tokens:e.cache_read_input_tokens}:null}),{assembledBlocks:B,sseMeta:V,openaiAssembled:U,anthropicMessageStart:W,anthropicContentBlockStarts:G,anthropicDeltaGroups:K,anthropicMessageDelta:q,anthropicMessageStop:J,openaiSseRole:se,openaiSseFirstContent:le,openaiSseFinishReason:X,openaiSseCollapsedCount:ue,openaiSseUsage:Z}=He(u(()=>p.value?.body),r.isStream,r.apiType),de=ee({}),Q=f(`assembled`),{copied:fe,copy:pe}=ae();async function me(){await pe(r.raw)}return(r,u)=>(e(),a(d(te),{"default-value":n.mode??`structured`,"model-value":n.mode,class:`w-full`},{default:i(()=>[n.mode?m(``,!0):(e(),g(`div`,Ue,[h(d(D),null,{default:i(()=>[h(d(k),{value:`structured`},{default:i(()=>[...u[2]||=[o(`结构化`,-1)]]),_:1}),h(d(k),{value:`raw`},{default:i(()=>[o(_(n.isStream?`原始 SSE 文本`:`原始 JSON`),1)]),_:1})]),_:1}),h(d(v),{variant:`ghost`,size:`xs`,class:`h-auto py-1`,onClick:me},{default:i(()=>[o(_(d(fe)?`已复制`:`复制`),1)]),_:1})])),h(d(O),{value:`structured`,class:`space-y-3`},{default:i(()=>[y.value?(e(),g(`div`,We,`解析失败,请切换到原始 JSON 查看`)):(e(),g(s,{key:1},[c(`div`,Ge,[h(d(j),{variant:C.value},{default:i(()=>[o(`status: `+_(p.value.statusCode),1)]),_:1},8,[`variant`])]),h(d(x),null,{default:i(()=>[h(d(S),{"as-child":``},{default:i(()=>[h(d(v),{variant:`ghost`,size:`xs`,class:`px-0 h-auto text-xs`},{default:i(()=>[o(` Headers (`+_(w.value.length)+` 个) `,1)]),_:1})]),_:1}),h(d(b),null,{default:i(()=>[c(`div`,Ke,[h(d(re),null,{default:i(()=>[h(d(ie),null,{default:i(()=>[h(d(L),null,{default:i(()=>[h(d(I),{class:`w-1/3`},{default:i(()=>[...u[3]||=[o(`Key`,-1)]]),_:1}),h(d(I),null,{default:i(()=>[...u[4]||=[o(`Value`,-1)]]),_:1})]),_:1})]),_:1}),h(d(ne),null,{default:i(()=>[(e(!0),g(s,null,t(w.value,([t,n])=>(e(),a(d(L),{key:t},{default:i(()=>[h(d(F),{class:`font-medium`},{default:i(()=>[o(_(t),1)]),_:2},1024),h(d(F),{class:`break-all`},{default:i(()=>[o(_(n),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})])]),_:1})]),_:1}),n.isStream?(e(),g(`div`,ut,[c(`div`,dt,[h(d(v),{variant:`ghost`,class:l([Q.value===`assembled`?`bg-secondary`:``,`h-auto py-1`]),size:`xs`,onClick:u[0]||=e=>Q.value=`assembled`},{default:i(()=>[...u[16]||=[o(`完整响应`,-1)]]),_:1},8,[`class`]),h(d(v),{variant:`ghost`,class:l([Q.value===`raw-events`?`bg-secondary`:``,`h-auto py-1`]),size:`xs`,onClick:u[1]||=e=>Q.value=`raw-events`},{default:i(()=>[...u[17]||=[o(`原始事件流`,-1)]]),_:1},8,[`class`])]),Q.value===`assembled`?(e(),g(s,{key:0},[n.apiType===`anthropic`?(e(),g(s,{key:0},[c(`div`,ft,[d(V).id?(e(),a(H,{key:0,label:`id`,value:d(V).id},null,8,[`value`])):m(``,!0),d(V).model?(e(),a(H,{key:1,label:`model`,value:d(V).model,highlight:!0},null,8,[`value`])):m(``,!0),h(H,{label:`input`,value:String(d(V).inputTokens)},null,8,[`value`])]),(e(!0),g(s,null,t(d(B),(t,n)=>(e(),g(`div`,{key:n,class:l([`rounded-md border p-3`,d(ce)(t.type)])},[c(`div`,pt,[h(d(j),{class:l(d(Y)(t.type))},{default:i(()=>[o(_(t.type),1)]),_:2},1032,[`class`]),c(`span`,mt,_(t.eventCount)+` 个 delta 事件`,1),t.toolName?(e(),g(`span`,ht,_(t.toolName),1)):m(``,!0)]),t.content.length>500&&!de[n]?(e(),g(s,{key:0},[c(`pre`,gt,_(t.content.slice(0,500))+`...`,1),h(d(v),{variant:`link`,size:`xs`,class:`px-0`,onClick:e=>de[n]=!0},{default:i(()=>[...u[18]||=[o(`展开全部`,-1)]]),_:1},8,[`onClick`])],64)):(e(),g(`pre`,_t,_(t.content),1))],2))),128)),c(`div`,vt,[h(H,{label:`stop_reason`,value:d(V).stopReason||`-`},null,8,[`value`]),h(H,{label:`output_tokens`,value:String(d(V).outputTokens||`-`)},null,8,[`value`])])],64)):m(``,!0),n.apiType===`openai`&&d(U)?(e(),g(s,{key:1},[c(`div`,yt,[d(U).role?(e(),a(H,{key:0,label:`role`,value:d(U).role},null,8,[`value`])):m(``,!0),h(H,{label:`content delta`,value:String(d(U).contentEventCount)},null,8,[`value`]),d(U).finishReason?(e(),a(H,{key:1,label:`finish`,value:d(U).finishReason},null,8,[`value`])):m(``,!0)]),c(`div`,{class:l([`rounded-md border p-3`,d(ce)(`text`)])},[c(`pre`,bt,_(d(U).content),1)],2),d(U).usage?(e(),g(`div`,xt,[h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[19]||=c(`div`,{class:`text-muted-foreground`},`prompt_tokens`,-1),c(`div`,St,_(d(U).usage.prompt_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[20]||=c(`div`,{class:`text-muted-foreground`},`completion_tokens`,-1),c(`div`,Ct,_(d(U).usage.completion_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[21]||=c(`div`,{class:`text-muted-foreground`},`total_tokens`,-1),c(`div`,wt,_(d(U).usage.total_tokens??`-`),1)]),_:1})]),_:1})])):m(``,!0)],64)):m(``,!0)],64)):m(``,!0),Q.value===`raw-events`?(e(),g(s,{key:1},[n.apiType===`openai`?(e(),g(s,{key:0},[d(se)?(e(),g(`div`,Tt,[u[22]||=c(`span`,{class:`text-muted-foreground`},`role:`,-1),o(` `+_(d(se)),1)])):m(``,!0),d(le)?(e(),g(`div`,Et,[u[23]||=c(`span`,{class:`text-muted-foreground`},`first content delta:`,-1),o(` `+_(d(le)),1)])):m(``,!0),d(X)?(e(),g(`div`,Dt,[u[24]||=c(`span`,{class:`text-muted-foreground`},`finish_reason:`,-1),o(` `+_(d(X)),1)])):m(``,!0),d(ue)>0?(e(),g(`div`,Ot,` +`+_(d(ue))+` 个 delta 事件已折叠 `,1)):m(``,!0),d(Z)?(e(),g(`div`,kt,[h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[25]||=c(`div`,{class:`text-muted-foreground`},`prompt_tokens`,-1),c(`div`,At,_(d(Z).prompt_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[26]||=c(`div`,{class:`text-muted-foreground`},`completion_tokens`,-1),c(`div`,jt,_(d(Z).completion_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[27]||=c(`div`,{class:`text-muted-foreground`},`total_tokens`,-1),c(`div`,Mt,_(d(Z).total_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[28]||=c(`div`,{class:`text-muted-foreground`},`cached_tokens`,-1),c(`div`,Nt,_(d(Z).cached_tokens??`-`),1)]),_:1})]),_:1})])):m(``,!0)],64)):m(``,!0),n.apiType===`anthropic`?(e(),g(s,{key:1},[d(W)?(e(),a($,{key:0,"event-type":`message_start`,summary:`id=${d(W).id} model=${d(W).model} input_tokens=${d(W).input_tokens}`},null,8,[`summary`])):m(``,!0),(e(!0),g(s,null,t(d(G),(t,n)=>(e(),a($,{key:`cbs-`+n,"event-type":`content_block_start`,summary:`[${t.index}] ${t.type}`},null,8,[`summary`]))),128)),(e(!0),g(s,null,t(d(K),(t,n)=>(e(),a($,{key:`dg-`+n,"event-type":`content_block_delta`,summary:`${t.deltaType} · keep ${t.kept} 个${t.folded>0?` +${t.folded} 个已折叠 (${t.foldedChars} 字符)`:``}`},null,8,[`summary`]))),128)),d(q)?(e(),a($,{key:1,"event-type":`message_delta`,summary:`output_tokens=${d(q).output_tokens} stop_reason=${d(q).stop_reason}`,highlight:!0},null,8,[`summary`])):m(``,!0),d(J)?(e(),a($,{key:2,"event-type":`message_stop`,summary:`流结束`})):m(``,!0)],64)):m(``,!0)],64)):m(``,!0)])):(e(),g(s,{key:0},[n.apiType===`openai`?(e(),g(s,{key:0},[c(`div`,qe,[T.value.id?(e(),a(H,{key:0,label:`id`,value:String(T.value.id)},null,8,[`value`])):m(``,!0),T.value.model?(e(),a(H,{key:1,label:`model`,value:String(T.value.model),highlight:!0},null,8,[`value`])):m(``,!0),T.value.system_fingerprint?(e(),a(H,{key:2,label:`fingerprint`,value:String(T.value.system_fingerprint)},null,8,[`value`])):m(``,!0)]),E.value.length?(e(),g(`div`,Je,[u[6]||=c(`div`,{class:`text-xs font-medium text-muted-foreground`},`Choices`,-1),(e(!0),g(s,null,t(E.value,(t,n)=>(e(),a(d(M),{key:n,class:`bg-muted/40`},{default:i(()=>[h(d(P),{class:`pb-2 flex flex-row items-center gap-2`},{default:i(()=>[h(d(j),{variant:`secondary`},{default:i(()=>[o(_(t.role||`assistant`),1)]),_:2},1024),t.finish_reason?(e(),a(d(j),{key:0,variant:`outline`},{default:i(()=>[o(_(t.finish_reason),1)]),_:2},1024)):m(``,!0)]),_:2},1024),h(d(N),null,{default:i(()=>[h(d(x),null,{default:i(()=>[h(d(S),{"as-child":``},{default:i(()=>[h(d(v),{variant:`ghost`,size:`xs`,class:`px-0 h-auto text-xs`},{default:i(()=>[...u[5]||=[o(`内容`,-1)]]),_:1})]),_:1}),h(d(b),null,{default:i(()=>[c(`pre`,Ye,_(t.content),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))])):m(``,!0),A.value?(e(),g(`div`,Xe,[h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[7]||=c(`div`,{class:`text-muted-foreground`},`prompt_tokens`,-1),c(`div`,Ze,_(A.value.prompt_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[8]||=c(`div`,{class:`text-muted-foreground`},`completion_tokens`,-1),c(`div`,Qe,_(A.value.completion_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[9]||=c(`div`,{class:`text-muted-foreground`},`total_tokens`,-1),c(`div`,$e,_(A.value.total_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[10]||=c(`div`,{class:`text-muted-foreground`},`cached_tokens`,-1),c(`div`,et,_(A.value.cached_tokens??`-`),1)]),_:1})]),_:1})])):m(``,!0)],64)):m(``,!0),n.apiType===`anthropic`?(e(),g(s,{key:1},[c(`div`,tt,[T.value.id?(e(),a(H,{key:0,label:`id`,value:String(T.value.id)},null,8,[`value`])):m(``,!0),T.value.type?(e(),a(H,{key:1,label:`type`,value:String(T.value.type)},null,8,[`value`])):m(``,!0),T.value.model?(e(),a(H,{key:2,label:`model`,value:String(T.value.model),highlight:!0},null,8,[`value`])):m(``,!0),T.value.stop_reason?(e(),a(H,{key:3,label:`stop_reason`,value:String(T.value.stop_reason)},null,8,[`value`])):m(``,!0)]),R.value.length?(e(),g(`div`,nt,[u[11]||=c(`div`,{class:`text-xs font-medium text-muted-foreground`},`Content`,-1),(e(!0),g(s,null,t(R.value,(t,n)=>(e(),g(`div`,{key:n,class:`rounded-md border p-3`},[c(`div`,rt,[h(d(j),{class:l(d(Y)(t.type))},{default:i(()=>[o(_(t.type),1)]),_:2},1032,[`class`]),t.text?(e(),g(`span`,it,_(t.text),1)):m(``,!0)])]))),128))])):m(``,!0),z.value?(e(),g(`div`,at,[h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[12]||=c(`div`,{class:`text-muted-foreground`},`input_tokens`,-1),c(`div`,ot,_(z.value.input_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[13]||=c(`div`,{class:`text-muted-foreground`},`output_tokens`,-1),c(`div`,st,_(z.value.output_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[14]||=c(`div`,{class:`text-muted-foreground`},`cache_creation`,-1),c(`div`,ct,_(z.value.cache_creation_input_tokens??`-`),1)]),_:1})]),_:1}),h(d(M),{class:`bg-muted/40`},{default:i(()=>[h(d(N),{class:`py-2 px-3 text-xs`},{default:i(()=>[u[15]||=c(`div`,{class:`text-muted-foreground`},`cache_read`,-1),c(`div`,lt,_(z.value.cache_read_input_tokens??`-`),1)]),_:1})]),_:1})])):m(``,!0)],64)):m(``,!0)],64))],64))]),_:1}),h(d(O),{value:`raw`},{default:i(()=>[h(oe,{content:n.raw,"hide-copy-button":``},null,8,[`content`])]),_:1})]),_:1},8,[`default-value`,`model-value`]))}}),It={key:0,class:`font-mono text-xs text-muted-foreground font-normal select-all`},Lt={key:0,class:`space-y-3 py-4`},Rt={class:`p-4`},zt={class:`p-4`},Bt={class:`p-4`},Vt={class:`p-4`},Ht={key:2,class:`py-8 text-center text-muted-foreground`},Ut=n({__name:`LogDetailDialog`,props:{open:{type:Boolean,required:!0},openModifiers:{}},emits:[`update:open`],setup(n,{expose:y}){let te=r(n,`open`),D=f(!1),O=f(null),k=f([!0,!1,!1,!1]),j=ee({client_request:`structured`,upstream_request:`structured`,upstream_response:`structured`,client_response:`structured`}),P=u(()=>O.value?.api_type===`openai`?`openai`:`anthropic`),ne=u(()=>{let e=O.value;if(!e)return`{}`;if(!e.client_request)return e.request_body||`{}`;try{let t=JSON.parse(e.client_request);if(t.body!=null)return e.client_request;if(e.request_body){try{t.body=JSON.parse(e.request_body)}catch{t.body=e.request_body}return JSON.stringify(t)}}catch{return e.client_request}return e.client_request}),F=u(()=>{let e=O.value;return e?e.client_response?e.client_response:e.response_body?JSON.stringify({statusCode:e.status_code,body:e.response_body}):``:``});async function I(e){D.value=!0,O.value=null,k.value=[!0,!1,!1,!1],Object.assign(j,{client_request:`structured`,upstream_request:`structured`,upstream_response:`structured`,client_response:`structured`});try{O.value=(await p.getLogDetail(e)).data}catch(e){console.error(`Failed to load log detail:`,e),A.error(`加载日志详情失败`)}finally{D.value=!1}}return y({load:I}),(n,r)=>(e(),a(d(T),{open:te.value,"onUpdate:open":r[4]||=e=>te.value=e},{default:i(()=>[h(d(C),{class:`max-w-4xl max-h-[85vh]`},{default:i(()=>[h(d(w),null,{default:i(()=>[h(d(E),null,{default:i(()=>[r[5]||=o(`请求详情 `,-1),O.value?(e(),g(`span`,It,_(O.value.id.slice(0,8)),1)):m(``,!0)]),_:1})]),_:1}),D.value?(e(),g(`div`,Lt,[h(d(R),{class:`h-6 w-48`}),(e(),g(s,null,t(4,e=>h(d(R),{key:e,class:`h-12 w-full`})),64))])):O.value?(e(),g(s,{key:1},[h(d(x),{open:k.value[0],"onUpdate:open":r[0]||=e=>k.value[0]=e,class:`border rounded-md mb-2`},{default:i(()=>[h(d(S),{"as-child":``},{default:i(()=>[h(d(v),{variant:`ghost`,class:`w-full px-4 py-3 text-left text-sm font-medium text-foreground bg-muted/50 hover:bg-muted rounded-md flex items-center gap-2`},{default:i(()=>[c(`span`,{class:l([`text-xs transition-transform`,k.value[0]?``:`-rotate-90`])},`▼`,2),r[6]||=o(` 客户端原始请求 `,-1)]),_:1})]),_:1}),h(d(b),null,{default:i(()=>[c(`div`,Rt,[h(Le,{raw:ne.value,"api-type":P.value,mode:j.client_request},null,8,[`raw`,`api-type`,`mode`])])]),_:1})]),_:1},8,[`open`]),O.value.upstream_request?(e(),a(d(x),{key:0,open:k.value[1],"onUpdate:open":r[1]||=e=>k.value[1]=e,class:`border rounded-md mb-2`},{default:i(()=>[h(d(S),{"as-child":``},{default:i(()=>[h(d(v),{variant:`ghost`,class:`w-full px-4 py-3 text-left text-sm font-medium text-foreground bg-muted/50 hover:bg-muted rounded-md flex items-center gap-2`},{default:i(()=>[c(`span`,{class:l([`text-xs transition-transform`,k.value[1]?``:`-rotate-90`])},`▼`,2),r[7]||=o(` Router → LLM API 请求 `,-1)]),_:1})]),_:1}),h(d(b),null,{default:i(()=>[c(`div`,zt,[h(Le,{raw:O.value.upstream_request,"api-type":P.value,"show-url":!0,mode:j.upstream_request},null,8,[`raw`,`api-type`,`mode`])])]),_:1})]),_:1},8,[`open`])):m(``,!0),O.value.upstream_response||O.value.response_body?(e(),a(d(x),{key:1,open:k.value[2],"onUpdate:open":r[2]||=e=>k.value[2]=e,class:`border rounded-md mb-2`},{default:i(()=>[h(d(S),{"as-child":``},{default:i(()=>[h(d(v),{variant:`ghost`,class:`w-full px-4 py-3 text-left text-sm font-medium text-foreground bg-muted/50 hover:bg-muted rounded-md flex items-center gap-2`},{default:i(()=>[c(`span`,{class:l([`text-xs transition-transform`,k.value[2]?``:`-rotate-90`])},`▼`,2),r[8]||=o(` LLM API 返回的原始响应 `,-1)]),_:1})]),_:1}),h(d(b),null,{default:i(()=>[c(`div`,Bt,[h(Ft,{raw:O.value.upstream_response||O.value.response_body||`{}`,"api-type":P.value,"is-stream":!!O.value.is_stream,mode:j.upstream_response},null,8,[`raw`,`api-type`,`is-stream`,`mode`])])]),_:1})]),_:1},8,[`open`])):m(``,!0),F.value?(e(),a(d(x),{key:2,open:k.value[3],"onUpdate:open":r[3]||=e=>k.value[3]=e,class:`border rounded-md`},{default:i(()=>[h(d(S),{"as-child":``},{default:i(()=>[h(d(v),{variant:`ghost`,class:`w-full px-4 py-3 text-left text-sm font-medium text-foreground bg-muted/50 hover:bg-muted rounded-md flex items-center gap-2`},{default:i(()=>[c(`span`,{class:l([`text-xs transition-transform`,k.value[3]?``:`-rotate-90`])},`▼`,2),r[9]||=o(` Router → 客户端响应 `,-1)]),_:1})]),_:1}),h(d(b),null,{default:i(()=>[c(`div`,Vt,[h(Ft,{raw:F.value,"api-type":P.value,"is-stream":!!O.value.is_stream,mode:j.client_response},null,8,[`raw`,`api-type`,`is-stream`,`mode`])])]),_:1})]),_:1},8,[`open`])):m(``,!0),O.value.error_message?(e(),a(d(M),{key:3,class:`bg-destructive/10 ring-destructive/20 mt-2`},{default:i(()=>[h(d(N),{class:`py-3 text-sm text-destructive`},{default:i(()=>[o(_(O.value.error_message),1)]),_:1})]),_:1})):m(``,!0)],64)):(e(),g(`div`,Ht,`未找到日志`))]),_:1})]),_:1},8,[`open`]))}});export{R as n,Ut as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as e,S as t,Y as n,a as r,b as i,g as a,mt as o,ot as s,t as c,u as l,v as u,x as d,y as f,yt as p}from"./client-
|
|
1
|
+
import{F as e,S as t,Y as n,a as r,b as i,g as a,mt as o,ot as s,t as c,u as l,v as u,x as d,y as f,yt as p}from"./client-DIIo9zPK.js";import{n as m}from"./button-Dcc0gF5i.js";import{t as h}from"./Label-UyNN2jyE.js";import{n as g,t as _}from"./CardContent-CTnwqTdL.js";import{t as v}from"./Input-DRIid2C6.js";var y={class:`min-h-screen flex items-center justify-center bg-background`},b={key:0,class:`text-destructive text-sm`},x=t({__name:`Login`,setup(t){let x=r(),S=s(``),C=s(``),w=s(!1);async function T(){if(S.value){C.value=``,w.value=!0;try{await c.login(S.value),x.push(`/`)}catch(e){C.value=e.response?.data?.error?.message||`登录失败`}finally{w.value=!1}}}return(t,r)=>(e(),f(`div`,y,[d(o(g),{class:`w-full max-w-sm shadow-lg`},{default:n(()=>[d(o(_),{class:`pt-6`},{default:n(()=>[r[2]||=a(`div`,{class:`text-center mb-6`},[a(`div`,{class:`w-12 h-12 bg-primary rounded-lg mx-auto mb-3 flex items-center justify-center`},[a(`svg`,{class:`w-7 h-7 text-white`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[a(`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`})])]),a(`h1`,{class:`text-xl font-semibold text-foreground`},`LLM Simple Router`),a(`p`,{class:`text-sm text-muted-foreground mt-1`},`管理后台登录`)],-1),a(`form`,{onSubmit:l(T,[`prevent`]),class:`space-y-4`},[a(`div`,null,[d(o(h),{class:`block text-sm font-medium text-foreground mb-1`},{default:n(()=>[...r[1]||=[i(`密码`,-1)]]),_:1}),d(o(v),{modelValue:S.value,"onUpdate:modelValue":r[0]||=e=>S.value=e,type:`password`,placeholder:`输入管理员密码`,disabled:w.value},null,8,[`modelValue`,`disabled`])]),C.value?(e(),f(`p`,b,p(C.value),1)):u(``,!0),d(o(m),{type:`submit`,class:`w-full`,disabled:w.value},{default:n(()=>[i(p(w.value?`登录中...`:`登 录`),1)]),_:1},8,[`disabled`])],32)]),_:1})]),_:1})]))}});export{x as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{F as e,L as t,M as n,S as r,Y as i,_ as a,b as o,f as s,g as c,gt as l,mt as u,ot as d,t as f,v as p,x as m,y as h,yt as g}from"./client-DIIo9zPK.js";import{a as _,i as v,n as y,r as b,t as x}from"./SelectValue-zO8t-tx1.js";import{n as S}from"./button-Dcc0gF5i.js";import{i as ee,o as te,r as ne,s as re,t as ie}from"./dialog-CxSyR-fN.js";import{t as ae}from"./Label-UyNN2jyE.js";import{n as C,r as w}from"./lib-Bl0OuBjh.js";import{a as oe,i as T,n as E,o as se,r as D,t as O}from"./TableHeader-DpHWSnxK.js";import{t as k}from"./Input-DRIid2C6.js";import{n as ce,t as le}from"./LogDetailDialog-8BT4vIlV.js";import{t as A}from"./format-CPdJtjZ5.js";var j={key:1,class:`ml-4 text-muted-foreground text-xs`},M={class:`font-mono`},N={key:2,class:`text-muted-foreground`},P={key:1,class:`text-muted-foreground`},F={key:1,class:`text-muted-foreground`},I=r({__name:`LogTableRow`,props:{log:{},isChild:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1}},emits:[`toggleExpand`,`openDetail`],setup(t,{emit:n}){let r=n;function d(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(n,f)=>(e(),a(u(D),{class:l({"bg-destructive/10":!t.isChild&&(t.log.status_code??0)>=400,"bg-muted/20":t.isChild})},{default:i(()=>[m(u(T),{class:`w-10`},{default:i(()=>[!t.isChild&&t.log.child_count?(e(),a(u(S),{key:0,variant:`ghost`,size:`xs`,onClick:f[0]||=e=>r(`toggleExpand`,t.log)},{default:i(()=>[c(`span`,{class:l([`text-xs transition-transform`,t.expanded?``:`-rotate-90`])},`▼`,2)]),_:1})):p(``,!0),t.isChild?(e(),h(`span`,j,`└`)):p(``,!0)]),_:1}),m(u(T),{class:`font-mono text-xs text-muted-foreground`,title:t.log.id},{default:i(()=>[o(g(t.log.id.slice(0,8)),1)]),_:1},8,[`title`]),m(u(T),{class:`text-muted-foreground`},{default:i(()=>[o(g(u(A)(t.log.created_at)),1)]),_:1}),m(u(T),null,{default:i(()=>[m(u(w),{variant:t.log.api_type===`openai`?`default`:`secondary`},{default:i(()=>[o(g(t.log.api_type),1)]),_:1},8,[`variant`])]),_:1}),m(u(T),{class:`font-mono text-xs`},{default:i(()=>[o(g(t.log.model||`-`)+` `,1),!t.isChild&&t.log.original_model?(e(),a(u(w),{key:0,variant:`secondary`,class:`ml-1 text-xs`},{default:i(()=>[...f[2]||=[o(`已替换`,-1)]]),_:1})):p(``,!0)]),_:1}),m(u(T),{class:`text-xs`},{default:i(()=>[!t.isChild&&t.log.provider_id===u(`router`)?(e(),a(u(w),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:i(()=>[o(` 代理增强:`+g(d(t.log.upstream_request)),1)]),_:1})):t.log.backend_model||t.log.provider_name?(e(),h(s,{key:1},[c(`span`,M,g(t.log.backend_model||`-`),1),f[3]||=c(`span`,{class:`text-muted-foreground`},` @ `,-1),m(u(w),{variant:`outline`,class:`text-[10px] px-1 py-0`},{default:i(()=>[o(g(t.log.provider_name||t.log.provider_id||`-`),1)]),_:1})],64)):(e(),h(`span`,N,`-`))]),_:1}),m(u(T),null,{default:i(()=>[m(u(w),{variant:(t.log.status_code??0)<400?`default`:`destructive`},{default:i(()=>[o(g(t.log.status_code||`-`),1)]),_:1},8,[`variant`])]),_:1}),m(u(T),null,{default:i(()=>[o(g(t.log.latency_ms?t.log.latency_ms+`ms`:`-`),1)]),_:1}),m(u(T),null,{default:i(()=>[o(g(t.log.is_stream?`Yes`:`No`),1)]),_:1}),m(u(T),null,{default:i(()=>[t.log.is_retry?(e(),a(u(w),{key:0,variant:`outline`,class:`text-warning-dark border-warning`},{default:i(()=>[...f[4]||=[o(`重试`,-1)]]),_:1})):(e(),h(`span`,P,`-`))]),_:1}),m(u(T),null,{default:i(()=>[t.log.is_failover?(e(),a(u(w),{key:0,variant:`outline`,class:`text-danger-dark border-danger`},{default:i(()=>[...f[5]||=[o(`故障转移`,-1)]]),_:1})):(e(),h(`span`,F,`-`))]),_:1}),m(u(T),{class:`text-destructive text-xs`},{default:i(()=>[o(g(t.log.error_message||`-`),1)]),_:1}),m(u(T),null,{default:i(()=>[m(u(S),{variant:`ghost`,size:`sm`,onClick:f[1]||=e=>r(`openDetail`,t.log.id)},{default:i(()=>[...f[6]||=[o(`详情`,-1)]]),_:1})]),_:1})]),_:1},8,[`class`]))}}),L={class:`p-6`},R={class:`flex items-center justify-between mb-4`},z={class:`flex items-center gap-2`},B={class:`bg-card rounded-lg border overflow-hidden`},V={class:`flex items-center justify-between mt-4`},H={class:`text-sm text-muted-foreground`},U={class:`flex gap-1`},ue={class:`px-3 py-1 text-sm text-muted-foreground`},de={class:`mb-4`},W=20,G=13,K=r({__name:`Logs`,setup(r){let l=d([]),w=d(0),A=d(1),j=d(`all`),M=d(`all`),N=d([]),P=d(!1),F=d(30),K=d(new Set),q=d({}),J=d({}),Y=d(!1),X=d(null);async function fe(e){let t=e.id;if(K.value.has(t)){K.value.delete(t);return}if(K.value.add(t),!q.value[t]){J.value[t]=!0;try{let e=await f.getLogChildren(t);q.value[t]=e.data}catch(e){console.error(`Failed to load child logs:`,e),C.error(`加载子请求失败`)}finally{J.value[t]=!1}}}function Z(e){Y.value=!0,X.value?.load(e)}async function Q(){try{let e={page:A.value,limit:W,view:`grouped`};j.value&&j.value!==`all`&&(e.api_type=j.value),M.value&&M.value!==`all`&&(e.router_key_id=M.value);let t=await f.getLogs(e);l.value=t.data,w.value=t.total,K.value.clear(),q.value={},J.value={}}catch(e){console.error(`Failed to load logs:`,e),C.error(`加载日志失败`)}}function $(){A.value=1,Q()}function pe(){A.value>1&&(A.value--,Q())}function me(){A.value++,Q()}async function he(){try{let e=new Date(Date.now()-F.value*864e5).toISOString(),t=await f.deleteLogsBefore(e);P.value=!1,A.value=1,await Q(),C.success(`已清理 ${t.deleted} 条日志`)}catch(e){console.error(`Failed to cleanup logs:`,e),C.error(`清理日志失败`)}}async function ge(){try{N.value=await f.getRouterKeys()}catch(e){console.error(`Failed to load router keys:`,e),C.error(`加载密钥列表失败`)}}return n(()=>{ge(),Q()}),(n,r)=>(e(),h(`div`,L,[c(`div`,R,[r[12]||=c(`h2`,{class:`text-lg font-semibold text-foreground`},`请求日志`,-1),c(`div`,z,[m(u(_),{modelValue:j.value,"onUpdate:modelValue":[r[0]||=e=>j.value=e,$]},{default:i(()=>[m(u(y),{class:`w-[140px]`},{default:i(()=>[m(u(x),{placeholder:`全部类型`})]),_:1}),m(u(v),null,{default:i(()=>[m(u(b),{value:`all`},{default:i(()=>[...r[7]||=[o(`全部类型`,-1)]]),_:1}),m(u(b),{value:`openai`},{default:i(()=>[...r[8]||=[o(`OpenAI`,-1)]]),_:1}),m(u(b),{value:`anthropic`},{default:i(()=>[...r[9]||=[o(`Anthropic`,-1)]]),_:1})]),_:1})]),_:1},8,[`modelValue`]),m(u(_),{modelValue:M.value,"onUpdate:modelValue":[r[1]||=e=>M.value=e,$]},{default:i(()=>[m(u(y),{class:`w-48`},{default:i(()=>[m(u(x),{placeholder:`全部密钥`})]),_:1}),m(u(v),null,{default:i(()=>[m(u(b),{value:`all`},{default:i(()=>[...r[10]||=[o(`全部密钥`,-1)]]),_:1}),(e(!0),h(s,null,t(N.value,t=>(e(),a(u(b),{key:t.id,value:t.id},{default:i(()=>[o(g(t.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),m(u(S),{variant:`outline`,class:`text-destructive border-destructive hover:bg-destructive/10`,onClick:r[2]||=e=>P.value=!0},{default:i(()=>[...r[11]||=[o(` 清理日志 `,-1)]]),_:1})])]),c(`div`,B,[m(u(se),null,{default:i(()=>[m(u(O),null,{default:i(()=>[m(u(D),{class:`bg-muted`},{default:i(()=>[m(u(E),{class:`w-10`}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[13]||=[o(`ID`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[14]||=[o(`时间`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[15]||=[o(`类型`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[16]||=[o(`模型`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[17]||=[o(`实际转发`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[18]||=[o(`状态码`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[19]||=[o(`延迟`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[20]||=[o(`流式`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[21]||=[o(`重试`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[22]||=[o(`故障转移`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[23]||=[o(`错误`,-1)]]),_:1}),m(u(E),{class:`text-muted-foreground`},{default:i(()=>[...r[24]||=[o(`操作`,-1)]]),_:1})]),_:1})]),_:1}),m(u(oe),null,{default:i(()=>[(e(!0),h(s,null,t(l.value,n=>(e(),h(s,{key:n.id},[m(I,{log:n,expanded:K.value.has(n.id),onToggleExpand:fe,onOpenDetail:Z},null,8,[`log`,`expanded`]),K.value.has(n.id)?(e(),h(s,{key:0},[J.value[n.id]?(e(),a(u(D),{key:0},{default:i(()=>[m(u(T),{colspan:G,class:`text-center py-2 pl-10`},{default:i(()=>[m(u(ce),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):q.value[n.id]?.length?(e(!0),h(s,{key:1},t(q.value[n.id],t=>(e(),a(I,{key:t.id,log:t,"is-child":!0,onOpenDetail:Z},null,8,[`log`]))),128)):p(``,!0)],64)):p(``,!0)],64))),128)),l.value.length===0?(e(),a(u(D),{key:0},{default:i(()=>[m(u(T),{colspan:G,class:`text-center text-muted-foreground py-8`},{default:i(()=>[...r[25]||=[o(`暂无日志`,-1)]]),_:1})]),_:1})):p(``,!0)]),_:1})]),_:1})]),c(`div`,V,[c(`p`,H,`共 `+g(w.value)+` 条`,1),c(`div`,U,[m(u(S),{variant:`outline`,size:`sm`,onClick:pe,disabled:A.value<=1},{default:i(()=>[...r[26]||=[o(`上一页`,-1)]]),_:1},8,[`disabled`]),c(`span`,ue,`第 `+g(A.value)+` 页`,1),m(u(S),{variant:`outline`,size:`sm`,onClick:me,disabled:l.value.length<W},{default:i(()=>[...r[27]||=[o(`下一页`,-1)]]),_:1},8,[`disabled`])])]),m(le,{ref_key:`logDetailRef`,ref:X,open:Y.value,"onUpdate:open":r[3]||=e=>Y.value=e},null,8,[`open`]),m(u(re),{open:P.value,"onUpdate:open":r[6]||=e=>P.value=e},{default:i(()=>[m(u(te),null,{default:i(()=>[m(u(ne),null,{default:i(()=>[m(u(ie),null,{default:i(()=>[...r[28]||=[o(`清理日志`,-1)]]),_:1})]),_:1}),r[32]||=c(`p`,{class:`text-sm text-muted-foreground`},`删除指定天数之前的日志`,-1),c(`div`,de,[m(u(ae),{class:`block text-sm font-medium text-foreground mb-1`},{default:i(()=>[...r[29]||=[o(`保留最近天数`,-1)]]),_:1}),m(u(k),{modelValue:F.value,"onUpdate:modelValue":r[4]||=e=>F.value=e,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),m(u(ee),null,{default:i(()=>[m(u(S),{variant:`outline`,onClick:r[5]||=e=>P.value=!1},{default:i(()=>[...r[30]||=[o(`取消`,-1)]]),_:1}),m(u(S),{variant:`destructive`,onClick:he},{default:i(()=>[...r[31]||=[o(`确认清理`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{K as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as e,K as t,L as n,M as r,S as i,Y as a,_ as o,b as s,f as c,g as l,h as u,mt as d,ot as f,t as p,u as m,v as h,x as g,y as _,yt as v}from"./client-Mb8fy_bC.js";import{a as y,i as b,n as x,r as S,t as C}from"./SelectValue-B32pgmTJ.js";import{n as w}from"./button-D54q76GQ.js";import{n as T,r as E,t as D}from"./CollapsibleTrigger-BFNhb19_.js";import{a as O,i as k,o as A,r as j,s as M,t as N}from"./dialog-DSH5k5Kj.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-BAR1JRmT.js";import{t as V}from"./Label-CXAeFn-r.js";import{n as H,r as U}from"./lib-BgOqOzXI.js";import{n as ee,t as te}from"./CardContent-CucI6u41.js";import{t as W}from"./CardHeader-d-DYsWxe.js";import{t as G}from"./CardTitle-CIDEQkWB.js";import{t as K}from"./Input-HN3Il0-c.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=i({__name:`MappingGroupFormDialog`,props:{open:{type:Boolean},editingId:{},form:{},providers:{},providerModels:{}},emits:[`update:open`,`save`,`addWindow`,`removeWindow`,`addTarget`,`removeTarget`,`moveTargetUp`,`moveTargetDown`],setup(r,{emit:i}){let p=r,T=i,E=u(()=>p.providerModels.get(p.form.default.provider_id)||[]);function D(e){let t=p.form.windows[e]?.target?.provider_id;return t&&p.providerModels.get(t)||[]}function P(e){if(typeof e!=`string`)return;p.form.default.provider_id=e;let t=p.providerModels.get(e)||[];p.form.default.backend_model=t[0]||``}function F(e,t){if(typeof t!=`string`)return;p.form.windows[e].target.provider_id=t;let n=p.providerModels.get(t)||[];p.form.windows[e].target.backend_model=n[0]||``}function I(e){let t=p.form.targets[e]?.provider_id;return t&&p.providerModels.get(t)||[]}function L(e,t){if(typeof t!=`string`)return;p.form.targets[e].provider_id=t;let n=p.providerModels.get(t)||[];p.form.targets[e].backend_model=n[0]||``}function R(){H()&&T(`save`)}let z=/^\d{2}:\d{2}$/,B=f({});function H(){let e={};return p.form.client_model.trim()||(e.client_model=`请输入客户端模型名称`),p.form.strategy===`scheduled`?(p.form.default.provider_id||(e[`default.provider_id`]=`请选择供应商`),p.form.default.backend_model||(e[`default.backend_model`]=`请选择后端模型`),p.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`]=`请选择后端模型`)})):(p.form.targets.length===0&&(e.targets=`至少添加一个目标`),p.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 t(()=>p.open,e=>{e&&(B.value={})}),(t,i)=>(e(),o(d(M),{open:r.open,"onUpdate:open":i[7]||=e=>T(`update:open`,e)},{default:a(()=>[g(d(A),{class:`max-w-2xl`},{default:a(()=>[g(d(j),null,{default:a(()=>[g(d(N),null,{default:a(()=>[s(v(r.editingId?`编辑分组`:`添加分组`),1)]),_:1}),g(d(O),null,{default:a(()=>[...i[8]||=[s(`配置客户端模型到后端供应商模型的映射规则`,-1)]]),_:1})]),_:1}),l(`form`,{onSubmit:m(R,[`prevent`]),class:`space-y-4`},[l(`div`,null,[g(d(V),{class:`block text-sm font-medium text-foreground mb-1`},{default:a(()=>[...i[9]||=[s(`客户端模型`,-1)]]),_:1}),g(d(K),{modelValue:r.form.client_model,"onUpdate:modelValue":i[0]||=e=>r.form.client_model=e,type:`text`,required:``,onInput:i[1]||=e=>delete B.value.client_model},null,8,[`modelValue`]),B.value.client_model?(e(),_(`p`,q,v(B.value.client_model),1)):h(``,!0)]),l(`div`,null,[g(d(V),{class:`block text-sm font-medium text-foreground mb-1`},{default:a(()=>[...i[10]||=[s(`策略`,-1)]]),_:1}),g(d(y),{modelValue:r.form.strategy,"onUpdate:modelValue":i[2]||=e=>r.form.strategy=e},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:`选择策略`})]),_:1}),g(d(b),null,{default:a(()=>[g(d(S),{value:`scheduled`},{default:a(()=>[...i[11]||=[s(`定时切换 (scheduled)`,-1)]]),_:1}),g(d(S),{value:`round-robin`},{default:a(()=>[...i[12]||=[s(`轮询 (round-robin)`,-1)]]),_:1}),g(d(S),{value:`random`},{default:a(()=>[...i[13]||=[s(`随机 (random)`,-1)]]),_:1}),g(d(S),{value:`failover`},{default:a(()=>[...i[14]||=[s(`故障转移 (failover)`,-1)]]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),r.form.strategy===`scheduled`?(e(),_(c,{key:0},[l(`div`,J,[i[17]||=l(`div`,{class:`text-sm font-medium text-foreground`},`默认目标`,-1),l(`div`,Y,[l(`div`,X,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[15]||=[s(`供应商`,-1)]]),_:1}),g(d(y),{"model-value":r.form.default.provider_id,"onUpdate:modelValue":P},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:`选择供应商`})]),_:1}),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(r.providers,t=>(e(),o(d(S),{key:t.id,value:t.id},{default:a(()=>[s(v(t.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`]),B.value[`default.provider_id`]?(e(),_(`p`,Z,v(B.value[`default.provider_id`]),1)):h(``,!0)]),l(`div`,Q,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[16]||=[s(`后端模型`,-1)]]),_:1}),g(d(y),{modelValue:r.form.default.backend_model,"onUpdate:modelValue":i[3]||=e=>r.form.default.backend_model=e,disabled:E.value.length===0},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:E.value.length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:1}),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(E.value,t=>(e(),o(d(S),{key:t,value:t},{default:a(()=>[s(v(t),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`,`disabled`]),B.value[`default.backend_model`]?(e(),_(`p`,ne,v(B.value[`default.backend_model`]),1)):h(``,!0)])])]),l(`div`,re,[l(`div`,ie,[i[19]||=l(`div`,{class:`text-sm font-medium text-foreground`},`时间窗口`,-1),g(d(w),{type:`button`,variant:`outline`,size:`sm`,onClick:i[4]||=e=>T(`addWindow`)},{default:a(()=>[...i[18]||=[s(`添加窗口`,-1)]]),_:1})]),(e(!0),_(c,null,n(r.form.windows,(t,u)=>(e(),_(`div`,{key:u,class:`border rounded-md p-2 space-y-2`},[l(`div`,ae,[l(`div`,oe,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[20]||=[s(`开始`,-1)]]),_:1}),g(d(K),{modelValue:t.start,"onUpdate:modelValue":e=>t.start=e,type:`text`,placeholder:`HH:MM`,required:``,onInput:e=>delete B.value[`window.${u}.start`]},null,8,[`modelValue`,`onUpdate:modelValue`,`onInput`]),B.value[`window.${u}.start`]?(e(),_(`p`,se,v(B.value[`window.${u}.start`]),1)):h(``,!0)]),i[23]||=l(`span`,{class:`text-muted-foreground pb-1.5`},`-`,-1),l(`div`,ce,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[21]||=[s(`结束`,-1)]]),_:1}),g(d(K),{modelValue:t.end,"onUpdate:modelValue":e=>t.end=e,type:`text`,placeholder:`HH:MM`,required:``,onInput:e=>delete B.value[`window.${u}.end`]},null,8,[`modelValue`,`onUpdate:modelValue`,`onInput`]),B.value[`window.${u}.end`]?(e(),_(`p`,le,v(B.value[`window.${u}.end`]),1)):h(``,!0)]),i[24]||=l(`div`,{class:`flex-1`},null,-1),g(d(w),{type:`button`,variant:`ghost`,size:`sm`,class:`text-destructive shrink-0`,onClick:e=>T(`removeWindow`,u)},{default:a(()=>[...i[22]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])]),l(`div`,ue,[l(`div`,de,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[25]||=[s(`供应商`,-1)]]),_:1}),g(d(y),{"model-value":t.target.provider_id,"onUpdate:modelValue":e=>F(u,e)},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:`选择供应商`})]),_:1}),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(r.providers,t=>(e(),o(d(S),{key:t.id,value:t.id},{default:a(()=>[s(v(t.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`]),B.value[`window.${u}.provider_id`]?(e(),_(`p`,fe,v(B.value[`window.${u}.provider_id`]),1)):h(``,!0)]),l(`div`,pe,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[26]||=[s(`后端模型`,-1)]]),_:1}),g(d(y),{modelValue:t.target.backend_model,"onUpdate:modelValue":e=>t.target.backend_model=e,disabled:D(u).length===0},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:D(u).length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:2},1024),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(D(u),t=>(e(),o(d(S),{key:t,value:t},{default:a(()=>[s(v(t),1)]),_:2},1032,[`value`]))),128))]),_:2},1024)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`disabled`]),B.value[`window.${u}.backend_model`]?(e(),_(`p`,me,v(B.value[`window.${u}.backend_model`]),1)):h(``,!0)])])]))),128)),r.form.windows.length===0?(e(),_(`div`,he,`暂无窗口`)):h(``,!0)])],64)):(e(),_(`div`,ge,[l(`div`,_e,[i[28]||=l(`div`,{class:`text-sm font-medium text-foreground`},`目标列表`,-1),g(d(w),{type:`button`,variant:`outline`,size:`sm`,onClick:i[5]||=e=>T(`addTarget`)},{default:a(()=>[...i[27]||=[s(`添加目标`,-1)]]),_:1})]),B.value.targets?(e(),_(`p`,ve,v(B.value.targets),1)):h(``,!0),(e(!0),_(c,null,n(r.form.targets,(t,u)=>(e(),_(`div`,{key:u,class:`border rounded-md p-2 space-y-2`},[l(`div`,ye,[l(`div`,be,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[29]||=[s(`供应商`,-1)]]),_:1}),g(d(y),{"model-value":t.provider_id,"onUpdate:modelValue":e=>L(u,e)},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:`选择供应商`})]),_:1}),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(r.providers,t=>(e(),o(d(S),{key:t.id,value:t.id},{default:a(()=>[s(v(t.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`]),B.value[`target.${u}.provider_id`]?(e(),_(`p`,xe,v(B.value[`target.${u}.provider_id`]),1)):h(``,!0)]),l(`div`,Se,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[30]||=[s(`后端模型`,-1)]]),_:1}),g(d(y),{modelValue:t.backend_model,"onUpdate:modelValue":e=>t.backend_model=e,disabled:I(u).length===0},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:I(u).length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:2},1024),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(I(u),t=>(e(),o(d(S),{key:t,value:t},{default:a(()=>[s(v(t),1)]),_:2},1032,[`value`]))),128))]),_:2},1024)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`disabled`]),B.value[`target.${u}.backend_model`]?(e(),_(`p`,Ce,v(B.value[`target.${u}.backend_model`]),1)):h(``,!0)])]),l(`div`,we,[r.form.strategy===`failover`?(e(),o(d(w),{key:0,type:`button`,variant:`ghost`,size:`sm`,disabled:u===0,onClick:e=>T(`moveTargetUp`,u)},{default:a(()=>[...i[31]||=[s(`↑`,-1)]]),_:1},8,[`disabled`,`onClick`])):h(``,!0),r.form.strategy===`failover`?(e(),o(d(w),{key:1,type:`button`,variant:`ghost`,size:`sm`,disabled:u===r.form.targets.length-1,onClick:e=>T(`moveTargetDown`,u)},{default:a(()=>[...i[32]||=[s(`↓`,-1)]]),_:1},8,[`disabled`,`onClick`])):h(``,!0),g(d(w),{type:`button`,variant:`ghost`,size:`sm`,class:`text-destructive shrink-0`,onClick:e=>T(`removeTarget`,u)},{default:a(()=>[...i[33]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])])]))),128)),r.form.targets.length===0?(e(),_(`div`,Te,`暂无目标`)):h(``,!0)])),g(d(k),null,{default:a(()=>[g(d(w),{type:`button`,variant:`outline`,onClick:i[6]||=e=>T(`update:open`,!1)},{default:a(()=>[...i[34]||=[s(`取消`,-1)]]),_:1}),g(d(w),{type:`submit`},{default:a(()=>[...i[35]||=[s(`保存`,-1)]]),_:1})]),_:1})],32)]),_:1})]),_:1},8,[`open`]))}}),De=i({__name:`MappingGroupDeleteDialog`,props:{target:{}},emits:[`confirm`,`cancel`],setup(t,{emit:n}){let r=n;return(n,i)=>(e(),o(d(F),{open:!!t.target,"onUpdate:open":i[1]||=e=>{e||r(`cancel`)}},{default:a(()=>[g(d(P),null,{default:a(()=>[g(d(L),null,{default:a(()=>[g(d(B),null,{default:a(()=>[...i[2]||=[s(`确认删除`,-1)]]),_:1}),g(d(I),null,{default:a(()=>[s(`确定要删除分组「`+v(t.target?.client_model)+`」吗?`,1)]),_:1})]),_:1}),g(d(z),null,{default:a(()=>[g(d(R),null,{default:a(()=>[...i[3]||=[s(`取消`,-1)]]),_:1}),g(d(w),{variant:`destructive`,onClick:i[0]||=e=>r(`confirm`)},{default:a(()=>[...i[4]||=[s(`删除`,-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=i({__name:`ModelMappings`,setup(t){let i={client_model:``,strategy:`scheduled`,default:{backend_model:``,provider_id:``},windows:[],targets:[]},m=f([]),y=f([]),b=f(!1),x=f(null),S=f(null),C=f({...i}),O=u(()=>{let e=new Map;for(let t of y.value)e.set(t.id,t.name);return e}),k=u(()=>{let e=new Map;for(let t of y.value){let n=t.models;Array.isArray(n)&&n.length>0&&e.set(t.id,[...n])}return e}),A=u(()=>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([p.getMappingGroups(),p.getProviders()]);e[0].status===`fulfilled`?m.value=e[0].value.data:console.error(`Failed to load groups:`,e[0].reason),e[1].status===`fulfilled`?y.value=e[1].value:(console.error(`Failed to load providers:`,e[1].reason),H.error(`加载供应商失败`))}function M(){x.value=null;let e=y.value[0]?.id||``;C.value={client_model:``,strategy:`scheduled`,default:{backend_model:(k.value.get(e)||[])[0]||``,provider_id:e},windows:[],targets:[]},b.value=!0}function N(e){x.value=e.id;let t={};try{t=JSON.parse(e.rule)}catch{}if(e.strategy===`scheduled`)C.value={...i,client_model:e.client_model,strategy:e.strategy,default:{backend_model:t.default?.backend_model||``,provider_id:t.default?.provider_id||y.value[0]?.id||``},windows:t.windows?JSON.parse(JSON.stringify(t.windows)):[]};else{let n=y.value[0]?.id||``,r=k.value.get(n)||[];C.value={...i,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}]}}b.value=!0}function P(){let e=y.value[0]?.id||``,t=k.value.get(e)||[];C.value.windows.push({start:``,end:``,target:{backend_model:t[0]||``,provider_id:e}})}function F(e){C.value.windows.splice(e,1)}function I(){let e=y.value[0]?.id||``,t=k.value.get(e)||[];C.value.targets.push({backend_model:t[0]||``,provider_id:e})}function L(e){C.value.targets.splice(e,1)}function R(e){if(e<=0)return;let t=C.value.targets;[t[e-1],t[e]]=[t[e],t[e-1]]}function z(e){let t=C.value.targets;e>=t.length-1||([t[e],t[e+1]]=[t[e+1],t[e]])}async function B(){try{let e;e=C.value.strategy===`scheduled`?JSON.stringify({default:C.value.default,windows:C.value.windows}):JSON.stringify({targets:C.value.targets});let t={client_model:C.value.client_model,strategy:C.value.strategy,rule:e};x.value?await p.updateMappingGroup(x.value,t):await p.createMappingGroup(t),b.value=!1,await j()}catch(e){console.error(`Failed to save mapping group:`,e),H.error(`保存分组失败`)}}async function V(){let e=S.value;if(e){S.value=null;try{await p.deleteMappingGroup(e.id),await j()}catch(e){console.error(`Failed to delete mapping group:`,e),H.error(`删除分组失败`)}}}return r(j),(t,r)=>(e(),_(`div`,Oe,[l(`div`,ke,[r[3]||=l(`h2`,{class:`text-lg font-semibold text-foreground`},`模型映射`,-1),g(d(w),{onClick:M,class:`flex items-center gap-1`},{default:a(()=>[...r[2]||=[l(`svg`,{class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[l(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 4v16m8-8H4`})],-1),s(` 添加分组 `,-1)]]),_:1})]),l(`div`,Ae,[(e(!0),_(c,null,n(A.value,t=>(e(),o(d(ee),{key:t.id},{default:a(()=>[g(d(E),{"default-open":!0},{default:a(()=>[g(d(W),{class:`flex flex-row items-center justify-between gap-4`},{default:a(()=>[l(`div`,je,[g(d(G),{class:`font-mono text-sm`},{default:a(()=>[s(v(t.client_model),1)]),_:2},1024),g(d(U),{variant:`secondary`},{default:a(()=>[s(v(t.strategy),1)]),_:2},1024)]),l(`div`,Me,[g(d(D),{"as-child":``},{default:a(()=>[g(d(w),{variant:`ghost`,size:`sm`},{default:a(()=>[...r[4]||=[s(` 展开 `,-1)]]),_:1})]),_:1}),g(d(w),{variant:`ghost`,size:`sm`,onClick:e=>N(t)},{default:a(()=>[...r[5]||=[s(`编辑`,-1)]]),_:1},8,[`onClick`]),g(d(w),{variant:`ghost`,size:`sm`,class:`text-destructive hover:text-destructive`,onClick:e=>S.value=t},{default:a(()=>[...r[6]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:2},1024),g(d(T),null,{default:a(()=>[g(d(te),null,{default:a(()=>[t.strategy===`scheduled`?(e(),_(`div`,Ne,[l(`div`,Pe,[r[7]||=l(`span`,{class:`text-muted-foreground`},`默认模型:`,-1),l(`span`,$,v(t.parsedRule.default?.backend_model||`-`),1),r[8]||=l(`span`,{class:`text-muted-foreground`},`/`,-1),l(`span`,null,v(O.value.get(t.parsedRule.default?.provider_id||``)||`-`),1)]),t.parsedRule.windows?.length?(e(),_(`div`,Fe,[r[10]||=l(`div`,{class:`text-sm text-muted-foreground`},`时间窗口`,-1),(e(!0),_(c,null,n(t.parsedRule.windows,(t,n)=>(e(),_(`div`,{key:n,class:`flex items-center gap-2 text-sm`},[l(`span`,Ie,v(t.start)+` - `+v(t.end),1),l(`span`,Le,v(t.target.backend_model),1),r[9]||=l(`span`,{class:`text-muted-foreground`},`/`,-1),l(`span`,null,v(O.value.get(t.target.provider_id)||t.target.provider_id),1)]))),128))])):(e(),_(`div`,Re,`无时间窗口`))])):(e(),_(`div`,ze,[(e(!0),_(c,null,n(t.parsedRule.targets||[],(n,i)=>(e(),_(`div`,{key:i,class:`flex items-center gap-2 text-sm`},[t.strategy===`failover`?(e(),_(`span`,Be,v(i+1)+`.`,1)):h(``,!0),l(`span`,Ve,v(n.backend_model),1),r[11]||=l(`span`,{class:`text-muted-foreground`},`/`,-1),l(`span`,null,v(O.value.get(n.provider_id)||n.provider_id),1)]))),128)),(t.parsedRule.targets||[]).length?h(``,!0):(e(),_(`div`,He,`无目标`))]))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128)),m.value.length===0?(e(),_(`div`,Ue,` 暂无映射分组 `)):h(``,!0)]),g(Ee,{open:b.value,"onUpdate:open":r[0]||=e=>b.value=e,"editing-id":x.value,form:C.value,providers:y.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`]),g(De,{target:S.value,onConfirm:V,onCancel:r[1]||=e=>S.value=null},null,8,[`target`])]))}});export{We as default};
|
|
1
|
+
import{F as e,K as t,L as n,M as r,S as i,Y as a,_ as o,b as s,f as c,g as l,h as u,mt as d,ot as f,t as p,u as m,v as h,x as g,y as _,yt as v}from"./client-DIIo9zPK.js";import{a as y,i as b,n as x,r as S,t as C}from"./SelectValue-zO8t-tx1.js";import{n as w}from"./button-Dcc0gF5i.js";import{n as T,r as E,t as D}from"./CollapsibleTrigger-Uz1aGdtH.js";import{a as O,i as k,o as A,r as j,s as M,t as N}from"./dialog-CxSyR-fN.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-PP91kaO8.js";import{t as V}from"./Label-UyNN2jyE.js";import{n as H,r as U}from"./lib-Bl0OuBjh.js";import{n as ee,t as te}from"./CardContent-CTnwqTdL.js";import{t as W}from"./CardHeader-CfUeY7tk.js";import{t as G}from"./CardTitle-CWiDwWqd.js";import{t as K}from"./Input-DRIid2C6.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=i({__name:`MappingGroupFormDialog`,props:{open:{type:Boolean},editingId:{},form:{},providers:{},providerModels:{}},emits:[`update:open`,`save`,`addWindow`,`removeWindow`,`addTarget`,`removeTarget`,`moveTargetUp`,`moveTargetDown`],setup(r,{emit:i}){let p=r,T=i,E=u(()=>p.providerModels.get(p.form.default.provider_id)||[]);function D(e){let t=p.form.windows[e]?.target?.provider_id;return t&&p.providerModels.get(t)||[]}function P(e){if(typeof e!=`string`)return;p.form.default.provider_id=e;let t=p.providerModels.get(e)||[];p.form.default.backend_model=t[0]||``}function F(e,t){if(typeof t!=`string`)return;p.form.windows[e].target.provider_id=t;let n=p.providerModels.get(t)||[];p.form.windows[e].target.backend_model=n[0]||``}function I(e){let t=p.form.targets[e]?.provider_id;return t&&p.providerModels.get(t)||[]}function L(e,t){if(typeof t!=`string`)return;p.form.targets[e].provider_id=t;let n=p.providerModels.get(t)||[];p.form.targets[e].backend_model=n[0]||``}function R(){H()&&T(`save`)}let z=/^\d{2}:\d{2}$/,B=f({});function H(){let e={};return p.form.client_model.trim()||(e.client_model=`请输入客户端模型名称`),p.form.strategy===`scheduled`?(p.form.default.provider_id||(e[`default.provider_id`]=`请选择供应商`),p.form.default.backend_model||(e[`default.backend_model`]=`请选择后端模型`),p.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`]=`请选择后端模型`)})):(p.form.targets.length===0&&(e.targets=`至少添加一个目标`),p.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 t(()=>p.open,e=>{e&&(B.value={})}),(t,i)=>(e(),o(d(M),{open:r.open,"onUpdate:open":i[7]||=e=>T(`update:open`,e)},{default:a(()=>[g(d(A),{class:`max-w-2xl`},{default:a(()=>[g(d(j),null,{default:a(()=>[g(d(N),null,{default:a(()=>[s(v(r.editingId?`编辑分组`:`添加分组`),1)]),_:1}),g(d(O),null,{default:a(()=>[...i[8]||=[s(`配置客户端模型到后端供应商模型的映射规则`,-1)]]),_:1})]),_:1}),l(`form`,{onSubmit:m(R,[`prevent`]),class:`space-y-4`},[l(`div`,null,[g(d(V),{class:`block text-sm font-medium text-foreground mb-1`},{default:a(()=>[...i[9]||=[s(`客户端模型`,-1)]]),_:1}),g(d(K),{modelValue:r.form.client_model,"onUpdate:modelValue":i[0]||=e=>r.form.client_model=e,type:`text`,required:``,onInput:i[1]||=e=>delete B.value.client_model},null,8,[`modelValue`]),B.value.client_model?(e(),_(`p`,q,v(B.value.client_model),1)):h(``,!0)]),l(`div`,null,[g(d(V),{class:`block text-sm font-medium text-foreground mb-1`},{default:a(()=>[...i[10]||=[s(`策略`,-1)]]),_:1}),g(d(y),{modelValue:r.form.strategy,"onUpdate:modelValue":i[2]||=e=>r.form.strategy=e},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:`选择策略`})]),_:1}),g(d(b),null,{default:a(()=>[g(d(S),{value:`scheduled`},{default:a(()=>[...i[11]||=[s(`定时切换 (scheduled)`,-1)]]),_:1}),g(d(S),{value:`round-robin`},{default:a(()=>[...i[12]||=[s(`轮询 (round-robin)`,-1)]]),_:1}),g(d(S),{value:`random`},{default:a(()=>[...i[13]||=[s(`随机 (random)`,-1)]]),_:1}),g(d(S),{value:`failover`},{default:a(()=>[...i[14]||=[s(`故障转移 (failover)`,-1)]]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),r.form.strategy===`scheduled`?(e(),_(c,{key:0},[l(`div`,J,[i[17]||=l(`div`,{class:`text-sm font-medium text-foreground`},`默认目标`,-1),l(`div`,Y,[l(`div`,X,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[15]||=[s(`供应商`,-1)]]),_:1}),g(d(y),{"model-value":r.form.default.provider_id,"onUpdate:modelValue":P},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:`选择供应商`})]),_:1}),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(r.providers,t=>(e(),o(d(S),{key:t.id,value:t.id},{default:a(()=>[s(v(t.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`]),B.value[`default.provider_id`]?(e(),_(`p`,Z,v(B.value[`default.provider_id`]),1)):h(``,!0)]),l(`div`,Q,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[16]||=[s(`后端模型`,-1)]]),_:1}),g(d(y),{modelValue:r.form.default.backend_model,"onUpdate:modelValue":i[3]||=e=>r.form.default.backend_model=e,disabled:E.value.length===0},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:E.value.length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:1}),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(E.value,t=>(e(),o(d(S),{key:t,value:t},{default:a(()=>[s(v(t),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`,`disabled`]),B.value[`default.backend_model`]?(e(),_(`p`,ne,v(B.value[`default.backend_model`]),1)):h(``,!0)])])]),l(`div`,re,[l(`div`,ie,[i[19]||=l(`div`,{class:`text-sm font-medium text-foreground`},`时间窗口`,-1),g(d(w),{type:`button`,variant:`outline`,size:`sm`,onClick:i[4]||=e=>T(`addWindow`)},{default:a(()=>[...i[18]||=[s(`添加窗口`,-1)]]),_:1})]),(e(!0),_(c,null,n(r.form.windows,(t,u)=>(e(),_(`div`,{key:u,class:`border rounded-md p-2 space-y-2`},[l(`div`,ae,[l(`div`,oe,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[20]||=[s(`开始`,-1)]]),_:1}),g(d(K),{modelValue:t.start,"onUpdate:modelValue":e=>t.start=e,type:`text`,placeholder:`HH:MM`,required:``,onInput:e=>delete B.value[`window.${u}.start`]},null,8,[`modelValue`,`onUpdate:modelValue`,`onInput`]),B.value[`window.${u}.start`]?(e(),_(`p`,se,v(B.value[`window.${u}.start`]),1)):h(``,!0)]),i[23]||=l(`span`,{class:`text-muted-foreground pb-1.5`},`-`,-1),l(`div`,ce,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[21]||=[s(`结束`,-1)]]),_:1}),g(d(K),{modelValue:t.end,"onUpdate:modelValue":e=>t.end=e,type:`text`,placeholder:`HH:MM`,required:``,onInput:e=>delete B.value[`window.${u}.end`]},null,8,[`modelValue`,`onUpdate:modelValue`,`onInput`]),B.value[`window.${u}.end`]?(e(),_(`p`,le,v(B.value[`window.${u}.end`]),1)):h(``,!0)]),i[24]||=l(`div`,{class:`flex-1`},null,-1),g(d(w),{type:`button`,variant:`ghost`,size:`sm`,class:`text-destructive shrink-0`,onClick:e=>T(`removeWindow`,u)},{default:a(()=>[...i[22]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])]),l(`div`,ue,[l(`div`,de,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[25]||=[s(`供应商`,-1)]]),_:1}),g(d(y),{"model-value":t.target.provider_id,"onUpdate:modelValue":e=>F(u,e)},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:`选择供应商`})]),_:1}),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(r.providers,t=>(e(),o(d(S),{key:t.id,value:t.id},{default:a(()=>[s(v(t.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`]),B.value[`window.${u}.provider_id`]?(e(),_(`p`,fe,v(B.value[`window.${u}.provider_id`]),1)):h(``,!0)]),l(`div`,pe,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[26]||=[s(`后端模型`,-1)]]),_:1}),g(d(y),{modelValue:t.target.backend_model,"onUpdate:modelValue":e=>t.target.backend_model=e,disabled:D(u).length===0},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:D(u).length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:2},1024),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(D(u),t=>(e(),o(d(S),{key:t,value:t},{default:a(()=>[s(v(t),1)]),_:2},1032,[`value`]))),128))]),_:2},1024)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`disabled`]),B.value[`window.${u}.backend_model`]?(e(),_(`p`,me,v(B.value[`window.${u}.backend_model`]),1)):h(``,!0)])])]))),128)),r.form.windows.length===0?(e(),_(`div`,he,`暂无窗口`)):h(``,!0)])],64)):(e(),_(`div`,ge,[l(`div`,_e,[i[28]||=l(`div`,{class:`text-sm font-medium text-foreground`},`目标列表`,-1),g(d(w),{type:`button`,variant:`outline`,size:`sm`,onClick:i[5]||=e=>T(`addTarget`)},{default:a(()=>[...i[27]||=[s(`添加目标`,-1)]]),_:1})]),B.value.targets?(e(),_(`p`,ve,v(B.value.targets),1)):h(``,!0),(e(!0),_(c,null,n(r.form.targets,(t,u)=>(e(),_(`div`,{key:u,class:`border rounded-md p-2 space-y-2`},[l(`div`,ye,[l(`div`,be,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[29]||=[s(`供应商`,-1)]]),_:1}),g(d(y),{"model-value":t.provider_id,"onUpdate:modelValue":e=>L(u,e)},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:`选择供应商`})]),_:1}),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(r.providers,t=>(e(),o(d(S),{key:t.id,value:t.id},{default:a(()=>[s(v(t.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`]),B.value[`target.${u}.provider_id`]?(e(),_(`p`,xe,v(B.value[`target.${u}.provider_id`]),1)):h(``,!0)]),l(`div`,Se,[g(d(V),{class:`block text-xs text-muted-foreground mb-1`},{default:a(()=>[...i[30]||=[s(`后端模型`,-1)]]),_:1}),g(d(y),{modelValue:t.backend_model,"onUpdate:modelValue":e=>t.backend_model=e,disabled:I(u).length===0},{default:a(()=>[g(d(x),null,{default:a(()=>[g(d(C),{placeholder:I(u).length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:2},1024),g(d(b),null,{default:a(()=>[(e(!0),_(c,null,n(I(u),t=>(e(),o(d(S),{key:t,value:t},{default:a(()=>[s(v(t),1)]),_:2},1032,[`value`]))),128))]),_:2},1024)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`disabled`]),B.value[`target.${u}.backend_model`]?(e(),_(`p`,Ce,v(B.value[`target.${u}.backend_model`]),1)):h(``,!0)])]),l(`div`,we,[r.form.strategy===`failover`?(e(),o(d(w),{key:0,type:`button`,variant:`ghost`,size:`sm`,disabled:u===0,onClick:e=>T(`moveTargetUp`,u)},{default:a(()=>[...i[31]||=[s(`↑`,-1)]]),_:1},8,[`disabled`,`onClick`])):h(``,!0),r.form.strategy===`failover`?(e(),o(d(w),{key:1,type:`button`,variant:`ghost`,size:`sm`,disabled:u===r.form.targets.length-1,onClick:e=>T(`moveTargetDown`,u)},{default:a(()=>[...i[32]||=[s(`↓`,-1)]]),_:1},8,[`disabled`,`onClick`])):h(``,!0),g(d(w),{type:`button`,variant:`ghost`,size:`sm`,class:`text-destructive shrink-0`,onClick:e=>T(`removeTarget`,u)},{default:a(()=>[...i[33]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])])]))),128)),r.form.targets.length===0?(e(),_(`div`,Te,`暂无目标`)):h(``,!0)])),g(d(k),null,{default:a(()=>[g(d(w),{type:`button`,variant:`outline`,onClick:i[6]||=e=>T(`update:open`,!1)},{default:a(()=>[...i[34]||=[s(`取消`,-1)]]),_:1}),g(d(w),{type:`submit`},{default:a(()=>[...i[35]||=[s(`保存`,-1)]]),_:1})]),_:1})],32)]),_:1})]),_:1},8,[`open`]))}}),De=i({__name:`MappingGroupDeleteDialog`,props:{target:{}},emits:[`confirm`,`cancel`],setup(t,{emit:n}){let r=n;return(n,i)=>(e(),o(d(F),{open:!!t.target,"onUpdate:open":i[1]||=e=>{e||r(`cancel`)}},{default:a(()=>[g(d(P),null,{default:a(()=>[g(d(L),null,{default:a(()=>[g(d(B),null,{default:a(()=>[...i[2]||=[s(`确认删除`,-1)]]),_:1}),g(d(I),null,{default:a(()=>[s(`确定要删除分组「`+v(t.target?.client_model)+`」吗?`,1)]),_:1})]),_:1}),g(d(z),null,{default:a(()=>[g(d(R),null,{default:a(()=>[...i[3]||=[s(`取消`,-1)]]),_:1}),g(d(w),{variant:`destructive`,onClick:i[0]||=e=>r(`confirm`)},{default:a(()=>[...i[4]||=[s(`删除`,-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=i({__name:`ModelMappings`,setup(t){let i={client_model:``,strategy:`scheduled`,default:{backend_model:``,provider_id:``},windows:[],targets:[]},m=f([]),y=f([]),b=f(!1),x=f(null),S=f(null),C=f({...i}),O=u(()=>{let e=new Map;for(let t of y.value)e.set(t.id,t.name);return e}),k=u(()=>{let e=new Map;for(let t of y.value){let n=t.models;Array.isArray(n)&&n.length>0&&e.set(t.id,[...n])}return e}),A=u(()=>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([p.getMappingGroups(),p.getProviders()]);e[0].status===`fulfilled`?m.value=e[0].value:console.error(`Failed to load groups:`,e[0].reason),e[1].status===`fulfilled`?y.value=e[1].value:(console.error(`Failed to load providers:`,e[1].reason),H.error(`加载供应商失败`))}function M(){x.value=null;let e=y.value[0]?.id||``;C.value={client_model:``,strategy:`scheduled`,default:{backend_model:(k.value.get(e)||[])[0]||``,provider_id:e},windows:[],targets:[]},b.value=!0}function N(e){x.value=e.id;let t={};try{t=JSON.parse(e.rule)}catch{}if(e.strategy===`scheduled`)C.value={...i,client_model:e.client_model,strategy:e.strategy,default:{backend_model:t.default?.backend_model||``,provider_id:t.default?.provider_id||y.value[0]?.id||``},windows:t.windows?JSON.parse(JSON.stringify(t.windows)):[]};else{let n=y.value[0]?.id||``,r=k.value.get(n)||[];C.value={...i,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}]}}b.value=!0}function P(){let e=y.value[0]?.id||``,t=k.value.get(e)||[];C.value.windows.push({start:``,end:``,target:{backend_model:t[0]||``,provider_id:e}})}function F(e){C.value.windows.splice(e,1)}function I(){let e=y.value[0]?.id||``,t=k.value.get(e)||[];C.value.targets.push({backend_model:t[0]||``,provider_id:e})}function L(e){C.value.targets.splice(e,1)}function R(e){if(e<=0)return;let t=C.value.targets;[t[e-1],t[e]]=[t[e],t[e-1]]}function z(e){let t=C.value.targets;e>=t.length-1||([t[e],t[e+1]]=[t[e+1],t[e]])}async function B(){try{let e;e=C.value.strategy===`scheduled`?JSON.stringify({default:C.value.default,windows:C.value.windows}):JSON.stringify({targets:C.value.targets});let t={client_model:C.value.client_model,strategy:C.value.strategy,rule:e};x.value?await p.updateMappingGroup(x.value,t):await p.createMappingGroup(t),b.value=!1,await j()}catch(e){console.error(`Failed to save mapping group:`,e),H.error(`保存分组失败`)}}async function V(){let e=S.value;if(e){S.value=null;try{await p.deleteMappingGroup(e.id),await j()}catch(e){console.error(`Failed to delete mapping group:`,e),H.error(`删除分组失败`)}}}return r(j),(t,r)=>(e(),_(`div`,Oe,[l(`div`,ke,[r[3]||=l(`h2`,{class:`text-lg font-semibold text-foreground`},`模型映射`,-1),g(d(w),{onClick:M,class:`flex items-center gap-1`},{default:a(()=>[...r[2]||=[l(`svg`,{class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[l(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 4v16m8-8H4`})],-1),s(` 添加分组 `,-1)]]),_:1})]),l(`div`,Ae,[(e(!0),_(c,null,n(A.value,t=>(e(),o(d(ee),{key:t.id},{default:a(()=>[g(d(E),{"default-open":!0},{default:a(()=>[g(d(W),{class:`flex flex-row items-center justify-between gap-4`},{default:a(()=>[l(`div`,je,[g(d(G),{class:`font-mono text-sm`},{default:a(()=>[s(v(t.client_model),1)]),_:2},1024),g(d(U),{variant:`secondary`},{default:a(()=>[s(v(t.strategy),1)]),_:2},1024)]),l(`div`,Me,[g(d(D),{"as-child":``},{default:a(()=>[g(d(w),{variant:`ghost`,size:`sm`},{default:a(()=>[...r[4]||=[s(` 展开 `,-1)]]),_:1})]),_:1}),g(d(w),{variant:`ghost`,size:`sm`,onClick:e=>N(t)},{default:a(()=>[...r[5]||=[s(`编辑`,-1)]]),_:1},8,[`onClick`]),g(d(w),{variant:`ghost`,size:`sm`,class:`text-destructive hover:text-destructive`,onClick:e=>S.value=t},{default:a(()=>[...r[6]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:2},1024),g(d(T),null,{default:a(()=>[g(d(te),null,{default:a(()=>[t.strategy===`scheduled`?(e(),_(`div`,Ne,[l(`div`,Pe,[r[7]||=l(`span`,{class:`text-muted-foreground`},`默认模型:`,-1),l(`span`,$,v(t.parsedRule.default?.backend_model||`-`),1),r[8]||=l(`span`,{class:`text-muted-foreground`},`/`,-1),l(`span`,null,v(O.value.get(t.parsedRule.default?.provider_id||``)||`-`),1)]),t.parsedRule.windows?.length?(e(),_(`div`,Fe,[r[10]||=l(`div`,{class:`text-sm text-muted-foreground`},`时间窗口`,-1),(e(!0),_(c,null,n(t.parsedRule.windows,(t,n)=>(e(),_(`div`,{key:n,class:`flex items-center gap-2 text-sm`},[l(`span`,Ie,v(t.start)+` - `+v(t.end),1),l(`span`,Le,v(t.target.backend_model),1),r[9]||=l(`span`,{class:`text-muted-foreground`},`/`,-1),l(`span`,null,v(O.value.get(t.target.provider_id)||t.target.provider_id),1)]))),128))])):(e(),_(`div`,Re,`无时间窗口`))])):(e(),_(`div`,ze,[(e(!0),_(c,null,n(t.parsedRule.targets||[],(n,i)=>(e(),_(`div`,{key:i,class:`flex items-center gap-2 text-sm`},[t.strategy===`failover`?(e(),_(`span`,Be,v(i+1)+`.`,1)):h(``,!0),l(`span`,Ve,v(n.backend_model),1),r[11]||=l(`span`,{class:`text-muted-foreground`},`/`,-1),l(`span`,null,v(O.value.get(n.provider_id)||n.provider_id),1)]))),128)),(t.parsedRule.targets||[]).length?h(``,!0):(e(),_(`div`,He,`无目标`))]))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128)),m.value.length===0?(e(),_(`div`,Ue,` 暂无映射分组 `)):h(``,!0)]),g(Ee,{open:b.value,"onUpdate:open":r[0]||=e=>b.value=e,"editing-id":x.value,form:C.value,providers:y.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`]),g(De,{target:S.value,onConfirm:V,onCancel:r[1]||=e=>S.value=null},null,8,[`target`])]))}});export{We as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,F as t,K as n,L as r,M as i,N as a,R as o,S as s,Y as c,_ as l,_t as u,b as d,dt as f,f as p,g as m,gt as h,h as g,k as _,mt as v,ot as y,q as b,t as x,tt as S,v as C,vt as w,w as T,x as E,y as D,yt as O}from"./client-DIIo9zPK.js";import{t as k}from"./createLucideIcon-DGZkBjcJ.js";import{E as ee,b as A,f as j,i as M,n as te,r as N,w as P}from"./button-Dcc0gF5i.js";import{n as F,t as I}from"./useNonce-DGyPxdjq.js";import{S as L,c as R,h as ne,l as z}from"./Collection-1EHC87X5.js";import{t as B}from"./useForwardExpose-AkE0lq8y.js";import{n as re,r as ie,t as ae}from"./CollapsibleTrigger-Uz1aGdtH.js";import{n as oe,r as se,s as ce,t as le}from"./dialog-CxSyR-fN.js";import{i as ue,n as de,r as fe,t as pe}from"./TabsTrigger-Db6RqsZc.js";import{r as V}from"./lib-Bl0OuBjh.js";import{n as H,t as U}from"./CardContent-CTnwqTdL.js";import{t as W}from"./CardHeader-CfUeY7tk.js";import{t as G}from"./CardTitle-CWiDwWqd.js";import{a as me,i as K,n as q,o as he,r as ge,t as _e}from"./TableHeader-DpHWSnxK.js";import{t as ve}from"./LogDetailDialog-8BT4vIlV.js";var ye=k(`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=k(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),xe=k(`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=k(`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=s({__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:n}){let r=e,i=y(0),a=y(0),s=y(),u=y(),d=y(),p=y(),m=y(!1),h=y(!1),{type:g,dir:_,scrollHideDelay:b}=f(r),x=ne(_);function S(){s.value?.scrollTo({top:0})}function C(){s.value?.scrollTo({top:0,left:0})}n({viewport:s,scrollTop:S,scrollTopLeft:C});let{forwardRef:T,currentElement:E}=B();return Ce({type:g,dir:x,scrollHideDelay:b,scrollArea:E,viewport:s,onViewportChange:e=>{s.value=e||void 0},content:u,onContentChange:e=>{u.value=e},scrollbarX:d,scrollbarXEnabled:m,scrollbarY:p,scrollbarYEnabled:h,onScrollbarXChange:e=>{d.value=e||void 0},onScrollbarYChange:e=>{p.value=e||void 0},onScrollbarXEnabledChange:e=>{m.value=e},onScrollbarYEnabledChange:e=>{h.value=e},onCornerWidthChange:e=>{i.value=e},onCornerHeightChange:e=>{a.value=e}}),(e,n)=>(t(),l(v(M),{ref:v(T),"as-child":r.asChild,as:e.as,dir:v(x),style:w({position:`relative`,"--reka-scroll-area-corner-width":`${i.value}px`,"--reka-scroll-area-corner-height":`${a.value}px`})},{default:c(()=>[o(e.$slots,`default`)]),_:3},8,[`as-child`,`as`,`dir`,`style`]))}}),Te=s({__name:`ScrollAreaCornerImpl`,setup(e){let r=J(),i=y(0),a=y(0),s=g(()=>!!i.value&&!!a.value);function u(){let e=r.scrollbarX.value?.offsetHeight||0;r.onCornerHeightChange(e),a.value=e}function d(){let e=r.scrollbarY.value?.offsetWidth||0;r.onCornerWidthChange(e),i.value=e}return j(r.scrollbarX.value,u),j(r.scrollbarY.value,d),n(()=>r.scrollbarX.value,u),n(()=>r.scrollbarY.value,d),(e,n)=>s.value?(t(),l(v(M),_({key:0,style:{width:`${i.value}px`,height:`${a.value}px`,position:`absolute`,right:v(r).dir.value===`ltr`?0:void 0,left:v(r).dir.value===`rtl`?0:void 0,bottom:0}},e.$parent?.$props),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`style`])):C(`v-if`,!0)}}),Ee=s({__name:`ScrollAreaCorner`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let n=e,{forwardRef:r}=B(),i=J(),a=g(()=>!!i.scrollbarX.value&&!!i.scrollbarY.value),s=g(()=>i.type.value!==`scroll`&&a.value);return(e,i)=>s.value?(t(),l(Te,_({key:0},n,{ref:v(r)}),{default:c(()=>[o(e.$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=F(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=s({__name:`ScrollAreaScrollbarX`,setup(e){let n=J(),r=Q(),{forwardRef:a,currentElement:s}=B();i(()=>{s.value&&n.onScrollbarXChange(s.value)});let u=g(()=>r.sizes.value);return(e,i)=>(t(),l(Ue,{ref:v(a),"is-horizontal":!0,"data-orientation":`horizontal`,style:w({bottom:0,left:v(n).dir.value===`rtl`?`var(--reka-scroll-area-corner-width)`:0,right:v(n).dir.value===`ltr`?`var(--reka-scroll-area-corner-width)`:0,"--reka-scroll-area-thumb-width":u.value?`${v(Y)(u.value)}px`:void 0}),onOnDragScroll:i[0]||=e=>v(r).onDragScroll(e.x)},{default:c(()=>[o(e.$slots,`default`)]),_:3},8,[`style`]))}}),Pe=s({__name:`ScrollAreaScrollbarY`,setup(e){let n=J(),r=Q(),{forwardRef:a,currentElement:s}=B();i(()=>{s.value&&n.onScrollbarYChange(s.value)});let u=g(()=>r.sizes.value);return(e,i)=>(t(),l(Ue,{ref:v(a),"is-horizontal":!1,"data-orientation":`vertical`,style:w({top:0,right:v(n).dir.value===`ltr`?0:void 0,left:v(n).dir.value===`rtl`?0:void 0,bottom:`var(--reka-scroll-area-corner-height)`,"--reka-scroll-area-thumb-height":u.value?`${v(Y)(u.value)}px`:void 0}),onOnDragScroll:i[0]||=e=>v(r).onDragScroll(e.y)},{default:c(()=>[o(e.$slots,`default`)]),_:3},8,[`style`]))}}),Fe=s({__name:`ScrollAreaScrollbarAuto`,props:{forceMount:{type:Boolean,required:!1}},setup(e){let n=J(),r=Z(),{forwardRef:a}=B(),s=y(!1),u=P(()=>{if(n.viewport.value){let e=n.viewport.value.offsetWidth<n.viewport.value.scrollWidth,t=n.viewport.value.offsetHeight<n.viewport.value.scrollHeight;s.value=r.isHorizontal.value?e:t}},10);return i(()=>u()),j(n.viewport,u),j(n.content,u),(e,n)=>(t(),l(v(R),{present:e.forceMount||s.value},{default:c(()=>[E(He,_(e.$attrs,{ref:v(a),"data-state":s.value?`visible`:`hidden`}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),Ie=s({inheritAttrs:!1,__name:`ScrollAreaScrollbarGlimpse`,props:{forceMount:{type:Boolean,required:!1}},setup(e){let n=J(),r=Z(),{forwardRef:s}=B(),{state:u,dispatch:d}=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`}}),f=g(()=>u.value!==`hidden`);function p(){d(`POINTER_ENTER`)}function m(){d(`POINTER_LEAVE`)}let h=P(()=>d(`SCROLL_END`),100);return b(e=>{if(u.value===`glimpse`){let t=window.setTimeout(d,n.scrollHideDelay.value,`HIDE`);e(()=>{window.clearTimeout(t)})}}),b(e=>{if(u.value===`idle`){let t=window.setTimeout(d,n.scrollHideDelay.value,`HIDE`);e(()=>{window.clearTimeout(t)})}}),b(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&&(d(`SCROLL`),h()),n=e};t.addEventListener(`scroll`,r),e(()=>{t.removeEventListener(`scroll`,r)})}}),i(()=>{let e=n.scrollArea.value;e&&(e.addEventListener(`pointerenter`,p),e.addEventListener(`pointerleave`,m))}),a(()=>{let e=n.scrollArea.value;e&&(e.removeEventListener(`pointerenter`,p),e.removeEventListener(`pointerleave`,m))}),(e,n)=>(t(),l(v(R),{present:e.forceMount||f.value},{default:c(()=>[E(Fe,_(e.$attrs,{ref:v(s),"data-state":f.value?`visible`:`hidden`}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),Le=s({inheritAttrs:!1,__name:`ScrollAreaScrollbarHover`,props:{forceMount:{type:Boolean,required:!1}},setup(e){let n=J(),{forwardRef:r}=B(),s,u=y(!1);function d(){window.clearTimeout(s),u.value=!0}function f(){s=window.setTimeout(()=>{u.value=!1},n.scrollHideDelay.value)}return i(()=>{let e=n.scrollArea.value;e&&(e.addEventListener(`pointerenter`,d),e.addEventListener(`pointerleave`,f))}),a(()=>{let e=n.scrollArea.value;e&&(window.clearTimeout(s),e.removeEventListener(`pointerenter`,d),e.removeEventListener(`pointerleave`,f))}),(e,n)=>(t(),l(v(R),{present:e.forceMount||u.value},{default:c(()=>[E(Fe,_(e.$attrs,{ref:v(r),"data-state":u.value?`visible`:`hidden`}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),Re=s({__name:`ScrollAreaScrollbarScroll`,props:{forceMount:{type:Boolean,required:!1}},setup(e){let n=J(),r=Z(),{forwardRef:i}=B(),{state:a,dispatch:s}=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`}}),u=g(()=>a.value!==`hidden`);b(e=>{if(a.value===`idle`){let t=window.setTimeout(s,n.scrollHideDelay.value,`HIDE`);e(()=>{window.clearTimeout(t)})}});let d=P(()=>s(`SCROLL_END`),100);return b(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&&(s(`SCROLL`),d()),n=e};t.addEventListener(`scroll`,r),e(()=>{t.removeEventListener(`scroll`,r)})}}),(e,n)=>(t(),l(v(R),{present:e.forceMount||u.value},{default:c(()=>[E(He,_(e.$attrs,{ref:v(i),"data-state":u.value?`visible`:`hidden`}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),[Z,ze]=L(`ScrollAreaScrollbar`),Be=s({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(e){let r=e,{forwardRef:i}=B(),s=J(),u=g(()=>r.orientation===`horizontal`);n(u,()=>{u.value?s.onScrollbarXEnabledChange(!0):s.onScrollbarYEnabledChange(!0)},{immediate:!0}),a(()=>{s.onScrollbarXEnabledChange(!1),s.onScrollbarYEnabledChange(!1)});let{orientation:d,forceMount:p,asChild:m,as:h}=f(r);return ze({orientation:d,forceMount:p,isHorizontal:u,as:h,asChild:m}),(e,n)=>v(s).type.value===`hover`?(t(),l(Le,_({key:0},e.$attrs,{ref:v(i),"force-mount":v(p)}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`force-mount`])):v(s).type.value===`scroll`?(t(),l(Re,_({key:1},e.$attrs,{ref:v(i),"force-mount":v(p)}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`force-mount`])):v(s).type.value===`glimpse`?(t(),l(Ie,_({key:2},e.$attrs,{ref:v(i),"force-mount":v(p)}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`force-mount`])):v(s).type.value===`auto`?(t(),l(Fe,_({key:3},e.$attrs,{ref:v(i),"force-mount":v(p)}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`force-mount`])):v(s).type.value===`always`?(t(),l(He,_({key:4},e.$attrs,{ref:v(i),"data-state":`visible`}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16)):C(`v-if`,!0)}}),[Q,Ve]=L(`ScrollAreaScrollbarVisible`),He=s({__name:`ScrollAreaScrollbarVisible`,setup(e){let n=J(),r=Z(),{forwardRef:i}=B(),a=y({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),s=g(()=>{let e=Oe(a.value.viewport,a.value.content);return e>0&&e<1}),u=y(),d=y(0);function f(e,t){if(x.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 p(e,t){x.value?d.value=t.x:d.value=t.y}function m(e){d.value=0}function h(e){a.value=e}function b(e,t){return je(e,d.value,a.value,t)}let x=g(()=>r.isHorizontal.value);function S(e){x.value?n.viewport.value.scrollLeft=b(e,n.dir.value):n.viewport.value.scrollTop=b(e)}function C(){if(x.value){if(n.viewport.value&&u.value){let e=n.viewport.value.scrollLeft,t=Ae(e,a.value,n.dir.value);u.value.style.transform=`translate3d(${t}px, 0, 0)`}}else if(n.viewport.value&&u.value){let e=n.viewport.value.scrollTop,t=Ae(e,a.value);u.value.style.transform=`translate3d(0, ${t}px, 0)`}}function w(e){u.value=e}return Ve({sizes:a,hasThumb:s,handleWheelScroll:f,handleThumbDown:p,handleThumbUp:m,handleSizeChange:h,onThumbPositionChange:C,onThumbChange:w,onDragScroll:S}),(e,n)=>x.value?(t(),l(Ne,_({key:0},e.$attrs,{ref:v(i)}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16)):(t(),l(Pe,_({key:1},e.$attrs,{ref:v(i)}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16))}}),Ue=s({__name:`ScrollAreaScrollbarImpl`,props:{isHorizontal:{type:Boolean,required:!0}},emits:[`onDragScroll`,`onWheelScroll`,`onThumbPointerDown`],setup(e,{emit:n}){let r=e,s=n,u=J(),d=Q(),f=Z(),{forwardRef:p,currentElement:m}=B(),h=y(``),g=y();function _(e){g.value&&s(`onDragScroll`,{x:e.clientX-g.value?.left,y:e.clientY-g.value?.top})}function b(e){e.button===0&&(e.target.setPointerCapture(e.pointerId),g.value=m.value.getBoundingClientRect(),h.value=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,u.viewport&&(u.viewport.value.style.scrollBehavior=`auto`),_(e))}function x(e){_(e)}function S(e){let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=h.value,u.viewport&&(u.viewport.value.style.scrollBehavior=``),g.value=void 0}function C(e){let t=e.target,n=m.value?.contains(t),r=d.sizes.value.content-d.sizes.value.viewport;n&&d.handleWheelScroll(e,r)}i(()=>{document.addEventListener(`wheel`,C,{passive:!1})}),a(()=>{document.removeEventListener(`wheel`,C)});function w(){m.value&&(r.isHorizontal?d.handleSizeChange({content:u.viewport.value?.scrollWidth??0,viewport:u.viewport.value?.offsetWidth??0,scrollbar:{size:m.value.clientWidth??0,paddingStart:X(getComputedStyle(m.value).paddingLeft),paddingEnd:X(getComputedStyle(m.value).paddingRight)}}):d.handleSizeChange({content:u.viewport.value?.scrollHeight??0,viewport:u.viewport.value?.offsetHeight??0,scrollbar:{size:m.value?.clientHeight??0,paddingStart:X(getComputedStyle(m.value).paddingTop),paddingEnd:X(getComputedStyle(m.value).paddingBottom)}}),d.onThumbPositionChange())}return j(m,w),j(u.content,w),(e,n)=>(t(),l(v(M),{ref:v(p),style:{position:`absolute`},"data-scrollbarimpl":``,as:v(f).as.value,"as-child":v(f).asChild.value,onPointerdown:b,onPointermove:x,onPointerup:S},{default:c(()=>[o(e.$slots,`default`)]),_:3},8,[`as`,`as-child`]))}}),We=s({__name:`ScrollAreaThumb`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let n=e,r=J(),i=Q();function s(e){let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;i.handleThumbDown(e,{x:n,y:r})}function u(e){i.handleThumbUp(e)}let{forwardRef:d,currentElement:f}=B(),p=y(),m=g(()=>r.viewport.value);function h(){p.value||(p.value=ke(m.value,i.onThumbPositionChange),i.onThumbPositionChange())}return ee(g(()=>i.sizes.value),()=>{i.onThumbChange(f.value),m.value&&(i.onThumbPositionChange(),m.value.addEventListener(`scroll`,h))}),a(()=>{m.value.removeEventListener(`scroll`,h),r.viewport.value?.removeEventListener(`scroll`,h)}),(e,r)=>(t(),l(v(M),{ref:v(d),"data-state":v(i).hasThumb?`visible`:`hidden`,style:{width:`var(--reka-scroll-area-thumb-width)`,height:`var(--reka-scroll-area-thumb-height)`},"as-child":n.asChild,as:e.as,onPointerdown:s,onPointerup:u},{default:c(()=>[o(e.$slots,`default`)]),_:3},8,[`data-state`,`as-child`,`as`]))}}),Ge=s({inheritAttrs:!1,__name:`ScrollAreaViewport`,props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e,{expose:n}){let r=e,{nonce:a}=f(r),s=I(a),l=J(),u=y();i(()=>{l.onViewportChange(u.value),l.onContentChange(g.value)}),n({viewportElement:u});let{forwardRef:h,currentElement:g}=B();return(e,n)=>(t(),D(p,null,[m(`div`,_({ref_key:`viewportElement`,ref:u,"data-reka-scroll-area-viewport":``,style:{overflowX:v(l).scrollbarXEnabled.value?`scroll`:`hidden`,overflowY:v(l).scrollbarYEnabled.value?`scroll`:`hidden`}},e.$attrs,{tabindex:0}),[E(v(M),{ref:v(h),style:w({minWidth:v(l).scrollbarXEnabled.value?`fit-content`:void 0}),"as-child":r.asChild,as:e.as},{default:c(()=>[o(e.$slots,`default`)]),_:3},8,[`style`,`as-child`,`as`])],16),E(v(M),{as:`style`,nonce:v(s)},{default:c(()=>n[0]||=[d(` /* 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=s({__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(e){let n=e,r=[`horizontal`,`vertical`];function i(e){return r.includes(e)}let a=g(()=>i(n.orientation)?n.orientation:`horizontal`),s=g(()=>a.value===`vertical`?n.orientation:void 0),u=g(()=>n.decorative?{role:`none`}:{"aria-orientation":s.value,role:`separator`});return(e,n)=>(t(),l(v(M),_({as:e.as,"as-child":e.asChild,"data-orientation":a.value},u.value),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`as`,`as-child`,`data-orientation`]))}}),qe=s({__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 n=e;return(e,r)=>(t(),l(Ke,u(T(n)),{default:c(()=>[o(e.$slots,`default`)]),_:3},16))}}),Je=s({__name:`ScrollBar`,props:{orientation:{default:`vertical`},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let n=e,r=A(n,`class`);return(i,a)=>(t(),l(v(Be),_({"data-slot":`scroll-area-scrollbar`,"data-orientation":e.orientation},v(r),{class:v(N)(`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:c(()=>[E(v(We),{"data-slot":`scroll-area-thumb`,class:`rounded-full relative flex-1 bg-border`})]),_:1},16,[`data-orientation`,`class`]))}}),Ye=s({__name:`ScrollArea`,props:{type:{},dir:{},scrollHideDelay:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let n=e,r=A(n,`class`);return(e,i)=>(t(),l(v(we),_({"data-slot":`scroll-area`},v(r),{class:v(N)(`relative`,n.class)}),{default:c(()=>[E(v(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:c(()=>[o(e.$slots,`default`)]),_:3}),E(Je),E(v(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=s({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{}},setup(e){let n=e,r=g(()=>!n.stats||n.stats.totalRequests===0?`0.0`:(n.stats.errorCount/n.stats.totalRequests*100).toFixed(1)),i=g(()=>!n.stats||n.stats.totalRequests===0?`0.0`:(n.stats.retryCount/n.stats.totalRequests*100).toFixed(1)),a=g(()=>n.stats?n.stats.p50LatencyMs.toFixed(0):`--`);return(n,o)=>(t(),D(`div`,Xe,[E(v(H),null,{default:c(()=>[E(v(U),{class:`p-4`},{default:c(()=>[o[0]||=m(`p`,{class:`text-sm text-muted-foreground`},`活跃请求`,-1),m(`p`,Ze,O(e.activeCount),1),m(`p`,Qe,O(e.streamCount)+` 流式 / `+O(e.activeCount-e.streamCount)+` 非流式 `,1)]),_:1})]),_:1}),E(v(H),null,{default:c(()=>[E(v(U),{class:`p-4`},{default:c(()=>[o[1]||=m(`p`,{class:`text-sm text-muted-foreground`},`错误率`,-1),m(`p`,$e,O(r.value)+`%`,1),m(`p`,et,O(e.stats?.errorCount??0)+` / `+O(e.stats?.totalRequests??0),1)]),_:1})]),_:1}),E(v(H),null,{default:c(()=>[E(v(U),{class:`p-4`},{default:c(()=>[o[2]||=m(`p`,{class:`text-sm text-muted-foreground`},`P50 延迟`,-1),m(`p`,tt,O(a.value)+`ms`,1),m(`p`,nt,` 平均 `+O(e.stats?.avgLatencyMs?.toFixed(0)??`--`)+`ms `,1)]),_:1})]),_:1}),E(v(H),null,{default:c(()=>[E(v(U),{class:`p-4`},{default:c(()=>[o[3]||=m(`p`,{class:`text-sm text-muted-foreground`},`重试率`,-1),m(`p`,rt,O(i.value)+`%`,1),m(`p`,it,O(e.stats?.retryCount??0)+` / `+O(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=s({__name:`ConcurrencyPanel`,props:{providers:{}},setup(e){function n(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)=>(t(),D(`div`,ot,[e.providers.length===0?(t(),D(`div`,st,` 暂无并发数据 `)):C(``,!0),(t(!0),D(p,null,r(e.providers,e=>(t(),D(`div`,{key:e.providerId,class:`space-y-1`},[m(`div`,ct,[m(`span`,lt,O(e.providerName),1),m(`span`,ut,[e.maxConcurrency===0?(t(),D(p,{key:0},[d(`未限制`)],64)):(t(),D(p,{key:1},[d(O(e.active)+` / `+O(e.maxConcurrency),1)],64))])]),e.maxConcurrency>0?(t(),D(`div`,dt,[m(`div`,{class:h([`h-full rounded-full transition-all duration-300`,n(e.active,e.maxConcurrency)]),style:w({width:`${Math.min(100,e.active/e.maxConcurrency*100)}%`})},null,6)])):C(``,!0),e.maxConcurrency>0?(t(),D(`div`,ft,[m(`span`,null,`排队: `+O(e.queued),1),m(`span`,null,`队列上限: `+O(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=s({__name:`RuntimePanel`,props:{runtime:{}},setup(e){let n=e,r=g(()=>!n.runtime||n.runtime.memoryUsage.heapTotal===0?0:Math.min(100,n.runtime.memoryUsage.heapUsed/n.runtime.memoryUsage.heapTotal*100));function i(e){let t=Math.floor(e/1e3);return`${Math.floor(t/3600)}h ${Math.floor(t%3600/60)}m ${t%60}s`}function a(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}return(n,o)=>e.runtime?(t(),D(`div`,ht,[m(`div`,null,[o[0]||=m(`p`,{class:`text-muted-foreground`},`运行时间`,-1),m(`p`,gt,O(i(e.runtime.uptimeMs)),1)]),m(`div`,null,[o[1]||=m(`p`,{class:`text-muted-foreground`},`内存 RSS`,-1),m(`p`,_t,O(a(e.runtime.memoryUsage.rss)),1)]),m(`div`,vt,[m(`div`,yt,[o[2]||=m(`p`,{class:`text-muted-foreground`},`Heap 使用`,-1),m(`p`,bt,O(a(e.runtime.memoryUsage.heapUsed))+` / `+O(a(e.runtime.memoryUsage.heapTotal)),1)]),m(`div`,xt,[m(`div`,{class:`h-full bg-blue-500 rounded-full transition-all duration-300`,style:w({width:`${r.value}%`})},null,4)])]),m(`div`,null,[o[3]||=m(`p`,{class:`text-muted-foreground`},`Active Handles`,-1),m(`p`,St,O(e.runtime.activeHandles),1)]),m(`div`,null,[o[4]||=m(`p`,{class:`text-muted-foreground`},`Active Requests`,-1),m(`p`,Ct,O(e.runtime.activeRequests),1)]),m(`div`,wt,[o[5]||=m(`p`,{class:`text-muted-foreground`},`Event Loop 延迟`,-1),m(`p`,Tt,O(e.runtime.eventLoopDelayMs.toFixed(2))+`ms`,1)])])):(t(),D(`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=s({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(e){let n=e,i=g(()=>Object.values(n.byStatusCode).reduce((e,t)=>e+t,0)),a=g(()=>{let e=n.byStatusCode,t=i.value||1,r=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:r,percent:(r/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,n)=>i.value===0?(t(),D(`div`,Dt,`暂无状态码数据`)):(t(),D(`div`,Ot,[(t(!0),D(p,null,r(a.value,e=>(t(),D(`div`,{key:e.label,class:`space-y-1`},[m(`div`,kt,[m(`span`,{class:h(e.textClass)},O(e.label),3),m(`span`,At,O(e.count)+` (`+O(e.percent)+`%) `,1)]),m(`div`,jt,[m(`div`,{class:h([`h-full rounded-full transition-all duration-300`,e.barClass]),style:w({width:`${e.percent}%`})},null,6)])]))),128))]))}}),$=s({__name:`Separator`,props:{orientation:{default:`horizontal`},decorative:{type:Boolean,default:!0},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let n=e,r=A(n,`class`);return(e,i)=>(t(),l(v(qe),_({"data-slot":`separator`},v(r),{class:v(N)(`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=s({__name:`RequestDetailPanel`,props:{request:{}},emits:[`viewDetail`],setup(e){let n=e,i=g(()=>n.request?(((n.request.completedAt??Date.now())-n.request.startTime)/1e3).toFixed(1):`--`),a=g(()=>{if(!n.request?.streamMetrics)return`--`;let e=n.request.streamMetrics;if(e.outputTokens==null||e.ttftMs==null)return`--`;let t=(n.request.completedAt??Date.now())-n.request.startTime;return t<=0?`--`:`${(e.outputTokens/(t/1e3)).toFixed(1)} tok/s`});function o(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function s(e){switch(e){case`pending`:return`进行中`;case`failed`:return`失败`;case`completed`:return`完成`;default:return e}}return(n,u)=>e.request?(t(),D(`div`,Pt,[m(`div`,Ft,[m(`span`,It,O(e.request.model),1),e.request.isStream?(t(),l(v(V),{key:0,variant:`outline`,class:`text-xs`},{default:c(()=>[...u[1]||=[d(`SSE`,-1)]]),_:1})):C(``,!0),E(v(V),{variant:o(e.request.status)},{default:c(()=>[d(O(s(e.request.status)),1)]),_:1},8,[`variant`])]),m(`p`,Lt,O(e.request.id.slice(0,8)),1),m(`div`,Rt,[m(`div`,zt,[u[2]||=m(`span`,{class:`text-muted-foreground`},`API 类型`,-1),m(`span`,Bt,O(e.request.apiType.toUpperCase()),1)]),E(v($)),m(`div`,Vt,[u[3]||=m(`span`,{class:`text-muted-foreground`},`Provider`,-1),m(`span`,Ht,O(e.request.providerName),1)]),E(v($)),m(`div`,Ut,[u[4]||=m(`span`,{class:`text-muted-foreground`},`耗时`,-1),m(`span`,Wt,O(i.value)+`s`,1)]),E(v($)),m(`div`,Gt,[u[5]||=m(`span`,{class:`text-muted-foreground`},`TTFT`,-1),m(`span`,Kt,O(e.request.streamMetrics?.ttftMs==null?`--`:`${e.request.streamMetrics.ttftMs.toFixed(0)}ms`),1)]),E(v($)),m(`div`,qt,[u[6]||=m(`span`,{class:`text-muted-foreground`},`Input Tokens`,-1),m(`span`,Jt,O(e.request.streamMetrics?.inputTokens??`--`),1)]),E(v($)),m(`div`,Yt,[u[7]||=m(`span`,{class:`text-muted-foreground`},`Output Tokens`,-1),m(`span`,Xt,O(e.request.streamMetrics?.outputTokens==null?`--`:e.request.streamMetrics.outputTokens),1)]),E(v($)),m(`div`,Zt,[u[8]||=m(`span`,{class:`text-muted-foreground`},`速度`,-1),m(`span`,Qt,O(a.value),1)])]),e.request.streamMetrics?.isComplete?(t(),D(`div`,$t,[E(v(V),{variant:`secondary`},{default:c(()=>[...u[9]||=[d(`已完成`,-1)]]),_:1}),e.request.streamMetrics.stopReason?(t(),l(v(V),{key:0,variant:`outline`},{default:c(()=>[d(O(e.request.streamMetrics.stopReason),1)]),_:1})):C(``,!0)])):e.request.status===`pending`?(t(),D(`div`,en,[E(v(V),null,{default:c(()=>[...u[10]||=[d(`进行中`,-1)]]),_:1})])):C(``,!0),e.request.attempts.length>0?(t(),D(`div`,tn,[u[11]||=m(`p`,{class:`text-xs text-muted-foreground mb-1`},`尝试历史`,-1),m(`div`,nn,[(t(!0),D(p,null,r(e.request.attempts,(e,n)=>(t(),D(`div`,{key:n,class:`flex items-center gap-2 text-xs bg-muted/50 rounded px-2 py-1`},[m(`span`,rn,`#`+O(n+1),1),m(`span`,{class:h(e.statusCode&&e.statusCode<400?`text-green-600`:`text-red-500`)},O(e.statusCode??`N/A`),3),m(`span`,an,O(e.latencyMs.toFixed(0))+`ms`,1),e.error?(t(),D(`span`,on,O(e.error),1)):C(``,!0)]))),128))])])):C(``,!0),e.request.clientIp?(t(),D(`div`,sn,` IP: `+O(e.request.clientIp),1)):C(``,!0),e.request.status===`completed`||e.request.status===`failed`?(t(),D(`div`,cn,[E(v(te),{variant:`outline`,size:`sm`,class:`w-full`,onClick:u[0]||=t=>n.$emit(`viewDetail`,e.request.id)},{default:c(()=>[...u[12]||=[d(` 查看完整日志 `,-1)]]),_:1})])):C(``,!0)])):(t(),D(`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=s({__name:`StreamResponseViewer`,props:{metrics:{},isStream:{type:Boolean},streamContent:{},nonStreamBody:{},loadingBody:{type:Boolean}},setup(i){let a=i,o=y(null),s=y([]),u=y({}),f=y({}),_=g(()=>{let e=a.streamContent?.blocks;return!!(e&&e.length>0&&e.some(e=>e.type!==`text`||e.content.length>0))});return n(()=>a.streamContent?.textContent,()=>{e(()=>{o.value&&(o.value.scrollTop=o.value.scrollHeight);for(let e of s.value)e.scrollTop=e.scrollHeight})}),(e,n)=>i.isStream?i.streamContent?(t(),l(v(ue),{key:2,"default-value":`structured`,class:`flex flex-col h-full`},{default:c(()=>[E(v(de),{class:`w-fit`},{default:c(()=>[E(v(pe),{value:`structured`},{default:c(()=>[...n[1]||=[d(`响应内容`,-1)]]),_:1}),E(v(pe),{value:`raw`},{default:c(()=>[...n[2]||=[d(`原始 SSE`,-1)]]),_:1})]),_:1}),E(v(fe),{value:`structured`,class:`flex-1 overflow-y-auto mt-2`},{default:c(()=>[_.value?(t(),D(`div`,vn,[(t(!0),D(p,null,r(i.streamContent.blocks,(e,r)=>(t(),D(p,{key:r},[e.type===`thinking`&&e.content?(t(),l(v(ie),{key:0,open:u.value[r]??!0,"onUpdate:open":e=>u.value[r]=e},{default:c(()=>[m(`div`,yn,[E(v(ae),{"as-child":``},{default:c(()=>[m(`div`,bn,[E(v(be),{class:h([`h-3 w-3 transition-transform`,{"rotate-90":u.value[r]??!0}])},null,8,[`class`]),E(v(ye),{class:`h-3.5 w-3.5 text-muted-foreground`}),n[3]||=m(`span`,{class:`text-xs font-medium`},`Thinking`,-1),m(`span`,xn,`(`+O(e.content.length)+` 字符)`,1)])]),_:2},1024),E(v(re),null,{default:c(()=>[m(`div`,Sn,[m(`pre`,Cn,[m(`code`,null,O(e.content),1)])])]),_:2},1024)])]),_:2},1032,[`open`,`onUpdate:open`])):e.type===`text`&&e.content?(t(),D(`div`,wn,[m(`div`,Tn,[E(v(xe),{class:`h-3.5 w-3.5 text-muted-foreground`}),n[4]||=m(`span`,{class:`text-xs font-medium`},`Reply`,-1)]),m(`div`,En,[m(`pre`,{ref_for:!0,ref_key:`textContentRefs`,ref:s,class:`text-xs overflow-y-auto whitespace-pre-wrap break-words max-h-60`},[m(`code`,null,O(e.content),1)],512)])])):e.type===`tool_use`?(t(),l(v(ie),{key:2,open:f.value[r]??!1,"onUpdate:open":e=>f.value[r]=e},{default:c(()=>[m(`div`,Dn,[E(v(ae),{"as-child":``},{default:c(()=>[m(`div`,On,[E(v(be),{class:h([`h-3 w-3 transition-transform`,{"rotate-90":f.value[r]??!1}])},null,8,[`class`]),E(v(Se),{class:`h-3.5 w-3.5 text-muted-foreground`}),n[5]||=m(`span`,{class:`text-xs font-medium`},`Tool Use`,-1),e.name?(t(),l(v(V),{key:0,variant:`outline`,class:`text-xs`},{default:c(()=>[d(O(e.name),1)]),_:2},1024)):C(``,!0)])]),_:2},1024),E(v(re),null,{default:c(()=>[m(`div`,kn,[m(`pre`,An,[m(`code`,null,O(e.content||`(等待数据...)`),1)])])]),_:2},1024)])]),_:2},1032,[`open`,`onUpdate:open`])):C(``,!0)],64))),128))])):i.streamContent.textContent?(t(),D(`div`,jn,[m(`div`,Mn,[m(`div`,Nn,[E(v(xe),{class:`h-3.5 w-3.5 text-muted-foreground`}),n[6]||=m(`span`,{class:`text-xs font-medium`},`Reply`,-1)]),m(`div`,Pn,[m(`pre`,{ref_key:`textContentRef`,ref:o,class:`text-xs overflow-y-auto whitespace-pre-wrap break-words max-h-80`},[m(`code`,null,O(i.streamContent.textContent),1)],512)])])])):(t(),D(`div`,Fn,` 暂无内容 `))]),_:1}),E(v(fe),{value:`raw`,class:`flex-1 overflow-y-auto mt-2`},{default:c(()=>[i.streamContent.rawChunks?(t(),D(`pre`,In,[m(`code`,null,O(i.streamContent.rawChunks),1)])):(t(),D(`div`,Ln,` 暂无数据 `))]),_:1})]),_:1})):(t(),D(`div`,_n,` 等待流数据... `)):(t(),D(`div`,un,[i.nonStreamBody?(t(),D(`div`,dn,[m(`div`,fn,[E(v(xe),{class:`h-3.5 w-3.5 text-muted-foreground`}),n[0]||=m(`span`,{class:`text-xs font-medium`},`Response`,-1)]),m(`div`,pn,[m(`pre`,mn,[m(`code`,null,O(i.nonStreamBody),1)])])])):i.loadingBody?(t(),D(`div`,hn,` 加载中... `)):(t(),D(`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=s({__name:`ProviderStatsTable`,props:{stats:{}},setup(e){let n=e,i=g(()=>n.stats?Object.entries(n.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:n.stats.p99LatencyMs.toFixed(0)+`ms`})):[]);return(n,a)=>e.stats?i.value.length===0?(t(),D(`div`,Bn,` 暂无 Provider 统计 `)):(t(),l(v(he),{key:2},{default:c(()=>[E(v(_e),null,{default:c(()=>[E(v(ge),null,{default:c(()=>[E(v(q),null,{default:c(()=>[...a[0]||=[d(`Provider`,-1)]]),_:1}),E(v(q),{class:`text-right`},{default:c(()=>[...a[1]||=[d(`请求数`,-1)]]),_:1}),E(v(q),{class:`text-right`},{default:c(()=>[...a[2]||=[d(`成功率`,-1)]]),_:1}),E(v(q),{class:`text-right`},{default:c(()=>[...a[3]||=[d(`平均延迟`,-1)]]),_:1}),E(v(q),{class:`text-right`},{default:c(()=>[...a[4]||=[d(`P99 延迟`,-1)]]),_:1}),E(v(q),{class:`text-right`},{default:c(()=>[...a[5]||=[d(`重试率`,-1)]]),_:1}),E(v(q),null,{default:c(()=>[...a[6]||=[d(`Top Errors`,-1)]]),_:1})]),_:1})]),_:1}),E(v(me),null,{default:c(()=>[(t(!0),D(p,null,r(i.value,e=>(t(),l(v(ge),{key:e.id},{default:c(()=>[E(v(K),{class:`font-medium`},{default:c(()=>[d(O(e.name),1)]),_:2},1024),E(v(K),{class:`text-right`},{default:c(()=>[d(O(e.stats.totalRequests),1)]),_:2},1024),E(v(K),{class:`text-right`},{default:c(()=>[m(`span`,{class:h(e.successRate>=95?`text-green-600`:e.successRate>=80?`text-yellow-600`:`text-red-500`)},O(e.successRate.toFixed(1))+`% `,3)]),_:2},1024),E(v(K),{class:`text-right`},{default:c(()=>[d(O(e.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),E(v(K),{class:`text-right`},{default:c(()=>[d(O(e.p99Latency),1)]),_:2},1024),E(v(K),{class:`text-right`},{default:c(()=>[m(`span`,{class:h(e.retryRate>10?`text-yellow-600`:``)},O(e.retryRate.toFixed(1))+`% `,3)]),_:2},1024),E(v(K),null,{default:c(()=>[m(`div`,Vn,[(t(!0),D(p,null,r(e.stats.topErrors.slice(0,3),e=>(t(),l(v(V),{key:e.code,variant:`destructive`,class:`text-xs`},{default:c(()=>[d(O(e.code)+` (`+O(e.count)+`) `,1)]),_:2},1024))),128)),e.stats.topErrors.length===0?(t(),D(`span`,Hn,`--`)):C(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(t(),D(`div`,zn,` 暂无数据 `))}});function Wn(e,t,n){let r=null,i=null;function o(){if(!r){r=new EventSource(e),r.onopen=()=>{n?.onOpen?.()};for(let[e,n]of Object.entries(t))r.addEventListener(e,n);r.onerror=()=>{s(),n?.onClose?.(),i=setTimeout(o,3e3)}}}function s(){i&&=(clearTimeout(i),null),r&&=(r.close(),null)}return a(()=>{s(),n?.onClose?.()}),{connect:o,disconnect:s}}var Gn=200;function Kn(){let e=y([]),t=y([]),n=y(null),r=y([]),i=y(null),a=y(!1),o=g(()=>e.value.filter(e=>e.isStream).length),s=g(()=>e.value.filter(e=>!e.queued)),c=g(()=>e.value.filter(e=>e.queued===!0));function l(a){let o;try{o=JSON.parse(a.data)}catch{return}switch(a.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`:i.value=o;break}}function u(){a.value=!0}function d(){a.value=!1}async function f(){try{let[a,o,s,c,l]=await Promise.allSettled([x.getMonitorActive(),x.getMonitorRecent(),x.getMonitorStats(),x.getMonitorConcurrency(),x.getMonitorRuntime()]);a.status===`fulfilled`&&(e.value=a.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`&&(i.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),n.value=null,r.value=[],i.value=null}}let p=y(void 0),m=y(!1),h=y(0);async function _(n){let r=++h.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i||i.isStream||i.status===`pending`){p.value=void 0;return}m.value=!0,p.value=void 0;try{let e=await x.getLogDetail(n);if(r!==h.value)return;p.value=e.response_body??void 0}catch(e){if(r!==h.value)return;console.warn(`Failed to load non-stream body:`,e),p.value=void 0}finally{r===h.value&&(m.value=!1)}}let v=y(null),b=y(!1);function S(e){v.value=e,b.value=!0,_(e)}return{activeRequests:e,recentCompleted:t,stats:n,concurrency:r,runtime:i,connected:a,streamCount:o,streamingRequests:s,queuedRequests:c,selectedRequestId:v,selectedRequest:g(()=>v.value?e.value.find(e=>e.id===v.value)??t.value.find(e=>e.id===v.value)??null:null),requestDetailOpen:b,selectRequest:S,nonStreamBody:p,nonStreamBodyLoading:m,handleSSEMessage:l,handleSSEOpen:u,handleSSEClose:d,loadInitialData:f}}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=s({__name:`Monitor`,setup(e){let{activeRequests:n,recentCompleted:a,stats:o,concurrency:s,runtime:u,connected:f,streamCount:g,streamingRequests:_,queuedRequests:b,selectedRequestId:x,selectedRequest:w,requestDetailOpen:T,selectRequest:k,nonStreamBody:ee,nonStreamBodyLoading:A,handleSSEMessage:j,handleSSEOpen:M,handleSSEClose:te,loadInitialData:N}=Kn(),{connect:P}=Wn(`/admin/api/monitor/stream`,{request_start:j,request_update:j,request_complete:j,concurrency_update:j,stats_update:j,runtime_update:j},{onOpen:M,onClose:te}),F=y(!1),I=y(null);function L(e){T.value=!1,F.value=!0,I.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 i(async()=>{await N(),P()}),(e,i)=>(t(),D(`div`,qn,[m(`div`,Jn,[i[2]||=m(`h2`,{class:`text-lg font-semibold text-foreground`},`实时监控`,-1),m(`div`,Yn,[E(v(V),{variant:v(f)?`default`:`destructive`},{default:c(()=>[d(O(v(f)?`已连接`:`未连接`),1)]),_:1},8,[`variant`])])]),E(at,{stats:v(o),"active-count":v(n).length,"stream-count":v(g)},null,8,[`stats`,`active-count`,`stream-count`]),m(`div`,Xn,[E(v(H),null,{default:c(()=>[E(v(W),{class:`pb-2`},{default:c(()=>[m(`div`,Zn,[E(v(G),{class:`text-sm font-medium text-foreground`},{default:c(()=>[...i[3]||=[d(`活跃请求`,-1)]]),_:1}),E(v(V),{variant:`secondary`},{default:c(()=>[d(O(v(_).length),1)]),_:1})])]),_:1}),E(v(U),null,{default:c(()=>[E(v(Ye),{class:`h-64`},{default:c(()=>[v(_).length===0?(t(),D(`div`,Qn,` 暂无活跃请求 `)):C(``,!0),(t(!0),D(p,null,r(v(_),e=>(t(),D(`div`,{key:e.id,class:h([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":v(x)===e.id}]),onClick:t=>v(k)(e.id)},[E(v(V),{variant:R(e.status),class:`shrink-0`},{default:c(()=>[d(O(ne(e.status)),1)]),_:2},1032,[`variant`]),m(`span`,er,O(e.model),1),E(v(V),{variant:`outline`,class:`shrink-0 text-xs`},{default:c(()=>[d(O(e.providerName),1)]),_:2},1024),m(`span`,tr,O(z(e.startTime))+`s`,1),e.isStream?(t(),l(v(V),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:c(()=>[...i[4]||=[d(`SSE`,-1)]]),_:1})):C(``,!0)],10,$n))),128))]),_:1})]),_:1})]),_:1}),E(v(H),null,{default:c(()=>[E(v(W),{class:`pb-2`},{default:c(()=>[m(`div`,nr,[E(v(G),{class:`text-sm font-medium text-foreground`},{default:c(()=>[...i[5]||=[d(`队列请求`,-1)]]),_:1}),E(v(V),{variant:`secondary`},{default:c(()=>[d(O(v(b).length),1)]),_:1})])]),_:1}),E(v(U),null,{default:c(()=>[E(v(Ye),{class:`h-64`},{default:c(()=>[v(b).length===0?(t(),D(`div`,rr,` 暂无排队请求 `)):C(``,!0),(t(!0),D(p,null,r(v(b),e=>(t(),D(`div`,{key:e.id,class:h([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":v(x)===e.id}]),onClick:t=>v(k)(e.id)},[E(v(V),{variant:`outline`,class:`shrink-0`},{default:c(()=>[...i[6]||=[d(` 排队 `,-1)]]),_:1}),m(`span`,ar,O(e.model),1),E(v(V),{variant:`outline`,class:`shrink-0 text-xs`},{default:c(()=>[d(O(e.providerName),1)]),_:2},1024),m(`span`,or,O(z(e.startTime))+`s`,1)],10,ir))),128))]),_:1})]),_:1})]),_:1}),E(v(H),null,{default:c(()=>[E(v(W),{class:`pb-2`},{default:c(()=>[m(`div`,sr,[E(v(G),{class:`text-sm font-medium text-foreground`},{default:c(()=>[...i[7]||=[d(`已完成`,-1)]]),_:1}),E(v(V),{variant:`secondary`},{default:c(()=>[d(O(v(a).length),1)]),_:1})])]),_:1}),E(v(U),null,{default:c(()=>[E(v(Ye),{class:`h-64`},{default:c(()=>[v(a).length===0?(t(),D(`div`,cr,` 暂无已完成请求 `)):C(``,!0),(t(!0),D(p,null,r(v(a),e=>(t(),D(`div`,{key:e.id,class:h([`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":v(x)===e.id}]),onClick:t=>v(k)(e.id)},[E(v(V),{variant:R(e.status),class:`shrink-0`},{default:c(()=>[d(O(ne(e.status)),1)]),_:2},1032,[`variant`]),m(`span`,ur,O(e.model),1),E(v(V),{variant:`outline`,class:`shrink-0 text-xs`},{default:c(()=>[d(O(e.providerName),1)]),_:2},1024),e.isStream?(t(),l(v(V),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:c(()=>[...i[8]||=[d(`SSE`,-1)]]),_:1})):C(``,!0)],10,lr))),128))]),_:1})]),_:1})]),_:1})]),E(v(H),{class:`mb-4`},{default:c(()=>[E(v(W),null,{default:c(()=>[E(v(G),{class:`text-sm font-medium text-foreground`},{default:c(()=>[...i[9]||=[d(`Provider 统计`,-1)]]),_:1})]),_:1}),E(v(U),null,{default:c(()=>[E(Un,{stats:v(o)},null,8,[`stats`])]),_:1})]),_:1}),m(`div`,dr,[E(v(H),null,{default:c(()=>[E(v(W),null,{default:c(()=>[E(v(G),{class:`text-sm font-medium text-foreground`},{default:c(()=>[...i[10]||=[d(`并发度`,-1)]]),_:1})]),_:1}),E(v(U),null,{default:c(()=>[E(pt,{providers:v(s)},null,8,[`providers`])]),_:1})]),_:1}),E(v(H),null,{default:c(()=>[E(v(W),null,{default:c(()=>[E(v(G),{class:`text-sm font-medium text-foreground`},{default:c(()=>[...i[11]||=[d(`状态码分布`,-1)]]),_:1})]),_:1}),E(v(U),null,{default:c(()=>[E(Mt,{"by-status-code":v(o)?.byStatusCode??{}},null,8,[`by-status-code`])]),_:1})]),_:1}),E(v(H),null,{default:c(()=>[E(v(W),null,{default:c(()=>[E(v(G),{class:`text-sm font-medium text-foreground`},{default:c(()=>[...i[12]||=[d(`运行时`,-1)]]),_:1})]),_:1}),E(v(U),null,{default:c(()=>[E(Et,{runtime:v(u)},null,8,[`runtime`])]),_:1})]),_:1})]),E(v(ce),{open:v(T),"onUpdate:open":i[0]||=e=>S(T)?T.value=e:null},{default:c(()=>[E(v(oe),{class:`max-w-5xl max-h-[80vh]`},{default:c(()=>[E(v(se),null,{default:c(()=>[E(v(le),null,{default:c(()=>[...i[13]||=[d(`请求详情`,-1)]]),_:1})]),_:1}),v(w)?(t(),D(`div`,fr,[m(`div`,pr,[E(ln,{request:v(w),onViewDetail:L},null,8,[`request`])]),m(`div`,mr,[E(Rn,{metrics:v(w).streamMetrics??null,"is-stream":v(w).isStream,"stream-content":v(w).streamContent??void 0,"non-stream-body":v(ee),"loading-body":v(A)},null,8,[`metrics`,`is-stream`,`stream-content`,`non-stream-body`,`loading-body`])])])):(t(),D(`div`,hr,` 点击请求查看详情 `))]),_:1})]),_:1},8,[`open`]),E(ve,{ref_key:`logDetailDialog`,ref:I,open:F.value,"onUpdate:open":i[1]||=e=>F.value=e},null,8,[`open`])]))}});export{_r as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,F as t,J as n,K as r,M as i,O as a,R as o,S as s,Y as c,_ as l,ct as u,h as d,k as f,mt as p,ot as m,q as h,rt as g,st as _,vt as v,x as y,y as b}from"./client-Mb8fy_bC.js";import{i as x,l as S,m as C}from"./button-D54q76GQ.js";import{S as w}from"./Collection-DUBb4r6h.js";import{t as T}from"./useForwardExpose-CzQFheaD.js";function E(e){let t=m(),n=d(()=>t.value?.width??0),r=d(()=>t.value?.height??0);return i(()=>{let n=S(e);if(n){t.value={width:n.offsetWidth,height:n.offsetHeight};let e=new ResizeObserver(e=>{if(!Array.isArray(e)||!e.length)return;let r=e[0],i,a;if(`borderBoxSize`in r){let e=r.borderBoxSize,t=Array.isArray(e)?e[0]:e;i=t.inlineSize,a=t.blockSize}else i=n.offsetWidth,a=n.offsetHeight;t.value={width:i,height:a}});return e.observe(n,{box:`border-box`}),()=>e.unobserve(n)}else t.value=void 0}),{width:n,height:r}}var[D,O]=w(`PopperRoot`),ee=s({inheritAttrs:!1,__name:`PopperRoot`,setup(e){let t=m();return O({anchor:t,onAnchorChange:e=>t.value=e}),(e,t)=>o(e.$slots,`default`)}}),k=s({__name:`PopperAnchor`,props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let r=e,{forwardRef:i,currentElement:a}=T(),s=D();return n(()=>{s.onAnchorChange(r.reference??a.value)}),(e,n)=>(t(),l(p(x),{ref:p(i),as:e.as,"as-child":e.asChild},{default:c(()=>[o(e.$slots,`default`)]),_:3},8,[`as`,`as-child`]))}});function te(e){return e!==null}function ne(e){return{name:`transformOrigin`,options:e,fn(t){let{placement:n,rects:r,middlewareData:i}=t,a=i.arrow?.centerOffset!==0,o=a?0:e.arrowWidth,s=a?0:e.arrowHeight,[c,l]=A(n),u={start:`0%`,center:`50%`,end:`100%`}[l],d=(i.arrow?.x??0)+o/2,f=(i.arrow?.y??0)+s/2,p=``,m=``;return c===`bottom`?(p=a?u:`${d}px`,m=`${-s}px`):c===`top`?(p=a?u:`${d}px`,m=`${r.floating.height+s}px`):c===`right`?(p=`${-s}px`,m=a?u:`${f}px`):c===`left`&&(p=`${r.floating.width+s}px`,m=a?u:`${f}px`),{data:{x:p,y:m}}}}}function A(e){let[t,n=`center`]=e.split(`-`);return[t,n]}var j=[`top`,`right`,`bottom`,`left`],M=Math.min,N=Math.max,P=Math.round,F=Math.floor,I=e=>({x:e,y:e}),L={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function re(e,t,n){return N(e,M(t,n))}function R(e,t){return typeof e==`function`?e(t):e}function z(e){return e.split(`-`)[0]}function B(e){return e.split(`-`)[1]}function ie(e){return e===`x`?`y`:`x`}function ae(e){return e===`y`?`height`:`width`}function V(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function oe(e){return ie(V(e))}function se(e,t,n){n===void 0&&(n=!1);let r=B(e),i=oe(e),a=ae(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=ge(o)),[o,ge(o)]}function ce(e){let t=ge(e);return[le(e),t,le(t)]}function le(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var ue=[`left`,`right`],de=[`right`,`left`],fe=[`top`,`bottom`],pe=[`bottom`,`top`];function me(e,t,n){switch(e){case`top`:case`bottom`:return n?t?de:ue:t?ue:de;case`left`:case`right`:return t?fe:pe;default:return[]}}function he(e,t,n,r){let i=B(e),a=me(z(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(le)))),a}function ge(e){let t=z(e);return L[t]+e.slice(t.length)}function _e(e){return{top:0,right:0,bottom:0,left:0,...e}}function ve(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:_e(e)}function ye(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function be(e,t,n){let{reference:r,floating:i}=e,a=V(t),o=oe(t),s=ae(o),c=z(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}switch(B(t)){case`start`:p[o]-=f*(n&&l?-1:1);break;case`end`:p[o]+=f*(n&&l?-1:1);break}return p}async function xe(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=R(t,e),p=ve(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=ye(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=ye(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var Se=50,Ce=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:xe},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=be(l,r,c),f=r,p=0,m={};for(let n=0;n<a.length;n++){let h=a[n];if(!h)continue;let{name:g,fn:_}=h,{x:v,y,data:b,reset:x}=await _({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:m,rects:l,platform:s,elements:{reference:e,floating:t}});u=v??u,d=y??d,m[g]={...m[g],...b},x&&p<Se&&(p++,typeof x==`object`&&(x.placement&&(f=x.placement),x.rects&&(l=x.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):x.rects),{x:u,y:d}=be(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:m}},we=e=>({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=R(e,t)||{};if(l==null)return{};let d=ve(u),f={x:n,y:r},p=oe(i),m=ae(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,v=g?`bottom`:`right`,y=g?`clientHeight`:`clientWidth`,b=a.reference[m]+a.reference[p]-f[p]-a.floating[m],x=f[p]-a.reference[p],S=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),C=S?S[y]:0;(!C||!await(o.isElement==null?void 0:o.isElement(S)))&&(C=s.floating[y]||a.floating[m]);let w=b/2-x/2,T=C/2-h[m]/2-1,E=M(d[_],T),D=M(d[v],T),O=E,ee=C-h[m]-D,k=C/2-h[m]/2+w,te=re(O,k,ee),ne=!c.arrow&&B(i)!=null&&k!==te&&a.reference[m]/2-(k<O?E:D)-h[m]/2<0,A=ne?k<O?k-O:k-ee:0;return{[p]:f[p]+A,data:{[p]:te,centerOffset:k-te-A,...ne&&{alignmentOffset:A}},reset:ne}}}),Te=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n;let{placement:r,middlewareData:i,rects:a,initialPlacement:o,platform:s,elements:c}=t,{mainAxis:l=!0,crossAxis:u=!0,fallbackPlacements:d,fallbackStrategy:f=`bestFit`,fallbackAxisSideDirection:p=`none`,flipAlignment:m=!0,...h}=R(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let g=z(r),_=V(o),v=z(o)===o,y=await(s.isRTL==null?void 0:s.isRTL(c.floating)),b=d||(v||!m?[ge(o)]:ce(o)),x=p!==`none`;!d&&x&&b.push(...he(o,m,p,y));let S=[o,...b],C=await s.detectOverflow(t,h),w=[],T=i.flip?.overflows||[];if(l&&w.push(C[g]),u){let e=se(r,a,y);w.push(C[e[0]],C[e[1]])}if(T=[...T,{placement:r,overflows:w}],!w.every(e=>e<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(!(u===`alignment`&&_!==V(t))||T.every(e=>V(e.placement)===_?e.overflows[0]>0:!0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=V(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}};function Ee(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function De(e){return j.some(t=>e[t]>=0)}var Oe=function(e){return e===void 0&&(e={}),{name:`hide`,options:e,async fn(t){let{rects:n,platform:r}=t,{strategy:i=`referenceHidden`,...a}=R(e,t);switch(i){case`referenceHidden`:{let e=Ee(await r.detectOverflow(t,{...a,elementContext:`reference`}),n.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:De(e)}}}case`escaped`:{let e=Ee(await r.detectOverflow(t,{...a,altBoundary:!0}),n.floating);return{data:{escapedOffsets:e,escaped:De(e)}}}default:return{}}}}},ke=new Set([`left`,`top`]);async function Ae(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=z(n),s=B(n),c=V(n)===`y`,l=ke.has(o)?-1:1,u=a&&c?-1:1,d=R(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var je=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await Ae(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},Me=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=R(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=V(z(i)),p=ie(f),m=u[p],h=u[f];if(o){let e=p===`y`?`top`:`left`,t=p===`y`?`bottom`:`right`,n=m+d[e],r=m-d[t];m=re(n,m,r)}if(s){let e=f===`y`?`top`:`left`,t=f===`y`?`bottom`:`right`,n=h+d[e],r=h-d[t];h=re(n,h,r)}let g=c.fn({...t,[p]:m,[f]:h});return{...g,data:{x:g.x-n,y:g.y-r,enabled:{[p]:o,[f]:s}}}}}},Ne=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=R(e,t),u={x:n,y:r},d=V(i),f=ie(d),p=u[f],m=u[d],h=R(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:0,crossAxis:0,...h};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;p<t?p=t:p>n&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=ke.has(z(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);m<n?m=n:m>r&&(m=r)}return{[f]:p,[d]:m}}}},Pe=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){var n,r;let{placement:i,rects:a,platform:o,elements:s}=t,{apply:c=()=>{},...l}=R(e,t),u=await o.detectOverflow(t,l),d=z(i),f=B(i),p=V(i)===`y`,{width:m,height:h}=a.floating,g,_;d===`top`||d===`bottom`?(g=d,_=f===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?`start`:`end`)?`left`:`right`):(_=d,g=f===`end`?`top`:`bottom`);let v=h-u.top-u.bottom,y=m-u.left-u.right,b=M(h-u[g],v),x=M(m-u[_],y),S=!t.middlewareData.shift,C=b,w=x;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(w=y),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(C=v),S&&!f){let e=N(u.left,0),t=N(u.right,0),n=N(u.top,0),r=N(u.bottom,0);p?w=m-2*(e!==0||t!==0?e+t:N(u.left,u.right)):C=h-2*(n!==0||r!==0?n+r:N(u.top,u.bottom))}await c({...t,availableWidth:w,availableHeight:C});let T=await o.getDimensions(s.floating);return m!==T.width||h!==T.height?{reset:{rects:!0}}:{}}}};function Fe(){return typeof window<`u`}function H(e){return Ie(e)?(e.nodeName||``).toLowerCase():`#document`}function U(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function W(e){return((Ie(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function Ie(e){return Fe()?e instanceof Node||e instanceof U(e).Node:!1}function G(e){return Fe()?e instanceof Element||e instanceof U(e).Element:!1}function K(e){return Fe()?e instanceof HTMLElement||e instanceof U(e).HTMLElement:!1}function Le(e){return!Fe()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof U(e).ShadowRoot}function Re(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=Y(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function ze(e){return/^(table|td|th)$/.test(H(e))}function Be(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var Ve=/transform|translate|scale|rotate|perspective|filter/,He=/paint|layout|strict|content/,q=e=>!!e&&e!==`none`,Ue;function We(e){let t=G(e)?Y(e):e;return q(t.transform)||q(t.translate)||q(t.scale)||q(t.rotate)||q(t.perspective)||!Ke()&&(q(t.backdropFilter)||q(t.filter))||Ve.test(t.willChange||``)||He.test(t.contain||``)}function Ge(e){let t=X(e);for(;K(t)&&!J(t);){if(We(t))return t;if(Be(t))return null;t=X(t)}return null}function Ke(){return Ue??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),Ue}function J(e){return/^(html|body|#document)$/.test(H(e))}function Y(e){return U(e).getComputedStyle(e)}function qe(e){return G(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function X(e){if(H(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||Le(e)&&e.host||W(e);return Le(t)?t.host:t}function Je(e){let t=X(e);return J(t)?e.ownerDocument?e.ownerDocument.body:e.body:K(t)&&Re(t)?t:Je(t)}function Ye(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=Je(e),i=r===e.ownerDocument?.body,a=U(r);if(i){let e=Xe(a);return t.concat(a,a.visualViewport||[],Re(r)?r:[],e&&n?Ye(e):[])}else return t.concat(r,Ye(r,[],n))}function Xe(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Ze(e){let t=Y(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=K(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=P(n)!==a||P(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function Qe(e){return G(e)?e:e.contextElement}function Z(e){let t=Qe(e);if(!K(t))return I(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=Ze(t),o=(a?P(n.width):n.width)/r,s=(a?P(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var $e=I(0);function et(e){let t=U(e);return!Ke()||!t.visualViewport?$e:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function tt(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==U(e)?!1:t}function Q(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=Qe(e),o=I(1);t&&(r?G(r)&&(o=Z(r)):o=Z(e));let s=tt(a,n,r)?et(a):I(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a){let e=U(a),t=r&&G(r)?U(r):r,n=e,i=Xe(n);for(;i&&r&&t!==n;){let e=Z(i),t=i.getBoundingClientRect(),r=Y(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=U(i),i=Xe(n)}}return ye({width:u,height:d,x:c,y:l})}function nt(e,t){let n=qe(e).scrollLeft;return t?t.left+n:Q(W(e)).left+n}function rt(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-nt(e,n),y:n.top+t.scrollTop}}function it(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=W(r),s=t?Be(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=I(1),u=I(0),d=K(r);if((d||!d&&!a)&&((H(r)!==`body`||Re(o))&&(c=qe(r)),d)){let e=Q(r);l=Z(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?rt(o,c):I(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function at(e){return Array.from(e.getClientRects())}function ot(e){let t=W(e),n=qe(e),r=e.ownerDocument.body,i=N(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=N(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),o=-n.scrollLeft+nt(e),s=-n.scrollTop;return Y(r).direction===`rtl`&&(o+=N(t.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}var st=25;function ct(e,t){let n=U(e),r=W(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=Ke();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=nt(r);if(l<=0){let e=r.ownerDocument,t=e.body,n=getComputedStyle(t),i=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,o=Math.abs(r.clientWidth-t.clientWidth-i);o<=st&&(a-=o)}else l<=st&&(a+=l);return{width:a,height:o,x:s,y:c}}function lt(e,t){let n=Q(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=K(e)?Z(e):I(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function ut(e,t,n){let r;if(t===`viewport`)r=ct(e,n);else if(t===`document`)r=ot(W(e));else if(G(t))r=lt(t,n);else{let n=et(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return ye(r)}function dt(e,t){let n=X(e);return n===t||!G(n)||J(n)?!1:Y(n).position===`fixed`||dt(n,t)}function ft(e,t){let n=t.get(e);if(n)return n;let r=Ye(e,[],!1).filter(e=>G(e)&&H(e)!==`body`),i=null,a=Y(e).position===`fixed`,o=a?X(e):e;for(;G(o)&&!J(o);){let t=Y(o),n=We(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||Re(o)&&!n&&dt(e,o))?r=r.filter(e=>e!==o):i=t,o=X(o)}return t.set(e,r),r}function pt(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?Be(t)?[]:ft(t,this._c):[].concat(n),r],o=ut(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e<a.length;e++){let n=ut(t,a[e],i);s=N(n.top,s),c=M(n.right,c),l=M(n.bottom,l),u=N(n.left,u)}return{width:c-u,height:l-s,x:u,y:s}}function mt(e){let{width:t,height:n}=Ze(e);return{width:t,height:n}}function ht(e,t,n){let r=K(t),i=W(t),a=n===`fixed`,o=Q(e,!0,a,t),s={scrollLeft:0,scrollTop:0},c=I(0);function l(){c.x=nt(i)}if(r||!r&&!a)if((H(t)!==`body`||Re(i))&&(s=qe(t)),r){let e=Q(t,!0,a,t);c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}else i&&l();a&&!r&&i&&l();let u=i&&!r&&!a?rt(i,s):I(0);return{x:o.left+s.scrollLeft-c.x-u.x,y:o.top+s.scrollTop-c.y-u.y,width:o.width,height:o.height}}function gt(e){return Y(e).position===`static`}function _t(e,t){if(!K(e)||Y(e).position===`fixed`)return null;if(t)return t(e);let n=e.offsetParent;return W(e)===n&&(n=n.ownerDocument.body),n}function vt(e,t){let n=U(e);if(Be(e))return n;if(!K(e)){let t=X(e);for(;t&&!J(t);){if(G(t)&&!gt(t))return t;t=X(t)}return n}let r=_t(e,t);for(;r&&ze(r)&>(r);)r=_t(r,t);return r&&J(r)&>(r)&&!We(r)?n:r||Ge(e)||n}var yt=async function(e){let t=this.getOffsetParent||vt,n=this.getDimensions,r=await n(e.floating);return{reference:ht(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function bt(e){return Y(e).direction===`rtl`}var xt={convertOffsetParentRelativeRectToViewportRelativeRect:it,getDocumentElement:W,getClippingRect:pt,getOffsetParent:vt,getElementRects:yt,getClientRects:at,getDimensions:mt,getScale:Z,isElement:G,isRTL:bt};function St(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function Ct(e,t){let n=null,r,i=W(e);function a(){var e;clearTimeout(r),(e=n)==null||e.disconnect(),n=null}function o(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),a();let l=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(s||t(),!f||!p)return;let m=F(d),h=F(i.clientWidth-(u+f)),g=F(i.clientHeight-(d+p)),_=F(u),v={rootMargin:-m+`px `+-h+`px `+-g+`px `+-_+`px`,threshold:N(0,M(1,c))||1},y=!0;function b(t){let n=t[0].intersectionRatio;if(n!==c){if(!y)return o();n?o(!1,n):r=setTimeout(()=>{o(!1,1e-7)},1e3)}n===1&&!St(l,e.getBoundingClientRect())&&o(),y=!1}try{n=new IntersectionObserver(b,{...v,root:i.ownerDocument})}catch{n=new IntersectionObserver(b,v)}n.observe(e)}return o(!0),a}function wt(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=Qe(e),u=i||a?[...l?Ye(l):[],...t?Ye(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?Ct(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?Q(e):null;c&&g();function g(){let t=Q(e);h&&!St(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var Tt=je,Et=Me,Dt=Te,Ot=Pe,kt=Oe,At=we,jt=Ne,Mt=(e,t,n)=>{let r=new Map,i={platform:xt,...n},a={...i.platform,_c:r};return Ce(e,t,{...i,platform:a})};function Nt(e){return typeof e==`object`&&!!e&&`$el`in e}function Pt(e){if(Nt(e)){let t=e.$el;return Ie(t)&&H(t)===`#comment`?null:t}return e}function $(e){return typeof e==`function`?e():p(e)}function Ft(e){return{name:`arrow`,options:e,fn(t){let n=Pt($(e.element));return n==null?{}:At({element:n,padding:e.padding}).fn(t)}}}function It(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Lt(e,t){let n=It(e);return Math.round(t*n)/n}function Rt(t,n,i){i===void 0&&(i={});let a=i.whileElementsMounted,o=d(()=>$(i.open)??!0),s=d(()=>$(i.middleware)),c=d(()=>$(i.placement)??`bottom`),l=d(()=>$(i.strategy)??`absolute`),f=d(()=>$(i.transform)??!0),p=d(()=>Pt(t.value)),h=d(()=>Pt(n.value)),v=m(0),y=m(0),b=m(l.value),x=m(c.value),S=u({}),C=m(!1),w=d(()=>{let e={position:b.value,left:`0`,top:`0`};if(!h.value)return e;let t=Lt(h.value,v.value),n=Lt(h.value,y.value);return f.value?{...e,transform:`translate(`+t+`px, `+n+`px)`,...It(h.value)>=1.5&&{willChange:`transform`}}:{position:b.value,left:t+`px`,top:n+`px`}}),T;function E(){if(p.value==null||h.value==null)return;let e=o.value;Mt(p.value,h.value,{middleware:s.value,placement:c.value,strategy:l.value}).then(t=>{v.value=t.x,y.value=t.y,b.value=t.strategy,x.value=t.placement,S.value=t.middlewareData,C.value=e!==!1})}function D(){typeof T==`function`&&(T(),T=void 0)}function O(){if(D(),a===void 0){E();return}if(p.value!=null&&h.value!=null){T=a(p.value,h.value,E);return}}function ee(){o.value||(C.value=!1)}return r([s,c,l,o],E,{flush:`sync`}),r([p,h],O,{flush:`sync`}),r(o,ee,{flush:`sync`}),e()&&g(D),{x:_(v),y:_(y),strategy:_(b),placement:_(x),middlewareData:_(S),isPositioned:_(C),floatingStyles:w,update:E}}var zt={side:`bottom`,sideOffset:0,sideFlip:!0,align:`center`,alignOffset:0,alignFlip:!0,arrowPadding:0,hideShiftedArrow:!0,avoidCollisions:!0,collisionBoundary:()=>[],collisionPadding:0,sticky:`partial`,hideWhenDetached:!1,positionStrategy:`fixed`,updatePositionStrategy:`optimized`,prioritizePosition:!1},[Bt,Vt]=w(`PopperContent`),Ht=s({inheritAttrs:!1,__name:`PopperContent`,props:a({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}},{...zt}),emits:[`placed`],setup(e,{emit:r}){let i=e,a=r,s=D(),{forwardRef:l,currentElement:u}=T(),g=m(),_=m(),{width:S,height:w}=E(_),O=d(()=>i.side+(i.align===`center`?``:`-${i.align}`)),ee=d(()=>typeof i.collisionPadding==`number`?i.collisionPadding:{top:0,right:0,bottom:0,left:0,...i.collisionPadding}),k=d(()=>Array.isArray(i.collisionBoundary)?i.collisionBoundary:[i.collisionBoundary]),j=d(()=>({padding:ee.value,boundary:k.value.filter(te),altBoundary:k.value.length>0})),M=d(()=>({mainAxis:i.sideFlip,crossAxis:i.alignFlip})),N=C(()=>[Tt({mainAxis:i.sideOffset+w.value,alignmentAxis:i.alignOffset}),i.prioritizePosition&&i.avoidCollisions&&Dt({...j.value,...M.value}),i.avoidCollisions&&Et({mainAxis:!0,crossAxis:!!i.prioritizePosition,limiter:i.sticky===`partial`?jt():void 0,...j.value}),!i.prioritizePosition&&i.avoidCollisions&&Dt({...j.value,...M.value}),Ot({...j.value,apply:({elements:e,rects:t,availableWidth:n,availableHeight:r})=>{let{width:i,height:a}=t.reference,o=e.floating.style;o.setProperty(`--reka-popper-available-width`,`${n}px`),o.setProperty(`--reka-popper-available-height`,`${r}px`),o.setProperty(`--reka-popper-anchor-width`,`${i}px`),o.setProperty(`--reka-popper-anchor-height`,`${a}px`)}}),_.value&&Ft({element:_.value,padding:i.arrowPadding}),ne({arrowWidth:S.value,arrowHeight:w.value}),i.hideWhenDetached&&kt({strategy:`referenceHidden`,...j.value})]),{floatingStyles:P,placement:F,isPositioned:I,middlewareData:L,update:re}=Rt(d(()=>i.reference??s.anchor.value),g,{strategy:i.positionStrategy,placement:O,whileElementsMounted:(...e)=>wt(...e,{layoutShift:!i.disableUpdateOnLayoutShift,animationFrame:i.updatePositionStrategy===`always`}),middleware:N}),R=d(()=>A(F.value)[0]),z=d(()=>A(F.value)[1]);n(()=>{I.value&&a(`placed`)});let B=d(()=>{let e=L.value.arrow?.centerOffset!==0;return i.hideShiftedArrow&&e}),ie=m(``);return h(()=>{u.value&&(ie.value=window.getComputedStyle(u.value).zIndex)}),Vt({placedSide:R,onArrowChange:e=>_.value=e,arrowX:d(()=>L.value.arrow?.x??0),arrowY:d(()=>L.value.arrow?.y??0),shouldHideArrow:B}),(e,n)=>(t(),b(`div`,{ref_key:`floatingRef`,ref:g,"data-reka-popper-content-wrapper":``,style:v({...p(P),transform:p(I)?p(P).transform:`translate(0, -200%)`,minWidth:`max-content`,zIndex:ie.value,"--reka-popper-transform-origin":[p(L).transformOrigin?.x,p(L).transformOrigin?.y].join(` `),...p(L).hide?.referenceHidden&&{visibility:`hidden`,pointerEvents:`none`}})},[y(p(x),f({ref:p(l)},e.$attrs,{"as-child":i.asChild,as:e.as,"data-side":R.value,"data-align":z.value,style:{animation:p(I)?void 0:`none`}}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`as-child`,`as`,`data-side`,`data-align`,`style`])],4))}});export{ee as i,Bt as n,k as r,Ht as t};
|
|
1
|
+
import{$ as e,F as t,J as n,K as r,M as i,O as a,R as o,S as s,Y as c,_ as l,ct as u,h as d,k as f,mt as p,ot as m,q as h,rt as g,st as _,vt as v,x as y,y as b}from"./client-DIIo9zPK.js";import{i as x,l as S,m as C}from"./button-Dcc0gF5i.js";import{S as w}from"./Collection-1EHC87X5.js";import{t as T}from"./useForwardExpose-AkE0lq8y.js";function E(e){let t=m(),n=d(()=>t.value?.width??0),r=d(()=>t.value?.height??0);return i(()=>{let n=S(e);if(n){t.value={width:n.offsetWidth,height:n.offsetHeight};let e=new ResizeObserver(e=>{if(!Array.isArray(e)||!e.length)return;let r=e[0],i,a;if(`borderBoxSize`in r){let e=r.borderBoxSize,t=Array.isArray(e)?e[0]:e;i=t.inlineSize,a=t.blockSize}else i=n.offsetWidth,a=n.offsetHeight;t.value={width:i,height:a}});return e.observe(n,{box:`border-box`}),()=>e.unobserve(n)}else t.value=void 0}),{width:n,height:r}}var[D,O]=w(`PopperRoot`),ee=s({inheritAttrs:!1,__name:`PopperRoot`,setup(e){let t=m();return O({anchor:t,onAnchorChange:e=>t.value=e}),(e,t)=>o(e.$slots,`default`)}}),k=s({__name:`PopperAnchor`,props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let r=e,{forwardRef:i,currentElement:a}=T(),s=D();return n(()=>{s.onAnchorChange(r.reference??a.value)}),(e,n)=>(t(),l(p(x),{ref:p(i),as:e.as,"as-child":e.asChild},{default:c(()=>[o(e.$slots,`default`)]),_:3},8,[`as`,`as-child`]))}});function te(e){return e!==null}function ne(e){return{name:`transformOrigin`,options:e,fn(t){let{placement:n,rects:r,middlewareData:i}=t,a=i.arrow?.centerOffset!==0,o=a?0:e.arrowWidth,s=a?0:e.arrowHeight,[c,l]=A(n),u={start:`0%`,center:`50%`,end:`100%`}[l],d=(i.arrow?.x??0)+o/2,f=(i.arrow?.y??0)+s/2,p=``,m=``;return c===`bottom`?(p=a?u:`${d}px`,m=`${-s}px`):c===`top`?(p=a?u:`${d}px`,m=`${r.floating.height+s}px`):c===`right`?(p=`${-s}px`,m=a?u:`${f}px`):c===`left`&&(p=`${r.floating.width+s}px`,m=a?u:`${f}px`),{data:{x:p,y:m}}}}}function A(e){let[t,n=`center`]=e.split(`-`);return[t,n]}var j=[`top`,`right`,`bottom`,`left`],M=Math.min,N=Math.max,P=Math.round,F=Math.floor,I=e=>({x:e,y:e}),L={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function re(e,t,n){return N(e,M(t,n))}function R(e,t){return typeof e==`function`?e(t):e}function z(e){return e.split(`-`)[0]}function B(e){return e.split(`-`)[1]}function ie(e){return e===`x`?`y`:`x`}function ae(e){return e===`y`?`height`:`width`}function V(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function oe(e){return ie(V(e))}function se(e,t,n){n===void 0&&(n=!1);let r=B(e),i=oe(e),a=ae(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=ge(o)),[o,ge(o)]}function ce(e){let t=ge(e);return[le(e),t,le(t)]}function le(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var ue=[`left`,`right`],de=[`right`,`left`],fe=[`top`,`bottom`],pe=[`bottom`,`top`];function me(e,t,n){switch(e){case`top`:case`bottom`:return n?t?de:ue:t?ue:de;case`left`:case`right`:return t?fe:pe;default:return[]}}function he(e,t,n,r){let i=B(e),a=me(z(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(le)))),a}function ge(e){let t=z(e);return L[t]+e.slice(t.length)}function _e(e){return{top:0,right:0,bottom:0,left:0,...e}}function ve(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:_e(e)}function ye(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function be(e,t,n){let{reference:r,floating:i}=e,a=V(t),o=oe(t),s=ae(o),c=z(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}switch(B(t)){case`start`:p[o]-=f*(n&&l?-1:1);break;case`end`:p[o]+=f*(n&&l?-1:1);break}return p}async function xe(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=R(t,e),p=ve(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=ye(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=ye(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var Se=50,Ce=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:xe},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=be(l,r,c),f=r,p=0,m={};for(let n=0;n<a.length;n++){let h=a[n];if(!h)continue;let{name:g,fn:_}=h,{x:v,y,data:b,reset:x}=await _({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:m,rects:l,platform:s,elements:{reference:e,floating:t}});u=v??u,d=y??d,m[g]={...m[g],...b},x&&p<Se&&(p++,typeof x==`object`&&(x.placement&&(f=x.placement),x.rects&&(l=x.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):x.rects),{x:u,y:d}=be(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:m}},we=e=>({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=R(e,t)||{};if(l==null)return{};let d=ve(u),f={x:n,y:r},p=oe(i),m=ae(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,v=g?`bottom`:`right`,y=g?`clientHeight`:`clientWidth`,b=a.reference[m]+a.reference[p]-f[p]-a.floating[m],x=f[p]-a.reference[p],S=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),C=S?S[y]:0;(!C||!await(o.isElement==null?void 0:o.isElement(S)))&&(C=s.floating[y]||a.floating[m]);let w=b/2-x/2,T=C/2-h[m]/2-1,E=M(d[_],T),D=M(d[v],T),O=E,ee=C-h[m]-D,k=C/2-h[m]/2+w,te=re(O,k,ee),ne=!c.arrow&&B(i)!=null&&k!==te&&a.reference[m]/2-(k<O?E:D)-h[m]/2<0,A=ne?k<O?k-O:k-ee:0;return{[p]:f[p]+A,data:{[p]:te,centerOffset:k-te-A,...ne&&{alignmentOffset:A}},reset:ne}}}),Te=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n;let{placement:r,middlewareData:i,rects:a,initialPlacement:o,platform:s,elements:c}=t,{mainAxis:l=!0,crossAxis:u=!0,fallbackPlacements:d,fallbackStrategy:f=`bestFit`,fallbackAxisSideDirection:p=`none`,flipAlignment:m=!0,...h}=R(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let g=z(r),_=V(o),v=z(o)===o,y=await(s.isRTL==null?void 0:s.isRTL(c.floating)),b=d||(v||!m?[ge(o)]:ce(o)),x=p!==`none`;!d&&x&&b.push(...he(o,m,p,y));let S=[o,...b],C=await s.detectOverflow(t,h),w=[],T=i.flip?.overflows||[];if(l&&w.push(C[g]),u){let e=se(r,a,y);w.push(C[e[0]],C[e[1]])}if(T=[...T,{placement:r,overflows:w}],!w.every(e=>e<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(!(u===`alignment`&&_!==V(t))||T.every(e=>V(e.placement)===_?e.overflows[0]>0:!0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=V(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}};function Ee(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function De(e){return j.some(t=>e[t]>=0)}var Oe=function(e){return e===void 0&&(e={}),{name:`hide`,options:e,async fn(t){let{rects:n,platform:r}=t,{strategy:i=`referenceHidden`,...a}=R(e,t);switch(i){case`referenceHidden`:{let e=Ee(await r.detectOverflow(t,{...a,elementContext:`reference`}),n.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:De(e)}}}case`escaped`:{let e=Ee(await r.detectOverflow(t,{...a,altBoundary:!0}),n.floating);return{data:{escapedOffsets:e,escaped:De(e)}}}default:return{}}}}},ke=new Set([`left`,`top`]);async function Ae(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=z(n),s=B(n),c=V(n)===`y`,l=ke.has(o)?-1:1,u=a&&c?-1:1,d=R(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var je=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await Ae(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},Me=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=R(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=V(z(i)),p=ie(f),m=u[p],h=u[f];if(o){let e=p===`y`?`top`:`left`,t=p===`y`?`bottom`:`right`,n=m+d[e],r=m-d[t];m=re(n,m,r)}if(s){let e=f===`y`?`top`:`left`,t=f===`y`?`bottom`:`right`,n=h+d[e],r=h-d[t];h=re(n,h,r)}let g=c.fn({...t,[p]:m,[f]:h});return{...g,data:{x:g.x-n,y:g.y-r,enabled:{[p]:o,[f]:s}}}}}},Ne=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=R(e,t),u={x:n,y:r},d=V(i),f=ie(d),p=u[f],m=u[d],h=R(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:0,crossAxis:0,...h};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;p<t?p=t:p>n&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=ke.has(z(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);m<n?m=n:m>r&&(m=r)}return{[f]:p,[d]:m}}}},Pe=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){var n,r;let{placement:i,rects:a,platform:o,elements:s}=t,{apply:c=()=>{},...l}=R(e,t),u=await o.detectOverflow(t,l),d=z(i),f=B(i),p=V(i)===`y`,{width:m,height:h}=a.floating,g,_;d===`top`||d===`bottom`?(g=d,_=f===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?`start`:`end`)?`left`:`right`):(_=d,g=f===`end`?`top`:`bottom`);let v=h-u.top-u.bottom,y=m-u.left-u.right,b=M(h-u[g],v),x=M(m-u[_],y),S=!t.middlewareData.shift,C=b,w=x;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(w=y),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(C=v),S&&!f){let e=N(u.left,0),t=N(u.right,0),n=N(u.top,0),r=N(u.bottom,0);p?w=m-2*(e!==0||t!==0?e+t:N(u.left,u.right)):C=h-2*(n!==0||r!==0?n+r:N(u.top,u.bottom))}await c({...t,availableWidth:w,availableHeight:C});let T=await o.getDimensions(s.floating);return m!==T.width||h!==T.height?{reset:{rects:!0}}:{}}}};function Fe(){return typeof window<`u`}function H(e){return Ie(e)?(e.nodeName||``).toLowerCase():`#document`}function U(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function W(e){return((Ie(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function Ie(e){return Fe()?e instanceof Node||e instanceof U(e).Node:!1}function G(e){return Fe()?e instanceof Element||e instanceof U(e).Element:!1}function K(e){return Fe()?e instanceof HTMLElement||e instanceof U(e).HTMLElement:!1}function Le(e){return!Fe()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof U(e).ShadowRoot}function Re(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=Y(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function ze(e){return/^(table|td|th)$/.test(H(e))}function Be(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var Ve=/transform|translate|scale|rotate|perspective|filter/,He=/paint|layout|strict|content/,q=e=>!!e&&e!==`none`,Ue;function We(e){let t=G(e)?Y(e):e;return q(t.transform)||q(t.translate)||q(t.scale)||q(t.rotate)||q(t.perspective)||!Ke()&&(q(t.backdropFilter)||q(t.filter))||Ve.test(t.willChange||``)||He.test(t.contain||``)}function Ge(e){let t=X(e);for(;K(t)&&!J(t);){if(We(t))return t;if(Be(t))return null;t=X(t)}return null}function Ke(){return Ue??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),Ue}function J(e){return/^(html|body|#document)$/.test(H(e))}function Y(e){return U(e).getComputedStyle(e)}function qe(e){return G(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function X(e){if(H(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||Le(e)&&e.host||W(e);return Le(t)?t.host:t}function Je(e){let t=X(e);return J(t)?e.ownerDocument?e.ownerDocument.body:e.body:K(t)&&Re(t)?t:Je(t)}function Ye(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=Je(e),i=r===e.ownerDocument?.body,a=U(r);if(i){let e=Xe(a);return t.concat(a,a.visualViewport||[],Re(r)?r:[],e&&n?Ye(e):[])}else return t.concat(r,Ye(r,[],n))}function Xe(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Ze(e){let t=Y(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=K(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=P(n)!==a||P(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function Qe(e){return G(e)?e:e.contextElement}function Z(e){let t=Qe(e);if(!K(t))return I(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=Ze(t),o=(a?P(n.width):n.width)/r,s=(a?P(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var $e=I(0);function et(e){let t=U(e);return!Ke()||!t.visualViewport?$e:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function tt(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==U(e)?!1:t}function Q(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=Qe(e),o=I(1);t&&(r?G(r)&&(o=Z(r)):o=Z(e));let s=tt(a,n,r)?et(a):I(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a){let e=U(a),t=r&&G(r)?U(r):r,n=e,i=Xe(n);for(;i&&r&&t!==n;){let e=Z(i),t=i.getBoundingClientRect(),r=Y(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=U(i),i=Xe(n)}}return ye({width:u,height:d,x:c,y:l})}function nt(e,t){let n=qe(e).scrollLeft;return t?t.left+n:Q(W(e)).left+n}function rt(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-nt(e,n),y:n.top+t.scrollTop}}function it(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=W(r),s=t?Be(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=I(1),u=I(0),d=K(r);if((d||!d&&!a)&&((H(r)!==`body`||Re(o))&&(c=qe(r)),d)){let e=Q(r);l=Z(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?rt(o,c):I(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function at(e){return Array.from(e.getClientRects())}function ot(e){let t=W(e),n=qe(e),r=e.ownerDocument.body,i=N(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=N(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),o=-n.scrollLeft+nt(e),s=-n.scrollTop;return Y(r).direction===`rtl`&&(o+=N(t.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}var st=25;function ct(e,t){let n=U(e),r=W(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=Ke();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=nt(r);if(l<=0){let e=r.ownerDocument,t=e.body,n=getComputedStyle(t),i=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,o=Math.abs(r.clientWidth-t.clientWidth-i);o<=st&&(a-=o)}else l<=st&&(a+=l);return{width:a,height:o,x:s,y:c}}function lt(e,t){let n=Q(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=K(e)?Z(e):I(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function ut(e,t,n){let r;if(t===`viewport`)r=ct(e,n);else if(t===`document`)r=ot(W(e));else if(G(t))r=lt(t,n);else{let n=et(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return ye(r)}function dt(e,t){let n=X(e);return n===t||!G(n)||J(n)?!1:Y(n).position===`fixed`||dt(n,t)}function ft(e,t){let n=t.get(e);if(n)return n;let r=Ye(e,[],!1).filter(e=>G(e)&&H(e)!==`body`),i=null,a=Y(e).position===`fixed`,o=a?X(e):e;for(;G(o)&&!J(o);){let t=Y(o),n=We(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||Re(o)&&!n&&dt(e,o))?r=r.filter(e=>e!==o):i=t,o=X(o)}return t.set(e,r),r}function pt(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?Be(t)?[]:ft(t,this._c):[].concat(n),r],o=ut(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e<a.length;e++){let n=ut(t,a[e],i);s=N(n.top,s),c=M(n.right,c),l=M(n.bottom,l),u=N(n.left,u)}return{width:c-u,height:l-s,x:u,y:s}}function mt(e){let{width:t,height:n}=Ze(e);return{width:t,height:n}}function ht(e,t,n){let r=K(t),i=W(t),a=n===`fixed`,o=Q(e,!0,a,t),s={scrollLeft:0,scrollTop:0},c=I(0);function l(){c.x=nt(i)}if(r||!r&&!a)if((H(t)!==`body`||Re(i))&&(s=qe(t)),r){let e=Q(t,!0,a,t);c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}else i&&l();a&&!r&&i&&l();let u=i&&!r&&!a?rt(i,s):I(0);return{x:o.left+s.scrollLeft-c.x-u.x,y:o.top+s.scrollTop-c.y-u.y,width:o.width,height:o.height}}function gt(e){return Y(e).position===`static`}function _t(e,t){if(!K(e)||Y(e).position===`fixed`)return null;if(t)return t(e);let n=e.offsetParent;return W(e)===n&&(n=n.ownerDocument.body),n}function vt(e,t){let n=U(e);if(Be(e))return n;if(!K(e)){let t=X(e);for(;t&&!J(t);){if(G(t)&&!gt(t))return t;t=X(t)}return n}let r=_t(e,t);for(;r&&ze(r)&>(r);)r=_t(r,t);return r&&J(r)&>(r)&&!We(r)?n:r||Ge(e)||n}var yt=async function(e){let t=this.getOffsetParent||vt,n=this.getDimensions,r=await n(e.floating);return{reference:ht(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function bt(e){return Y(e).direction===`rtl`}var xt={convertOffsetParentRelativeRectToViewportRelativeRect:it,getDocumentElement:W,getClippingRect:pt,getOffsetParent:vt,getElementRects:yt,getClientRects:at,getDimensions:mt,getScale:Z,isElement:G,isRTL:bt};function St(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function Ct(e,t){let n=null,r,i=W(e);function a(){var e;clearTimeout(r),(e=n)==null||e.disconnect(),n=null}function o(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),a();let l=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(s||t(),!f||!p)return;let m=F(d),h=F(i.clientWidth-(u+f)),g=F(i.clientHeight-(d+p)),_=F(u),v={rootMargin:-m+`px `+-h+`px `+-g+`px `+-_+`px`,threshold:N(0,M(1,c))||1},y=!0;function b(t){let n=t[0].intersectionRatio;if(n!==c){if(!y)return o();n?o(!1,n):r=setTimeout(()=>{o(!1,1e-7)},1e3)}n===1&&!St(l,e.getBoundingClientRect())&&o(),y=!1}try{n=new IntersectionObserver(b,{...v,root:i.ownerDocument})}catch{n=new IntersectionObserver(b,v)}n.observe(e)}return o(!0),a}function wt(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=Qe(e),u=i||a?[...l?Ye(l):[],...t?Ye(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?Ct(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?Q(e):null;c&&g();function g(){let t=Q(e);h&&!St(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var Tt=je,Et=Me,Dt=Te,Ot=Pe,kt=Oe,At=we,jt=Ne,Mt=(e,t,n)=>{let r=new Map,i={platform:xt,...n},a={...i.platform,_c:r};return Ce(e,t,{...i,platform:a})};function Nt(e){return typeof e==`object`&&!!e&&`$el`in e}function Pt(e){if(Nt(e)){let t=e.$el;return Ie(t)&&H(t)===`#comment`?null:t}return e}function $(e){return typeof e==`function`?e():p(e)}function Ft(e){return{name:`arrow`,options:e,fn(t){let n=Pt($(e.element));return n==null?{}:At({element:n,padding:e.padding}).fn(t)}}}function It(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Lt(e,t){let n=It(e);return Math.round(t*n)/n}function Rt(t,n,i){i===void 0&&(i={});let a=i.whileElementsMounted,o=d(()=>$(i.open)??!0),s=d(()=>$(i.middleware)),c=d(()=>$(i.placement)??`bottom`),l=d(()=>$(i.strategy)??`absolute`),f=d(()=>$(i.transform)??!0),p=d(()=>Pt(t.value)),h=d(()=>Pt(n.value)),v=m(0),y=m(0),b=m(l.value),x=m(c.value),S=u({}),C=m(!1),w=d(()=>{let e={position:b.value,left:`0`,top:`0`};if(!h.value)return e;let t=Lt(h.value,v.value),n=Lt(h.value,y.value);return f.value?{...e,transform:`translate(`+t+`px, `+n+`px)`,...It(h.value)>=1.5&&{willChange:`transform`}}:{position:b.value,left:t+`px`,top:n+`px`}}),T;function E(){if(p.value==null||h.value==null)return;let e=o.value;Mt(p.value,h.value,{middleware:s.value,placement:c.value,strategy:l.value}).then(t=>{v.value=t.x,y.value=t.y,b.value=t.strategy,x.value=t.placement,S.value=t.middlewareData,C.value=e!==!1})}function D(){typeof T==`function`&&(T(),T=void 0)}function O(){if(D(),a===void 0){E();return}if(p.value!=null&&h.value!=null){T=a(p.value,h.value,E);return}}function ee(){o.value||(C.value=!1)}return r([s,c,l,o],E,{flush:`sync`}),r([p,h],O,{flush:`sync`}),r(o,ee,{flush:`sync`}),e()&&g(D),{x:_(v),y:_(y),strategy:_(b),placement:_(x),middlewareData:_(S),isPositioned:_(C),floatingStyles:w,update:E}}var zt={side:`bottom`,sideOffset:0,sideFlip:!0,align:`center`,alignOffset:0,alignFlip:!0,arrowPadding:0,hideShiftedArrow:!0,avoidCollisions:!0,collisionBoundary:()=>[],collisionPadding:0,sticky:`partial`,hideWhenDetached:!1,positionStrategy:`fixed`,updatePositionStrategy:`optimized`,prioritizePosition:!1},[Bt,Vt]=w(`PopperContent`),Ht=s({inheritAttrs:!1,__name:`PopperContent`,props:a({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}},{...zt}),emits:[`placed`],setup(e,{emit:r}){let i=e,a=r,s=D(),{forwardRef:l,currentElement:u}=T(),g=m(),_=m(),{width:S,height:w}=E(_),O=d(()=>i.side+(i.align===`center`?``:`-${i.align}`)),ee=d(()=>typeof i.collisionPadding==`number`?i.collisionPadding:{top:0,right:0,bottom:0,left:0,...i.collisionPadding}),k=d(()=>Array.isArray(i.collisionBoundary)?i.collisionBoundary:[i.collisionBoundary]),j=d(()=>({padding:ee.value,boundary:k.value.filter(te),altBoundary:k.value.length>0})),M=d(()=>({mainAxis:i.sideFlip,crossAxis:i.alignFlip})),N=C(()=>[Tt({mainAxis:i.sideOffset+w.value,alignmentAxis:i.alignOffset}),i.prioritizePosition&&i.avoidCollisions&&Dt({...j.value,...M.value}),i.avoidCollisions&&Et({mainAxis:!0,crossAxis:!!i.prioritizePosition,limiter:i.sticky===`partial`?jt():void 0,...j.value}),!i.prioritizePosition&&i.avoidCollisions&&Dt({...j.value,...M.value}),Ot({...j.value,apply:({elements:e,rects:t,availableWidth:n,availableHeight:r})=>{let{width:i,height:a}=t.reference,o=e.floating.style;o.setProperty(`--reka-popper-available-width`,`${n}px`),o.setProperty(`--reka-popper-available-height`,`${r}px`),o.setProperty(`--reka-popper-anchor-width`,`${i}px`),o.setProperty(`--reka-popper-anchor-height`,`${a}px`)}}),_.value&&Ft({element:_.value,padding:i.arrowPadding}),ne({arrowWidth:S.value,arrowHeight:w.value}),i.hideWhenDetached&&kt({strategy:`referenceHidden`,...j.value})]),{floatingStyles:P,placement:F,isPositioned:I,middlewareData:L,update:re}=Rt(d(()=>i.reference??s.anchor.value),g,{strategy:i.positionStrategy,placement:O,whileElementsMounted:(...e)=>wt(...e,{layoutShift:!i.disableUpdateOnLayoutShift,animationFrame:i.updatePositionStrategy===`always`}),middleware:N}),R=d(()=>A(F.value)[0]),z=d(()=>A(F.value)[1]);n(()=>{I.value&&a(`placed`)});let B=d(()=>{let e=L.value.arrow?.centerOffset!==0;return i.hideShiftedArrow&&e}),ie=m(``);return h(()=>{u.value&&(ie.value=window.getComputedStyle(u.value).zIndex)}),Vt({placedSide:R,onArrowChange:e=>_.value=e,arrowX:d(()=>L.value.arrow?.x??0),arrowY:d(()=>L.value.arrow?.y??0),shouldHideArrow:B}),(e,n)=>(t(),b(`div`,{ref_key:`floatingRef`,ref:g,"data-reka-popper-content-wrapper":``,style:v({...p(P),transform:p(I)?p(P).transform:`translate(0, -200%)`,minWidth:`max-content`,zIndex:ie.value,"--reka-popper-transform-origin":[p(L).transformOrigin?.x,p(L).transformOrigin?.y].join(` `),...p(L).hide?.referenceHidden&&{visibility:`hidden`,pointerEvents:`none`}})},[y(p(x),f({ref:p(l)},e.$attrs,{"as-child":i.asChild,as:e.as,"data-side":R.value,"data-align":z.value,style:{animation:p(I)?void 0:`none`}}),{default:c(()=>[o(e.$slots,`default`)]),_:3},16,[`as-child`,`as`,`data-side`,`data-align`,`style`])],4))}});export{ee as i,Bt as n,k as r,Ht as t};
|