@lakphy/local-router 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +19 -0
- package/dist/entry.js +19 -0
- package/dist/web/assets/index-BpifDtUQ.css +2 -0
- package/dist/web/assets/{index-DVUjoZy3.js → index-Dt7z9ioY.js} +10 -10
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/index.js +0 -13699
- package/dist/web/assets/index-BuPqjQdS.css +0 -2
|
@@ -130,15 +130,15 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
130
130
|
monaco.config({ paths: { vs: '...' } })
|
|
131
131
|
|
|
132
132
|
For more please check the link https://github.com/suren-atoyan/monaco-loader#config
|
|
133
|
-
`},zA=NA(LA)(RA),BA={config:FA},VA=function(){var e=[...arguments];return function(t){return e.reduceRight(function(e,t){return t(e)},t)}};function HA(e,t){return Object.keys(t).forEach(function(n){t[n]instanceof Object&&e[n]&&Object.assign(t[n],HA(e[n],t[n]))}),iA(iA({},e),t)}var UA={type:`cancelation`,msg:`operation is manually canceled`};function WA(e){var t=!1,n=new Promise(function(n,r){e.then(function(e){return t?r(UA):n(e)}),e.catch(r)});return n.cancel=function(){return t=!0},n}var GA=[`monaco`],KA=sA(jA.create({config:MA,isInitialized:!1,resolve:null,reject:null,monaco:null}),2),qA=KA[0],JA=KA[1];function YA(e){var t=BA.config(e),n=t.monaco,r=aA(t,GA);JA(function(e){return{config:HA(e.config,r),monaco:n}})}function XA(){var e=qA(function(e){return{monaco:e.monaco,isInitialized:e.isInitialized,resolve:e.resolve}});if(!e.isInitialized){if(JA({isInitialized:!0}),e.monaco)return e.resolve(e.monaco),WA(rj);if(window.monaco&&window.monaco.editor)return tj(window.monaco),e.resolve(window.monaco),WA(rj);VA(ZA,$A)(ej)}return WA(rj)}function ZA(e){return document.body.appendChild(e)}function QA(e){var t=document.createElement(`script`);return e&&(t.src=e),t}function $A(e){var t=qA(function(e){return{config:e.config,reject:e.reject}}),n=QA(`${t.config.paths.vs}/loader.js`);return n.onload=function(){return e()},n.onerror=t.reject,n}function ej(){var e=qA(function(e){return{config:e.config,resolve:e.resolve,reject:e.reject}}),t=window.require;t.config(e.config),t([`vs/editor/editor.main`],function(t){var n=t.m||t;tj(n),e.resolve(n)},function(t){e.reject(t)})}function tj(e){qA().monaco||JA({monaco:e})}function nj(){return qA(function(e){return e.monaco})}var rj=new Promise(function(e,t){return JA({resolve:e,reject:t})}),ij={config:YA,init:XA,__getMonacoInstance:nj},aj={wrapper:{display:`flex`,position:`relative`,textAlign:`initial`},fullWidth:{width:`100%`},hide:{display:`none`}},oj={container:{display:`flex`,height:`100%`,width:`100%`,justifyContent:`center`,alignItems:`center`}};function sj({children:e}){return F.createElement(`div`,{style:oj.container},e)}var cj=sj;function lj({width:e,height:t,isEditorReady:n,loading:r,_ref:i,className:a,wrapperProps:o}){return F.createElement(`section`,{style:{...aj.wrapper,width:e,height:t},...o},!n&&F.createElement(cj,null,r),F.createElement(`div`,{ref:i,style:{...aj.fullWidth,...!n&&aj.hide},className:a}))}var uj=(0,F.memo)(lj);function dj(e){(0,F.useEffect)(e,[])}var fj=dj;function pj(e,t,n=!0){let r=(0,F.useRef)(!0);(0,F.useEffect)(r.current||!n?()=>{r.current=!1}:e,t)}var mj=pj;function hj(){}function gj(e,t,n,r){return _j(e,r)||vj(e,t,n,r)}function _j(e,t){return e.editor.getModel(yj(e,t))}function vj(e,t,n,r){return e.editor.createModel(t,n,r?yj(e,r):void 0)}function yj(e,t){return e.Uri.parse(t)}function bj({original:e,modified:t,language:n,originalLanguage:r,modifiedLanguage:i,originalModelPath:a,modifiedModelPath:o,keepCurrentOriginalModel:s=!1,keepCurrentModifiedModel:c=!1,theme:l=`light`,loading:u=`Loading...`,options:d={},height:f=`100%`,width:p=`100%`,className:m,wrapperProps:h={},beforeMount:g=hj,onMount:_=hj}){let[v,y]=(0,F.useState)(!1),[b,x]=(0,F.useState)(!0),S=(0,F.useRef)(null),C=(0,F.useRef)(null),w=(0,F.useRef)(null),T=(0,F.useRef)(_),E=(0,F.useRef)(g),ee=(0,F.useRef)(!1);fj(()=>{let e=ij.init();return e.then(e=>(C.current=e)&&x(!1)).catch(e=>e?.type!==`cancelation`&&console.error(`Monaco initialization: error:`,e)),()=>S.current?k():e.cancel()}),mj(()=>{if(S.current&&C.current){let t=S.current.getOriginalEditor(),i=gj(C.current,e||``,r||n||`text`,a||``);i!==t.getModel()&&t.setModel(i)}},[a],v),mj(()=>{if(S.current&&C.current){let e=S.current.getModifiedEditor(),r=gj(C.current,t||``,i||n||`text`,o||``);r!==e.getModel()&&e.setModel(r)}},[o],v),mj(()=>{let e=S.current.getModifiedEditor();e.getOption(C.current.editor.EditorOption.readOnly)?e.setValue(t||``):t!==e.getValue()&&(e.executeEdits(``,[{range:e.getModel().getFullModelRange(),text:t||``,forceMoveMarkers:!0}]),e.pushUndoStop())},[t],v),mj(()=>{S.current?.getModel()?.original.setValue(e||``)},[e],v),mj(()=>{let{original:e,modified:t}=S.current.getModel();C.current.editor.setModelLanguage(e,r||n||`text`),C.current.editor.setModelLanguage(t,i||n||`text`)},[n,r,i],v),mj(()=>{C.current?.editor.setTheme(l)},[l],v),mj(()=>{S.current?.updateOptions(d)},[d],v);let D=(0,F.useCallback)(()=>{if(!C.current)return;E.current(C.current);let s=gj(C.current,e||``,r||n||`text`,a||``),c=gj(C.current,t||``,i||n||`text`,o||``);S.current?.setModel({original:s,modified:c})},[n,t,i,e,r,a,o]),O=(0,F.useCallback)(()=>{!ee.current&&w.current&&(S.current=C.current.editor.createDiffEditor(w.current,{automaticLayout:!0,...d}),D(),C.current?.editor.setTheme(l),y(!0),ee.current=!0)},[d,l,D]);(0,F.useEffect)(()=>{v&&T.current(S.current,C.current)},[v]),(0,F.useEffect)(()=>{!b&&!v&&O()},[b,v,O]);function k(){let e=S.current?.getModel();s||e?.original?.dispose(),c||e?.modified?.dispose(),S.current?.dispose()}return F.createElement(uj,{width:p,height:f,isEditorReady:v,loading:u,_ref:w,className:m,wrapperProps:h})}(0,F.memo)(bj);function xj(e){let t=(0,F.useRef)();return(0,F.useEffect)(()=>{t.current=e},[e]),t.current}var Sj=xj,Cj=new Map;function wj({defaultValue:e,defaultLanguage:t,defaultPath:n,value:r,language:i,path:a,theme:o=`light`,line:s,loading:c=`Loading...`,options:l={},overrideServices:u={},saveViewState:d=!0,keepCurrentModel:f=!1,width:p=`100%`,height:m=`100%`,className:h,wrapperProps:g={},beforeMount:_=hj,onMount:v=hj,onChange:y,onValidate:b=hj}){let[x,S]=(0,F.useState)(!1),[C,w]=(0,F.useState)(!0),T=(0,F.useRef)(null),E=(0,F.useRef)(null),ee=(0,F.useRef)(null),D=(0,F.useRef)(v),O=(0,F.useRef)(_),k=(0,F.useRef)(),te=(0,F.useRef)(r),A=Sj(a),ne=(0,F.useRef)(!1),re=(0,F.useRef)(!1);fj(()=>{let e=ij.init();return e.then(e=>(T.current=e)&&w(!1)).catch(e=>e?.type!==`cancelation`&&console.error(`Monaco initialization: error:`,e)),()=>E.current?j():e.cancel()}),mj(()=>{let o=gj(T.current,e||r||``,t||i||``,a||n||``);o!==E.current?.getModel()&&(d&&Cj.set(A,E.current?.saveViewState()),E.current?.setModel(o),d&&E.current?.restoreViewState(Cj.get(a)))},[a],x),mj(()=>{E.current?.updateOptions(l)},[l],x),mj(()=>{!E.current||r===void 0||(E.current.getOption(T.current.editor.EditorOption.readOnly)?E.current.setValue(r):r!==E.current.getValue()&&(re.current=!0,E.current.executeEdits(``,[{range:E.current.getModel().getFullModelRange(),text:r,forceMoveMarkers:!0}]),E.current.pushUndoStop(),re.current=!1))},[r],x),mj(()=>{let e=E.current?.getModel();e&&i&&T.current?.editor.setModelLanguage(e,i)},[i],x),mj(()=>{s!==void 0&&E.current?.revealLine(s)},[s],x),mj(()=>{T.current?.editor.setTheme(o)},[o],x);let ie=(0,F.useCallback)(()=>{if(!(!ee.current||!T.current)&&!ne.current){O.current(T.current);let c=a||n,f=gj(T.current,r||e||``,t||i||``,c||``);E.current=T.current?.editor.create(ee.current,{model:f,automaticLayout:!0,...l},u),d&&E.current.restoreViewState(Cj.get(c)),T.current.editor.setTheme(o),s!==void 0&&E.current.revealLine(s),S(!0),ne.current=!0}},[e,t,n,r,i,a,l,u,d,o,s]);(0,F.useEffect)(()=>{x&&D.current(E.current,T.current)},[x]),(0,F.useEffect)(()=>{!C&&!x&&ie()},[C,x,ie]),te.current=r,(0,F.useEffect)(()=>{x&&y&&(k.current?.dispose(),k.current=E.current?.onDidChangeModelContent(e=>{re.current||y(E.current.getValue(),e)}))},[x,y]),(0,F.useEffect)(()=>{if(x){let e=T.current.editor.onDidChangeMarkers(e=>{let t=E.current.getModel()?.uri;if(t&&e.find(e=>e.path===t.path)){let e=T.current.editor.getModelMarkers({resource:t});b?.(e)}});return()=>{e?.dispose()}}return()=>{}},[x,b]);function j(){k.current?.dispose(),f?d&&Cj.set(a,E.current.saveViewState()):E.current.getModel()?.dispose(),E.current.dispose()}return F.createElement(uj,{width:p,height:m,isEditorReady:x,loading:c,_ref:ee,className:h,wrapperProps:g})}var Tj=(0,F.memo)(wj),Ej=`inmemory://model/local-router-config.json`,Dj=`local-router://schema/config.schema.json`;function Oj(){let{theme:e}=Ak(),t=vS(e=>e.config),n=vS(e=>e.saving),r=vS(e=>e.applying),i=vS(e=>e.save),a=vS(e=>e.saveAndApply),o=vS(e=>e.setDraft),s=vS(e=>e.reset),c=bS(e=>e.rawOpen),l=bS(e=>e.setRawOpen),u=bS(e=>e.rawValue),d=bS(e=>e.setRawValue),f=bS(e=>e.rawParseError),p=bS(e=>e.setRawParseError),m=bS(e=>e.schema),h=n||r;function g(){try{let e=JSON.parse(u);return p(null),e}catch(e){return p(e instanceof Error?e.message:`JSON 解析失败`),null}}async function _(){let e=g();if(!e){L.error(`JSON 格式错误,无法保存`);return}try{await i(e),o(e),l(!1),L.success(`配置已保存`)}catch(e){L.error(e instanceof Error?e.message:`保存失败`)}}async function v(){let e=g();if(!e){L.error(`JSON 格式错误,无法保存并应用`);return}try{await a(e),o(e),l(!1),L.success(`配置已保存并应用`)}catch(e){L.error(e instanceof Error?e.message:`保存并应用失败`)}}function y(){s();let e=t??{};d(JSON.stringify(e,null,2)),p(null),L.info(`已重置为上次保存的配置`)}return(0,I.jsx)(Rk,{open:c,onOpenChange:l,children:(0,I.jsxs)(Hk,{className:`h-[92vh] w-[calc(100vw-2rem)] max-w-[calc(100vw-2rem)] sm:max-w-[calc(100vw-2rem)]!`,children:[(0,I.jsxs)(Uk,{children:[(0,I.jsx)(Gk,{children:`Raw 配置编辑`}),(0,I.jsx)(Kk,{children:`使用 Monaco 编辑 JSON。支持 schema 提示与校验,保存前请确认语法正确。`})]}),f&&(0,I.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive`,children:[(0,I.jsx)(ra,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,I.jsx)(`span`,{children:f})]}),(0,I.jsx)(`div`,{className:`h-[calc(92vh-210px)] overflow-hidden rounded-lg border`,children:(0,I.jsx)(Tj,{height:`100%`,theme:e===`dark`?`vs-dark`:`light`,language:`json`,value:u,onChange:e=>d(e??``),path:Ej,beforeMount:e=>{e.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!1,allowComments:!0,schemaValidation:`error`,schemas:m?[{uri:Dj,fileMatch:[Ej],schema:m}]:[]})},options:{minimap:{enabled:!1},wordWrap:`on`,fontSize:13,tabSize:2,formatOnPaste:!0,formatOnType:!0,scrollBeyondLastLine:!1,automaticLayout:!0}})}),(0,I.jsxs)(Wk,{children:[(0,I.jsx)(q,{variant:`outline`,onClick:y,disabled:h,children:`重置`}),(0,I.jsx)(q,{variant:`outline`,onClick:_,disabled:h||!!f,children:`保存`}),(0,I.jsx)(q,{onClick:v,disabled:h||!!f,children:`保存并应用`})]})]})})}function kj({delayDuration:e=0,...t}){return(0,I.jsx)(db,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function Aj({...e}){return(0,I.jsx)(fb,{"data-slot":`tooltip`,...e})}function jj({...e}){return(0,I.jsx)(pb,{"data-slot":`tooltip-trigger`,...e})}function Mj({className:e,sideOffset:t=0,children:n,...r}){return(0,I.jsx)(mb,{children:(0,I.jsxs)(hb,{"data-slot":`tooltip-content`,sideOffset:t,className:K(`bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance`,e),...r,children:[n,(0,I.jsx)(gb,{className:`bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]`})]})})}var Nj=`192px`,Pj=`48px`,Fj=`b`,Ij=F.createContext(null);function Lj(){let e=F.useContext(Ij);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function Rj({defaultOpen:e=!0,className:t,style:n,children:r,...i}){let[a,o]=F.useState(e),s=F.useCallback(()=>{o(e=>!e)},[]);return F.useEffect(()=>{let e=e=>{e.key===Fj&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),s())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[s]),(0,I.jsx)(Ij.Provider,{value:{open:a,toggleSidebar:s},children:(0,I.jsx)(kj,{delayDuration:0,children:(0,I.jsx)(`div`,{style:{"--sidebar-width":Nj,"--sidebar-width-collapsed":Pj,...n},className:K(`flex min-h-svh w-full bg-sidebar`,t),...i,children:r})})})}function zj({className:e,children:t,...n}){let{open:r}=Lj();return(0,I.jsx)(`div`,{className:`shrink-0 transition-[width] duration-200 ease-in-out`,style:{width:r?`var(--sidebar-width)`:`var(--sidebar-width-collapsed)`},children:(0,I.jsx)(`div`,{className:K(`fixed top-14 bottom-0 left-0 z-10 flex flex-col overflow-hidden bg-sidebar transition-[width] duration-200 ease-in-out`,e),style:{width:r?`var(--sidebar-width)`:`var(--sidebar-width-collapsed)`},...n,children:t})})}function Bj({className:e,onClick:t,...n}){let{open:r,toggleSidebar:i}=Lj();return(0,I.jsxs)(q,{variant:`ghost`,size:`icon`,className:K(`size-7`,e),onClick:e=>{t?.(e),i()},...n,children:[r?(0,I.jsx)(Sa,{}):(0,I.jsx)(Ca,{}),(0,I.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function Vj({className:e,...t}){return(0,I.jsx)(`main`,{className:K(`relative flex w-full flex-1 flex-col rounded-tl-2xl overflow-hidden bg-background`,e),...t})}function Hj({className:e,...t}){return(0,I.jsx)(`div`,{className:K(`flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden overscroll-y-contain`,e),...t})}function Uj({className:e,...t}){return(0,I.jsx)(`div`,{className:K(`relative flex w-full min-w-0 flex-col p-2`,e),...t})}function Wj({className:e,...t}){return(0,I.jsx)(`div`,{className:K(`w-full text-sm`,e),...t})}function Gj({className:e,...t}){return(0,I.jsx)(`ul`,{className:K(`flex w-full min-w-0 flex-col gap-2`,e),...t})}function Kj({className:e,...t}){return(0,I.jsx)(`li`,{className:K(`group/menu-item relative`,e),...t})}function qj({asChild:e=!1,isActive:t=!1,tooltip:n,className:r,children:i,...a}){let o=e?Xa:`button`,{open:s}=Lj(),c=(0,I.jsx)(o,{"data-active":t,className:K(`flex items-center overflow-hidden rounded-md p-2 text-left text-sm outline-hidden transition-all duration-200`,`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,`focus-visible:ring-2 ring-sidebar-ring`,`disabled:pointer-events-none disabled:opacity-50`,`data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground`,`[&>svg]:size-4 [&>svg]:shrink-0`,s?`w-full h-8 gap-2 [&>span:last-child]:truncate`:`size-8 justify-center [&>span]:hidden`,r),...a,children:i});return!n||s?c:(0,I.jsxs)(Aj,{children:[(0,I.jsx)(jj,{asChild:!0,children:c}),(0,I.jsx)(Mj,{side:`right`,align:`center`,...typeof n==`string`?{children:n}:n})]})}function Jj(){let{theme:e,setTheme:t}=Ak();return(0,I.jsxs)(q,{variant:`ghost`,size:`icon`,className:`size-7`,onClick:()=>t(e===`dark`?`light`:`dark`),title:e===`dark`?`切换到浅色模式`:`切换到深色模式`,children:[(0,I.jsx)(Ia,{className:`h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0`}),(0,I.jsx)(ba,{className:`absolute h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100`}),(0,I.jsx)(`span`,{className:`sr-only`,children:`切换主题`})]})}function Yj({title:e,actions:t}){return(0,I.jsxs)(`header`,{className:`sticky top-0 z-20 flex h-14 shrink-0 items-center gap-2 bg-sidebar px-4`,children:[(0,I.jsx)(Bj,{className:`-ml-1`}),(0,I.jsx)(`h1`,{className:`text-sm font-medium`,children:e}),(0,I.jsx)(`div`,{className:`flex-1`}),(0,I.jsx)(Jj,{}),t]})}var Xj=[{to:`/dashboard`,label:`仪表盘`,icon:_a},{to:`/chat`,label:`聊天面板`,icon:ya},{to:`/logs`,label:`日志检索`,icon:fa},{to:`/sessions`,label:`用户会话`,icon:za},{to:`/providers`,label:`供应商配置`,icon:Ma},{to:`/routes`,label:`路由配置`,icon:Oa},{to:`/logs-settings`,label:`日志配置`,icon:da}];function Zj(){let e=mr({select:e=>e.location.pathname});return(0,I.jsx)(zj,{children:(0,I.jsx)(Hj,{children:(0,I.jsx)(Uj,{children:(0,I.jsx)(Wj,{children:(0,I.jsx)(Gj,{children:Xj.map(t=>(0,I.jsx)(Kj,{children:(0,I.jsx)(qj,{asChild:!0,isActive:e===t.to||t.to===`/logs`&&e.startsWith(`/logs/`)||t.to===`/sessions`&&e.startsWith(`/sessions`),tooltip:t.label,children:(0,I.jsxs)(Ir,{to:t.to,children:[(0,I.jsx)(t.icon,{}),(0,I.jsx)(`span`,{children:t.label})]})})},t.to))})})})})})}function Qj({title:e,headerActions:t,children:n,overlays:r}){return(0,I.jsxs)(Rj,{className:`flex h-svh flex-col overflow-hidden`,children:[(0,I.jsx)(Yj,{title:e,actions:t}),(0,I.jsxs)(`div`,{className:`flex min-h-0 flex-1 overflow-hidden`,children:[(0,I.jsx)(Zj,{}),(0,I.jsx)(Vj,{className:`flex min-h-0 flex-col`,children:(0,I.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-6`,children:n})})]}),r]})}function $j({title:e,description:t,loading:n=!1}){return(0,I.jsx)(`div`,{className:`flex h-screen items-center justify-center`,children:(0,I.jsxs)(`div`,{className:`text-center space-y-2`,children:[n&&(0,I.jsx)(`div`,{className:`flex justify-center pb-1`,children:(0,I.jsx)(va,{className:`h-8 w-8 animate-spin text-muted-foreground`})}),(0,I.jsx)(`p`,{className:n?`text-sm text-muted-foreground`:`text-destructive font-medium`,children:e}),t&&(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t})]})})}var eM={"/dashboard":{title:`仪表盘`,configPage:!1},"/chat":{title:`聊天面板`,configPage:!1},"/providers":{title:`Providers`,configPage:!0},"/routes":{title:`路由`,configPage:!0},"/logs-settings":{title:`日志配置`,configPage:!0},"/logs":{title:`日志检索`,configPage:!1},"/sessions":{title:`用户会话`,configPage:!1}};function tM(e){return e.startsWith(`/logs/`)?{title:`日志详情`,configPage:!1}:eM[e]??eM[`/dashboard`]}function nM(){let e=tM(mr({select:e=>e.location.pathname})),t=vS(e=>e.loading),n=vS(e=>e.error),r=vS(e=>e.draft),i=vS(yS),a=vS(e=>e.loadConfig),o=bS(e=>e.loadSchema);return(0,F.useEffect)(()=>{a(),o()},[a,o]),(0,F.useEffect)(()=>{if(!i)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>{window.removeEventListener(`beforeunload`,e)}},[i]),t?(0,I.jsx)($j,{loading:!0,title:`正在加载配置...`}):n?(0,I.jsx)($j,{title:`加载配置失败`,description:n}):(0,I.jsx)(Qj,{title:e.title,headerActions:e.configPage&&r?(0,I.jsx)(xS,{}):void 0,overlays:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Zk,{}),(0,I.jsx)(Oj,{}),(0,I.jsx)(Bi,{richColors:!0,position:`bottom-right`})]}),children:(0,I.jsx)(ni,{})})}var rM=nM;function iM({...e}){return(0,I.jsx)(Nv,{"data-slot":`select`,...e})}function aM({...e}){return(0,I.jsx)(Bv,{"data-slot":`select-group`,...e})}function oM({...e}){return(0,I.jsx)(Fv,{"data-slot":`select-value`,...e})}function sM({className:e,size:t=`default`,children:n,...r}){return(0,I.jsxs)(Pv,{"data-slot":`select-trigger`,"data-size":t,className:K(`border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground 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:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r,children:[n,(0,I.jsx)(Iv,{asChild:!0,children:(0,I.jsx)(ea,{className:`size-4 opacity-50`})})]})}function cM({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,I.jsx)(Lv,{children:(0,I.jsxs)(Rv,{"data-slot":`select-content`,className:K(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...i,children:[(0,I.jsx)(dM,{}),(0,I.jsx)(zv,{className:K(`p-1`,n===`popper`&&`h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1`),children:t}),(0,I.jsx)(fM,{})]})})}function lM({className:e,...t}){return(0,I.jsx)(Vv,{"data-slot":`select-label`,className:K(`text-muted-foreground px-2 py-1.5 text-xs`,e),...t})}function uM({className:e,children:t,...n}){return(0,I.jsxs)(Hv,{"data-slot":`select-item`,className:K(`focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,I.jsx)(`span`,{"data-slot":`select-item-indicator`,className:`absolute right-2 flex size-3.5 items-center justify-center`,children:(0,I.jsx)(Wv,{children:(0,I.jsx)($i,{className:`size-4`})})}),(0,I.jsx)(Uv,{children:t})]})}function dM({className:e,...t}){return(0,I.jsx)(Gv,{"data-slot":`select-scroll-up-button`,className:K(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,I.jsx)(na,{className:`size-4`})})}function fM({className:e,...t}){return(0,I.jsx)(Kv,{"data-slot":`select-scroll-down-button`,className:K(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,I.jsx)(ea,{className:`size-4`})})}function pM(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`msg_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}function mM(e){return e.base.trim().length>0&&e.apiKey.trim().length>0&&Object.keys(e.models??{}).length>0}function hM(){let e=vS(e=>e.draft??e.config),t=(0,F.useMemo)(()=>Object.entries(e?.providers??{}).filter(([,e])=>mM(e)).map(([e,t])=>({key:e,config:t,models:Object.keys(t.models).sort((e,t)=>e.localeCompare(t))})).sort((e,t)=>e.key.localeCompare(t.key)),[e]),[n,r]=(0,F.useState)(t[0]?.key??``),i=t.find(e=>e.key===n)??t[0],a=(0,F.useMemo)(()=>i?.models??[],[i]),[o,s]=(0,F.useState)(a[0]??``),[c,l]=(0,F.useState)(``),[u,d]=(0,F.useState)([]),[f,p]=(0,F.useState)(!1),[m,h]=(0,F.useState)(!1),g=(0,F.useRef)(null),_=(0,F.useRef)(null);(0,F.useEffect)(()=>{if(!i){r(``),s(``);return}i.key!==n&&r(i.key)},[i,n]),(0,F.useEffect)(()=>{a.includes(o)||s(a[0]??``)},[o,a]),(0,F.useEffect)(()=>{let e=g.current;e&&(e.scrollTop=e.scrollHeight)},[u,f]);let v=!f&&c.trim().length>0&&!!i&&!!o;async function y(){let e=c.trim();if(!e||!i||!o||f)return;let t={id:pM(),role:`user`,content:e,provider:i.key,model:o},n=pM();d(e=>[...e,t,{id:n,role:`assistant`,content:``,provider:i.key,model:o}]),l(``),p(!0);let r=new AbortController;_.current=r;try{let e=[...u,t].map(e=>({role:e.role,content:e.content})),a=await fetch(`/api/chat/proxy`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:i.key,model:o,messages:e}),signal:r.signal});if(!a.ok){let e=await a.text();throw Error(e||`请求失败: ${a.status}`)}if(!a.body)throw Error(`代理接口未返回流`);let s=a.body.getReader(),c=new TextDecoder,l=``;for(;;){let{done:e,value:t}=await s.read();if(e)break;l+=c.decode(t,{stream:!0}),d(e=>e.map(e=>e.id===n?{...e,content:l}:e))}l+=c.decode();let f=l.trim()||` `;d(e=>e.map(e=>e.id===n?{...e,content:f}:e))}catch(e){if(e instanceof Error&&e.name===`AbortError`){d(e=>e.map(e=>e.id===n?{...e,content:e.content||`已停止生成`}:e));return}let t=e instanceof Error?e.message:`请求失败`;d(e=>e.map(e=>e.id===n?{...e,content:e.content||`请求失败:${t}`,error:!0}:e)),L.error(t)}finally{_.current=null,p(!1)}}function b(){_.current?.abort(),_.current=null}function x(){f&&(_.current?.abort(),_.current=null),d([])}return(0,I.jsx)(`div`,{className:`h-full`,children:(0,I.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,I.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,I.jsx)(qk,{className:`h-full`,viewportRef:g,children:(0,I.jsx)(`div`,{className:`mx-auto flex min-h-full w-full max-w-4xl flex-col gap-4 px-1 py-4`,children:u.length===0?(0,I.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,I.jsx)(`div`,{className:`w-full rounded-[2rem] border bg-linear-to-br from-background via-muted/10 to-muted/30 p-6 shadow-xs`,children:(0,I.jsx)(`div`,{className:`flex flex-col gap-6 lg:flex-row lg:items-start lg:justify-between`,children:(0,I.jsxs)(`div`,{className:`max-w-2xl`,children:[(0,I.jsxs)(`div`,{className:`mb-4 inline-flex items-center gap-2 rounded-full border bg-background/80 px-3 py-1 text-xs text-muted-foreground`,children:[(0,I.jsx)(Pa,{className:`size-3.5`}),`Chat Playground`]}),(0,I.jsx)(`h2`,{className:`text-3xl font-semibold tracking-tight`,children:`直接开始一轮真实对话`}),(0,I.jsx)(`p`,{className:`mt-3 max-w-xl text-sm leading-6 text-muted-foreground`,children:`当前聊天页通过本地代理统一转发到你配置的 provider。 不做消息持久化,适合临时验证模型、路由和响应体验。`}),(0,I.jsxs)(`div`,{className:`mt-5 flex flex-wrap gap-2`,children:[(0,I.jsxs)(`div`,{className:`rounded-full border bg-background px-3 py-1.5 text-xs text-muted-foreground`,children:[`Provider`,(0,I.jsx)(`span`,{className:`ml-2 font-medium text-foreground`,children:i?.key||`未配置`})]}),(0,I.jsxs)(`div`,{className:`rounded-full border bg-background px-3 py-1.5 text-xs text-muted-foreground`,children:[`Model`,(0,I.jsx)(`span`,{className:`ml-2 font-medium text-foreground`,children:o||`未选择`})]})]})]})})})}):u.map(e=>(0,I.jsxs)(`div`,{className:K(`w-full px-1 py-1`,e.role===`user`?`rounded-3xl border border-primary/20 bg-primary/5 px-4 py-3`:`px-4 py-3`,e.error&&`border-destructive/40`),children:[e.role===`assistant`?(0,I.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-[11px] text-muted-foreground`,children:[(0,I.jsx)(`span`,{children:`Assistant`}),(0,I.jsx)(`span`,{children:e.provider}),(0,I.jsx)(`span`,{children:`/`}),(0,I.jsx)(`span`,{children:e.model})]}):null,(0,I.jsx)(`div`,{className:`whitespace-pre-wrap break-words text-sm leading-6`,children:e.content||(f&&e.role===`assistant`?`...`:``)}),e.role===`user`?(0,I.jsxs)(`div`,{className:`mt-2 text-right text-[11px] text-muted-foreground`,children:[e.provider,` / `,e.model]}):null]},e.id))})})}),(0,I.jsx)(`div`,{className:`mx-auto w-full max-w-4xl px-1`,children:(0,I.jsxs)(`div`,{className:`rounded-3xl border p-2`,children:[(0,I.jsx)(`textarea`,{value:c,onChange:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),y())},disabled:!i||!o,className:K(`w-full resize-none bg-transparent px-1 focus:outline-none`,m?`h-28`:`h-10`),placeholder:i?`发消息给 ${i.key} / ${o||`未选择模型`}`:`先配置可用 provider`}),(0,I.jsx)(kj,{children:(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsxs)(iM,{value:n,onValueChange:r,disabled:t.length===0,children:[(0,I.jsx)(sM,{className:`h-9 w-64 rounded-full`,children:(0,I.jsx)(oM,{placeholder:`选择 Provider`})}),(0,I.jsx)(cM,{children:t.map(e=>(0,I.jsx)(uM,{value:e.key,children:e.key},e.key))})]}),(0,I.jsxs)(iM,{value:o,onValueChange:s,disabled:!i,children:[(0,I.jsx)(sM,{className:`h-9 w-48 rounded-full`,children:(0,I.jsx)(oM,{placeholder:`选择 Model`})}),(0,I.jsx)(cM,{children:a.map(e=>(0,I.jsx)(uM,{value:e,children:e},e))})]}),(0,I.jsx)(`div`,{className:`flex-1 `}),(0,I.jsxs)(Aj,{children:[(0,I.jsx)(jj,{asChild:!0,children:(0,I.jsx)(q,{variant:`outline`,size:`icon`,className:`rounded-full`,onClick:()=>h(e=>!e),children:m?(0,I.jsx)(Na,{className:`w-4 h-4`}):(0,I.jsx)(sa,{className:`w-4 h-4`})})}),(0,I.jsx)(Mj,{side:`top`,children:m?`收起输入框`:`展开输入框`})]}),(0,I.jsxs)(Aj,{children:[(0,I.jsx)(jj,{asChild:!0,children:(0,I.jsx)(q,{variant:`outline`,size:`icon`,className:`rounded-full`,onClick:x,disabled:u.length===0&&!f,children:(0,I.jsx)(La,{className:`w-4 h-4`})})}),(0,I.jsx)(Mj,{side:`top`,children:`清空消息`})]}),f?(0,I.jsxs)(Aj,{children:[(0,I.jsx)(jj,{asChild:!0,children:(0,I.jsx)(q,{variant:`outline`,size:`icon`,className:`rounded-full`,onClick:b,children:(0,I.jsx)(Fa,{className:`w-4 h-4`})})}),(0,I.jsx)(Mj,{side:`top`,children:`停止生成`})]}):(0,I.jsxs)(Aj,{children:[(0,I.jsx)(jj,{asChild:!0,children:(0,I.jsx)(q,{variant:`default`,size:`icon`,className:`rounded-full`,onClick:()=>void y(),disabled:!v,children:f?(0,I.jsx)(va,{className:`w-4 h-4 animate-spin`}):(0,I.jsx)(ja,{className:`w-4 h-4`})})}),(0,I.jsx)(Mj,{side:`top`,children:`发送消息`})]})]})})]})})]})})}function gM({title:e,description:t,action:n,children:r,className:i,contentClassName:a}){return(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background ${i??``}`,children:[(0,I.jsxs)(`div`,{className:`flex items-start justify-between gap-3 border-b px-3 py-2.5`,children:[(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:e}),t?(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t}):null]}),n?(0,I.jsx)(`div`,{className:`shrink-0`,children:n}):null]}),(0,I.jsx)(`div`,{className:a??`px-3 py-2.5`,children:r})]})}function _M({title:e,content:t,copyLabel:n,onCopyText:r}){return(0,I.jsxs)(`div`,{className:`space-y-2 rounded-md border p-2.5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e}),(0,I.jsxs)(q,{size:`xs`,variant:`outline`,onClick:()=>r(t,n),children:[(0,I.jsx)(aa,{className:`mr-1 h-3.5 w-3.5`}),`复制`]})]}),(0,I.jsx)(qk,{className:`h-72 rounded-md bg-muted`,children:(0,I.jsx)(`pre`,{className:`p-3 text-xs leading-5`,children:(0,I.jsx)(`code`,{children:t})})})]})}function vM(e){let{endpointLines:t,claudeEnvText:n,codexEnvText:r,opencodeConfigText:i,onCopyText:a}=e;return(0,I.jsxs)(gM,{title:`客户端配置方式`,description:`可直接把 Claude Code / Codex 指向本地 local-router`,contentClassName:`space-y-3 px-3 py-2.5 text-sm`,children:[(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`服务入口`}),(0,I.jsx)(`div`,{className:`grid gap-2 md:grid-cols-3`,children:t.map(e=>(0,I.jsxs)(`div`,{className:`flex items-center gap-2 rounded bg-muted p-2`,children:[(0,I.jsx)(`code`,{className:`block flex-1 truncate text-xs`,children:e}),(0,I.jsxs)(q,{size:`xs`,variant:`outline`,onClick:()=>a(e,`服务入口`),children:[(0,I.jsx)(aa,{className:`mr-1 h-3.5 w-3.5`}),`复制`]})]},e))})]}),(0,I.jsx)(`div`,{className:`h-px w-full bg-border`}),(0,I.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-3`,children:[(0,I.jsx)(_M,{title:`Claude Code 环境变量(示例)`,content:n,copyLabel:`Claude Code 环境变量`,onCopyText:a}),(0,I.jsx)(_M,{title:`Codex 环境变量(官方支持)`,content:r,copyLabel:`Codex 环境变量`,onCopyText:a}),(0,I.jsx)(_M,{title:`OpenCode 配置(opencode.json)`,content:i,copyLabel:`OpenCode 配置`,onCopyText:a})]})]})}var yM=Ka(`inline-flex items-center justify-center rounded-full border border-transparent px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden`,{variants:{variant:{default:`bg-primary text-primary-foreground [a&]:hover:bg-primary/90`,secondary:`bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90`,destructive:`bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60`,outline:`border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground`,ghost:`[a&]:hover:bg-accent [a&]:hover:text-accent-foreground`,link:`text-primary underline-offset-4 [a&]:hover:underline`}},defaultVariants:{variant:`default`}});function Y({className:e,variant:t=`default`,asChild:n=!1,...r}){return(0,I.jsx)(n?Xa:`span`,{"data-slot":`badge`,"data-variant":t,className:K(yM({variant:t}),e),...r})}function bM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`empty`,className:K(`flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12`,e),...t})}function xM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`empty-header`,className:K(`flex max-w-sm flex-col items-center gap-2 text-center`,e),...t})}var SM=Ka(`flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{default:`bg-transparent`,icon:`bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6`}},defaultVariants:{variant:`default`}});function CM({className:e,variant:t=`default`,...n}){return(0,I.jsx)(`div`,{"data-slot":`empty-icon`,"data-variant":t,className:K(SM({variant:t,className:e})),...n})}function wM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`empty-title`,className:K(`text-lg font-medium tracking-tight`,e),...t})}function TM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`empty-description`,className:K(`text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4`,e),...t})}function EM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`skeleton`,className:K(`bg-accent animate-pulse rounded-md`,e),...t})}function DM({hasConfig:e,routeTypeDistribution:t}){return(0,I.jsx)(gM,{title:`路由类型分布`,description:`按协议入口统计规则数量与占比`,action:(0,I.jsx)(Qi,{className:`h-4 w-4 text-muted-foreground`}),children:e?t.length===0?(0,I.jsx)(bM,{className:`min-h-[180px] p-6 md:p-6`,children:(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`暂无路由规则`}),(0,I.jsx)(TM,{children:`请先配置 routes 后查看分布信息。`})]})}):(0,I.jsx)(`div`,{className:`space-y-2.5`,children:t.map(e=>(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-sm`,children:[(0,I.jsx)(`span`,{className:`truncate font-medium`,title:e.type,children:e.type}),(0,I.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.count,` 条 · `,(e.ratio*100).toFixed(1),`%`]})]}),(0,I.jsx)(`div`,{className:`h-2 rounded-full bg-muted`,children:(0,I.jsx)(`div`,{className:`h-2 rounded-full bg-foreground/80`,style:{width:`${Math.max(e.ratio*100,2)}%`}})})]},e.type))}):(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(EM,{className:`h-4 w-full`}),(0,I.jsx)(EM,{className:`h-4 w-[85%]`}),(0,I.jsx)(EM,{className:`h-4 w-[70%]`})]})})}function OM(e){let{isMetaLoading:t,meta:n,metaRouteTypes:r,configuredInMetaCount:i}=e;return(0,I.jsx)(gM,{title:`配置摘要`,description:`当前加载配置与协议支持信息`,action:(0,I.jsx)(xa,{className:`h-4 w-4 text-muted-foreground`}),contentClassName:`space-y-2.5 px-3 py-2.5 text-sm`,children:t?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(EM,{className:`h-4 w-full`}),(0,I.jsx)(EM,{className:`h-4 w-[80%]`}),(0,I.jsx)(EM,{className:`h-6 w-[70%]`})]}):n?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`配置路径`}),(0,I.jsx)(`code`,{className:`block truncate rounded bg-muted px-2 py-1 text-xs`,title:n.configPath,children:n.configPath})]}),(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`支持协议`}),(0,I.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:r.length>0?r.map(e=>(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:e},e)):(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs`,children:`未知协议`})})]}),(0,I.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`已配置协议覆盖:`,i,` / `,r.length||0]})]}):(0,I.jsx)(bM,{className:`min-h-[180px] p-6 md:p-6`,children:(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`暂无元信息`}),(0,I.jsx)(TM,{children:`服务尚未返回配置元数据。`})]})})})}function kM(e){let{metricsLoading:t,metricsError:n,metrics:r,metricsWindow:i,onWindowChange:a}=e,o=r?.series.slice(-8)??[],s=r?.topProviders??[],c=r?.topRouteTypes??[],l=r?.warnings??[];return(0,I.jsx)(gM,{title:`运行指标(日志聚合)`,description:`基于事件日志窗口聚合的请求量、成功率与延迟分布`,action:(0,I.jsx)(`div`,{className:`flex items-center gap-1`,children:[`1h`,`6h`,`24h`].map(e=>(0,I.jsx)(q,{size:`xs`,variant:i===e?`secondary`:`ghost`,onClick:()=>a(e),disabled:t,children:e},e))}),contentClassName:`space-y-3 px-3 py-2.5`,children:t?(0,I.jsxs)(`div`,{className:`space-y-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,I.jsx)(EM,{className:`h-16 w-full`}),(0,I.jsx)(EM,{className:`h-16 w-full`}),(0,I.jsx)(EM,{className:`h-16 w-full`}),(0,I.jsx)(EM,{className:`h-16 w-full`})]}),(0,I.jsx)(EM,{className:`h-24 w-full`})]}):n?(0,I.jsx)(bM,{className:`min-h-[220px] p-6 md:p-6`,children:(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`运行指标加载失败`}),(0,I.jsx)(TM,{children:n})]})}):!r||r.summary.totalRequests===0?(0,I.jsxs)(bM,{className:`min-h-[220px] p-6 md:p-6`,children:[(0,I.jsx)(CM,{variant:`icon`,children:(0,I.jsx)(Qi,{className:`h-5 w-5`})}),(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`暂无运行日志数据`}),(0,I.jsx)(TM,{children:r?.source.logEnabled===!1?`日志未启用,请先在日志配置中开启。`:`当前窗口内没有可统计的请求事件。`})]})]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,I.jsxs)(`div`,{className:`rounded-lg border p-3`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`总请求`}),(0,I.jsx)(`div`,{className:`text-xl font-semibold`,children:r.summary.totalRequests})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border p-3`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`成功率`}),(0,I.jsxs)(`div`,{className:`text-xl font-semibold`,children:[r.summary.successRate,`%`]})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border p-3`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`错误请求`}),(0,I.jsx)(`div`,{className:`text-xl font-semibold`,children:r.summary.errorRequests})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border p-3`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`P95 延迟`}),(0,I.jsxs)(`div`,{className:`text-xl font-semibold`,children:[r.summary.p95LatencyMs,` ms`]})]})]}),l.length>0?(0,I.jsx)(`div`,{className:`rounded-md border border-dashed p-2 text-xs text-muted-foreground`,children:l.join(`;`)}):null,(0,I.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-3`,children:[(0,I.jsxs)(`div`,{className:`space-y-2 lg:col-span-2`,children:[(0,I.jsxs)(`div`,{className:`text-sm font-medium`,children:[`请求趋势(最近 `,o.length,` 个时间桶)`]}),(0,I.jsx)(`div`,{className:`space-y-1.5`,children:o.map(e=>{let t=r.summary.totalRequests?e.requests/r.summary.totalRequests:0;return(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:new Date(e.ts).toLocaleTimeString()}),(0,I.jsxs)(`span`,{children:[e.requests,` req · `,e.errors,` err · `,e.avgLatencyMs,` ms`]})]}),(0,I.jsx)(`div`,{className:`h-1.5 rounded-full bg-muted`,children:(0,I.jsx)(`div`,{className:`h-1.5 rounded-full bg-foreground/80`,style:{width:`${Math.max(t*100,e.requests>0?2:0)}%`}})})]},e.ts)})})]}),(0,I.jsxs)(`div`,{className:`space-y-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`mb-1 text-sm font-medium`,children:`Top Providers`}),(0,I.jsx)(`div`,{className:`space-y-1.5 text-xs`,children:s.length>0?s.map(e=>(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`span`,{className:`truncate`,title:e.key,children:e.key}),(0,I.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.requests,` · `,e.errorRate,`%`]})]},e.key)):(0,I.jsx)(`div`,{className:`text-muted-foreground`,children:`暂无数据`})})]}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`mb-1 text-sm font-medium`,children:`Top 协议入口`}),(0,I.jsx)(`div`,{className:`space-y-1.5 text-xs`,children:c.length>0?c.map(e=>(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`span`,{className:`truncate`,title:e.key,children:e.key}),(0,I.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.requests,` · `,e.errorRate,`%`]})]},e.key)):(0,I.jsx)(`div`,{className:`text-muted-foreground`,children:`暂无数据`})})]})]})]})]})})}function AM({title:e,icon:t,children:n}){return(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background px-3 py-2.5`,children:[(0,I.jsxs)(`div`,{className:`mb-1.5 flex items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium`,children:e}),(0,I.jsx)(t,{className:`h-4 w-4 text-muted-foreground`})]}),n]})}function jM(e){if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=1024,r=Math.floor(Math.log(e)/Math.log(n)),i=e/n**r;return r===0?`${e} B`:`${i.toFixed(2)} ${t[r]}`}function MM(e){return e===`off`?`不记录`:e===`full`||e===`masked`?`完整记录`:e}function NM(e){let{isHealthLoading:t,healthy:n,isMetaLoading:r,providerCount:i,providersReferenced:a,totalRules:o,routeTypeCount:s,avgRulesPerType:c,logConfigured:l,logEnabled:u,bodyPolicy:d,streamsEnabled:f,logStorageLoading:p,logStorageTotalBytes:m,logStorageFileCount:h}=e;return(0,I.jsxs)(`div`,{className:`grid gap-2.5 sm:grid-cols-2 xl:grid-cols-5`,children:[(0,I.jsx)(AM,{title:`服务状态`,icon:Ji,children:(0,I.jsxs)(`div`,{className:`space-y-2`,children:[t?(0,I.jsx)(EM,{className:`h-6 w-20`}):n?(0,I.jsx)(Y,{variant:`default`,className:`bg-emerald-600 hover:bg-emerald-600`,children:`运行中`}):(0,I.jsx)(Y,{variant:`destructive`,children:`离线`}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r?`等待元信息`:`配置元信息已就绪`})]})}),(0,I.jsx)(AM,{title:`Providers`,icon:Ma,children:(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(`div`,{className:`text-2xl font-bold`,children:i}),(0,I.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`已被路由引用 `,a,` / `,i||0]})]})}),(0,I.jsx)(AM,{title:`Routing`,icon:Oa,children:(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(`div`,{className:`text-2xl font-bold`,children:o}),(0,I.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[s,` 个协议入口 · 平均 `,c.toFixed(1),` 条/入口`]})]})}),(0,I.jsx)(AM,{title:`日志`,icon:pa,children:(0,I.jsxs)(`div`,{className:`space-y-2`,children:[l?u?(0,I.jsx)(Y,{variant:`default`,className:`bg-emerald-600 hover:bg-emerald-600`,children:`已启用`}):(0,I.jsx)(Y,{variant:`secondary`,children:`已暂停`}):(0,I.jsx)(Y,{variant:`secondary`,children:`未配置`}),(0,I.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[(0,I.jsxs)(Y,{variant:`outline`,className:`text-xs`,children:[`body: `,MM(d)]}),(0,I.jsxs)(Y,{variant:`outline`,className:`text-xs`,children:[`stream: `,f?`on`:`off`]})]})]})}),(0,I.jsx)(AM,{title:`日志存储`,icon:ga,children:(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[p||m===void 0?(0,I.jsx)(EM,{className:`h-6 w-24`}):(0,I.jsx)(`div`,{className:`text-2xl font-bold`,children:jM(m)}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:p||h===void 0?`计算中...`:`${h} 个文件 · 每小时自动更新`})]})})]})}function PM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`table-container`,className:`relative w-full overflow-x-auto`,children:(0,I.jsx)(`table`,{"data-slot":`table`,className:K(`w-full caption-bottom text-sm`,e),...t})})}function FM({className:e,...t}){return(0,I.jsx)(`thead`,{"data-slot":`table-header`,className:K(`[&_tr]:border-b`,e),...t})}function IM({className:e,...t}){return(0,I.jsx)(`tbody`,{"data-slot":`table-body`,className:K(`[&_tr:last-child]:border-0`,e),...t})}function LM({className:e,...t}){return(0,I.jsx)(`tfoot`,{"data-slot":`table-footer`,className:K(`bg-muted/50 border-t font-medium [&>tr]:last:border-b-0`,e),...t})}function RM({className:e,...t}){return(0,I.jsx)(`tr`,{"data-slot":`table-row`,className:K(`hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors`,e),...t})}function zM({className:e,...t}){return(0,I.jsx)(`th`,{"data-slot":`table-head`,className:K(`text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t})}function BM({className:e,...t}){return(0,I.jsx)(`td`,{"data-slot":`table-cell`,className:K(`p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t})}function VM({hasConfig:e,providerUsageRows:t}){return(0,I.jsx)(gM,{title:`Provider 使用概览`,description:`按路由规则统计 provider 被引用次数`,children:e?t.length===0?(0,I.jsxs)(bM,{className:`min-h-[200px] p-6 md:p-6`,children:[(0,I.jsx)(CM,{variant:`icon`,children:(0,I.jsx)(Ma,{className:`h-5 w-5`})}),(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`未配置 Provider`}),(0,I.jsx)(TM,{children:`请先在 Providers 页面完成上游配置。`})]})]}):(0,I.jsxs)(PM,{children:[(0,I.jsx)(FM,{children:(0,I.jsxs)(RM,{children:[(0,I.jsx)(zM,{children:`Provider`}),(0,I.jsx)(zM,{className:`text-right`,children:`引用次数`}),(0,I.jsx)(zM,{className:`text-right`,children:`状态`})]})}),(0,I.jsx)(IM,{children:t.slice(0,8).map(e=>(0,I.jsxs)(RM,{children:[(0,I.jsx)(BM,{className:`max-w-[220px] truncate font-medium`,title:e.provider,children:e.provider}),(0,I.jsx)(BM,{className:`text-right`,children:e.count}),(0,I.jsx)(BM,{className:`text-right`,children:e.used?(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:`已使用`}):(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs`,children:`未使用`})})]},e.provider))})]}):(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(EM,{className:`h-8 w-full`}),(0,I.jsx)(EM,{className:`h-8 w-full`}),(0,I.jsx)(EM,{className:`h-8 w-full`})]})})}function HM({hasConfig:e,routeTypeDistribution:t,totalRules:n}){return(0,I.jsx)(gM,{title:`协议类型速览`,description:`按协议入口查看规则数量与占比`,children:e?t.length===0?(0,I.jsxs)(bM,{className:`min-h-[200px] p-6 md:p-6`,children:[(0,I.jsx)(CM,{variant:`icon`,children:(0,I.jsx)(Oa,{className:`h-5 w-5`})}),(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`暂无协议规则`}),(0,I.jsx)(TM,{children:`当前还没有可统计的协议入口。`})]})]}):(0,I.jsxs)(PM,{children:[(0,I.jsx)(FM,{children:(0,I.jsxs)(RM,{children:[(0,I.jsx)(zM,{children:`协议类型`}),(0,I.jsx)(zM,{className:`text-right`,children:`规则数`}),(0,I.jsx)(zM,{className:`text-right`,children:`占比`})]})}),(0,I.jsx)(IM,{children:t.slice(0,8).map(e=>(0,I.jsxs)(RM,{children:[(0,I.jsx)(BM,{className:`max-w-[260px] truncate font-medium`,title:e.type,children:e.type}),(0,I.jsx)(BM,{className:`text-right`,children:e.count}),(0,I.jsxs)(BM,{className:`text-right`,children:[(e.ratio*100).toFixed(1),`%`]})]},e.type))}),(0,I.jsx)(LM,{children:(0,I.jsxs)(RM,{children:[(0,I.jsx)(BM,{children:`总计`}),(0,I.jsx)(BM,{className:`text-right`,children:n}),(0,I.jsx)(BM,{className:`text-right`,children:`100%`})]})})]}):(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(EM,{className:`h-8 w-full`}),(0,I.jsx)(EM,{className:`h-8 w-full`}),(0,I.jsx)(EM,{className:`h-8 w-full`})]})})}const UM=qx((e,t)=>({healthy:null,meta:null,metrics:null,metricsLoading:!1,metricsError:null,metricsWindow:`24h`,logStorage:null,logStorageLoading:!1,logStorageError:null,fetchHealth:async()=>{e({healthy:await aS()})},fetchMeta:async()=>{try{e({meta:await rS()})}catch{}},fetchMetrics:async(n,r=!1)=>{let i=n??t().metricsWindow;e({metricsLoading:!0,metricsError:null,metricsWindow:i});try{e({metrics:await oS(i,r),metricsLoading:!1,metricsError:null})}catch(t){e({metricsLoading:!1,metricsError:t instanceof Error?t.message:`获取日志统计失败`})}},fetchLogStorage:async(t=!1)=>{e({logStorageLoading:!0,logStorageError:null});try{e({logStorage:await sS(t),logStorageLoading:!1,logStorageError:null})}catch(t){e({logStorageLoading:!1,logStorageError:t instanceof Error?t.message:`获取日志存储统计失败`})}},setMetricsWindow:t=>{e({metricsWindow:t})},refresh:async()=>{await Promise.all([t().fetchHealth(),t().fetchMeta(),t().fetchMetrics(void 0,!0),t().fetchLogStorage(!0)])}}));var WM=[`http://localhost:4099/anthropic-messages`,`http://localhost:4099/openai-responses`,`http://localhost:4099/openai-completions`],GM=`ANTHROPIC_AUTH_TOKEN="DEFAULT_API_KEY"
|
|
133
|
+
`},zA=NA(LA)(RA),BA={config:FA},VA=function(){var e=[...arguments];return function(t){return e.reduceRight(function(e,t){return t(e)},t)}};function HA(e,t){return Object.keys(t).forEach(function(n){t[n]instanceof Object&&e[n]&&Object.assign(t[n],HA(e[n],t[n]))}),iA(iA({},e),t)}var UA={type:`cancelation`,msg:`operation is manually canceled`};function WA(e){var t=!1,n=new Promise(function(n,r){e.then(function(e){return t?r(UA):n(e)}),e.catch(r)});return n.cancel=function(){return t=!0},n}var GA=[`monaco`],KA=sA(jA.create({config:MA,isInitialized:!1,resolve:null,reject:null,monaco:null}),2),qA=KA[0],JA=KA[1];function YA(e){var t=BA.config(e),n=t.monaco,r=aA(t,GA);JA(function(e){return{config:HA(e.config,r),monaco:n}})}function XA(){var e=qA(function(e){return{monaco:e.monaco,isInitialized:e.isInitialized,resolve:e.resolve}});if(!e.isInitialized){if(JA({isInitialized:!0}),e.monaco)return e.resolve(e.monaco),WA(rj);if(window.monaco&&window.monaco.editor)return tj(window.monaco),e.resolve(window.monaco),WA(rj);VA(ZA,$A)(ej)}return WA(rj)}function ZA(e){return document.body.appendChild(e)}function QA(e){var t=document.createElement(`script`);return e&&(t.src=e),t}function $A(e){var t=qA(function(e){return{config:e.config,reject:e.reject}}),n=QA(`${t.config.paths.vs}/loader.js`);return n.onload=function(){return e()},n.onerror=t.reject,n}function ej(){var e=qA(function(e){return{config:e.config,resolve:e.resolve,reject:e.reject}}),t=window.require;t.config(e.config),t([`vs/editor/editor.main`],function(t){var n=t.m||t;tj(n),e.resolve(n)},function(t){e.reject(t)})}function tj(e){qA().monaco||JA({monaco:e})}function nj(){return qA(function(e){return e.monaco})}var rj=new Promise(function(e,t){return JA({resolve:e,reject:t})}),ij={config:YA,init:XA,__getMonacoInstance:nj},aj={wrapper:{display:`flex`,position:`relative`,textAlign:`initial`},fullWidth:{width:`100%`},hide:{display:`none`}},oj={container:{display:`flex`,height:`100%`,width:`100%`,justifyContent:`center`,alignItems:`center`}};function sj({children:e}){return F.createElement(`div`,{style:oj.container},e)}var cj=sj;function lj({width:e,height:t,isEditorReady:n,loading:r,_ref:i,className:a,wrapperProps:o}){return F.createElement(`section`,{style:{...aj.wrapper,width:e,height:t},...o},!n&&F.createElement(cj,null,r),F.createElement(`div`,{ref:i,style:{...aj.fullWidth,...!n&&aj.hide},className:a}))}var uj=(0,F.memo)(lj);function dj(e){(0,F.useEffect)(e,[])}var fj=dj;function pj(e,t,n=!0){let r=(0,F.useRef)(!0);(0,F.useEffect)(r.current||!n?()=>{r.current=!1}:e,t)}var mj=pj;function hj(){}function gj(e,t,n,r){return _j(e,r)||vj(e,t,n,r)}function _j(e,t){return e.editor.getModel(yj(e,t))}function vj(e,t,n,r){return e.editor.createModel(t,n,r?yj(e,r):void 0)}function yj(e,t){return e.Uri.parse(t)}function bj({original:e,modified:t,language:n,originalLanguage:r,modifiedLanguage:i,originalModelPath:a,modifiedModelPath:o,keepCurrentOriginalModel:s=!1,keepCurrentModifiedModel:c=!1,theme:l=`light`,loading:u=`Loading...`,options:d={},height:f=`100%`,width:p=`100%`,className:m,wrapperProps:h={},beforeMount:g=hj,onMount:_=hj}){let[v,y]=(0,F.useState)(!1),[b,x]=(0,F.useState)(!0),S=(0,F.useRef)(null),C=(0,F.useRef)(null),w=(0,F.useRef)(null),T=(0,F.useRef)(_),E=(0,F.useRef)(g),ee=(0,F.useRef)(!1);fj(()=>{let e=ij.init();return e.then(e=>(C.current=e)&&x(!1)).catch(e=>e?.type!==`cancelation`&&console.error(`Monaco initialization: error:`,e)),()=>S.current?k():e.cancel()}),mj(()=>{if(S.current&&C.current){let t=S.current.getOriginalEditor(),i=gj(C.current,e||``,r||n||`text`,a||``);i!==t.getModel()&&t.setModel(i)}},[a],v),mj(()=>{if(S.current&&C.current){let e=S.current.getModifiedEditor(),r=gj(C.current,t||``,i||n||`text`,o||``);r!==e.getModel()&&e.setModel(r)}},[o],v),mj(()=>{let e=S.current.getModifiedEditor();e.getOption(C.current.editor.EditorOption.readOnly)?e.setValue(t||``):t!==e.getValue()&&(e.executeEdits(``,[{range:e.getModel().getFullModelRange(),text:t||``,forceMoveMarkers:!0}]),e.pushUndoStop())},[t],v),mj(()=>{S.current?.getModel()?.original.setValue(e||``)},[e],v),mj(()=>{let{original:e,modified:t}=S.current.getModel();C.current.editor.setModelLanguage(e,r||n||`text`),C.current.editor.setModelLanguage(t,i||n||`text`)},[n,r,i],v),mj(()=>{C.current?.editor.setTheme(l)},[l],v),mj(()=>{S.current?.updateOptions(d)},[d],v);let D=(0,F.useCallback)(()=>{if(!C.current)return;E.current(C.current);let s=gj(C.current,e||``,r||n||`text`,a||``),c=gj(C.current,t||``,i||n||`text`,o||``);S.current?.setModel({original:s,modified:c})},[n,t,i,e,r,a,o]),O=(0,F.useCallback)(()=>{!ee.current&&w.current&&(S.current=C.current.editor.createDiffEditor(w.current,{automaticLayout:!0,...d}),D(),C.current?.editor.setTheme(l),y(!0),ee.current=!0)},[d,l,D]);(0,F.useEffect)(()=>{v&&T.current(S.current,C.current)},[v]),(0,F.useEffect)(()=>{!b&&!v&&O()},[b,v,O]);function k(){let e=S.current?.getModel();s||e?.original?.dispose(),c||e?.modified?.dispose(),S.current?.dispose()}return F.createElement(uj,{width:p,height:f,isEditorReady:v,loading:u,_ref:w,className:m,wrapperProps:h})}(0,F.memo)(bj);function xj(e){let t=(0,F.useRef)();return(0,F.useEffect)(()=>{t.current=e},[e]),t.current}var Sj=xj,Cj=new Map;function wj({defaultValue:e,defaultLanguage:t,defaultPath:n,value:r,language:i,path:a,theme:o=`light`,line:s,loading:c=`Loading...`,options:l={},overrideServices:u={},saveViewState:d=!0,keepCurrentModel:f=!1,width:p=`100%`,height:m=`100%`,className:h,wrapperProps:g={},beforeMount:_=hj,onMount:v=hj,onChange:y,onValidate:b=hj}){let[x,S]=(0,F.useState)(!1),[C,w]=(0,F.useState)(!0),T=(0,F.useRef)(null),E=(0,F.useRef)(null),ee=(0,F.useRef)(null),D=(0,F.useRef)(v),O=(0,F.useRef)(_),k=(0,F.useRef)(),te=(0,F.useRef)(r),A=Sj(a),ne=(0,F.useRef)(!1),re=(0,F.useRef)(!1);fj(()=>{let e=ij.init();return e.then(e=>(T.current=e)&&w(!1)).catch(e=>e?.type!==`cancelation`&&console.error(`Monaco initialization: error:`,e)),()=>E.current?j():e.cancel()}),mj(()=>{let o=gj(T.current,e||r||``,t||i||``,a||n||``);o!==E.current?.getModel()&&(d&&Cj.set(A,E.current?.saveViewState()),E.current?.setModel(o),d&&E.current?.restoreViewState(Cj.get(a)))},[a],x),mj(()=>{E.current?.updateOptions(l)},[l],x),mj(()=>{!E.current||r===void 0||(E.current.getOption(T.current.editor.EditorOption.readOnly)?E.current.setValue(r):r!==E.current.getValue()&&(re.current=!0,E.current.executeEdits(``,[{range:E.current.getModel().getFullModelRange(),text:r,forceMoveMarkers:!0}]),E.current.pushUndoStop(),re.current=!1))},[r],x),mj(()=>{let e=E.current?.getModel();e&&i&&T.current?.editor.setModelLanguage(e,i)},[i],x),mj(()=>{s!==void 0&&E.current?.revealLine(s)},[s],x),mj(()=>{T.current?.editor.setTheme(o)},[o],x);let ie=(0,F.useCallback)(()=>{if(!(!ee.current||!T.current)&&!ne.current){O.current(T.current);let c=a||n,f=gj(T.current,r||e||``,t||i||``,c||``);E.current=T.current?.editor.create(ee.current,{model:f,automaticLayout:!0,...l},u),d&&E.current.restoreViewState(Cj.get(c)),T.current.editor.setTheme(o),s!==void 0&&E.current.revealLine(s),S(!0),ne.current=!0}},[e,t,n,r,i,a,l,u,d,o,s]);(0,F.useEffect)(()=>{x&&D.current(E.current,T.current)},[x]),(0,F.useEffect)(()=>{!C&&!x&&ie()},[C,x,ie]),te.current=r,(0,F.useEffect)(()=>{x&&y&&(k.current?.dispose(),k.current=E.current?.onDidChangeModelContent(e=>{re.current||y(E.current.getValue(),e)}))},[x,y]),(0,F.useEffect)(()=>{if(x){let e=T.current.editor.onDidChangeMarkers(e=>{let t=E.current.getModel()?.uri;if(t&&e.find(e=>e.path===t.path)){let e=T.current.editor.getModelMarkers({resource:t});b?.(e)}});return()=>{e?.dispose()}}return()=>{}},[x,b]);function j(){k.current?.dispose(),f?d&&Cj.set(a,E.current.saveViewState()):E.current.getModel()?.dispose(),E.current.dispose()}return F.createElement(uj,{width:p,height:m,isEditorReady:x,loading:c,_ref:ee,className:h,wrapperProps:g})}var Tj=(0,F.memo)(wj),Ej=`inmemory://model/local-router-config.json`,Dj=`local-router://schema/config.schema.json`;function Oj(){let{theme:e}=Ak(),t=vS(e=>e.config),n=vS(e=>e.saving),r=vS(e=>e.applying),i=vS(e=>e.save),a=vS(e=>e.saveAndApply),o=vS(e=>e.setDraft),s=vS(e=>e.reset),c=bS(e=>e.rawOpen),l=bS(e=>e.setRawOpen),u=bS(e=>e.rawValue),d=bS(e=>e.setRawValue),f=bS(e=>e.rawParseError),p=bS(e=>e.setRawParseError),m=bS(e=>e.schema),h=n||r;function g(){try{let e=JSON.parse(u);return p(null),e}catch(e){return p(e instanceof Error?e.message:`JSON 解析失败`),null}}async function _(){let e=g();if(!e){L.error(`JSON 格式错误,无法保存`);return}try{await i(e),o(e),l(!1),L.success(`配置已保存`)}catch(e){L.error(e instanceof Error?e.message:`保存失败`)}}async function v(){let e=g();if(!e){L.error(`JSON 格式错误,无法保存并应用`);return}try{await a(e),o(e),l(!1),L.success(`配置已保存并应用`)}catch(e){L.error(e instanceof Error?e.message:`保存并应用失败`)}}function y(){s();let e=t??{};d(JSON.stringify(e,null,2)),p(null),L.info(`已重置为上次保存的配置`)}return(0,I.jsx)(Rk,{open:c,onOpenChange:l,children:(0,I.jsxs)(Hk,{className:`h-[92vh] w-[calc(100vw-2rem)] max-w-[calc(100vw-2rem)] sm:max-w-[calc(100vw-2rem)]!`,children:[(0,I.jsxs)(Uk,{children:[(0,I.jsx)(Gk,{children:`Raw 配置编辑`}),(0,I.jsx)(Kk,{children:`使用 Monaco 编辑 JSON。支持 schema 提示与校验,保存前请确认语法正确。`})]}),f&&(0,I.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive`,children:[(0,I.jsx)(ra,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,I.jsx)(`span`,{children:f})]}),(0,I.jsx)(`div`,{className:`h-[calc(92vh-210px)] overflow-hidden rounded-lg border`,children:(0,I.jsx)(Tj,{height:`100%`,theme:e===`dark`?`vs-dark`:`light`,language:`json`,value:u,onChange:e=>d(e??``),path:Ej,beforeMount:e=>{e.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!1,allowComments:!0,schemaValidation:`error`,schemas:m?[{uri:Dj,fileMatch:[Ej],schema:m}]:[]})},options:{minimap:{enabled:!1},wordWrap:`on`,fontSize:13,tabSize:2,formatOnPaste:!0,formatOnType:!0,scrollBeyondLastLine:!1,automaticLayout:!0}})}),(0,I.jsxs)(Wk,{children:[(0,I.jsx)(q,{variant:`outline`,onClick:y,disabled:h,children:`重置`}),(0,I.jsx)(q,{variant:`outline`,onClick:_,disabled:h||!!f,children:`保存`}),(0,I.jsx)(q,{onClick:v,disabled:h||!!f,children:`保存并应用`})]})]})})}function kj({delayDuration:e=0,...t}){return(0,I.jsx)(db,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function Aj({...e}){return(0,I.jsx)(fb,{"data-slot":`tooltip`,...e})}function jj({...e}){return(0,I.jsx)(pb,{"data-slot":`tooltip-trigger`,...e})}function Mj({className:e,sideOffset:t=0,children:n,...r}){return(0,I.jsx)(mb,{children:(0,I.jsxs)(hb,{"data-slot":`tooltip-content`,sideOffset:t,className:K(`bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance`,e),...r,children:[n,(0,I.jsx)(gb,{className:`bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]`})]})})}var Nj=`192px`,Pj=`48px`,Fj=`b`,Ij=F.createContext(null);function Lj(){let e=F.useContext(Ij);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function Rj({defaultOpen:e=!0,className:t,style:n,children:r,...i}){let[a,o]=F.useState(e),s=F.useCallback(()=>{o(e=>!e)},[]);return F.useEffect(()=>{let e=e=>{e.key===Fj&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),s())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[s]),(0,I.jsx)(Ij.Provider,{value:{open:a,toggleSidebar:s},children:(0,I.jsx)(kj,{delayDuration:0,children:(0,I.jsx)(`div`,{style:{"--sidebar-width":Nj,"--sidebar-width-collapsed":Pj,...n},className:K(`flex min-h-svh w-full bg-sidebar`,t),...i,children:r})})})}function zj({className:e,children:t,...n}){let{open:r}=Lj();return(0,I.jsx)(`div`,{className:`shrink-0 transition-[width] duration-200 ease-in-out`,style:{width:r?`var(--sidebar-width)`:`var(--sidebar-width-collapsed)`},children:(0,I.jsx)(`div`,{className:K(`fixed top-14 bottom-0 left-0 z-10 flex flex-col overflow-hidden bg-sidebar transition-[width] duration-200 ease-in-out`,e),style:{width:r?`var(--sidebar-width)`:`var(--sidebar-width-collapsed)`},...n,children:t})})}function Bj({className:e,onClick:t,...n}){let{open:r,toggleSidebar:i}=Lj();return(0,I.jsxs)(q,{variant:`ghost`,size:`icon`,className:K(`size-7`,e),onClick:e=>{t?.(e),i()},...n,children:[r?(0,I.jsx)(Sa,{}):(0,I.jsx)(Ca,{}),(0,I.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function Vj({className:e,...t}){return(0,I.jsx)(`main`,{className:K(`relative flex w-full flex-1 flex-col rounded-tl-2xl overflow-hidden bg-background`,e),...t})}function Hj({className:e,...t}){return(0,I.jsx)(`div`,{className:K(`flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden overscroll-y-contain`,e),...t})}function Uj({className:e,...t}){return(0,I.jsx)(`div`,{className:K(`relative flex w-full min-w-0 flex-col p-2`,e),...t})}function Wj({className:e,...t}){return(0,I.jsx)(`div`,{className:K(`w-full text-sm`,e),...t})}function Gj({className:e,...t}){return(0,I.jsx)(`ul`,{className:K(`flex w-full min-w-0 flex-col gap-2`,e),...t})}function Kj({className:e,...t}){return(0,I.jsx)(`li`,{className:K(`group/menu-item relative`,e),...t})}function qj({asChild:e=!1,isActive:t=!1,tooltip:n,className:r,children:i,...a}){let o=e?Xa:`button`,{open:s}=Lj(),c=(0,I.jsx)(o,{"data-active":t,className:K(`flex items-center overflow-hidden rounded-md p-2 text-left text-sm outline-hidden transition-all duration-200`,`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,`focus-visible:ring-2 ring-sidebar-ring`,`disabled:pointer-events-none disabled:opacity-50`,`data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground`,`[&>svg]:size-4 [&>svg]:shrink-0`,s?`w-full h-8 gap-2 [&>span:last-child]:truncate`:`size-8 justify-center [&>span]:hidden`,r),...a,children:i});return!n||s?c:(0,I.jsxs)(Aj,{children:[(0,I.jsx)(jj,{asChild:!0,children:c}),(0,I.jsx)(Mj,{side:`right`,align:`center`,...typeof n==`string`?{children:n}:n})]})}function Jj(){let{theme:e,setTheme:t}=Ak();return(0,I.jsxs)(q,{variant:`ghost`,size:`icon`,className:`size-7`,onClick:()=>t(e===`dark`?`light`:`dark`),title:e===`dark`?`切换到浅色模式`:`切换到深色模式`,children:[(0,I.jsx)(Ia,{className:`h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0`}),(0,I.jsx)(ba,{className:`absolute h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100`}),(0,I.jsx)(`span`,{className:`sr-only`,children:`切换主题`})]})}function Yj({title:e,actions:t}){return(0,I.jsxs)(`header`,{className:`sticky top-0 z-20 flex h-14 shrink-0 items-center gap-2 bg-sidebar px-4`,children:[(0,I.jsx)(Bj,{className:`-ml-1`}),(0,I.jsx)(`h1`,{className:`text-sm font-medium`,children:e}),(0,I.jsx)(`div`,{className:`flex-1`}),(0,I.jsx)(Jj,{}),t]})}var Xj=[{to:`/dashboard`,label:`仪表盘`,icon:_a},{to:`/chat`,label:`聊天面板`,icon:ya},{to:`/logs`,label:`日志检索`,icon:fa},{to:`/sessions`,label:`用户会话`,icon:za}],Zj=[{to:`/providers`,label:`供应商配置`,icon:Ma},{to:`/routes`,label:`路由配置`,icon:Oa},{to:`/logs-settings`,label:`日志配置`,icon:da}];function Qj({title:e,items:t,pathname:n}){let{open:r}=Lj();return(0,I.jsxs)(Uj,{children:[(0,I.jsx)(`p`,{className:`px-2 text-xs text-muted-foreground/60 font-medium tracking-wide select-none overflow-hidden transition-[max-height,opacity,padding] duration-200`,style:{maxHeight:r?`2rem`:0,opacity:r?1:0,paddingTop:r?`0.75rem`:0,paddingBottom:r?`0.25rem`:0},children:e}),(0,I.jsx)(Wj,{children:(0,I.jsx)(Gj,{children:t.map(e=>(0,I.jsx)(Kj,{children:(0,I.jsx)(qj,{asChild:!0,isActive:n===e.to||e.to===`/logs`&&n.startsWith(`/logs/`)||e.to===`/sessions`&&n.startsWith(`/sessions`),tooltip:e.label,children:(0,I.jsxs)(Ir,{to:e.to,children:[(0,I.jsx)(e.icon,{}),(0,I.jsx)(`span`,{children:e.label})]})})},e.to))})})]})}function $j(){let e=mr({select:e=>e.location.pathname});return(0,I.jsx)(zj,{children:(0,I.jsxs)(Hj,{children:[(0,I.jsx)(Qj,{title:`观测`,items:Xj,pathname:e}),(0,I.jsx)(Qj,{title:`配置`,items:Zj,pathname:e})]})})}function eM({title:e,headerActions:t,children:n,overlays:r}){return(0,I.jsxs)(Rj,{className:`flex h-svh flex-col overflow-hidden`,children:[(0,I.jsx)(Yj,{title:e,actions:t}),(0,I.jsxs)(`div`,{className:`flex min-h-0 flex-1 overflow-hidden`,children:[(0,I.jsx)($j,{}),(0,I.jsx)(Vj,{className:`flex min-h-0 flex-col`,children:(0,I.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-6`,children:n})})]}),r]})}function tM({title:e,description:t,loading:n=!1}){return(0,I.jsx)(`div`,{className:`flex h-screen items-center justify-center`,children:(0,I.jsxs)(`div`,{className:`text-center space-y-2`,children:[n&&(0,I.jsx)(`div`,{className:`flex justify-center pb-1`,children:(0,I.jsx)(va,{className:`h-8 w-8 animate-spin text-muted-foreground`})}),(0,I.jsx)(`p`,{className:n?`text-sm text-muted-foreground`:`text-destructive font-medium`,children:e}),t&&(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t})]})})}var nM={"/dashboard":{title:`仪表盘`,configPage:!1},"/chat":{title:`聊天面板`,configPage:!1},"/providers":{title:`Providers`,configPage:!0},"/routes":{title:`路由`,configPage:!0},"/logs-settings":{title:`日志配置`,configPage:!0},"/logs":{title:`日志检索`,configPage:!1},"/sessions":{title:`用户会话`,configPage:!1}};function rM(e){return e.startsWith(`/logs/`)?{title:`日志详情`,configPage:!1}:nM[e]??nM[`/dashboard`]}function iM(){let e=rM(mr({select:e=>e.location.pathname})),t=vS(e=>e.loading),n=vS(e=>e.error),r=vS(e=>e.draft),i=vS(yS),a=vS(e=>e.loadConfig),o=bS(e=>e.loadSchema);return(0,F.useEffect)(()=>{a(),o()},[a,o]),(0,F.useEffect)(()=>{if(!i)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>{window.removeEventListener(`beforeunload`,e)}},[i]),t?(0,I.jsx)(tM,{loading:!0,title:`正在加载配置...`}):n?(0,I.jsx)(tM,{title:`加载配置失败`,description:n}):(0,I.jsx)(eM,{title:e.title,headerActions:e.configPage&&r?(0,I.jsx)(xS,{}):void 0,overlays:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Zk,{}),(0,I.jsx)(Oj,{}),(0,I.jsx)(Bi,{richColors:!0,position:`bottom-right`})]}),children:(0,I.jsx)(ni,{})})}var aM=iM;function oM({...e}){return(0,I.jsx)(Nv,{"data-slot":`select`,...e})}function sM({...e}){return(0,I.jsx)(Bv,{"data-slot":`select-group`,...e})}function cM({...e}){return(0,I.jsx)(Fv,{"data-slot":`select-value`,...e})}function lM({className:e,size:t=`default`,children:n,...r}){return(0,I.jsxs)(Pv,{"data-slot":`select-trigger`,"data-size":t,className:K(`border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground 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:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r,children:[n,(0,I.jsx)(Iv,{asChild:!0,children:(0,I.jsx)(ea,{className:`size-4 opacity-50`})})]})}function uM({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,I.jsx)(Lv,{children:(0,I.jsxs)(Rv,{"data-slot":`select-content`,className:K(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...i,children:[(0,I.jsx)(pM,{}),(0,I.jsx)(zv,{className:K(`p-1`,n===`popper`&&`h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1`),children:t}),(0,I.jsx)(mM,{})]})})}function dM({className:e,...t}){return(0,I.jsx)(Vv,{"data-slot":`select-label`,className:K(`text-muted-foreground px-2 py-1.5 text-xs`,e),...t})}function fM({className:e,children:t,...n}){return(0,I.jsxs)(Hv,{"data-slot":`select-item`,className:K(`focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,I.jsx)(`span`,{"data-slot":`select-item-indicator`,className:`absolute right-2 flex size-3.5 items-center justify-center`,children:(0,I.jsx)(Wv,{children:(0,I.jsx)($i,{className:`size-4`})})}),(0,I.jsx)(Uv,{children:t})]})}function pM({className:e,...t}){return(0,I.jsx)(Gv,{"data-slot":`select-scroll-up-button`,className:K(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,I.jsx)(na,{className:`size-4`})})}function mM({className:e,...t}){return(0,I.jsx)(Kv,{"data-slot":`select-scroll-down-button`,className:K(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,I.jsx)(ea,{className:`size-4`})})}function hM(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`msg_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}function gM(e){return e.base.trim().length>0&&e.apiKey.trim().length>0&&Object.keys(e.models??{}).length>0}function _M(){let e=vS(e=>e.draft??e.config),t=(0,F.useMemo)(()=>Object.entries(e?.providers??{}).filter(([,e])=>gM(e)).map(([e,t])=>({key:e,config:t,models:Object.keys(t.models).sort((e,t)=>e.localeCompare(t))})).sort((e,t)=>e.key.localeCompare(t.key)),[e]),[n,r]=(0,F.useState)(t[0]?.key??``),i=t.find(e=>e.key===n)??t[0],a=(0,F.useMemo)(()=>i?.models??[],[i]),[o,s]=(0,F.useState)(a[0]??``),[c,l]=(0,F.useState)(``),[u,d]=(0,F.useState)([]),[f,p]=(0,F.useState)(!1),[m,h]=(0,F.useState)(!1),g=(0,F.useRef)(null),_=(0,F.useRef)(null);(0,F.useEffect)(()=>{if(!i){r(``),s(``);return}i.key!==n&&r(i.key)},[i,n]),(0,F.useEffect)(()=>{a.includes(o)||s(a[0]??``)},[o,a]),(0,F.useEffect)(()=>{let e=g.current;e&&(e.scrollTop=e.scrollHeight)},[u,f]);let v=!f&&c.trim().length>0&&!!i&&!!o;async function y(){let e=c.trim();if(!e||!i||!o||f)return;let t={id:hM(),role:`user`,content:e,provider:i.key,model:o},n=hM();d(e=>[...e,t,{id:n,role:`assistant`,content:``,provider:i.key,model:o}]),l(``),p(!0);let r=new AbortController;_.current=r;try{let e=[...u,t].map(e=>({role:e.role,content:e.content})),a=await fetch(`/api/chat/proxy`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:i.key,model:o,messages:e}),signal:r.signal});if(!a.ok){let e=await a.text();throw Error(e||`请求失败: ${a.status}`)}if(!a.body)throw Error(`代理接口未返回流`);let s=a.body.getReader(),c=new TextDecoder,l=``;for(;;){let{done:e,value:t}=await s.read();if(e)break;l+=c.decode(t,{stream:!0}),d(e=>e.map(e=>e.id===n?{...e,content:l}:e))}l+=c.decode();let f=l.trim()||` `;d(e=>e.map(e=>e.id===n?{...e,content:f}:e))}catch(e){if(e instanceof Error&&e.name===`AbortError`){d(e=>e.map(e=>e.id===n?{...e,content:e.content||`已停止生成`}:e));return}let t=e instanceof Error?e.message:`请求失败`;d(e=>e.map(e=>e.id===n?{...e,content:e.content||`请求失败:${t}`,error:!0}:e)),L.error(t)}finally{_.current=null,p(!1)}}function b(){_.current?.abort(),_.current=null}function x(){f&&(_.current?.abort(),_.current=null),d([])}return(0,I.jsx)(`div`,{className:`h-full`,children:(0,I.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,I.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,I.jsx)(qk,{className:`h-full`,viewportRef:g,children:(0,I.jsx)(`div`,{className:`mx-auto flex min-h-full w-full max-w-4xl flex-col gap-4 px-1 py-4`,children:u.length===0?(0,I.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,I.jsx)(`div`,{className:`w-full rounded-[2rem] border bg-linear-to-br from-background via-muted/10 to-muted/30 p-6 shadow-xs`,children:(0,I.jsx)(`div`,{className:`flex flex-col gap-6 lg:flex-row lg:items-start lg:justify-between`,children:(0,I.jsxs)(`div`,{className:`max-w-2xl`,children:[(0,I.jsxs)(`div`,{className:`mb-4 inline-flex items-center gap-2 rounded-full border bg-background/80 px-3 py-1 text-xs text-muted-foreground`,children:[(0,I.jsx)(Pa,{className:`size-3.5`}),`Chat Playground`]}),(0,I.jsx)(`h2`,{className:`text-3xl font-semibold tracking-tight`,children:`直接开始一轮真实对话`}),(0,I.jsx)(`p`,{className:`mt-3 max-w-xl text-sm leading-6 text-muted-foreground`,children:`当前聊天页通过本地代理统一转发到你配置的 provider。 不做消息持久化,适合临时验证模型、路由和响应体验。`}),(0,I.jsxs)(`div`,{className:`mt-5 flex flex-wrap gap-2`,children:[(0,I.jsxs)(`div`,{className:`rounded-full border bg-background px-3 py-1.5 text-xs text-muted-foreground`,children:[`Provider`,(0,I.jsx)(`span`,{className:`ml-2 font-medium text-foreground`,children:i?.key||`未配置`})]}),(0,I.jsxs)(`div`,{className:`rounded-full border bg-background px-3 py-1.5 text-xs text-muted-foreground`,children:[`Model`,(0,I.jsx)(`span`,{className:`ml-2 font-medium text-foreground`,children:o||`未选择`})]})]})]})})})}):u.map(e=>(0,I.jsxs)(`div`,{className:K(`w-full px-1 py-1`,e.role===`user`?`rounded-3xl border border-primary/20 bg-primary/5 px-4 py-3`:`px-4 py-3`,e.error&&`border-destructive/40`),children:[e.role===`assistant`?(0,I.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-[11px] text-muted-foreground`,children:[(0,I.jsx)(`span`,{children:`Assistant`}),(0,I.jsx)(`span`,{children:e.provider}),(0,I.jsx)(`span`,{children:`/`}),(0,I.jsx)(`span`,{children:e.model})]}):null,(0,I.jsx)(`div`,{className:`whitespace-pre-wrap break-words text-sm leading-6`,children:e.content||(f&&e.role===`assistant`?`...`:``)}),e.role===`user`?(0,I.jsxs)(`div`,{className:`mt-2 text-right text-[11px] text-muted-foreground`,children:[e.provider,` / `,e.model]}):null]},e.id))})})}),(0,I.jsx)(`div`,{className:`mx-auto w-full max-w-4xl px-1`,children:(0,I.jsxs)(`div`,{className:`rounded-3xl border p-2`,children:[(0,I.jsx)(`textarea`,{value:c,onChange:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),y())},disabled:!i||!o,className:K(`w-full resize-none bg-transparent px-1 focus:outline-none`,m?`h-28`:`h-10`),placeholder:i?`发消息给 ${i.key} / ${o||`未选择模型`}`:`先配置可用 provider`}),(0,I.jsx)(kj,{children:(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsxs)(oM,{value:n,onValueChange:r,disabled:t.length===0,children:[(0,I.jsx)(lM,{className:`h-9 w-64 rounded-full`,children:(0,I.jsx)(cM,{placeholder:`选择 Provider`})}),(0,I.jsx)(uM,{children:t.map(e=>(0,I.jsx)(fM,{value:e.key,children:e.key},e.key))})]}),(0,I.jsxs)(oM,{value:o,onValueChange:s,disabled:!i,children:[(0,I.jsx)(lM,{className:`h-9 w-48 rounded-full`,children:(0,I.jsx)(cM,{placeholder:`选择 Model`})}),(0,I.jsx)(uM,{children:a.map(e=>(0,I.jsx)(fM,{value:e,children:e},e))})]}),(0,I.jsx)(`div`,{className:`flex-1 `}),(0,I.jsxs)(Aj,{children:[(0,I.jsx)(jj,{asChild:!0,children:(0,I.jsx)(q,{variant:`outline`,size:`icon`,className:`rounded-full`,onClick:()=>h(e=>!e),children:m?(0,I.jsx)(Na,{className:`w-4 h-4`}):(0,I.jsx)(sa,{className:`w-4 h-4`})})}),(0,I.jsx)(Mj,{side:`top`,children:m?`收起输入框`:`展开输入框`})]}),(0,I.jsxs)(Aj,{children:[(0,I.jsx)(jj,{asChild:!0,children:(0,I.jsx)(q,{variant:`outline`,size:`icon`,className:`rounded-full`,onClick:x,disabled:u.length===0&&!f,children:(0,I.jsx)(La,{className:`w-4 h-4`})})}),(0,I.jsx)(Mj,{side:`top`,children:`清空消息`})]}),f?(0,I.jsxs)(Aj,{children:[(0,I.jsx)(jj,{asChild:!0,children:(0,I.jsx)(q,{variant:`outline`,size:`icon`,className:`rounded-full`,onClick:b,children:(0,I.jsx)(Fa,{className:`w-4 h-4`})})}),(0,I.jsx)(Mj,{side:`top`,children:`停止生成`})]}):(0,I.jsxs)(Aj,{children:[(0,I.jsx)(jj,{asChild:!0,children:(0,I.jsx)(q,{variant:`default`,size:`icon`,className:`rounded-full`,onClick:()=>void y(),disabled:!v,children:f?(0,I.jsx)(va,{className:`w-4 h-4 animate-spin`}):(0,I.jsx)(ja,{className:`w-4 h-4`})})}),(0,I.jsx)(Mj,{side:`top`,children:`发送消息`})]})]})})]})})]})})}function vM({title:e,description:t,action:n,children:r,className:i,contentClassName:a}){return(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background ${i??``}`,children:[(0,I.jsxs)(`div`,{className:`flex items-start justify-between gap-3 border-b px-3 py-2.5`,children:[(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:e}),t?(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t}):null]}),n?(0,I.jsx)(`div`,{className:`shrink-0`,children:n}):null]}),(0,I.jsx)(`div`,{className:a??`px-3 py-2.5`,children:r})]})}function yM({title:e,content:t,copyLabel:n,onCopyText:r}){return(0,I.jsxs)(`div`,{className:`space-y-2 rounded-md border p-2.5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e}),(0,I.jsxs)(q,{size:`xs`,variant:`outline`,onClick:()=>r(t,n),children:[(0,I.jsx)(aa,{className:`mr-1 h-3.5 w-3.5`}),`复制`]})]}),(0,I.jsx)(qk,{className:`h-72 rounded-md bg-muted`,children:(0,I.jsx)(`pre`,{className:`p-3 text-xs leading-5`,children:(0,I.jsx)(`code`,{children:t})})})]})}function bM(e){let{endpointLines:t,claudeEnvText:n,codexEnvText:r,opencodeConfigText:i,onCopyText:a}=e;return(0,I.jsxs)(vM,{title:`客户端配置方式`,description:`可直接把 Claude Code / Codex 指向本地 local-router`,contentClassName:`space-y-3 px-3 py-2.5 text-sm`,children:[(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`服务入口`}),(0,I.jsx)(`div`,{className:`grid gap-2 md:grid-cols-3`,children:t.map(e=>(0,I.jsxs)(`div`,{className:`flex items-center gap-2 rounded bg-muted p-2`,children:[(0,I.jsx)(`code`,{className:`block flex-1 truncate text-xs`,children:e}),(0,I.jsxs)(q,{size:`xs`,variant:`outline`,onClick:()=>a(e,`服务入口`),children:[(0,I.jsx)(aa,{className:`mr-1 h-3.5 w-3.5`}),`复制`]})]},e))})]}),(0,I.jsx)(`div`,{className:`h-px w-full bg-border`}),(0,I.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-3`,children:[(0,I.jsx)(yM,{title:`Claude Code 环境变量(示例)`,content:n,copyLabel:`Claude Code 环境变量`,onCopyText:a}),(0,I.jsx)(yM,{title:`Codex 环境变量(官方支持)`,content:r,copyLabel:`Codex 环境变量`,onCopyText:a}),(0,I.jsx)(yM,{title:`OpenCode 配置(opencode.json)`,content:i,copyLabel:`OpenCode 配置`,onCopyText:a})]})]})}var xM=Ka(`inline-flex items-center justify-center rounded-full border border-transparent px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden`,{variants:{variant:{default:`bg-primary text-primary-foreground [a&]:hover:bg-primary/90`,secondary:`bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90`,destructive:`bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60`,outline:`border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground`,ghost:`[a&]:hover:bg-accent [a&]:hover:text-accent-foreground`,link:`text-primary underline-offset-4 [a&]:hover:underline`}},defaultVariants:{variant:`default`}});function Y({className:e,variant:t=`default`,asChild:n=!1,...r}){return(0,I.jsx)(n?Xa:`span`,{"data-slot":`badge`,"data-variant":t,className:K(xM({variant:t}),e),...r})}function SM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`empty`,className:K(`flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12`,e),...t})}function CM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`empty-header`,className:K(`flex max-w-sm flex-col items-center gap-2 text-center`,e),...t})}var wM=Ka(`flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{default:`bg-transparent`,icon:`bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6`}},defaultVariants:{variant:`default`}});function TM({className:e,variant:t=`default`,...n}){return(0,I.jsx)(`div`,{"data-slot":`empty-icon`,"data-variant":t,className:K(wM({variant:t,className:e})),...n})}function EM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`empty-title`,className:K(`text-lg font-medium tracking-tight`,e),...t})}function DM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`empty-description`,className:K(`text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4`,e),...t})}function OM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`skeleton`,className:K(`bg-accent animate-pulse rounded-md`,e),...t})}function kM({hasConfig:e,routeTypeDistribution:t}){return(0,I.jsx)(vM,{title:`路由类型分布`,description:`按协议入口统计规则数量与占比`,action:(0,I.jsx)(Qi,{className:`h-4 w-4 text-muted-foreground`}),children:e?t.length===0?(0,I.jsx)(SM,{className:`min-h-[180px] p-6 md:p-6`,children:(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`暂无路由规则`}),(0,I.jsx)(DM,{children:`请先配置 routes 后查看分布信息。`})]})}):(0,I.jsx)(`div`,{className:`space-y-2.5`,children:t.map(e=>(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-sm`,children:[(0,I.jsx)(`span`,{className:`truncate font-medium`,title:e.type,children:e.type}),(0,I.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.count,` 条 · `,(e.ratio*100).toFixed(1),`%`]})]}),(0,I.jsx)(`div`,{className:`h-2 rounded-full bg-muted`,children:(0,I.jsx)(`div`,{className:`h-2 rounded-full bg-foreground/80`,style:{width:`${Math.max(e.ratio*100,2)}%`}})})]},e.type))}):(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(OM,{className:`h-4 w-full`}),(0,I.jsx)(OM,{className:`h-4 w-[85%]`}),(0,I.jsx)(OM,{className:`h-4 w-[70%]`})]})})}function AM(e){let{isMetaLoading:t,meta:n,metaRouteTypes:r,configuredInMetaCount:i}=e;return(0,I.jsx)(vM,{title:`配置摘要`,description:`当前加载配置与协议支持信息`,action:(0,I.jsx)(xa,{className:`h-4 w-4 text-muted-foreground`}),contentClassName:`space-y-2.5 px-3 py-2.5 text-sm`,children:t?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(OM,{className:`h-4 w-full`}),(0,I.jsx)(OM,{className:`h-4 w-[80%]`}),(0,I.jsx)(OM,{className:`h-6 w-[70%]`})]}):n?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`配置路径`}),(0,I.jsx)(`code`,{className:`block truncate rounded bg-muted px-2 py-1 text-xs`,title:n.configPath,children:n.configPath})]}),(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`支持协议`}),(0,I.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:r.length>0?r.map(e=>(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:e},e)):(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs`,children:`未知协议`})})]}),(0,I.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`已配置协议覆盖:`,i,` / `,r.length||0]})]}):(0,I.jsx)(SM,{className:`min-h-[180px] p-6 md:p-6`,children:(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`暂无元信息`}),(0,I.jsx)(DM,{children:`服务尚未返回配置元数据。`})]})})})}function jM(e){let{metricsLoading:t,metricsError:n,metrics:r,metricsWindow:i,onWindowChange:a}=e,o=r?.series.slice(-8)??[],s=r?.topProviders??[],c=r?.topRouteTypes??[],l=r?.warnings??[];return(0,I.jsx)(vM,{title:`运行指标(日志聚合)`,description:`基于事件日志窗口聚合的请求量、成功率与延迟分布`,action:(0,I.jsx)(`div`,{className:`flex items-center gap-1`,children:[`1h`,`6h`,`24h`].map(e=>(0,I.jsx)(q,{size:`xs`,variant:i===e?`secondary`:`ghost`,onClick:()=>a(e),disabled:t,children:e},e))}),contentClassName:`space-y-3 px-3 py-2.5`,children:t?(0,I.jsxs)(`div`,{className:`space-y-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,I.jsx)(OM,{className:`h-16 w-full`}),(0,I.jsx)(OM,{className:`h-16 w-full`}),(0,I.jsx)(OM,{className:`h-16 w-full`}),(0,I.jsx)(OM,{className:`h-16 w-full`})]}),(0,I.jsx)(OM,{className:`h-24 w-full`})]}):n?(0,I.jsx)(SM,{className:`min-h-[220px] p-6 md:p-6`,children:(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`运行指标加载失败`}),(0,I.jsx)(DM,{children:n})]})}):!r||r.summary.totalRequests===0?(0,I.jsxs)(SM,{className:`min-h-[220px] p-6 md:p-6`,children:[(0,I.jsx)(TM,{variant:`icon`,children:(0,I.jsx)(Qi,{className:`h-5 w-5`})}),(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`暂无运行日志数据`}),(0,I.jsx)(DM,{children:r?.source.logEnabled===!1?`日志未启用,请先在日志配置中开启。`:`当前窗口内没有可统计的请求事件。`})]})]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,I.jsxs)(`div`,{className:`rounded-lg border p-3`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`总请求`}),(0,I.jsx)(`div`,{className:`text-xl font-semibold`,children:r.summary.totalRequests})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border p-3`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`成功率`}),(0,I.jsxs)(`div`,{className:`text-xl font-semibold`,children:[r.summary.successRate,`%`]})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border p-3`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`错误请求`}),(0,I.jsx)(`div`,{className:`text-xl font-semibold`,children:r.summary.errorRequests})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border p-3`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`P95 延迟`}),(0,I.jsxs)(`div`,{className:`text-xl font-semibold`,children:[r.summary.p95LatencyMs,` ms`]})]})]}),l.length>0?(0,I.jsx)(`div`,{className:`rounded-md border border-dashed p-2 text-xs text-muted-foreground`,children:l.join(`;`)}):null,(0,I.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-3`,children:[(0,I.jsxs)(`div`,{className:`space-y-2 lg:col-span-2`,children:[(0,I.jsxs)(`div`,{className:`text-sm font-medium`,children:[`请求趋势(最近 `,o.length,` 个时间桶)`]}),(0,I.jsx)(`div`,{className:`space-y-1.5`,children:o.map(e=>{let t=r.summary.totalRequests?e.requests/r.summary.totalRequests:0;return(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:new Date(e.ts).toLocaleTimeString()}),(0,I.jsxs)(`span`,{children:[e.requests,` req · `,e.errors,` err · `,e.avgLatencyMs,` ms`]})]}),(0,I.jsx)(`div`,{className:`h-1.5 rounded-full bg-muted`,children:(0,I.jsx)(`div`,{className:`h-1.5 rounded-full bg-foreground/80`,style:{width:`${Math.max(t*100,e.requests>0?2:0)}%`}})})]},e.ts)})})]}),(0,I.jsxs)(`div`,{className:`space-y-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`mb-1 text-sm font-medium`,children:`Top Providers`}),(0,I.jsx)(`div`,{className:`space-y-1.5 text-xs`,children:s.length>0?s.map(e=>(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`span`,{className:`truncate`,title:e.key,children:e.key}),(0,I.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.requests,` · `,e.errorRate,`%`]})]},e.key)):(0,I.jsx)(`div`,{className:`text-muted-foreground`,children:`暂无数据`})})]}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`mb-1 text-sm font-medium`,children:`Top 协议入口`}),(0,I.jsx)(`div`,{className:`space-y-1.5 text-xs`,children:c.length>0?c.map(e=>(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`span`,{className:`truncate`,title:e.key,children:e.key}),(0,I.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.requests,` · `,e.errorRate,`%`]})]},e.key)):(0,I.jsx)(`div`,{className:`text-muted-foreground`,children:`暂无数据`})})]})]})]})]})})}function MM({title:e,icon:t,children:n}){return(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background px-3 py-2.5`,children:[(0,I.jsxs)(`div`,{className:`mb-1.5 flex items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium`,children:e}),(0,I.jsx)(t,{className:`h-4 w-4 text-muted-foreground`})]}),n]})}function NM(e){if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=1024,r=Math.floor(Math.log(e)/Math.log(n)),i=e/n**r;return r===0?`${e} B`:`${i.toFixed(2)} ${t[r]}`}function PM(e){return e===`off`?`不记录`:e===`full`||e===`masked`?`完整记录`:e}function FM(e){let{isHealthLoading:t,healthy:n,isMetaLoading:r,providerCount:i,providersReferenced:a,totalRules:o,routeTypeCount:s,avgRulesPerType:c,logConfigured:l,logEnabled:u,bodyPolicy:d,streamsEnabled:f,logStorageLoading:p,logStorageTotalBytes:m,logStorageFileCount:h}=e;return(0,I.jsxs)(`div`,{className:`grid gap-2.5 sm:grid-cols-2 xl:grid-cols-5`,children:[(0,I.jsx)(MM,{title:`服务状态`,icon:Ji,children:(0,I.jsxs)(`div`,{className:`space-y-2`,children:[t?(0,I.jsx)(OM,{className:`h-6 w-20`}):n?(0,I.jsx)(Y,{variant:`default`,className:`bg-emerald-600 hover:bg-emerald-600`,children:`运行中`}):(0,I.jsx)(Y,{variant:`destructive`,children:`离线`}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r?`等待元信息`:`配置元信息已就绪`})]})}),(0,I.jsx)(MM,{title:`Providers`,icon:Ma,children:(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(`div`,{className:`text-2xl font-bold`,children:i}),(0,I.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`已被路由引用 `,a,` / `,i||0]})]})}),(0,I.jsx)(MM,{title:`Routing`,icon:Oa,children:(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(`div`,{className:`text-2xl font-bold`,children:o}),(0,I.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[s,` 个协议入口 · 平均 `,c.toFixed(1),` 条/入口`]})]})}),(0,I.jsx)(MM,{title:`日志`,icon:pa,children:(0,I.jsxs)(`div`,{className:`space-y-2`,children:[l?u?(0,I.jsx)(Y,{variant:`default`,className:`bg-emerald-600 hover:bg-emerald-600`,children:`已启用`}):(0,I.jsx)(Y,{variant:`secondary`,children:`已暂停`}):(0,I.jsx)(Y,{variant:`secondary`,children:`未配置`}),(0,I.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[(0,I.jsxs)(Y,{variant:`outline`,className:`text-xs`,children:[`body: `,PM(d)]}),(0,I.jsxs)(Y,{variant:`outline`,className:`text-xs`,children:[`stream: `,f?`on`:`off`]})]})]})}),(0,I.jsx)(MM,{title:`日志存储`,icon:ga,children:(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[p||m===void 0?(0,I.jsx)(OM,{className:`h-6 w-24`}):(0,I.jsx)(`div`,{className:`text-2xl font-bold`,children:NM(m)}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:p||h===void 0?`计算中...`:`${h} 个文件 · 每小时自动更新`})]})})]})}function IM({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`table-container`,className:`relative w-full overflow-x-auto`,children:(0,I.jsx)(`table`,{"data-slot":`table`,className:K(`w-full caption-bottom text-sm`,e),...t})})}function LM({className:e,...t}){return(0,I.jsx)(`thead`,{"data-slot":`table-header`,className:K(`[&_tr]:border-b`,e),...t})}function RM({className:e,...t}){return(0,I.jsx)(`tbody`,{"data-slot":`table-body`,className:K(`[&_tr:last-child]:border-0`,e),...t})}function zM({className:e,...t}){return(0,I.jsx)(`tfoot`,{"data-slot":`table-footer`,className:K(`bg-muted/50 border-t font-medium [&>tr]:last:border-b-0`,e),...t})}function BM({className:e,...t}){return(0,I.jsx)(`tr`,{"data-slot":`table-row`,className:K(`hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors`,e),...t})}function VM({className:e,...t}){return(0,I.jsx)(`th`,{"data-slot":`table-head`,className:K(`text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t})}function HM({className:e,...t}){return(0,I.jsx)(`td`,{"data-slot":`table-cell`,className:K(`p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t})}function UM({hasConfig:e,providerUsageRows:t}){return(0,I.jsx)(vM,{title:`Provider 使用概览`,description:`按路由规则统计 provider 被引用次数`,children:e?t.length===0?(0,I.jsxs)(SM,{className:`min-h-[200px] p-6 md:p-6`,children:[(0,I.jsx)(TM,{variant:`icon`,children:(0,I.jsx)(Ma,{className:`h-5 w-5`})}),(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`未配置 Provider`}),(0,I.jsx)(DM,{children:`请先在 Providers 页面完成上游配置。`})]})]}):(0,I.jsxs)(IM,{children:[(0,I.jsx)(LM,{children:(0,I.jsxs)(BM,{children:[(0,I.jsx)(VM,{children:`Provider`}),(0,I.jsx)(VM,{className:`text-right`,children:`引用次数`}),(0,I.jsx)(VM,{className:`text-right`,children:`状态`})]})}),(0,I.jsx)(RM,{children:t.slice(0,8).map(e=>(0,I.jsxs)(BM,{children:[(0,I.jsx)(HM,{className:`max-w-[220px] truncate font-medium`,title:e.provider,children:e.provider}),(0,I.jsx)(HM,{className:`text-right`,children:e.count}),(0,I.jsx)(HM,{className:`text-right`,children:e.used?(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:`已使用`}):(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs`,children:`未使用`})})]},e.provider))})]}):(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(OM,{className:`h-8 w-full`}),(0,I.jsx)(OM,{className:`h-8 w-full`}),(0,I.jsx)(OM,{className:`h-8 w-full`})]})})}function WM({hasConfig:e,routeTypeDistribution:t,totalRules:n}){return(0,I.jsx)(vM,{title:`协议类型速览`,description:`按协议入口查看规则数量与占比`,children:e?t.length===0?(0,I.jsxs)(SM,{className:`min-h-[200px] p-6 md:p-6`,children:[(0,I.jsx)(TM,{variant:`icon`,children:(0,I.jsx)(Oa,{className:`h-5 w-5`})}),(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`暂无协议规则`}),(0,I.jsx)(DM,{children:`当前还没有可统计的协议入口。`})]})]}):(0,I.jsxs)(IM,{children:[(0,I.jsx)(LM,{children:(0,I.jsxs)(BM,{children:[(0,I.jsx)(VM,{children:`协议类型`}),(0,I.jsx)(VM,{className:`text-right`,children:`规则数`}),(0,I.jsx)(VM,{className:`text-right`,children:`占比`})]})}),(0,I.jsx)(RM,{children:t.slice(0,8).map(e=>(0,I.jsxs)(BM,{children:[(0,I.jsx)(HM,{className:`max-w-[260px] truncate font-medium`,title:e.type,children:e.type}),(0,I.jsx)(HM,{className:`text-right`,children:e.count}),(0,I.jsxs)(HM,{className:`text-right`,children:[(e.ratio*100).toFixed(1),`%`]})]},e.type))}),(0,I.jsx)(zM,{children:(0,I.jsxs)(BM,{children:[(0,I.jsx)(HM,{children:`总计`}),(0,I.jsx)(HM,{className:`text-right`,children:n}),(0,I.jsx)(HM,{className:`text-right`,children:`100%`})]})})]}):(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(OM,{className:`h-8 w-full`}),(0,I.jsx)(OM,{className:`h-8 w-full`}),(0,I.jsx)(OM,{className:`h-8 w-full`})]})})}const GM=qx((e,t)=>({healthy:null,meta:null,metrics:null,metricsLoading:!1,metricsError:null,metricsWindow:`24h`,logStorage:null,logStorageLoading:!1,logStorageError:null,fetchHealth:async()=>{e({healthy:await aS()})},fetchMeta:async()=>{try{e({meta:await rS()})}catch{}},fetchMetrics:async(n,r=!1)=>{let i=n??t().metricsWindow;e({metricsLoading:!0,metricsError:null,metricsWindow:i});try{e({metrics:await oS(i,r),metricsLoading:!1,metricsError:null})}catch(t){e({metricsLoading:!1,metricsError:t instanceof Error?t.message:`获取日志统计失败`})}},fetchLogStorage:async(t=!1)=>{e({logStorageLoading:!0,logStorageError:null});try{e({logStorage:await sS(t),logStorageLoading:!1,logStorageError:null})}catch(t){e({logStorageLoading:!1,logStorageError:t instanceof Error?t.message:`获取日志存储统计失败`})}},setMetricsWindow:t=>{e({metricsWindow:t})},refresh:async()=>{await Promise.all([t().fetchHealth(),t().fetchMeta(),t().fetchMetrics(void 0,!0),t().fetchLogStorage(!0)])}}));var KM=[`http://localhost:4099/anthropic-messages`,`http://localhost:4099/openai-responses`,`http://localhost:4099/openai-completions`],qM=`ANTHROPIC_AUTH_TOKEN="DEFAULT_API_KEY"
|
|
134
134
|
ANTHROPIC_BASE_URL="http://localhost:4099/anthropic-messages"
|
|
135
135
|
ANTHROPIC_DEFAULT_HAIKU_MODEL=""
|
|
136
136
|
ANTHROPIC_DEFAULT_OPUS_MODEL=""
|
|
137
137
|
ANTHROPIC_DEFAULT_SONNET_MODEL=""
|
|
138
|
-
ANTHROPIC_MODEL=""`,
|
|
138
|
+
ANTHROPIC_MODEL=""`,JM=`OPENAI_API_KEY="DEFAULT_API_KEY"
|
|
139
139
|
OPENAI_BASE_URL="http://localhost:4099/openai-responses"
|
|
140
140
|
# 模型建议用: codex --model <model>
|
|
141
|
-
# 或在 ~/.codex/config.toml 里配置 model 字段`,
|
|
141
|
+
# 或在 ~/.codex/config.toml 里配置 model 字段`,YM=`{
|
|
142
142
|
"$schema": "https://opencode.ai/config.json",
|
|
143
143
|
"provider": {
|
|
144
144
|
"local-router-responses": {
|
|
@@ -174,18 +174,18 @@ OPENAI_BASE_URL="http://localhost:4099/openai-responses"
|
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
|
-
}`;function JM(){let e=vS(e=>e.config),t=UM(e=>e.healthy),n=UM(e=>e.meta),r=UM(e=>e.metrics),i=UM(e=>e.metricsLoading),a=UM(e=>e.metricsError),o=UM(e=>e.metricsWindow),s=UM(e=>e.logStorage),c=UM(e=>e.logStorageLoading),l=UM(e=>e.fetchHealth),u=UM(e=>e.fetchMeta),d=UM(e=>e.fetchMetrics),f=UM(e=>e.fetchLogStorage),p=UM(e=>e.setMetricsWindow);(0,F.useEffect)(()=>{l(),u(),d(),f()},[l,u,d,f]);let{providerCount:m,routeTypeCount:h,totalRules:g,avgRulesPerType:_,providersReferenced:v,providerUsageRows:y,routeTypeDistribution:b,logConfigured:x,logEnabled:S,bodyPolicy:C,streamsEnabled:w}=(0,F.useMemo)(()=>{let t=e?.providers??{},n=e?.routes??{},r=Object.keys(t).length,i=Object.entries(n),a=i.length,o=new Map(Object.keys(t).map(e=>[e,0])),s=i.map(([e,t])=>{let n=Object.keys(t??{}).length;return Object.values(t??{}).forEach(e=>{e?.provider&&o.set(e.provider,(o.get(e.provider)??0)+1)}),{type:e,count:n}}).sort((e,t)=>t.count-e.count),c=s.reduce((e,t)=>e+t.count,0),l=a?c/a:0,u=Array.from(o.entries()).map(([e,t])=>({provider:e,count:t,used:t>0})).sort((e,t)=>t.count-e.count||e.provider.localeCompare(t.provider));return{providerCount:r,routeTypeCount:a,totalRules:c,avgRulesPerType:l,providersReferenced:u.filter(e=>e.used).length,providerUsageRows:u,routeTypeDistribution:s.map(e=>({...e,ratio:c?e.count/c:0})),logConfigured:!!e?.log,logEnabled:!!e?.log&&e.log.enabled!==!1,bodyPolicy:e?.log?.bodyPolicy??`off`,streamsEnabled:e?.log?e.log.streams?.enabled!==!1:!1}},[e]),T=Object.keys(e?.routes??{}),E=n?.routeTypes??[],ee=new Set(E),D=T.filter(e=>ee.has(e)).length,O=n===null,k=t===null;function te(e){p(e),d(e,!0)}async function A(e,t){try{await navigator.clipboard.writeText(e),L.success(`已复制${t}`)}catch{L.error(`复制${t}失败`)}}return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`仪表盘`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`Local Router 服务状态与配置概览`})]}),(0,I.jsx)(NM,{isHealthLoading:k,healthy:t,isMetaLoading:O,providerCount:m,providersReferenced:v,totalRules:g,routeTypeCount:h,avgRulesPerType:_,logConfigured:x,logEnabled:S,bodyPolicy:C,streamsEnabled:w,logStorageLoading:c,logStorageTotalBytes:s?.totalBytes,logStorageFileCount:s?.fileCount}),(0,I.jsx)(vM,{endpointLines:WM,claudeEnvText:GM,codexEnvText:KM,opencodeConfigText:qM,onCopyText:A}),(0,I.jsx)(kM,{metricsLoading:i,metricsError:a,metrics:r,metricsWindow:o,onWindowChange:te}),(0,I.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-3`,children:[(0,I.jsx)(`div`,{className:`lg:col-span-2`,children:(0,I.jsx)(DM,{hasConfig:!!e,routeTypeDistribution:b})}),(0,I.jsx)(OM,{isMetaLoading:O,meta:n,metaRouteTypes:E,configuredInMetaCount:D})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-2`,children:[(0,I.jsx)(VM,{hasConfig:!!e,providerUsageRows:y}),(0,I.jsx)(HM,{hasConfig:!!e,routeTypeDistribution:b,totalRules:g})]})]})}function X(){return X=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},X.apply(null,arguments)}function YM(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}var XM={},ZM=(0,F.createContext)(XM),QM=(e,t)=>X({},e,t),$M=()=>(0,F.useContext)(ZM),eN=(0,F.createContext)(()=>{});eN.displayName=`JVR.DispatchShowTools`;function tN(){return(0,F.useReducer)(QM,XM)}function nN(){return(0,F.useContext)(eN)}var rN=e=>{var{initial:t,dispatch:n,children:r}=e;return(0,I.jsx)(ZM.Provider,{value:t,children:(0,I.jsx)(eN.Provider,{value:n,children:r})})};rN.displayName=`JVR.ShowTools`;var iN={},aN=(0,F.createContext)(iN),oN=(e,t)=>X({},e,t),sN=()=>(0,F.useContext)(aN),cN=(0,F.createContext)(()=>{});cN.displayName=`JVR.DispatchExpands`;function lN(){return(0,F.useReducer)(oN,iN)}function uN(){return(0,F.useContext)(cN)}var dN=e=>{var{initial:t,dispatch:n,children:r}=e;return(0,I.jsx)(aN.Provider,{value:t,children:(0,I.jsx)(cN.Provider,{value:n,children:r})})};dN.displayName=`JVR.Expands`;var fN={Str:{as:`span`,"data-type":`string`,style:{color:`var(--w-rjv-type-string-color, #cb4b16)`},className:`w-rjv-type`,children:`string`},Url:{as:`a`,style:{color:`var(--w-rjv-type-url-color, #0969da)`},"data-type":`url`,className:`w-rjv-type`,children:`url`},Undefined:{style:{color:`var(--w-rjv-type-undefined-color, #586e75)`},as:`span`,"data-type":`undefined`,className:`w-rjv-type`,children:`undefined`},Null:{style:{color:`var(--w-rjv-type-null-color, #d33682)`},as:`span`,"data-type":`null`,className:`w-rjv-type`,children:`null`},Map:{style:{color:`var(--w-rjv-type-map-color, #268bd2)`,marginRight:3},as:`span`,"data-type":`map`,className:`w-rjv-type`,children:`Map`},Nan:{style:{color:`var(--w-rjv-type-nan-color, #859900)`},as:`span`,"data-type":`nan`,className:`w-rjv-type`,children:`NaN`},Bigint:{style:{color:`var(--w-rjv-type-bigint-color, #268bd2)`},as:`span`,"data-type":`bigint`,className:`w-rjv-type`,children:`bigint`},Int:{style:{color:`var(--w-rjv-type-int-color, #268bd2)`},as:`span`,"data-type":`int`,className:`w-rjv-type`,children:`int`},Set:{style:{color:`var(--w-rjv-type-set-color, #268bd2)`,marginRight:3},as:`span`,"data-type":`set`,className:`w-rjv-type`,children:`Set`},Float:{style:{color:`var(--w-rjv-type-float-color, #859900)`},as:`span`,"data-type":`float`,className:`w-rjv-type`,children:`float`},True:{style:{color:`var(--w-rjv-type-boolean-color, #2aa198)`},as:`span`,"data-type":`bool`,className:`w-rjv-type`,children:`bool`},False:{style:{color:`var(--w-rjv-type-boolean-color, #2aa198)`},as:`span`,"data-type":`bool`,className:`w-rjv-type`,children:`bool`},Date:{style:{color:`var(--w-rjv-type-date-color, #268bd2)`},as:`span`,"data-type":`date`,className:`w-rjv-type`,children:`date`}},pN=(0,F.createContext)(fN),mN=(e,t)=>X({},e,t),hN=()=>(0,F.useContext)(pN),gN=(0,F.createContext)(()=>{});gN.displayName=`JVR.DispatchTypes`;function _N(){return(0,F.useReducer)(mN,fN)}function vN(){return(0,F.useContext)(gN)}function yN(e){var{initial:t,dispatch:n,children:r}=e;return(0,I.jsx)(pN.Provider,{value:t,children:(0,I.jsx)(gN.Provider,{value:n,children:r})})}yN.displayName=`JVR.Types`;var bN=[`style`];function xN(e){var{style:t}=e,n=YM(e,bN);return(0,I.jsx)(`svg`,X({viewBox:`0 0 24 24`,fill:`var(--w-rjv-arrow-color, currentColor)`,style:X({cursor:`pointer`,height:`1em`,width:`1em`,userSelect:`none`,display:`inline-flex`},t)},n,{children:(0,I.jsx)(`path`,{d:`M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z`})}))}xN.displayName=`JVR.TriangleArrow`;var SN={Arrow:{as:`span`,className:`w-rjv-arrow`,style:{transform:`rotate(0deg)`,transition:`all 0.3s`},children:(0,I.jsx)(xN,{})},Colon:{as:`span`,style:{color:`var(--w-rjv-colon-color, var(--w-rjv-color))`,marginLeft:0,marginRight:2},className:`w-rjv-colon`,children:`:`},Quote:{as:`span`,style:{color:`var(--w-rjv-quotes-color, #236a7c)`},className:`w-rjv-quotes`,children:`"`},ValueQuote:{as:`span`,style:{color:`var(--w-rjv-quotes-string-color, #cb4b16)`},className:`w-rjv-quotes`,children:`"`},BracketsLeft:{as:`span`,style:{color:`var(--w-rjv-brackets-color, #236a7c)`},className:`w-rjv-brackets-start`,children:`[`},BracketsRight:{as:`span`,style:{color:`var(--w-rjv-brackets-color, #236a7c)`},className:`w-rjv-brackets-end`,children:`]`},BraceLeft:{as:`span`,style:{color:`var(--w-rjv-curlybraces-color, #236a7c)`},className:`w-rjv-curlybraces-start`,children:`{`},BraceRight:{as:`span`,style:{color:`var(--w-rjv-curlybraces-color, #236a7c)`},className:`w-rjv-curlybraces-end`,children:`}`}},CN=(0,F.createContext)(SN),wN=(e,t)=>X({},e,t),TN=()=>(0,F.useContext)(CN),EN=(0,F.createContext)(()=>{});EN.displayName=`JVR.DispatchSymbols`;function DN(){return(0,F.useReducer)(wN,SN)}function ON(){return(0,F.useContext)(EN)}var kN=e=>{var{initial:t,dispatch:n,children:r}=e;return(0,I.jsx)(CN.Provider,{value:t,children:(0,I.jsx)(EN.Provider,{value:n,children:r})})};kN.displayName=`JVR.Symbols`;var AN={Copied:{className:`w-rjv-copied`,style:{height:`1em`,width:`1em`,cursor:`pointer`,verticalAlign:`middle`,marginLeft:5}},CountInfo:{as:`span`,className:`w-rjv-object-size`,style:{color:`var(--w-rjv-info-color, #0000004d)`,paddingLeft:8,fontStyle:`italic`}},CountInfoExtra:{as:`span`,className:`w-rjv-object-extra`,style:{paddingLeft:8}},Ellipsis:{as:`span`,style:{cursor:`pointer`,color:`var(--w-rjv-ellipsis-color, #cb4b16)`,userSelect:`none`},className:`w-rjv-ellipsis`,children:`...`},Row:{as:`div`,className:`w-rjv-line`},KeyName:{as:`span`,className:`w-rjv-object-key`}},jN=(0,F.createContext)(AN),MN=(e,t)=>X({},e,t),NN=()=>(0,F.useContext)(jN),PN=(0,F.createContext)(()=>{});PN.displayName=`JVR.DispatchSection`;function FN(){return(0,F.useReducer)(MN,AN)}function IN(){return(0,F.useContext)(PN)}var LN=e=>{var{initial:t,dispatch:n,children:r}=e;return(0,I.jsx)(jN.Provider,{value:t,children:(0,I.jsx)(PN.Provider,{value:n,children:r})})};LN.displayName=`JVR.Section`;var RN={objectSortKeys:!1,indentWidth:15},zN=(0,F.createContext)(RN);zN.displayName=`JVR.Context`;var BN=(0,F.createContext)(()=>{});BN.displayName=`JVR.DispatchContext`;function VN(e,t){return X({},e,t)}var HN=()=>(0,F.useContext)(zN),UN=e=>{var{children:t,initialState:n,initialTypes:r}=e,[i,a]=(0,F.useReducer)(VN,Object.assign({},RN,n)),[o,s]=tN(),[c,l]=lN(),[u,d]=_N(),[f,p]=DN(),[m,h]=FN();return(0,F.useEffect)(()=>a(X({},n)),[n]),(0,I.jsx)(zN.Provider,{value:i,children:(0,I.jsx)(BN.Provider,{value:a,children:(0,I.jsx)(rN,{initial:o,dispatch:s,children:(0,I.jsx)(dN,{initial:c,dispatch:l,children:(0,I.jsx)(yN,{initial:X({},u,r),dispatch:d,children:(0,I.jsx)(kN,{initial:f,dispatch:p,children:(0,I.jsx)(LN,{initial:m,dispatch:h,children:t})})})})})})})};UN.displayName=`JVR.Provider`;function WN(e){if(e==null)throw TypeError(`Cannot destructure `+e)}var GN=[`isNumber`,`value`,`parentValue`,`keyName`,`keys`],KN=[`as`,`render`],qN=[`as`,`render`],JN=[`as`,`render`],YN=[`as`,`style`,`render`],XN=[`as`,`render`],ZN=[`as`,`render`],QN=[`as`,`render`],$N=[`as`,`render`],eP=e=>{var{Quote:t={}}=TN(),{isNumber:n,value:r,parentValue:i,keyName:a,keys:o}=e,s=YM(e,GN);if(n)return null;var{as:c,render:l}=t,u=YM(t,KN),d=c||`span`,f=X({},s,u);return typeof f.children==`string`&&(f.children=f.children.trim()||void 0),l&&typeof l==`function`&&l(f,{value:r,parentValue:i,keyName:a,keys:o||(a?[a]:[])})||(0,I.jsx)(d,X({},f))};eP.displayName=`JVR.Quote`;var tP=e=>{var{ValueQuote:t={}}=TN(),n=X({},(WN(e),e)),{as:r,render:i}=t,a=YM(t,qN),o=r||`span`,s=X({},n,a);return i&&typeof i==`function`&&i(s,{})||(0,I.jsx)(o,X({},s))};tP.displayName=`JVR.ValueQuote`;var nP=e=>{var{value:t,parentValue:n,keyName:r,keys:i}=e,{Colon:a={}}=TN(),{as:o,render:s}=a,c=YM(a,JN),l=o||`span`;return s&&typeof s==`function`&&s(c,{value:t,parentValue:n,keyName:r,keys:i||(r?[r]:[])})||(0,I.jsx)(l,X({},c))};nP.displayName=`JVR.Colon`;var rP=e=>{var{Arrow:t={}}=TN(),n=sN(),{expandKey:r,style:i,value:a,parentValue:o,keyName:s,keys:c}=e,l=!!n[r],{as:u,style:d,render:f}=t,p=YM(t,YN),m=u||`span`,h=f&&typeof f==`function`,g=X({},p,{"data-expanded":l,style:X({},d,i)});return h&&f(g,{value:a,parentValue:o,keyName:s,keys:c||(s?[s]:[])})||(0,I.jsx)(m,X({},p,{style:X({},d,i)}))};rP.displayName=`JVR.Arrow`;var iP=e=>{var{isBrackets:t,value:n,parentValue:r,keyName:i,keys:a}=e,{BracketsLeft:o={},BraceLeft:s={}}=TN(),c={value:n,parentValue:r,keyName:i,keys:a||(i?[i]:[])};if(t){var{as:l,render:u}=o,d=YM(o,XN),f=l||`span`;return u&&typeof u==`function`&&u(d,c)||(0,I.jsx)(f,X({},d))}var{as:p,render:m}=s,h=YM(s,ZN),g=p||`span`;return m&&typeof m==`function`&&m(h,c)||(0,I.jsx)(g,X({},h))};iP.displayName=`JVR.BracketsOpen`;var aP=e=>{var{isBrackets:t,isVisiable:n,value:r,parentValue:i,keyName:a,keys:o}=e,s={value:r,parentValue:i,keyName:a,keys:o||(a?[a]:[])};if(!n)return null;var{BracketsRight:c={},BraceRight:l={}}=TN();if(t){var{as:u,render:d}=c,f=YM(c,QN),p=u||`span`;return d&&typeof d==`function`&&d(f,s)||(0,I.jsx)(p,X({},f))}var{as:m,render:h}=l,g=YM(l,$N),_=m||`span`;return h&&typeof h==`function`&&h(g,s)||(0,I.jsx)(_,X({},g))};aP.displayName=`JVR.BracketsClose`;var oP=e=>{var{keyName:t,value:n,expandKey:r,parentValue:i,level:a,keys:o=[]}=e,s=sN(),{collapsed:c,shouldExpandNodeInitially:l}=HN(),u=typeof c==`boolean`?c:typeof c==`number`?a>c:!1,d=s[r]??(l?!1:u),f=l&&l(!d,{value:n,keys:o,level:a,keyName:t,parentValue:i});if(l&&c===!1){if(s[r]===void 0&&!f)return null}else if(s[r]===void 0&&f)return null;var p=Object.keys(n).length;if(d||p===0)return null;var m={paddingLeft:4},h={keyName:t,value:n,keys:o,parentValue:i},g=Array.isArray(n),_=n instanceof Set;return(0,I.jsx)(`div`,{style:m,children:(0,I.jsx)(aP,X({isBrackets:g||_},h,{isVisiable:!0}))})};oP.displayName=`JVR.NestedClose`;var sP=[`as`,`render`],cP=[`as`,`render`],lP=[`as`,`render`],uP=[`as`,`render`],dP=[`as`,`render`],fP=[`as`,`render`],pP=[`as`,`render`],mP=[`as`,`render`],hP=[`as`,`render`],gP=[`as`,`render`],_P=[`as`,`render`],vP=[`as`,`render`],yP=[`as`,`render`],bP=e=>{if(e===void 0)return`0n`;if(typeof e==`string`)try{e=BigInt(e)}catch{return`0n`}return e?e.toString()+`n`:`0n`},xP=e=>{var{value:t,keyName:n}=e,{Set:r={},displayDataTypes:i}=hN();if(!(t instanceof Set)||!i)return null;var{as:a,render:o}=r,s=YM(r,sP);return o&&typeof o==`function`&&o(s,{type:`type`,value:t,keyName:n})||(0,I.jsx)(a||`span`,X({},s))};xP.displayName=`JVR.SetComp`;var SP=e=>{var{value:t,keyName:n}=e,{Map:r={},displayDataTypes:i}=hN();if(!(t instanceof Map)||!i)return null;var{as:a,render:o}=r,s=YM(r,cP);return o&&typeof o==`function`&&o(s,{type:`type`,value:t,keyName:n})||(0,I.jsx)(a||`span`,X({},s))};SP.displayName=`JVR.MapComp`;var CP={opacity:.75,paddingRight:4},wP=e=>{var{children:t=``,keyName:n,keys:r}=e,{Str:i={},displayDataTypes:a}=hN(),{shortenTextAfterLength:o=30,stringEllipsis:s=`...`}=HN(),{as:c,render:l}=i,u=YM(i,lP),d=t,[f,p]=(0,F.useState)(o&&d.length>o);(0,F.useEffect)(()=>p(o&&d.length>o),[o]);var m=c||`span`,h=X({},CP,i.style||{});o>0&&(u.style=X({},u.style,{cursor:d.length<=o?`initial`:`pointer`}),d.length>o&&(u.onClick=()=>{p(!f)}));var g=f?``+d.slice(0,o)+s:d,_=l&&typeof l==`function`,v=_&&l(X({},u,{style:h}),{type:`type`,value:t,keyName:n,keys:r}),y=f?`w-rjv-value w-rjv-value-short`:`w-rjv-value`,b=_&&l(X({},u,{children:g,className:y}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(v||(0,I.jsx)(m,X({},u,{style:h}))),b||(0,I.jsxs)(F.Fragment,{children:[(0,I.jsx)(tP,{}),(0,I.jsx)(m,X({},u,{className:y,children:g})),(0,I.jsx)(tP,{})]})]})};wP.displayName=`JVR.TypeString`;var TP=e=>{var{children:t,keyName:n,keys:r}=e,{True:i={},displayDataTypes:a}=hN(),{as:o,render:s}=i,c=YM(i,uP),l=o||`span`,u=X({},CP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:t?.toString()}))]})};TP.displayName=`JVR.TypeTrue`;var EP=e=>{var{children:t,keyName:n,keys:r}=e,{False:i={},displayDataTypes:a}=hN(),{as:o,render:s}=i,c=YM(i,dP),l=o||`span`,u=X({},CP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:t?.toString()}))]})};EP.displayName=`JVR.TypeFalse`;var DP=e=>{var{children:t,keyName:n,keys:r}=e,{Float:i={},displayDataTypes:a}=hN(),{as:o,render:s}=i,c=YM(i,fP),l=o||`span`,u=X({},CP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:t?.toString()}))]})};DP.displayName=`JVR.TypeFloat`;var OP=e=>{var{children:t,keyName:n,keys:r}=e,{Int:i={},displayDataTypes:a}=hN(),{as:o,render:s}=i,c=YM(i,pP),l=o||`span`,u=X({},CP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:t?.toString()}))]})};OP.displayName=`JVR.TypeInt`;var kP=e=>{var{children:t,keyName:n,keys:r}=e,{Bigint:i={},displayDataTypes:a}=hN(),{as:o,render:s}=i,c=YM(i,mP),l=o||`span`,u=X({},CP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:bP(t?.toString())}))]})};kP.displayName=`JVR.TypeFloat`;var AP=e=>{var{children:t,keyName:n,keys:r}=e,{Url:i={},displayDataTypes:a}=hN(),{as:o,render:s}=i,c=YM(i,hP),l=o||`span`,u=X({},CP,i.style),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t?.href,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsxs)(`a`,X({href:t?.href,target:`_blank`},c,{className:`w-rjv-value`,children:[(0,I.jsx)(tP,{}),t?.href,(0,I.jsx)(tP,{})]}))]})};AP.displayName=`JVR.TypeUrl`;var jP=e=>{var{children:t,keyName:n,keys:r}=e,{Date:i={},displayDataTypes:a}=hN(),{as:o,render:s}=i,c=YM(i,gP),l=o||`span`,u=X({},CP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=t instanceof Date?t.toLocaleString():t,m=d&&s(X({},c,{children:p,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),m||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:p}))]})};jP.displayName=`JVR.TypeDate`;var MP=e=>{var{children:t,keyName:n,keys:r}=e,{Undefined:i={},displayDataTypes:a}=hN(),{as:o,render:s}=i,c=YM(i,_P),l=o||`span`,u=X({},CP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p]})};MP.displayName=`JVR.TypeUndefined`;var NP=e=>{var{children:t,keyName:n,keys:r}=e,{Null:i={},displayDataTypes:a}=hN(),{as:o,render:s}=i,c=YM(i,vP),l=o||`span`,u=X({},CP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p]})};NP.displayName=`JVR.TypeNull`;var PP=e=>{var{children:t,keyName:n,keys:r}=e,{Nan:i={},displayDataTypes:a}=hN(),{as:o,render:s}=i,c=YM(i,yP),l=o||`span`,u=X({},CP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t?.toString(),className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p]})};PP.displayName=`JVR.TypeNan`;var FP=e=>Number(e)===e&&e%1!=0||isNaN(e),IP=e=>{var{value:t,keyName:n,keys:r}=e,i={keyName:n,keys:r};return t instanceof URL?(0,I.jsx)(AP,X({},i,{children:t})):typeof t==`string`?(0,I.jsx)(wP,X({},i,{children:t})):t===!0?(0,I.jsx)(TP,X({},i,{children:t})):t===!1?(0,I.jsx)(EP,X({},i,{children:t})):t===null?(0,I.jsx)(NP,X({},i,{children:t})):t===void 0?(0,I.jsx)(MP,X({},i,{children:t})):t instanceof Date?(0,I.jsx)(jP,X({},i,{children:t})):typeof t==`number`&&isNaN(t)?(0,I.jsx)(PP,X({},i,{children:t})):typeof t==`number`&&FP(t)?(0,I.jsx)(DP,X({},i,{children:t})):typeof t==`bigint`?(0,I.jsx)(kP,X({},i,{children:t})):typeof t==`number`?(0,I.jsx)(OP,X({},i,{children:t})):null};IP.displayName=`JVR.Value`;function LP(e,t,n){var r=ON(),i=X({},e,t,{className:[e.className,t.className].filter(Boolean).join(` `),style:X({},e.style,t.style),children:t.children||e.children});(0,F.useEffect)(()=>r({[n]:i}),[t])}function RP(e,t,n){var r=vN(),i=X({},e,t,{className:[e.className,t.className].filter(Boolean).join(` `),style:X({},e.style,t.style),children:t.children||e.children});(0,F.useEffect)(()=>r({[n]:i}),[t])}function zP(e,t,n){var r=IN(),i=X({},e,t,{className:[e.className,t.className].filter(Boolean).join(` `),style:X({},e.style,t.style),children:t.children||e.children});(0,F.useEffect)(()=>r({[n]:i}),[t])}var BP=[`as`,`render`],VP=e=>{var{KeyName:t={}}=NN();return zP(t,e,`KeyName`),null};VP.displayName=`JVR.KeyName`;var HP=e=>{var{children:t,value:n,parentValue:r,keyName:i,keys:a}=e,o={color:typeof t==`number`?`var(--w-rjv-key-number, #268bd2)`:`var(--w-rjv-key-string, #002b36)`},{KeyName:s={}}=NN(),{as:c,render:l}=s,u=YM(s,BP);u.style=X({},u.style,o);var d=c||`span`;return l&&typeof l==`function`&&l(X({},u,{children:t}),{value:n,parentValue:r,keyName:i,keys:a||(i?[i]:[])})||(0,I.jsx)(d,X({},u,{children:t}))};HP.displayName=`JVR.KeyNameComp`;var UP=[`children`,`value`,`parentValue`,`keyName`,`keys`],WP=[`as`,`render`,`children`],GP=e=>{var{Row:t={}}=NN();return zP(t,e,`Row`),null};GP.displayName=`JVR.Row`;var KP=e=>{var{children:t,value:n,parentValue:r,keyName:i,keys:a}=e,o=YM(e,UP),{Row:s={}}=NN(),{as:c,render:l}=s,u=YM(s,WP),d=c||`div`;return l&&typeof l==`function`&&l(X({},o,u,{children:t}),{value:n,keyName:i,parentValue:r,keys:a})||(0,I.jsx)(d,X({},o,u,{children:t}))};KP.displayName=`JVR.RowComp`;function qP(e){var t=(0,F.useRef)();return(0,F.useEffect)(()=>{t.current=e}),t.current}function JP(e){var{value:t,highlightUpdates:n,highlightContainer:r}=e,i=qP(t),a=(0,F.useMemo)(()=>{if(!n||i===void 0)return!1;if(typeof t!=typeof i)return!0;if(typeof t==`number`)return isNaN(t)&&isNaN(i)?!1:t!==i;if(Array.isArray(t)!==Array.isArray(i))return!0;if(typeof t==`object`||typeof t==`function`)return!1;if(t!==i)return!0},[n,t]);(0,F.useEffect)(()=>{r&&r.current&&a&&`animate`in r.current&&r.current.animate([{backgroundColor:`var(--w-rjv-update-color, #ebcb8b)`},{backgroundColor:``}],{duration:1e3,easing:`ease-in`})},[a,t,r])}var YP=[`keyName`,`value`,`parentValue`,`expandKey`,`keys`,`beforeCopy`],XP=[`as`,`render`],ZP=e=>{var{keyName:t,value:n,parentValue:r,expandKey:i,keys:a,beforeCopy:o}=e,s=YM(e,YP),{onCopied:c,enableClipboard:l,beforeCopy:u}=HN(),d=$M()[i],[f,p]=(0,F.useState)(!1),{Copied:m={}}=NN(),h=m?.beforeCopy;if(l===!1||!d)return null;var g={style:{display:`inline-flex`},fill:f?`var(--w-rjv-copied-success-color, #28a745)`:`var(--w-rjv-copied-color, currentColor)`,onClick:e=>{e.stopPropagation();var s=``;s=typeof n==`number`&&n===1/0?`Infinity`:typeof n==`number`&&isNaN(n)?`NaN`:typeof n==`bigint`?bP(n):n instanceof Date?n.toLocaleString():JSON.stringify(n,(e,t)=>typeof t==`bigint`?bP(t):t,2);var l=o||h||u;l&&typeof l==`function`&&(s=l(s,t,n,r,i,a)),c&&c(s,n),p(!0),(navigator.clipboard||{writeText(e){return new Promise((t,n)=>{var r=document.createElement(`textarea`);r.style.position=`absolute`,r.style.opacity=`0`,r.style.left=`-99999999px`,r.value=e,document.body.appendChild(r),r.select(),document.execCommand(`copy`)?t():n(),r.remove()})}}).writeText(s).then(()=>{var e=setTimeout(()=>{p(!1),clearTimeout(e)},3e3)}).catch(e=>{})}},{render:_}=m,v=YM(m,XP),y=X({},v,s,g,{style:X({},v.style,s.style,g.style)});return _&&typeof _==`function`&&_(X({},y,{"data-copied":f}),{value:n,keyName:t,keys:a,parentValue:r})||(f?(0,I.jsx)(`svg`,X({viewBox:`0 0 32 36`},y,{children:(0,I.jsx)(`path`,{d:`M27.5,33 L2.5,33 L2.5,12.5 L27.5,12.5 L27.5,15.2249049 C29.1403264,13.8627542 29.9736597,13.1778155 30,13.1700887 C30,11.9705278 30,10.0804982 30,7.5 C30,6.1 28.9,5 27.5,5 L20,5 C20,2.2 17.8,0 15,0 C12.2,0 10,2.2 10,5 L2.5,5 C1.1,5 0,6.1 0,7.5 L0,33 C0,34.4 1.1,36 2.5,36 L27.5,36 C28.9,36 30,34.4 30,33 L30,26.1114493 L27.5,28.4926435 L27.5,33 Z M7.5,7.5 L10,7.5 C10,7.5 12.5,6.4 12.5,5 C12.5,3.6 13.6,2.5 15,2.5 C16.4,2.5 17.5,3.6 17.5,5 C17.5,6.4 18.8,7.5 20,7.5 L22.5,7.5 C22.5,7.5 25,8.6 25,10 L5,10 C5,8.5 6.1,7.5 7.5,7.5 Z M5,27.5 L10,27.5 L10,25 L5,25 L5,27.5 Z M28.5589286,16 L32,19.6 L21.0160714,30.5382252 L13.5303571,24.2571429 L17.1303571,20.6571429 L21.0160714,24.5428571 L28.5589286,16 Z M17.5,15 L5,15 L5,17.5 L17.5,17.5 L17.5,15 Z M10,20 L5,20 L5,22.5 L10,22.5 L10,20 Z`})})):(0,I.jsx)(`svg`,X({viewBox:`0 0 32 36`},y,{children:(0,I.jsx)(`path`,{d:`M27.5,33 L2.5,33 L2.5,12.5 L27.5,12.5 L27.5,20 L30,20 L30,7.5 C30,6.1 28.9,5 27.5,5 L20,5 C20,2.2 17.8,0 15,0 C12.2,0 10,2.2 10,5 L2.5,5 C1.1,5 0,6.1 0,7.5 L0,33 C0,34.4 1.1,36 2.5,36 L27.5,36 C28.9,36 30,34.4 30,33 L30,29 L27.5,29 L27.5,33 Z M7.5,7.5 L10,7.5 C10,7.5 12.5,6.4 12.5,5 C12.5,3.6 13.6,2.5 15,2.5 C16.4,2.5 17.5,3.6 17.5,5 C17.5,6.4 18.8,7.5 20,7.5 L22.5,7.5 C22.5,7.5 25,8.6 25,10 L5,10 C5,8.5 6.1,7.5 7.5,7.5 Z M5,27.5 L10,27.5 L10,25 L5,25 L5,27.5 Z M22.5,21.5 L22.5,16.5 L12.5,24 L22.5,31.5 L22.5,26.5 L32,26.5 L32,21.5 L22.5,21.5 Z M17.5,15 L5,15 L5,17.5 L17.5,17.5 L17.5,15 Z M10,20 L5,20 L5,22.5 L10,22.5 L10,20 Z`})})))};ZP.displayName=`JVR.Copied`;function QP(){var e=(0,F.useRef)(null);return e.current===null&&(e.current=`custom-id-`+Math.random().toString(36).substr(2,9)),e.current}var $P=e=>{var{keyName:t,value:n,expandKey:r=``,level:i,keys:a=[],parentValue:o}=e,s=sN(),{objectSortKeys:c,indentWidth:l,collapsed:u,shouldExpandNodeInitially:d}=HN(),f=typeof u==`boolean`?u:typeof u==`number`?i>u:!1,p=s[r]??(d?!1:f),m=d&&d(!p,{value:n,keys:a,level:i,keyName:t,parentValue:o});if(d&&u===!1){if(s[r]===void 0&&!m)return null}else if(s[r]===void 0&&m)return null;if(p)return null;var h=Array.isArray(n)?Object.entries(n).map(e=>[Number(e[0]),e[1]]):Object.entries(n);return c&&(h=c===!0?h.sort((e,t)=>{var[n]=e,[r]=t;return typeof n==`string`&&typeof r==`string`?n.localeCompare(r):0}):h.sort((e,t)=>{var[n,r]=e,[i,a]=t;return typeof n==`string`&&typeof i==`string`?c(n,i,r,a):0})),(0,I.jsx)(`div`,{className:`w-rjv-wrap`,style:{borderLeft:`var(--w-rjv-border-left-width, 1px) var(--w-rjv-line-style, solid) var(--w-rjv-line-color, #ebebeb)`,paddingLeft:l,marginLeft:6},children:h.map((e,t)=>{var[r,o]=e;return(0,I.jsx)(tF,{parentValue:n,keyName:r,keys:[...a,r],value:o,level:i},t)})})};$P.displayName=`JVR.KeyValues`;var eF=e=>{var{keyName:t,parentValue:n,keys:r,value:i}=e,{highlightUpdates:a}=HN(),o=typeof t==`number`,s=(0,F.useRef)(null);JP({value:i,highlightUpdates:a,highlightContainer:s});var c={keyName:t,value:i,keys:r,parentValue:n};return(0,I.jsxs)(F.Fragment,{children:[(0,I.jsxs)(`span`,{ref:s,children:[(0,I.jsx)(eP,X({isNumber:o,"data-placement":`left`},c)),(0,I.jsx)(HP,X({},c,{children:t})),(0,I.jsx)(eP,X({isNumber:o,"data-placement":`right`},c))]}),(0,I.jsx)(nP,X({},c))]})};eF.displayName=`JVR.KayName`;var tF=e=>{var{keyName:t,value:n,parentValue:r,level:i=0,keys:a=[]}=e,o=nN(),s=QP(),c=Array.isArray(n),l=n instanceof Set,u=n instanceof Map,d=n instanceof Date,f=n instanceof URL;return n&&typeof n==`object`&&!c&&!l&&!u&&!d&&!f||c||l||u?(0,I.jsx)(hF,{keyName:t,value:l?Array.from(n):u?Object.fromEntries(n):n,parentValue:r,initialValue:n,keys:a,level:i+1}):(0,I.jsxs)(KP,X({className:`w-rjv-line`,value:n,keyName:t,keys:a,parentValue:r},{onMouseEnter:()=>o({[s]:!0}),onMouseLeave:()=>o({[s]:!1})},{children:[(0,I.jsx)(eF,{keyName:t,value:n,keys:a,parentValue:r}),(0,I.jsx)(IP,{keyName:t,value:n,keys:a}),(0,I.jsx)(ZP,{keyName:t,value:n,keys:a,parentValue:r,expandKey:s})]}))};tF.displayName=`JVR.KeyValuesItem`;var nF=[`value`,`keyName`],rF=[`as`,`render`],iF=e=>{var{CountInfoExtra:t={}}=NN();return zP(t,e,`CountInfoExtra`),null};iF.displayName=`JVR.CountInfoExtra`;var aF=e=>{var{value:t={},keyName:n}=e,r=YM(e,nF),{CountInfoExtra:i={}}=NN(),{as:a,render:o}=i,s=YM(i,rF);if(!o&&!s.children)return null;var c=a||`span`,l=o&&typeof o==`function`,u=X({},s,r);return l&&o(u,{value:t,keyName:n})||(0,I.jsx)(c,X({},u))};aF.displayName=`JVR.CountInfoExtraComps`;var oF=[`value`,`keyName`],sF=[`as`,`render`],cF=e=>{var{CountInfo:t={}}=NN();return zP(t,e,`CountInfo`),null};cF.displayName=`JVR.CountInfo`;var lF=e=>{var{value:t={},keyName:n}=e,r=YM(e,oF),{displayObjectSize:i}=HN(),{CountInfo:a={}}=NN();if(!i)return null;var{as:o,render:s}=a,c=YM(a,sF),l=o||`span`;c.style=X({},c.style,e.style);var u=Object.keys(t).length;c.children||=u+` item`+(u===1?``:`s`);var d=X({},c,r);return s&&typeof s==`function`&&s(X({},d,{"data-length":u}),{value:t,keyName:n})||(0,I.jsx)(l,X({},d))};lF.displayName=`JVR.CountInfoComp`;var uF=[`as`,`render`],dF=e=>{var{Ellipsis:t={}}=NN();return zP(t,e,`Ellipsis`),null};dF.displayName=`JVR.Ellipsis`;var fF=e=>{var{isExpanded:t,value:n,keyName:r}=e,{Ellipsis:i={}}=NN(),{as:a,render:o}=i,s=YM(i,uF),c=a||`span`;return o&&typeof o==`function`&&o(X({},s,{"data-expanded":t}),{value:n,keyName:r})||(!t||typeof n==`object`&&Object.keys(n).length==0?null:(0,I.jsx)(c,X({},s)))};fF.displayName=`JVR.EllipsisComp`;var pF=e=>{var{keyName:t,expandKey:n,keys:r=[],initialValue:i,value:a,parentValue:o,level:s}=e,c=sN(),l=uN(),{onExpand:u,collapsed:d,shouldExpandNodeInitially:f}=HN(),p=typeof d==`boolean`?d:typeof d==`number`?s>d:!1,m=c[n]??(f?!1:p),h=f&&f(!m,{value:a,keys:r,level:s,keyName:t,parentValue:o});c[n]===void 0&&f&&(m=!h);var g=()=>{var e={expand:!m,value:a,keyid:n,keyName:t};u&&u(e),l({[n]:e.expand})},_={display:`inline-flex`,alignItems:`center`},v={transform:`rotate(`+(m?`-90`:`0`)+`deg)`,transition:`all 0.3s`},y=Object.keys(a).length,b=typeof a==`object`,x=Array.isArray(a),S=a instanceof Set,C=y!==0&&(x||S||b),w={style:_};C&&(w.onClick=g);var T={keyName:t,value:a,keys:r,parentValue:o};return(0,I.jsxs)(`span`,X({},w,{children:[C&&(0,I.jsx)(rP,X({style:v,expandKey:n},T)),(t||typeof t==`number`)&&(0,I.jsx)(eF,X({},T)),(0,I.jsx)(xP,{value:i,keyName:t}),(0,I.jsx)(SP,{value:i,keyName:t}),(0,I.jsx)(iP,X({isBrackets:x||S},T)),(0,I.jsx)(fF,{keyName:t,value:a,isExpanded:m}),(0,I.jsx)(aP,X({isVisiable:m||!C,isBrackets:x||S},T)),(0,I.jsx)(lF,{value:a,keyName:t}),(0,I.jsx)(aF,{value:a,keyName:t}),(0,I.jsx)(ZP,{keyName:t,value:a,expandKey:n,parentValue:o,keys:r})]}))};pF.displayName=`JVR.NestedOpen`;var mF=[`className`,`children`,`parentValue`,`keyid`,`level`,`value`,`initialValue`,`keys`,`keyName`],hF=(0,F.forwardRef)((e,t)=>{var{className:n=``,parentValue:r,level:i=1,value:a,initialValue:o,keys:s,keyName:c}=e,l=YM(e,mF),u=nN(),d=QP();return(0,I.jsxs)(`div`,X({className:[n,`w-rjv-inner`].filter(Boolean).join(` `),ref:t},l,{onMouseEnter:()=>u({[d]:!0}),onMouseLeave:()=>u({[d]:!1})},{children:[(0,I.jsx)(pF,{expandKey:d,value:a,level:i,keys:s,parentValue:r,keyName:c,initialValue:o}),(0,I.jsx)($P,{expandKey:d,value:a,level:i,keys:s,parentValue:r,keyName:c}),(0,I.jsx)(oP,{expandKey:d,value:a,level:i,keys:s,parentValue:r,keyName:c})]}))});hF.displayName=`JVR.Container`;var gF=e=>{var{BraceLeft:t={}}=TN();return LP(t,e,`BraceLeft`),null};gF.displayName=`JVR.BraceLeft`;var _F=e=>{var{BraceRight:t={}}=TN();return LP(t,e,`BraceRight`),null};_F.displayName=`JVR.BraceRight`;var vF=e=>{var{BracketsLeft:t={}}=TN();return LP(t,e,`BracketsLeft`),null};vF.displayName=`JVR.BracketsLeft`;var yF=e=>{var{BracketsRight:t={}}=TN();return LP(t,e,`BracketsRight`),null};yF.displayName=`JVR.BracketsRight`;var bF=e=>{var{Arrow:t={}}=TN();return LP(t,e,`Arrow`),null};bF.displayName=`JVR.Arrow`;var xF=e=>{var{Colon:t={}}=TN();return LP(t,e,`Colon`),null};xF.displayName=`JVR.Colon`;var SF=e=>{var{Quote:t={}}=TN();return LP(t,e,`Quote`),null};SF.displayName=`JVR.Quote`;var CF=e=>{var{ValueQuote:t={}}=TN();return LP(t,e,`ValueQuote`),null};CF.displayName=`JVR.ValueQuote`;var wF=e=>{var{Bigint:t={}}=hN();return RP(t,e,`Bigint`),null};wF.displayName=`JVR.Bigint`;var TF=e=>{var{Date:t={}}=hN();return RP(t,e,`Date`),null};TF.displayName=`JVR.Date`;var EF=e=>{var{False:t={}}=hN();return RP(t,e,`False`),null};EF.displayName=`JVR.False`;var DF=e=>{var{Float:t={}}=hN();return RP(t,e,`Float`),null};DF.displayName=`JVR.Float`;var OF=e=>{var{Int:t={}}=hN();return RP(t,e,`Int`),null};OF.displayName=`JVR.Int`;var kF=e=>{var{Map:t={}}=hN();return RP(t,e,`Map`),null};kF.displayName=`JVR.Map`;var AF=e=>{var{Nan:t={}}=hN();return RP(t,e,`Nan`),null};AF.displayName=`JVR.Nan`;var jF=e=>{var{Null:t={}}=hN();return RP(t,e,`Null`),null};jF.displayName=`JVR.Null`;var MF=e=>{var{Set:t={}}=hN();return RP(t,e,`Set`),null};MF.displayName=`JVR.Set`;var NF=e=>{var{Str:t={}}=hN();return RP(t,e,`Str`),null};NF.displayName=`JVR.StringText`;var PF=e=>{var{True:t={}}=hN();return RP(t,e,`True`),null};PF.displayName=`JVR.True`;var FF=e=>{var{Undefined:t={}}=hN();return RP(t,e,`Undefined`),null};FF.displayName=`JVR.Undefined`;var IF=e=>{var{Url:t={}}=hN();return RP(t,e,`Url`),null};IF.displayName=`JVR.Url`;var LF=e=>{var{Copied:t={}}=NN();return zP(t,e,`Copied`),null};LF.displayName=`JVR.Copied`;var RF=[`className`,`style`,`value`,`children`,`collapsed`,`shouldExpandNodeInitially`,`indentWidth`,`displayObjectSize`,`shortenTextAfterLength`,`stringEllipsis`,`highlightUpdates`,`enableClipboard`,`displayDataTypes`,`objectSortKeys`,`onExpand`,`onCopied`,`beforeCopy`],zF=(0,F.forwardRef)((e,t)=>{var{className:n=``,style:r,value:i,children:a,collapsed:o=!1,shouldExpandNodeInitially:s,indentWidth:c=15,displayObjectSize:l=!0,shortenTextAfterLength:u=30,stringEllipsis:d,highlightUpdates:f=!0,enableClipboard:p=!0,displayDataTypes:m=!0,objectSortKeys:h=!1,onExpand:g,onCopied:_,beforeCopy:v}=e,y=YM(e,RF),b=X({lineHeight:1.4,fontFamily:`var(--w-rjv-font-family, Menlo, monospace)`,color:`var(--w-rjv-color, #002b36)`,backgroundColor:`var(--w-rjv-background-color, #00000000)`,fontSize:13},r),x=[`w-json-view-container`,`w-rjv`,n].filter(Boolean).join(` `);return(0,I.jsxs)(UN,{initialState:{value:i,objectSortKeys:h,indentWidth:c,shouldExpandNodeInitially:o===!1?s:void 0,displayObjectSize:l,collapsed:o,enableClipboard:p,shortenTextAfterLength:u,stringEllipsis:d,highlightUpdates:f,onCopied:_,onExpand:g,beforeCopy:v},initialTypes:{displayDataTypes:m},children:[(0,I.jsx)(hF,X({value:i},y,{ref:t,className:x,style:b})),a]})});zF.Bigint=wF,zF.Date=TF,zF.False=EF,zF.Float=DF,zF.Int=OF,zF.Map=kF,zF.Nan=AF,zF.Null=jF,zF.Set=MF,zF.String=NF,zF.True=PF,zF.Undefined=FF,zF.Url=IF,zF.ValueQuote=CF,zF.Arrow=bF,zF.Colon=xF,zF.Quote=SF,zF.Ellipsis=dF,zF.BraceLeft=gF,zF.BraceRight=_F,zF.BracketsLeft=vF,zF.BracketsRight=yF,zF.Copied=LF,zF.CountInfo=cF,zF.CountInfoExtra=iF,zF.KeyName=VP,zF.Row=GP,zF.displayName=`JVR.JsonView`;var BF=zF;function VF(e){return JSON.stringify(e,null,2)}const HF={"--w-rjv-font-family":`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace`,"--w-rjv-background-color":`transparent`,"--w-rjv-color":`var(--foreground)`,"--w-rjv-border-left":`1px dashed var(--border)`,"--w-rjv-line-color":`var(--border)`,"--w-rjv-arrow-color":`var(--muted-foreground)`,"--w-rjv-info-color":`var(--muted-foreground)`,"--w-rjv-curlybraces-color":`var(--foreground)`,"--w-rjv-brackets-color":`var(--foreground)`,"--w-rjv-colon-color":`var(--muted-foreground)`,"--w-rjv-key-string":`var(--foreground)`,"--w-rjv-type-string-color":`oklch(0.52 0.16 250)`,"--w-rjv-type-int-color":`oklch(0.56 0.16 145)`,"--w-rjv-type-float-color":`oklch(0.56 0.16 145)`,"--w-rjv-type-boolean-color":`oklch(0.58 0.19 30)`,"--w-rjv-type-null-color":`var(--muted-foreground)`,"--w-rjv-type-undefined-color":`var(--muted-foreground)`,"--w-rjv-type-date-color":`oklch(0.56 0.16 145)`,"--w-rjv-type-url-color":`oklch(0.52 0.16 250)`};function UF(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}function WF(e){return e.capture.bodyPolicy===`off`?`Body 记录策略为 off,未记录请求/响应 body。`:e.capture.bodyPolicy===`full`?`Body 记录策略为 full,当前展示的是完整内容。`:e.capture.bodyPolicy===`masked`?`当前配置中的 bodyPolicy=masked 会按完整内容展示。`:null}function GF(e){return e.startsWith(`openai`)?`openai`:e.startsWith(`anthropic`)?`anthropic`:e}function KF(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}function qF(e){return e==null?null:typeof e==`string`?e:JSON.stringify(e,null,2)}function JF(e){if(!e)return!1;let t=e.toLowerCase();return t.includes(`application/json`)||t.includes(`+json`)}function YF(e){let t=e.trim();return t?/^(?:\{|\[|"|-?\d|true$|false$|null$)/.test(t):!1}function XF(e,t){if(e==null)return{kind:`empty`};if(typeof e==`string`){let n=e.trim();if(!n)return{kind:`text`,text:e};if(JF(t)||YF(n))try{let e=JSON.parse(n);return typeof e==`object`&&e?{kind:`json-tree`,value:e}:{kind:`json-primitive`,value:e}}catch{return{kind:`text`,text:e}}return{kind:`text`,text:e}}return typeof e==`object`?{kind:`json-tree`,value:e}:{kind:`json-primitive`,value:e}}function ZF(e,t){return Object.entries(e).filter(([e])=>{let n=e.toLowerCase();return!(n===`content-length`||n===`host`||t===`provider`&&(n===`authorization`||n===`x-api-key`))}).sort(([e],[t])=>e.localeCompare(t))}function QF(e){return e.startsWith(`anthropic`)?[`x-api-key`,`<PROVIDER_API_KEY>`]:[`Authorization`,`Bearer <PROVIDER_API_KEY>`]}function $F(e){let t=e.request.requestBody;return!t||typeof t!=`object`||Array.isArray(t)?t:{...t,model:e.summary.modelIn}}function eI(e,t){let n=t===`provider`?e.upstream.targetUrl:new URL(e.request.path,window.location.origin).toString(),r=qF(t===`provider`?e.request.requestBody:$F(e)),i=ZF(e.request.requestHeaders??{},t),a=t===`provider`?QF(e.summary.routeType):null,o=[`curl`,` -X ${e.request.method}`,` ${KF(n)}`];return i.forEach(([e,t])=>{o.push(` -H ${KF(`${e}: ${t}`)}`)}),t===`provider`&&a&&(o.push(` -H ${KF(`${a[0]}: ${a[1]}`)}`),o.push(` -H ${KF(`accept-encoding: identity`)}`)),r!==null&&o.push(` --data-raw ${KF(r)}`),`${o.join(` \\
|
|
178
|
-
`)}`}function
|
|
179
|
-
`),n=[];return t.forEach((e,t)=>{let r=e.trim();if(!r)return;let i=t+1;if(r.startsWith(`data:`)){let e=r.slice(5).trim();if(!e)return;try{n.push({type:`json`,lineNo:i,value:JSON.parse(e)})}catch{n.push({type:`raw`,lineNo:i,value:r})}return}try{n.push({type:`json`,lineNo:i,value:JSON.parse(r)})}catch{n.push({type:`raw`,lineNo:i,value:r})}}),n}function nI({value:e,contentType:t,emptyText:n,className:r,noScroll:i=!1}){let a=(0,F.useMemo)(()=>XF(e,t),[t,e]);if(a.kind===`empty`)return(0,I.jsx)(`div`,{className:K(`rounded-md border bg-muted/30 p-3 text-xs text-muted-foreground`,r),children:n??`-`});if(a.kind===`json-tree`)return(0,I.jsx)(`div`,{className:K(i?`rounded-md border bg-muted/20 p-3 text-xs`:`max-h-[320px] overflow-auto rounded-md border bg-muted/20 p-3 text-xs`,r),children:(0,I.jsx)(BF,{value:a.value,displayDataTypes:!1,displayObjectSize:!1,enableClipboard:!0,shortenTextAfterLength:0,shouldExpandNodeInitially:(e,{level:t})=>t<2,style:HF})});let o=a.kind===`json-primitive`?VF(a.value):a.text??VF(e);return(0,I.jsx)(`pre`,{className:K(i?`rounded-md border bg-muted/30 p-3 text-xs whitespace-pre-wrap break-all`:`max-h-[320px] overflow-auto rounded-md border bg-muted/30 p-3 text-xs whitespace-pre-wrap break-all`,r),children:o})}function rI({title:e,value:t,contentType:n,emptyText:r}){let i=(0,F.useMemo)(()=>t==null?``:typeof t==`string`?t:JSON.stringify(t,null,2)??String(t),[t]);return(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-xs text-muted-foreground`,children:[(0,I.jsx)(`span`,{children:e}),(0,I.jsx)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,disabled:!i,onClick:async()=>{i&&(await navigator.clipboard.writeText(i),L.success(`已复制 ${e}`))},"aria-label":`复制 ${e}`,title:`复制 ${e}`,children:(0,I.jsx)(aa,{className:`h-3 w-3`})})]}),(0,I.jsx)(nI,{value:t,contentType:n,emptyText:r})]})}function iI({label:e,value:t,mono:n=!1}){return(0,I.jsxs)(`div`,{className:`rounded-md border bg-muted/20 px-3 py-2`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-xs text-muted-foreground`,children:[(0,I.jsx)(`span`,{children:e}),(0,I.jsx)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,onClick:async()=>{await navigator.clipboard.writeText(t),L.success(`已复制 ${e}`)},"aria-label":`复制 ${e}`,title:`复制 ${e}`,children:(0,I.jsx)(aa,{className:`h-3 w-3`})})]}),(0,I.jsx)(`div`,{className:`mt-1 break-all ${n?`font-mono text-xs`:`text-sm`}`,children:t})]})}function aI({detail:e}){let t=e.plugins;return!t||!t.request?.length&&!t.response?.length?null:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`插件管线`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`请求/响应经过的插件处理链路(洋葱模型)`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[t.request&&t.request.length>0?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`请求阶段(正序)`}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:`用户请求`}),t.request.map((e,t)=>(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`→`}),(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs`,children:e.name})]},`req-${e.name}-${t}`)),(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`→`}),(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:`Provider 请求`})]})]}):null,t.response&&t.response.length>0?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`响应阶段(逆序)`}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:`Provider 响应`}),[...t.response].reverse().map((e,t)=>(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`→`}),(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs`,children:e.name})]},`res-${e.name}-${t}`)),(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`→`}),(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:`用户响应`})]})]}):null]})]}),(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`插件详情`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`各插件的包名与参数配置`})]}),(0,I.jsx)(`div`,{className:`space-y-3 px-3 py-3`,children:(t.request??t.response??[]).map((e,t)=>(0,I.jsxs)(`div`,{className:`rounded-md border bg-muted/20 p-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs`,children:e.name}),(0,I.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:e.package})]}),Object.keys(e.params).length>0?(0,I.jsxs)(`div`,{className:`mt-2`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`params`}),(0,I.jsx)(`pre`,{className:`mt-1 rounded-md border bg-muted/30 p-2 text-xs`,children:JSON.stringify(e.params,null,2)})]}):null]},`detail-${e.name}-${t}`))})]}),t.requestUrlAfterPlugins?(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`插件修改记录`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`插件对请求/响应的修改`})]}),(0,I.jsx)(`div`,{className:`space-y-3 px-3 py-3`,children:(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`插件处理后 URL`}),(0,I.jsx)(`div`,{className:`rounded-md border bg-muted/30 p-2 font-mono text-xs break-all`,children:t.requestUrlAfterPlugins})]})})]}):null]})}function oI({step:e,title:t,description:n}){return(0,I.jsxs)(`div`,{className:`flex items-start gap-3 border-b px-3 py-3`,children:[(0,I.jsx)(`div`,{className:`flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary text-xs font-bold text-primary-foreground`,children:e}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:t}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:n})]})]})}function sI({title:e,headers:t,emptyText:n}){let r=(0,F.useMemo)(()=>t?Object.entries(t).sort(([e],[t])=>e.localeCompare(t)):[],[t]);return(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e}),r.length===0?(0,I.jsx)(`div`,{className:`rounded-md border bg-muted/30 p-3 text-xs text-muted-foreground`,children:n??`-`}):(0,I.jsx)(`div`,{className:`overflow-hidden rounded-md border bg-muted/10`,children:(0,I.jsx)(PM,{className:`text-xs`,children:(0,I.jsx)(IM,{children:r.map(([e,t])=>(0,I.jsxs)(RM,{className:`hover:bg-transparent`,children:[(0,I.jsx)(BM,{className:`w-[240px] max-w-[240px] align-top font-mono text-[11px] text-muted-foreground whitespace-normal break-all`,children:e}),(0,I.jsx)(BM,{className:`align-top font-mono whitespace-normal break-all`,children:t}),(0,I.jsx)(BM,{className:`w-10 align-top text-right`,children:(0,I.jsx)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,onClick:async()=>{await navigator.clipboard.writeText(`${e}: ${t}`),L.success(`已复制 ${e}`)},"aria-label":`复制 ${e}`,title:`复制 ${e}`,children:(0,I.jsx)(aa,{className:`h-3 w-3`})})})]},e))})})})]})}function cI({detail:e}){let t=e.plugins,n=!!(t&&(t.request?.length||t.response?.length)),[r,i]=(0,F.useState)(1),a=$F(e),o=t?.requestBodyAfterPlugins??e.request.requestBody,s=t?.requestUrlAfterPlugins??e.upstream.targetUrl,c=t?.responseBodyBeforePlugins??e.response.responseBody,l=e.response.responseBody,u=[{key:`user-request`,step:1,title:`用户请求`,shortTitle:`用户请求`,description:`用户发送给 local-router 的原始请求(插件处理前)`,tag:`request`,connector:n?`插件: ${t?.request?.map(e=>e.name).join(` → `)??`-`}`:void 0},{key:`provider-request`,step:2,title:`发送给 Provider 的请求`,shortTitle:`Provider 请求`,description:`local-router 插件处理后最终发给 ${e.summary.provider} 的请求`,tag:`request`,connector:`${e.summary.provider} 处理`},{key:`provider-response`,step:3,title:`Provider 响应`,shortTitle:`Provider 响应`,description:`${e.summary.provider} 返回给 local-router 的原始响应(插件处理前)`,tag:`response`,connector:n?`插件: ${t?.response?[...t.response].reverse().map(e=>e.name).join(` → `):`-`}`:void 0},{key:`final-response`,step:4,title:`最终响应`,shortTitle:`最终响应`,description:`local-router 插件处理后最终返回给用户的响应`,tag:`response`}];return(0,I.jsxs)(`div`,{className:`space-y-3 md:space-y-0`,children:[(0,I.jsx)(`div`,{className:`flex gap-1 md:hidden`,children:u.map(e=>(0,I.jsxs)(`button`,{type:`button`,onClick:()=>i(e.step),className:K(`flex-1 rounded-md border px-2 py-1.5 text-center text-xs transition-colors`,r===e.step?`border-primary bg-primary/10 font-medium text-foreground`:`text-muted-foreground hover:bg-muted/50`),children:[(0,I.jsx)(`div`,{className:`font-medium`,children:e.step}),(0,I.jsx)(`div`,{className:`mt-0.5 truncate text-[10px]`,children:e.shortTitle})]},e.key))}),(0,I.jsxs)(`div`,{className:`flex gap-5`,children:[(0,I.jsx)(`div`,{className:`hidden w-44 shrink-0 md:block`,children:(0,I.jsx)(`div`,{className:`sticky top-4 rounded-lg border bg-background px-2 py-3`,children:(0,I.jsx)(`div`,{className:`relative flex flex-col`,children:u.map((e,t)=>(0,I.jsxs)(`div`,{className:`flex flex-col`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:()=>i(e.step),className:K(`group relative flex items-start gap-3 rounded-lg px-2.5 py-2.5 text-left transition-all`,r===e.step?`bg-primary/8 shadow-sm ring-1 ring-primary/20`:`hover:bg-muted/60`),children:[(0,I.jsx)(`div`,{className:K(`relative z-10 mt-0.5 flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-bold transition-all`,r===e.step?`bg-primary text-primary-foreground shadow-md shadow-primary/25`:`border-2 bg-background text-muted-foreground group-hover:border-primary/40 group-hover:text-foreground`),children:e.step}),(0,I.jsxs)(`div`,{className:`min-w-0 pt-0.5`,children:[(0,I.jsx)(`div`,{className:K(`text-sm font-medium leading-tight transition-colors`,r===e.step?`text-foreground`:`text-muted-foreground group-hover:text-foreground`),children:e.shortTitle}),(0,I.jsx)(`div`,{className:K(`mt-1 inline-flex rounded-full px-1.5 py-0.5 text-[10px] font-medium leading-none`,e.tag===`request`?`bg-blue-500/10 text-blue-600 dark:text-blue-400`:`bg-green-500/10 text-green-600 dark:text-green-400`),children:e.tag===`request`?`REQUEST`:`RESPONSE`})]})]}),t<u.length-1?(0,I.jsxs)(`div`,{className:`flex items-stretch gap-3 px-2.5`,children:[(0,I.jsx)(`div`,{className:`flex w-7 justify-center`,children:(0,I.jsx)(`div`,{className:K(`w-px`,r===e.step||r===u[t+1].step?`bg-primary/40`:`bg-border`),style:{minHeight:`40px`}})}),(0,I.jsx)(`div`,{className:`flex items-center py-2`,children:e.connector?(0,I.jsx)(`div`,{className:`rounded-md border bg-muted/40 px-2 py-1 text-[10px] leading-snug text-muted-foreground`,children:e.connector}):(0,I.jsx)(`div`,{className:`h-px`})})]}):null]},e.key))})})}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[r===1?(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(oI,{step:1,title:`用户请求`,description:`用户发送给 local-router 的原始请求(插件处理前)`}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-2 text-sm sm:grid-cols-3`,children:[(0,I.jsx)(iI,{label:`method`,value:e.request.method}),(0,I.jsx)(iI,{label:`path`,value:e.request.path,mono:!0}),(0,I.jsx)(iI,{label:`content-type`,value:e.request.contentType??`-`,mono:!0})]}),(0,I.jsx)(sI,{title:`headers`,headers:e.request.requestHeaders}),(0,I.jsx)(rI,{title:`body`,value:a,contentType:e.request.contentType,emptyText:`无请求 body 或未采集。`})]})]}):null,r===2?(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(oI,{step:2,title:`发送给 Provider 的请求`,description:`local-router 插件处理后最终发给 ${e.summary.provider} 的请求`}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-2 text-sm sm:grid-cols-2`,children:[(0,I.jsx)(iI,{label:`target_url`,value:s,mono:!0}),(0,I.jsx)(iI,{label:`provider`,value:e.summary.provider})]}),(0,I.jsx)(rI,{title:`body`,value:o,contentType:e.request.contentType,emptyText:`无请求 body 或未采集。`}),n&&t?.requestBodyAfterPlugins!==void 0?(0,I.jsx)(`div`,{className:`rounded-md border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-xs text-muted-foreground`,children:`插件已修改请求 body,此处展示的是修改后的内容。`}):n?null:(0,I.jsx)(`div`,{className:`rounded-md border bg-muted/30 px-3 py-2 text-xs text-muted-foreground`,children:`无插件处理,请求内容与用户请求一致(model 已由路由改写)。`})]})]}):null,r===3?(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(oI,{step:3,title:`Provider 响应`,description:`${e.summary.provider} 返回给 local-router 的原始响应(插件处理前)`}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-2 text-sm sm:grid-cols-2`,children:[(0,I.jsx)(iI,{label:`upstream_status`,value:String(e.response.upstreamStatus)}),(0,I.jsx)(iI,{label:`content-type`,value:e.response.contentType??`-`,mono:!0})]}),(0,I.jsx)(sI,{title:`headers`,headers:e.response.responseHeaders}),(0,I.jsx)(rI,{title:`body`,value:c,contentType:e.response.contentType,emptyText:e.upstream.isStream?`流式响应,请在「会话 / 追踪」标签页查看 stream 内容。`:`无响应 body 或未采集。`})]})]}):null,r===4?(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(oI,{step:4,title:`最终响应`,description:`local-router 插件处理后最终返回给用户的响应`}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-2 text-sm sm:grid-cols-2`,children:[(0,I.jsx)(iI,{label:`status`,value:String(e.response.upstreamStatus)}),(0,I.jsx)(iI,{label:`content-type`,value:e.response.contentType??`-`,mono:!0})]}),(0,I.jsx)(rI,{title:`body`,value:l,contentType:e.response.contentType,emptyText:e.upstream.isStream?`流式响应,请在「会话 / 追踪」标签页查看 stream 内容。`:`无响应 body 或未采集。`}),n&&t?.responseBodyAfterPlugins!==void 0?(0,I.jsx)(`div`,{className:`rounded-md border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-xs text-muted-foreground`,children:`插件已修改响应 body,此处展示的是修改后的最终内容。`}):n?null:(0,I.jsx)(`div`,{className:`rounded-md border bg-muted/30 px-3 py-2 text-xs text-muted-foreground`,children:`无插件处理,响应内容与 Provider 响应一致。`})]})]}):null]})]})]})}function lI({label:e,value:t,mono:n=!1}){return(0,I.jsxs)(`div`,{className:`rounded-md border bg-background/90 px-2 py-1`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-1 text-[11px] leading-4 text-muted-foreground`,children:[(0,I.jsx)(`span`,{children:e}),(0,I.jsx)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,onClick:async()=>{await navigator.clipboard.writeText(t),L.success(`已复制 ${e}`)},"aria-label":`复制 ${e}`,title:`复制 ${e}`,children:(0,I.jsx)(aa,{className:`h-3 w-3`})})]}),(0,I.jsx)(`div`,{className:`mt-0.5 break-all text-xs ${n?`font-mono`:``}`,children:t})]})}function uI({interfaceType:e,routeType:t,modelIn:n,provider:r,modelOut:i,routeRuleKey:a}){return(0,I.jsx)(`div`,{className:`rounded-xl border bg-linear-to-br from-muted/20 to-muted/40 p-3`,children:(0,I.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-[1fr_auto_1fr] lg:items-center`,children:[(0,I.jsxs)(`div`,{className:`space-y-2 rounded-lg border bg-background/70 p-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium`,children:`入站请求`}),(0,I.jsx)(Y,{variant:`outline`,children:`IN`})]}),(0,I.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,I.jsx)(lI,{label:`接口类型`,value:e}),(0,I.jsx)(lI,{label:`routeType`,value:t,mono:!0})]}),(0,I.jsx)(lI,{label:`原始模型(model_in)`,value:n,mono:!0})]}),(0,I.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-1 py-1`,children:[(0,I.jsx)(`div`,{className:`hidden h-0.5 w-16 bg-border lg:block`}),(0,I.jsx)(`div`,{className:`rounded-full border bg-background px-3 py-1 text-xs text-muted-foreground`,children:`路由匹配并改写`}),(0,I.jsx)(`div`,{className:`text-xl leading-none text-muted-foreground`,children:`→`}),(0,I.jsx)(`div`,{className:`hidden h-0.5 w-16 bg-border lg:block`})]}),(0,I.jsxs)(`div`,{className:`space-y-2 rounded-lg border bg-background/70 p-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium`,children:`出站转发`}),(0,I.jsx)(Y,{variant:`outline`,children:`OUT`})]}),(0,I.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,I.jsx)(lI,{label:`目标 provider`,value:r}),(0,I.jsx)(lI,{label:`命中规则`,value:a,mono:!0})]}),(0,I.jsx)(lI,{label:`路由模型(model_out)`,value:i,mono:!0})]})]})})}function dI({title:e,content:t,emptyText:n}){let r=(0,F.useMemo)(()=>t?tI(t):[],[t]),i=(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e}),(0,I.jsxs)(q,{size:`sm`,variant:`outline`,disabled:!t,onClick:async()=>{t&&(await navigator.clipboard.writeText(t),L.success(`已复制 stream content`))},children:[(0,I.jsx)(aa,{className:`h-3.5 w-3.5`}),`复制`]})]});return!t||r.length===0?(0,I.jsxs)(`div`,{className:`space-y-1`,children:[i,(0,I.jsx)(`pre`,{className:`rounded-md border bg-muted/30 p-3 text-xs whitespace-pre-wrap break-all`,children:n??`-`})]}):(0,I.jsxs)(`div`,{className:`space-y-1`,children:[i,(0,I.jsx)(`div`,{className:`space-y-2 rounded-md border bg-muted/30 p-3`,children:r.map(e=>(0,I.jsxs)(`div`,{className:`space-y-1 rounded-md border bg-background/80 p-2`,children:[(0,I.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[`line `,e.lineNo]}),(0,I.jsx)(nI,{value:(e.type,e.value),className:`bg-muted/40`,noScroll:!0})]},`${e.lineNo}-${e.type}`))})]})}var fI=Ka(`relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current`,{variants:{variant:{default:`bg-card text-card-foreground`,destructive:`text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90`}},defaultVariants:{variant:`default`}});function pI({className:e,variant:t,...n}){return(0,I.jsx)(`div`,{"data-slot":`alert`,role:`alert`,className:K(fI({variant:t}),e),...n})}function mI({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`alert-title`,className:K(`col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight`,e),...t})}function hI({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`alert-description`,className:K(`text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed`,e),...t})}function gI({...e}){return(0,I.jsx)(Ro,{"data-slot":`collapsible`,...e})}function _I({...e}){return(0,I.jsx)(No,{"data-slot":`collapsible-trigger`,...e})}function vI({...e}){return(0,I.jsx)(Fo,{"data-slot":`collapsible-content`,...e})}function yI({className:e,orientation:t=`horizontal`,...n}){return(0,I.jsx)(Dy,{"data-slot":`tabs`,"data-orientation":t,orientation:t,className:K(`group/tabs flex gap-2 data-[orientation=horizontal]:flex-col`,e),...n})}var bI=Ka(`rounded-lg p-[3px] group-data-[orientation=horizontal]/tabs:h-9 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col`,{variants:{variant:{default:`bg-muted`,line:`gap-1 bg-transparent`}},defaultVariants:{variant:`default`}});function xI({className:e,variant:t=`default`,...n}){return(0,I.jsx)(Oy,{"data-slot":`tabs-list`,"data-variant":t,className:K(bI({variant:t}),e),...n})}function SI({className:e,...t}){return(0,I.jsx)(ky,{"data-slot":`tabs-trigger`,className:K(`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent`,`data-[state=active]:bg-background dark:data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 data-[state=active]:text-foreground`,`after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100`,e),...t})}function CI({className:e,...t}){return(0,I.jsx)(Ay,{"data-slot":`tabs-content`,className:K(`flex-1 outline-none`,e),...t})}function wI(e){return JSON.stringify(e,null,2)}function TI(e){return e===`assistant`?`border-sky-300/50 bg-sky-500/5`:e===`user`?`border-emerald-300/50 bg-emerald-500/5`:e===`system`?`border-violet-300/50 bg-violet-500/5`:`border-amber-300/50 bg-amber-500/5`}function EI({title:e,defaultOpen:t=!1,children:n}){let[r,i]=(0,F.useState)(t);return(0,I.jsx)(gI,{open:r,onOpenChange:i,children:(0,I.jsxs)(`div`,{className:`rounded-md border bg-muted/20`,children:[(0,I.jsx)(_I,{asChild:!0,children:(0,I.jsxs)(q,{variant:`ghost`,size:`sm`,className:`h-8 w-full justify-between rounded-b-none rounded-t-md px-2`,children:[(0,I.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e}),r?(0,I.jsx)(ea,{className:`h-3.5 w-3.5`}):(0,I.jsx)(ta,{className:`h-3.5 w-3.5`})]})}),(0,I.jsx)(vI,{children:(0,I.jsx)(`div`,{className:`px-2 pb-2`,children:n})})]})})}function DI({text:e,copyLabel:t,className:n}){return(0,I.jsxs)(`div`,{className:`relative`,children:[(0,I.jsxs)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,className:`absolute top-2 right-2 z-10`,onClick:async()=>{try{await navigator.clipboard.writeText(e),L.success(`已复制 ${t}`)}catch{L.error(`复制 ${t} 失败`)}},children:[(0,I.jsx)(aa,{className:`h-3.5 w-3.5`}),(0,I.jsxs)(`span`,{className:`sr-only`,children:[`复制 `,t]})]}),(0,I.jsx)(`pre`,{className:K(`overflow-auto rounded-md border bg-background p-2 pr-10 text-xs`,n),children:e})]})}function OI(e,t){return e.type===`text`?(0,I.jsx)(DI,{text:e.text||`(empty text)`,copyLabel:`text block`,className:`whitespace-pre-wrap`},t):e.type===`thinking`?(0,I.jsxs)(EI,{title:`thinking`,defaultOpen:!1,children:[(0,I.jsx)(DI,{text:e.thinking||`(empty thinking)`,copyLabel:`thinking block`,className:`whitespace-pre-wrap`}),e.signature?(0,I.jsx)(DI,{text:`signature: ${e.signature}`,copyLabel:`thinking signature`,className:`mt-2 whitespace-pre-wrap`}):null]},t):e.type===`image`?(0,I.jsxs)(EI,{title:`image`,defaultOpen:!1,children:[(0,I.jsxs)(`div`,{className:`space-y-1 text-xs`,children:[(0,I.jsxs)(`div`,{children:[`url: `,e.url??`-`]}),(0,I.jsxs)(`div`,{children:[`mime: `,e.mimeType??`-`]}),(0,I.jsxs)(`div`,{children:[`detail: `,e.detail??`-`]})]}),e.data?(0,I.jsx)(DI,{text:`${e.data.slice(0,1200)}${e.data.length>1200?`
|
|
180
|
-
... (truncated)`:``}`,copyLabel:`image data`,className:`mt-2 max-h-40`}):null]},t):e.type===`tool_use`?(0,I.jsxs)(
|
|
177
|
+
}`;function XM(){let e=vS(e=>e.config),t=GM(e=>e.healthy),n=GM(e=>e.meta),r=GM(e=>e.metrics),i=GM(e=>e.metricsLoading),a=GM(e=>e.metricsError),o=GM(e=>e.metricsWindow),s=GM(e=>e.logStorage),c=GM(e=>e.logStorageLoading),l=GM(e=>e.fetchHealth),u=GM(e=>e.fetchMeta),d=GM(e=>e.fetchMetrics),f=GM(e=>e.fetchLogStorage),p=GM(e=>e.setMetricsWindow);(0,F.useEffect)(()=>{l(),u(),d(),f()},[l,u,d,f]);let{providerCount:m,routeTypeCount:h,totalRules:g,avgRulesPerType:_,providersReferenced:v,providerUsageRows:y,routeTypeDistribution:b,logConfigured:x,logEnabled:S,bodyPolicy:C,streamsEnabled:w}=(0,F.useMemo)(()=>{let t=e?.providers??{},n=e?.routes??{},r=Object.keys(t).length,i=Object.entries(n),a=i.length,o=new Map(Object.keys(t).map(e=>[e,0])),s=i.map(([e,t])=>{let n=Object.keys(t??{}).length;return Object.values(t??{}).forEach(e=>{e?.provider&&o.set(e.provider,(o.get(e.provider)??0)+1)}),{type:e,count:n}}).sort((e,t)=>t.count-e.count),c=s.reduce((e,t)=>e+t.count,0),l=a?c/a:0,u=Array.from(o.entries()).map(([e,t])=>({provider:e,count:t,used:t>0})).sort((e,t)=>t.count-e.count||e.provider.localeCompare(t.provider));return{providerCount:r,routeTypeCount:a,totalRules:c,avgRulesPerType:l,providersReferenced:u.filter(e=>e.used).length,providerUsageRows:u,routeTypeDistribution:s.map(e=>({...e,ratio:c?e.count/c:0})),logConfigured:!!e?.log,logEnabled:!!e?.log&&e.log.enabled!==!1,bodyPolicy:e?.log?.bodyPolicy??`off`,streamsEnabled:e?.log?e.log.streams?.enabled!==!1:!1}},[e]),T=Object.keys(e?.routes??{}),E=n?.routeTypes??[],ee=new Set(E),D=T.filter(e=>ee.has(e)).length,O=n===null,k=t===null;function te(e){p(e),d(e,!0)}async function A(e,t){try{await navigator.clipboard.writeText(e),L.success(`已复制${t}`)}catch{L.error(`复制${t}失败`)}}return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`仪表盘`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`Local Router 服务状态与配置概览`})]}),(0,I.jsx)(FM,{isHealthLoading:k,healthy:t,isMetaLoading:O,providerCount:m,providersReferenced:v,totalRules:g,routeTypeCount:h,avgRulesPerType:_,logConfigured:x,logEnabled:S,bodyPolicy:C,streamsEnabled:w,logStorageLoading:c,logStorageTotalBytes:s?.totalBytes,logStorageFileCount:s?.fileCount}),(0,I.jsx)(bM,{endpointLines:KM,claudeEnvText:qM,codexEnvText:JM,opencodeConfigText:YM,onCopyText:A}),(0,I.jsx)(jM,{metricsLoading:i,metricsError:a,metrics:r,metricsWindow:o,onWindowChange:te}),(0,I.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-3`,children:[(0,I.jsx)(`div`,{className:`lg:col-span-2`,children:(0,I.jsx)(kM,{hasConfig:!!e,routeTypeDistribution:b})}),(0,I.jsx)(AM,{isMetaLoading:O,meta:n,metaRouteTypes:E,configuredInMetaCount:D})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-2`,children:[(0,I.jsx)(UM,{hasConfig:!!e,providerUsageRows:y}),(0,I.jsx)(WM,{hasConfig:!!e,routeTypeDistribution:b,totalRules:g})]})]})}function X(){return X=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},X.apply(null,arguments)}function ZM(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}var QM={},$M=(0,F.createContext)(QM),eN=(e,t)=>X({},e,t),tN=()=>(0,F.useContext)($M),nN=(0,F.createContext)(()=>{});nN.displayName=`JVR.DispatchShowTools`;function rN(){return(0,F.useReducer)(eN,QM)}function iN(){return(0,F.useContext)(nN)}var aN=e=>{var{initial:t,dispatch:n,children:r}=e;return(0,I.jsx)($M.Provider,{value:t,children:(0,I.jsx)(nN.Provider,{value:n,children:r})})};aN.displayName=`JVR.ShowTools`;var oN={},sN=(0,F.createContext)(oN),cN=(e,t)=>X({},e,t),lN=()=>(0,F.useContext)(sN),uN=(0,F.createContext)(()=>{});uN.displayName=`JVR.DispatchExpands`;function dN(){return(0,F.useReducer)(cN,oN)}function fN(){return(0,F.useContext)(uN)}var pN=e=>{var{initial:t,dispatch:n,children:r}=e;return(0,I.jsx)(sN.Provider,{value:t,children:(0,I.jsx)(uN.Provider,{value:n,children:r})})};pN.displayName=`JVR.Expands`;var mN={Str:{as:`span`,"data-type":`string`,style:{color:`var(--w-rjv-type-string-color, #cb4b16)`},className:`w-rjv-type`,children:`string`},Url:{as:`a`,style:{color:`var(--w-rjv-type-url-color, #0969da)`},"data-type":`url`,className:`w-rjv-type`,children:`url`},Undefined:{style:{color:`var(--w-rjv-type-undefined-color, #586e75)`},as:`span`,"data-type":`undefined`,className:`w-rjv-type`,children:`undefined`},Null:{style:{color:`var(--w-rjv-type-null-color, #d33682)`},as:`span`,"data-type":`null`,className:`w-rjv-type`,children:`null`},Map:{style:{color:`var(--w-rjv-type-map-color, #268bd2)`,marginRight:3},as:`span`,"data-type":`map`,className:`w-rjv-type`,children:`Map`},Nan:{style:{color:`var(--w-rjv-type-nan-color, #859900)`},as:`span`,"data-type":`nan`,className:`w-rjv-type`,children:`NaN`},Bigint:{style:{color:`var(--w-rjv-type-bigint-color, #268bd2)`},as:`span`,"data-type":`bigint`,className:`w-rjv-type`,children:`bigint`},Int:{style:{color:`var(--w-rjv-type-int-color, #268bd2)`},as:`span`,"data-type":`int`,className:`w-rjv-type`,children:`int`},Set:{style:{color:`var(--w-rjv-type-set-color, #268bd2)`,marginRight:3},as:`span`,"data-type":`set`,className:`w-rjv-type`,children:`Set`},Float:{style:{color:`var(--w-rjv-type-float-color, #859900)`},as:`span`,"data-type":`float`,className:`w-rjv-type`,children:`float`},True:{style:{color:`var(--w-rjv-type-boolean-color, #2aa198)`},as:`span`,"data-type":`bool`,className:`w-rjv-type`,children:`bool`},False:{style:{color:`var(--w-rjv-type-boolean-color, #2aa198)`},as:`span`,"data-type":`bool`,className:`w-rjv-type`,children:`bool`},Date:{style:{color:`var(--w-rjv-type-date-color, #268bd2)`},as:`span`,"data-type":`date`,className:`w-rjv-type`,children:`date`}},hN=(0,F.createContext)(mN),gN=(e,t)=>X({},e,t),_N=()=>(0,F.useContext)(hN),vN=(0,F.createContext)(()=>{});vN.displayName=`JVR.DispatchTypes`;function yN(){return(0,F.useReducer)(gN,mN)}function bN(){return(0,F.useContext)(vN)}function xN(e){var{initial:t,dispatch:n,children:r}=e;return(0,I.jsx)(hN.Provider,{value:t,children:(0,I.jsx)(vN.Provider,{value:n,children:r})})}xN.displayName=`JVR.Types`;var SN=[`style`];function CN(e){var{style:t}=e,n=ZM(e,SN);return(0,I.jsx)(`svg`,X({viewBox:`0 0 24 24`,fill:`var(--w-rjv-arrow-color, currentColor)`,style:X({cursor:`pointer`,height:`1em`,width:`1em`,userSelect:`none`,display:`inline-flex`},t)},n,{children:(0,I.jsx)(`path`,{d:`M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z`})}))}CN.displayName=`JVR.TriangleArrow`;var wN={Arrow:{as:`span`,className:`w-rjv-arrow`,style:{transform:`rotate(0deg)`,transition:`all 0.3s`},children:(0,I.jsx)(CN,{})},Colon:{as:`span`,style:{color:`var(--w-rjv-colon-color, var(--w-rjv-color))`,marginLeft:0,marginRight:2},className:`w-rjv-colon`,children:`:`},Quote:{as:`span`,style:{color:`var(--w-rjv-quotes-color, #236a7c)`},className:`w-rjv-quotes`,children:`"`},ValueQuote:{as:`span`,style:{color:`var(--w-rjv-quotes-string-color, #cb4b16)`},className:`w-rjv-quotes`,children:`"`},BracketsLeft:{as:`span`,style:{color:`var(--w-rjv-brackets-color, #236a7c)`},className:`w-rjv-brackets-start`,children:`[`},BracketsRight:{as:`span`,style:{color:`var(--w-rjv-brackets-color, #236a7c)`},className:`w-rjv-brackets-end`,children:`]`},BraceLeft:{as:`span`,style:{color:`var(--w-rjv-curlybraces-color, #236a7c)`},className:`w-rjv-curlybraces-start`,children:`{`},BraceRight:{as:`span`,style:{color:`var(--w-rjv-curlybraces-color, #236a7c)`},className:`w-rjv-curlybraces-end`,children:`}`}},TN=(0,F.createContext)(wN),EN=(e,t)=>X({},e,t),DN=()=>(0,F.useContext)(TN),ON=(0,F.createContext)(()=>{});ON.displayName=`JVR.DispatchSymbols`;function kN(){return(0,F.useReducer)(EN,wN)}function AN(){return(0,F.useContext)(ON)}var jN=e=>{var{initial:t,dispatch:n,children:r}=e;return(0,I.jsx)(TN.Provider,{value:t,children:(0,I.jsx)(ON.Provider,{value:n,children:r})})};jN.displayName=`JVR.Symbols`;var MN={Copied:{className:`w-rjv-copied`,style:{height:`1em`,width:`1em`,cursor:`pointer`,verticalAlign:`middle`,marginLeft:5}},CountInfo:{as:`span`,className:`w-rjv-object-size`,style:{color:`var(--w-rjv-info-color, #0000004d)`,paddingLeft:8,fontStyle:`italic`}},CountInfoExtra:{as:`span`,className:`w-rjv-object-extra`,style:{paddingLeft:8}},Ellipsis:{as:`span`,style:{cursor:`pointer`,color:`var(--w-rjv-ellipsis-color, #cb4b16)`,userSelect:`none`},className:`w-rjv-ellipsis`,children:`...`},Row:{as:`div`,className:`w-rjv-line`},KeyName:{as:`span`,className:`w-rjv-object-key`}},NN=(0,F.createContext)(MN),PN=(e,t)=>X({},e,t),FN=()=>(0,F.useContext)(NN),IN=(0,F.createContext)(()=>{});IN.displayName=`JVR.DispatchSection`;function LN(){return(0,F.useReducer)(PN,MN)}function RN(){return(0,F.useContext)(IN)}var zN=e=>{var{initial:t,dispatch:n,children:r}=e;return(0,I.jsx)(NN.Provider,{value:t,children:(0,I.jsx)(IN.Provider,{value:n,children:r})})};zN.displayName=`JVR.Section`;var BN={objectSortKeys:!1,indentWidth:15},VN=(0,F.createContext)(BN);VN.displayName=`JVR.Context`;var HN=(0,F.createContext)(()=>{});HN.displayName=`JVR.DispatchContext`;function UN(e,t){return X({},e,t)}var WN=()=>(0,F.useContext)(VN),GN=e=>{var{children:t,initialState:n,initialTypes:r}=e,[i,a]=(0,F.useReducer)(UN,Object.assign({},BN,n)),[o,s]=rN(),[c,l]=dN(),[u,d]=yN(),[f,p]=kN(),[m,h]=LN();return(0,F.useEffect)(()=>a(X({},n)),[n]),(0,I.jsx)(VN.Provider,{value:i,children:(0,I.jsx)(HN.Provider,{value:a,children:(0,I.jsx)(aN,{initial:o,dispatch:s,children:(0,I.jsx)(pN,{initial:c,dispatch:l,children:(0,I.jsx)(xN,{initial:X({},u,r),dispatch:d,children:(0,I.jsx)(jN,{initial:f,dispatch:p,children:(0,I.jsx)(zN,{initial:m,dispatch:h,children:t})})})})})})})};GN.displayName=`JVR.Provider`;function KN(e){if(e==null)throw TypeError(`Cannot destructure `+e)}var qN=[`isNumber`,`value`,`parentValue`,`keyName`,`keys`],JN=[`as`,`render`],YN=[`as`,`render`],XN=[`as`,`render`],ZN=[`as`,`style`,`render`],QN=[`as`,`render`],$N=[`as`,`render`],eP=[`as`,`render`],tP=[`as`,`render`],nP=e=>{var{Quote:t={}}=DN(),{isNumber:n,value:r,parentValue:i,keyName:a,keys:o}=e,s=ZM(e,qN);if(n)return null;var{as:c,render:l}=t,u=ZM(t,JN),d=c||`span`,f=X({},s,u);return typeof f.children==`string`&&(f.children=f.children.trim()||void 0),l&&typeof l==`function`&&l(f,{value:r,parentValue:i,keyName:a,keys:o||(a?[a]:[])})||(0,I.jsx)(d,X({},f))};nP.displayName=`JVR.Quote`;var rP=e=>{var{ValueQuote:t={}}=DN(),n=X({},(KN(e),e)),{as:r,render:i}=t,a=ZM(t,YN),o=r||`span`,s=X({},n,a);return i&&typeof i==`function`&&i(s,{})||(0,I.jsx)(o,X({},s))};rP.displayName=`JVR.ValueQuote`;var iP=e=>{var{value:t,parentValue:n,keyName:r,keys:i}=e,{Colon:a={}}=DN(),{as:o,render:s}=a,c=ZM(a,XN),l=o||`span`;return s&&typeof s==`function`&&s(c,{value:t,parentValue:n,keyName:r,keys:i||(r?[r]:[])})||(0,I.jsx)(l,X({},c))};iP.displayName=`JVR.Colon`;var aP=e=>{var{Arrow:t={}}=DN(),n=lN(),{expandKey:r,style:i,value:a,parentValue:o,keyName:s,keys:c}=e,l=!!n[r],{as:u,style:d,render:f}=t,p=ZM(t,ZN),m=u||`span`,h=f&&typeof f==`function`,g=X({},p,{"data-expanded":l,style:X({},d,i)});return h&&f(g,{value:a,parentValue:o,keyName:s,keys:c||(s?[s]:[])})||(0,I.jsx)(m,X({},p,{style:X({},d,i)}))};aP.displayName=`JVR.Arrow`;var oP=e=>{var{isBrackets:t,value:n,parentValue:r,keyName:i,keys:a}=e,{BracketsLeft:o={},BraceLeft:s={}}=DN(),c={value:n,parentValue:r,keyName:i,keys:a||(i?[i]:[])};if(t){var{as:l,render:u}=o,d=ZM(o,QN),f=l||`span`;return u&&typeof u==`function`&&u(d,c)||(0,I.jsx)(f,X({},d))}var{as:p,render:m}=s,h=ZM(s,$N),g=p||`span`;return m&&typeof m==`function`&&m(h,c)||(0,I.jsx)(g,X({},h))};oP.displayName=`JVR.BracketsOpen`;var sP=e=>{var{isBrackets:t,isVisiable:n,value:r,parentValue:i,keyName:a,keys:o}=e,s={value:r,parentValue:i,keyName:a,keys:o||(a?[a]:[])};if(!n)return null;var{BracketsRight:c={},BraceRight:l={}}=DN();if(t){var{as:u,render:d}=c,f=ZM(c,eP),p=u||`span`;return d&&typeof d==`function`&&d(f,s)||(0,I.jsx)(p,X({},f))}var{as:m,render:h}=l,g=ZM(l,tP),_=m||`span`;return h&&typeof h==`function`&&h(g,s)||(0,I.jsx)(_,X({},g))};sP.displayName=`JVR.BracketsClose`;var cP=e=>{var{keyName:t,value:n,expandKey:r,parentValue:i,level:a,keys:o=[]}=e,s=lN(),{collapsed:c,shouldExpandNodeInitially:l}=WN(),u=typeof c==`boolean`?c:typeof c==`number`?a>c:!1,d=s[r]??(l?!1:u),f=l&&l(!d,{value:n,keys:o,level:a,keyName:t,parentValue:i});if(l&&c===!1){if(s[r]===void 0&&!f)return null}else if(s[r]===void 0&&f)return null;var p=Object.keys(n).length;if(d||p===0)return null;var m={paddingLeft:4},h={keyName:t,value:n,keys:o,parentValue:i},g=Array.isArray(n),_=n instanceof Set;return(0,I.jsx)(`div`,{style:m,children:(0,I.jsx)(sP,X({isBrackets:g||_},h,{isVisiable:!0}))})};cP.displayName=`JVR.NestedClose`;var lP=[`as`,`render`],uP=[`as`,`render`],dP=[`as`,`render`],fP=[`as`,`render`],pP=[`as`,`render`],mP=[`as`,`render`],hP=[`as`,`render`],gP=[`as`,`render`],_P=[`as`,`render`],vP=[`as`,`render`],yP=[`as`,`render`],bP=[`as`,`render`],xP=[`as`,`render`],SP=e=>{if(e===void 0)return`0n`;if(typeof e==`string`)try{e=BigInt(e)}catch{return`0n`}return e?e.toString()+`n`:`0n`},CP=e=>{var{value:t,keyName:n}=e,{Set:r={},displayDataTypes:i}=_N();if(!(t instanceof Set)||!i)return null;var{as:a,render:o}=r,s=ZM(r,lP);return o&&typeof o==`function`&&o(s,{type:`type`,value:t,keyName:n})||(0,I.jsx)(a||`span`,X({},s))};CP.displayName=`JVR.SetComp`;var wP=e=>{var{value:t,keyName:n}=e,{Map:r={},displayDataTypes:i}=_N();if(!(t instanceof Map)||!i)return null;var{as:a,render:o}=r,s=ZM(r,uP);return o&&typeof o==`function`&&o(s,{type:`type`,value:t,keyName:n})||(0,I.jsx)(a||`span`,X({},s))};wP.displayName=`JVR.MapComp`;var TP={opacity:.75,paddingRight:4},EP=e=>{var{children:t=``,keyName:n,keys:r}=e,{Str:i={},displayDataTypes:a}=_N(),{shortenTextAfterLength:o=30,stringEllipsis:s=`...`}=WN(),{as:c,render:l}=i,u=ZM(i,dP),d=t,[f,p]=(0,F.useState)(o&&d.length>o);(0,F.useEffect)(()=>p(o&&d.length>o),[o]);var m=c||`span`,h=X({},TP,i.style||{});o>0&&(u.style=X({},u.style,{cursor:d.length<=o?`initial`:`pointer`}),d.length>o&&(u.onClick=()=>{p(!f)}));var g=f?``+d.slice(0,o)+s:d,_=l&&typeof l==`function`,v=_&&l(X({},u,{style:h}),{type:`type`,value:t,keyName:n,keys:r}),y=f?`w-rjv-value w-rjv-value-short`:`w-rjv-value`,b=_&&l(X({},u,{children:g,className:y}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(v||(0,I.jsx)(m,X({},u,{style:h}))),b||(0,I.jsxs)(F.Fragment,{children:[(0,I.jsx)(rP,{}),(0,I.jsx)(m,X({},u,{className:y,children:g})),(0,I.jsx)(rP,{})]})]})};EP.displayName=`JVR.TypeString`;var DP=e=>{var{children:t,keyName:n,keys:r}=e,{True:i={},displayDataTypes:a}=_N(),{as:o,render:s}=i,c=ZM(i,fP),l=o||`span`,u=X({},TP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:t?.toString()}))]})};DP.displayName=`JVR.TypeTrue`;var OP=e=>{var{children:t,keyName:n,keys:r}=e,{False:i={},displayDataTypes:a}=_N(),{as:o,render:s}=i,c=ZM(i,pP),l=o||`span`,u=X({},TP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:t?.toString()}))]})};OP.displayName=`JVR.TypeFalse`;var kP=e=>{var{children:t,keyName:n,keys:r}=e,{Float:i={},displayDataTypes:a}=_N(),{as:o,render:s}=i,c=ZM(i,mP),l=o||`span`,u=X({},TP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:t?.toString()}))]})};kP.displayName=`JVR.TypeFloat`;var AP=e=>{var{children:t,keyName:n,keys:r}=e,{Int:i={},displayDataTypes:a}=_N(),{as:o,render:s}=i,c=ZM(i,hP),l=o||`span`,u=X({},TP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:t?.toString()}))]})};AP.displayName=`JVR.TypeInt`;var jP=e=>{var{children:t,keyName:n,keys:r}=e,{Bigint:i={},displayDataTypes:a}=_N(),{as:o,render:s}=i,c=ZM(i,gP),l=o||`span`,u=X({},TP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:SP(t?.toString())}))]})};jP.displayName=`JVR.TypeFloat`;var MP=e=>{var{children:t,keyName:n,keys:r}=e,{Url:i={},displayDataTypes:a}=_N(),{as:o,render:s}=i,c=ZM(i,_P),l=o||`span`,u=X({},TP,i.style),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t?.href,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p||(0,I.jsxs)(`a`,X({href:t?.href,target:`_blank`},c,{className:`w-rjv-value`,children:[(0,I.jsx)(rP,{}),t?.href,(0,I.jsx)(rP,{})]}))]})};MP.displayName=`JVR.TypeUrl`;var NP=e=>{var{children:t,keyName:n,keys:r}=e,{Date:i={},displayDataTypes:a}=_N(),{as:o,render:s}=i,c=ZM(i,vP),l=o||`span`,u=X({},TP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=t instanceof Date?t.toLocaleString():t,m=d&&s(X({},c,{children:p,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),m||(0,I.jsx)(l,X({},c,{className:`w-rjv-value`,children:p}))]})};NP.displayName=`JVR.TypeDate`;var PP=e=>{var{children:t,keyName:n,keys:r}=e,{Undefined:i={},displayDataTypes:a}=_N(),{as:o,render:s}=i,c=ZM(i,yP),l=o||`span`,u=X({},TP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p]})};PP.displayName=`JVR.TypeUndefined`;var FP=e=>{var{children:t,keyName:n,keys:r}=e,{Null:i={},displayDataTypes:a}=_N(),{as:o,render:s}=i,c=ZM(i,bP),l=o||`span`,u=X({},TP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t,className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p]})};FP.displayName=`JVR.TypeNull`;var IP=e=>{var{children:t,keyName:n,keys:r}=e,{Nan:i={},displayDataTypes:a}=_N(),{as:o,render:s}=i,c=ZM(i,xP),l=o||`span`,u=X({},TP,i.style||{}),d=s&&typeof s==`function`,f=d&&s(X({},c,{style:u}),{type:`type`,value:t,keyName:n,keys:r}),p=d&&s(X({},c,{children:t?.toString(),className:`w-rjv-value`}),{type:`value`,value:t,keyName:n,keys:r});return(0,I.jsxs)(F.Fragment,{children:[a&&(f||(0,I.jsx)(l,X({},c,{style:u}))),p]})};IP.displayName=`JVR.TypeNan`;var LP=e=>Number(e)===e&&e%1!=0||isNaN(e),RP=e=>{var{value:t,keyName:n,keys:r}=e,i={keyName:n,keys:r};return t instanceof URL?(0,I.jsx)(MP,X({},i,{children:t})):typeof t==`string`?(0,I.jsx)(EP,X({},i,{children:t})):t===!0?(0,I.jsx)(DP,X({},i,{children:t})):t===!1?(0,I.jsx)(OP,X({},i,{children:t})):t===null?(0,I.jsx)(FP,X({},i,{children:t})):t===void 0?(0,I.jsx)(PP,X({},i,{children:t})):t instanceof Date?(0,I.jsx)(NP,X({},i,{children:t})):typeof t==`number`&&isNaN(t)?(0,I.jsx)(IP,X({},i,{children:t})):typeof t==`number`&&LP(t)?(0,I.jsx)(kP,X({},i,{children:t})):typeof t==`bigint`?(0,I.jsx)(jP,X({},i,{children:t})):typeof t==`number`?(0,I.jsx)(AP,X({},i,{children:t})):null};RP.displayName=`JVR.Value`;function zP(e,t,n){var r=AN(),i=X({},e,t,{className:[e.className,t.className].filter(Boolean).join(` `),style:X({},e.style,t.style),children:t.children||e.children});(0,F.useEffect)(()=>r({[n]:i}),[t])}function BP(e,t,n){var r=bN(),i=X({},e,t,{className:[e.className,t.className].filter(Boolean).join(` `),style:X({},e.style,t.style),children:t.children||e.children});(0,F.useEffect)(()=>r({[n]:i}),[t])}function VP(e,t,n){var r=RN(),i=X({},e,t,{className:[e.className,t.className].filter(Boolean).join(` `),style:X({},e.style,t.style),children:t.children||e.children});(0,F.useEffect)(()=>r({[n]:i}),[t])}var HP=[`as`,`render`],UP=e=>{var{KeyName:t={}}=FN();return VP(t,e,`KeyName`),null};UP.displayName=`JVR.KeyName`;var WP=e=>{var{children:t,value:n,parentValue:r,keyName:i,keys:a}=e,o={color:typeof t==`number`?`var(--w-rjv-key-number, #268bd2)`:`var(--w-rjv-key-string, #002b36)`},{KeyName:s={}}=FN(),{as:c,render:l}=s,u=ZM(s,HP);u.style=X({},u.style,o);var d=c||`span`;return l&&typeof l==`function`&&l(X({},u,{children:t}),{value:n,parentValue:r,keyName:i,keys:a||(i?[i]:[])})||(0,I.jsx)(d,X({},u,{children:t}))};WP.displayName=`JVR.KeyNameComp`;var GP=[`children`,`value`,`parentValue`,`keyName`,`keys`],KP=[`as`,`render`,`children`],qP=e=>{var{Row:t={}}=FN();return VP(t,e,`Row`),null};qP.displayName=`JVR.Row`;var JP=e=>{var{children:t,value:n,parentValue:r,keyName:i,keys:a}=e,o=ZM(e,GP),{Row:s={}}=FN(),{as:c,render:l}=s,u=ZM(s,KP),d=c||`div`;return l&&typeof l==`function`&&l(X({},o,u,{children:t}),{value:n,keyName:i,parentValue:r,keys:a})||(0,I.jsx)(d,X({},o,u,{children:t}))};JP.displayName=`JVR.RowComp`;function YP(e){var t=(0,F.useRef)();return(0,F.useEffect)(()=>{t.current=e}),t.current}function XP(e){var{value:t,highlightUpdates:n,highlightContainer:r}=e,i=YP(t),a=(0,F.useMemo)(()=>{if(!n||i===void 0)return!1;if(typeof t!=typeof i)return!0;if(typeof t==`number`)return isNaN(t)&&isNaN(i)?!1:t!==i;if(Array.isArray(t)!==Array.isArray(i))return!0;if(typeof t==`object`||typeof t==`function`)return!1;if(t!==i)return!0},[n,t]);(0,F.useEffect)(()=>{r&&r.current&&a&&`animate`in r.current&&r.current.animate([{backgroundColor:`var(--w-rjv-update-color, #ebcb8b)`},{backgroundColor:``}],{duration:1e3,easing:`ease-in`})},[a,t,r])}var ZP=[`keyName`,`value`,`parentValue`,`expandKey`,`keys`,`beforeCopy`],QP=[`as`,`render`],$P=e=>{var{keyName:t,value:n,parentValue:r,expandKey:i,keys:a,beforeCopy:o}=e,s=ZM(e,ZP),{onCopied:c,enableClipboard:l,beforeCopy:u}=WN(),d=tN()[i],[f,p]=(0,F.useState)(!1),{Copied:m={}}=FN(),h=m?.beforeCopy;if(l===!1||!d)return null;var g={style:{display:`inline-flex`},fill:f?`var(--w-rjv-copied-success-color, #28a745)`:`var(--w-rjv-copied-color, currentColor)`,onClick:e=>{e.stopPropagation();var s=``;s=typeof n==`number`&&n===1/0?`Infinity`:typeof n==`number`&&isNaN(n)?`NaN`:typeof n==`bigint`?SP(n):n instanceof Date?n.toLocaleString():JSON.stringify(n,(e,t)=>typeof t==`bigint`?SP(t):t,2);var l=o||h||u;l&&typeof l==`function`&&(s=l(s,t,n,r,i,a)),c&&c(s,n),p(!0),(navigator.clipboard||{writeText(e){return new Promise((t,n)=>{var r=document.createElement(`textarea`);r.style.position=`absolute`,r.style.opacity=`0`,r.style.left=`-99999999px`,r.value=e,document.body.appendChild(r),r.select(),document.execCommand(`copy`)?t():n(),r.remove()})}}).writeText(s).then(()=>{var e=setTimeout(()=>{p(!1),clearTimeout(e)},3e3)}).catch(e=>{})}},{render:_}=m,v=ZM(m,QP),y=X({},v,s,g,{style:X({},v.style,s.style,g.style)});return _&&typeof _==`function`&&_(X({},y,{"data-copied":f}),{value:n,keyName:t,keys:a,parentValue:r})||(f?(0,I.jsx)(`svg`,X({viewBox:`0 0 32 36`},y,{children:(0,I.jsx)(`path`,{d:`M27.5,33 L2.5,33 L2.5,12.5 L27.5,12.5 L27.5,15.2249049 C29.1403264,13.8627542 29.9736597,13.1778155 30,13.1700887 C30,11.9705278 30,10.0804982 30,7.5 C30,6.1 28.9,5 27.5,5 L20,5 C20,2.2 17.8,0 15,0 C12.2,0 10,2.2 10,5 L2.5,5 C1.1,5 0,6.1 0,7.5 L0,33 C0,34.4 1.1,36 2.5,36 L27.5,36 C28.9,36 30,34.4 30,33 L30,26.1114493 L27.5,28.4926435 L27.5,33 Z M7.5,7.5 L10,7.5 C10,7.5 12.5,6.4 12.5,5 C12.5,3.6 13.6,2.5 15,2.5 C16.4,2.5 17.5,3.6 17.5,5 C17.5,6.4 18.8,7.5 20,7.5 L22.5,7.5 C22.5,7.5 25,8.6 25,10 L5,10 C5,8.5 6.1,7.5 7.5,7.5 Z M5,27.5 L10,27.5 L10,25 L5,25 L5,27.5 Z M28.5589286,16 L32,19.6 L21.0160714,30.5382252 L13.5303571,24.2571429 L17.1303571,20.6571429 L21.0160714,24.5428571 L28.5589286,16 Z M17.5,15 L5,15 L5,17.5 L17.5,17.5 L17.5,15 Z M10,20 L5,20 L5,22.5 L10,22.5 L10,20 Z`})})):(0,I.jsx)(`svg`,X({viewBox:`0 0 32 36`},y,{children:(0,I.jsx)(`path`,{d:`M27.5,33 L2.5,33 L2.5,12.5 L27.5,12.5 L27.5,20 L30,20 L30,7.5 C30,6.1 28.9,5 27.5,5 L20,5 C20,2.2 17.8,0 15,0 C12.2,0 10,2.2 10,5 L2.5,5 C1.1,5 0,6.1 0,7.5 L0,33 C0,34.4 1.1,36 2.5,36 L27.5,36 C28.9,36 30,34.4 30,33 L30,29 L27.5,29 L27.5,33 Z M7.5,7.5 L10,7.5 C10,7.5 12.5,6.4 12.5,5 C12.5,3.6 13.6,2.5 15,2.5 C16.4,2.5 17.5,3.6 17.5,5 C17.5,6.4 18.8,7.5 20,7.5 L22.5,7.5 C22.5,7.5 25,8.6 25,10 L5,10 C5,8.5 6.1,7.5 7.5,7.5 Z M5,27.5 L10,27.5 L10,25 L5,25 L5,27.5 Z M22.5,21.5 L22.5,16.5 L12.5,24 L22.5,31.5 L22.5,26.5 L32,26.5 L32,21.5 L22.5,21.5 Z M17.5,15 L5,15 L5,17.5 L17.5,17.5 L17.5,15 Z M10,20 L5,20 L5,22.5 L10,22.5 L10,20 Z`})})))};$P.displayName=`JVR.Copied`;function eF(){var e=(0,F.useRef)(null);return e.current===null&&(e.current=`custom-id-`+Math.random().toString(36).substr(2,9)),e.current}var tF=e=>{var{keyName:t,value:n,expandKey:r=``,level:i,keys:a=[],parentValue:o}=e,s=lN(),{objectSortKeys:c,indentWidth:l,collapsed:u,shouldExpandNodeInitially:d}=WN(),f=typeof u==`boolean`?u:typeof u==`number`?i>u:!1,p=s[r]??(d?!1:f),m=d&&d(!p,{value:n,keys:a,level:i,keyName:t,parentValue:o});if(d&&u===!1){if(s[r]===void 0&&!m)return null}else if(s[r]===void 0&&m)return null;if(p)return null;var h=Array.isArray(n)?Object.entries(n).map(e=>[Number(e[0]),e[1]]):Object.entries(n);return c&&(h=c===!0?h.sort((e,t)=>{var[n]=e,[r]=t;return typeof n==`string`&&typeof r==`string`?n.localeCompare(r):0}):h.sort((e,t)=>{var[n,r]=e,[i,a]=t;return typeof n==`string`&&typeof i==`string`?c(n,i,r,a):0})),(0,I.jsx)(`div`,{className:`w-rjv-wrap`,style:{borderLeft:`var(--w-rjv-border-left-width, 1px) var(--w-rjv-line-style, solid) var(--w-rjv-line-color, #ebebeb)`,paddingLeft:l,marginLeft:6},children:h.map((e,t)=>{var[r,o]=e;return(0,I.jsx)(rF,{parentValue:n,keyName:r,keys:[...a,r],value:o,level:i},t)})})};tF.displayName=`JVR.KeyValues`;var nF=e=>{var{keyName:t,parentValue:n,keys:r,value:i}=e,{highlightUpdates:a}=WN(),o=typeof t==`number`,s=(0,F.useRef)(null);XP({value:i,highlightUpdates:a,highlightContainer:s});var c={keyName:t,value:i,keys:r,parentValue:n};return(0,I.jsxs)(F.Fragment,{children:[(0,I.jsxs)(`span`,{ref:s,children:[(0,I.jsx)(nP,X({isNumber:o,"data-placement":`left`},c)),(0,I.jsx)(WP,X({},c,{children:t})),(0,I.jsx)(nP,X({isNumber:o,"data-placement":`right`},c))]}),(0,I.jsx)(iP,X({},c))]})};nF.displayName=`JVR.KayName`;var rF=e=>{var{keyName:t,value:n,parentValue:r,level:i=0,keys:a=[]}=e,o=iN(),s=eF(),c=Array.isArray(n),l=n instanceof Set,u=n instanceof Map,d=n instanceof Date,f=n instanceof URL;return n&&typeof n==`object`&&!c&&!l&&!u&&!d&&!f||c||l||u?(0,I.jsx)(_F,{keyName:t,value:l?Array.from(n):u?Object.fromEntries(n):n,parentValue:r,initialValue:n,keys:a,level:i+1}):(0,I.jsxs)(JP,X({className:`w-rjv-line`,value:n,keyName:t,keys:a,parentValue:r},{onMouseEnter:()=>o({[s]:!0}),onMouseLeave:()=>o({[s]:!1})},{children:[(0,I.jsx)(nF,{keyName:t,value:n,keys:a,parentValue:r}),(0,I.jsx)(RP,{keyName:t,value:n,keys:a}),(0,I.jsx)($P,{keyName:t,value:n,keys:a,parentValue:r,expandKey:s})]}))};rF.displayName=`JVR.KeyValuesItem`;var iF=[`value`,`keyName`],aF=[`as`,`render`],oF=e=>{var{CountInfoExtra:t={}}=FN();return VP(t,e,`CountInfoExtra`),null};oF.displayName=`JVR.CountInfoExtra`;var sF=e=>{var{value:t={},keyName:n}=e,r=ZM(e,iF),{CountInfoExtra:i={}}=FN(),{as:a,render:o}=i,s=ZM(i,aF);if(!o&&!s.children)return null;var c=a||`span`,l=o&&typeof o==`function`,u=X({},s,r);return l&&o(u,{value:t,keyName:n})||(0,I.jsx)(c,X({},u))};sF.displayName=`JVR.CountInfoExtraComps`;var cF=[`value`,`keyName`],lF=[`as`,`render`],uF=e=>{var{CountInfo:t={}}=FN();return VP(t,e,`CountInfo`),null};uF.displayName=`JVR.CountInfo`;var dF=e=>{var{value:t={},keyName:n}=e,r=ZM(e,cF),{displayObjectSize:i}=WN(),{CountInfo:a={}}=FN();if(!i)return null;var{as:o,render:s}=a,c=ZM(a,lF),l=o||`span`;c.style=X({},c.style,e.style);var u=Object.keys(t).length;c.children||=u+` item`+(u===1?``:`s`);var d=X({},c,r);return s&&typeof s==`function`&&s(X({},d,{"data-length":u}),{value:t,keyName:n})||(0,I.jsx)(l,X({},d))};dF.displayName=`JVR.CountInfoComp`;var fF=[`as`,`render`],pF=e=>{var{Ellipsis:t={}}=FN();return VP(t,e,`Ellipsis`),null};pF.displayName=`JVR.Ellipsis`;var mF=e=>{var{isExpanded:t,value:n,keyName:r}=e,{Ellipsis:i={}}=FN(),{as:a,render:o}=i,s=ZM(i,fF),c=a||`span`;return o&&typeof o==`function`&&o(X({},s,{"data-expanded":t}),{value:n,keyName:r})||(!t||typeof n==`object`&&Object.keys(n).length==0?null:(0,I.jsx)(c,X({},s)))};mF.displayName=`JVR.EllipsisComp`;var hF=e=>{var{keyName:t,expandKey:n,keys:r=[],initialValue:i,value:a,parentValue:o,level:s}=e,c=lN(),l=fN(),{onExpand:u,collapsed:d,shouldExpandNodeInitially:f}=WN(),p=typeof d==`boolean`?d:typeof d==`number`?s>d:!1,m=c[n]??(f?!1:p),h=f&&f(!m,{value:a,keys:r,level:s,keyName:t,parentValue:o});c[n]===void 0&&f&&(m=!h);var g=()=>{var e={expand:!m,value:a,keyid:n,keyName:t};u&&u(e),l({[n]:e.expand})},_={display:`inline-flex`,alignItems:`center`},v={transform:`rotate(`+(m?`-90`:`0`)+`deg)`,transition:`all 0.3s`},y=Object.keys(a).length,b=typeof a==`object`,x=Array.isArray(a),S=a instanceof Set,C=y!==0&&(x||S||b),w={style:_};C&&(w.onClick=g);var T={keyName:t,value:a,keys:r,parentValue:o};return(0,I.jsxs)(`span`,X({},w,{children:[C&&(0,I.jsx)(aP,X({style:v,expandKey:n},T)),(t||typeof t==`number`)&&(0,I.jsx)(nF,X({},T)),(0,I.jsx)(CP,{value:i,keyName:t}),(0,I.jsx)(wP,{value:i,keyName:t}),(0,I.jsx)(oP,X({isBrackets:x||S},T)),(0,I.jsx)(mF,{keyName:t,value:a,isExpanded:m}),(0,I.jsx)(sP,X({isVisiable:m||!C,isBrackets:x||S},T)),(0,I.jsx)(dF,{value:a,keyName:t}),(0,I.jsx)(sF,{value:a,keyName:t}),(0,I.jsx)($P,{keyName:t,value:a,expandKey:n,parentValue:o,keys:r})]}))};hF.displayName=`JVR.NestedOpen`;var gF=[`className`,`children`,`parentValue`,`keyid`,`level`,`value`,`initialValue`,`keys`,`keyName`],_F=(0,F.forwardRef)((e,t)=>{var{className:n=``,parentValue:r,level:i=1,value:a,initialValue:o,keys:s,keyName:c}=e,l=ZM(e,gF),u=iN(),d=eF();return(0,I.jsxs)(`div`,X({className:[n,`w-rjv-inner`].filter(Boolean).join(` `),ref:t},l,{onMouseEnter:()=>u({[d]:!0}),onMouseLeave:()=>u({[d]:!1})},{children:[(0,I.jsx)(hF,{expandKey:d,value:a,level:i,keys:s,parentValue:r,keyName:c,initialValue:o}),(0,I.jsx)(tF,{expandKey:d,value:a,level:i,keys:s,parentValue:r,keyName:c}),(0,I.jsx)(cP,{expandKey:d,value:a,level:i,keys:s,parentValue:r,keyName:c})]}))});_F.displayName=`JVR.Container`;var vF=e=>{var{BraceLeft:t={}}=DN();return zP(t,e,`BraceLeft`),null};vF.displayName=`JVR.BraceLeft`;var yF=e=>{var{BraceRight:t={}}=DN();return zP(t,e,`BraceRight`),null};yF.displayName=`JVR.BraceRight`;var bF=e=>{var{BracketsLeft:t={}}=DN();return zP(t,e,`BracketsLeft`),null};bF.displayName=`JVR.BracketsLeft`;var xF=e=>{var{BracketsRight:t={}}=DN();return zP(t,e,`BracketsRight`),null};xF.displayName=`JVR.BracketsRight`;var SF=e=>{var{Arrow:t={}}=DN();return zP(t,e,`Arrow`),null};SF.displayName=`JVR.Arrow`;var CF=e=>{var{Colon:t={}}=DN();return zP(t,e,`Colon`),null};CF.displayName=`JVR.Colon`;var wF=e=>{var{Quote:t={}}=DN();return zP(t,e,`Quote`),null};wF.displayName=`JVR.Quote`;var TF=e=>{var{ValueQuote:t={}}=DN();return zP(t,e,`ValueQuote`),null};TF.displayName=`JVR.ValueQuote`;var EF=e=>{var{Bigint:t={}}=_N();return BP(t,e,`Bigint`),null};EF.displayName=`JVR.Bigint`;var DF=e=>{var{Date:t={}}=_N();return BP(t,e,`Date`),null};DF.displayName=`JVR.Date`;var OF=e=>{var{False:t={}}=_N();return BP(t,e,`False`),null};OF.displayName=`JVR.False`;var kF=e=>{var{Float:t={}}=_N();return BP(t,e,`Float`),null};kF.displayName=`JVR.Float`;var AF=e=>{var{Int:t={}}=_N();return BP(t,e,`Int`),null};AF.displayName=`JVR.Int`;var jF=e=>{var{Map:t={}}=_N();return BP(t,e,`Map`),null};jF.displayName=`JVR.Map`;var MF=e=>{var{Nan:t={}}=_N();return BP(t,e,`Nan`),null};MF.displayName=`JVR.Nan`;var NF=e=>{var{Null:t={}}=_N();return BP(t,e,`Null`),null};NF.displayName=`JVR.Null`;var PF=e=>{var{Set:t={}}=_N();return BP(t,e,`Set`),null};PF.displayName=`JVR.Set`;var FF=e=>{var{Str:t={}}=_N();return BP(t,e,`Str`),null};FF.displayName=`JVR.StringText`;var IF=e=>{var{True:t={}}=_N();return BP(t,e,`True`),null};IF.displayName=`JVR.True`;var LF=e=>{var{Undefined:t={}}=_N();return BP(t,e,`Undefined`),null};LF.displayName=`JVR.Undefined`;var RF=e=>{var{Url:t={}}=_N();return BP(t,e,`Url`),null};RF.displayName=`JVR.Url`;var zF=e=>{var{Copied:t={}}=FN();return VP(t,e,`Copied`),null};zF.displayName=`JVR.Copied`;var BF=[`className`,`style`,`value`,`children`,`collapsed`,`shouldExpandNodeInitially`,`indentWidth`,`displayObjectSize`,`shortenTextAfterLength`,`stringEllipsis`,`highlightUpdates`,`enableClipboard`,`displayDataTypes`,`objectSortKeys`,`onExpand`,`onCopied`,`beforeCopy`],VF=(0,F.forwardRef)((e,t)=>{var{className:n=``,style:r,value:i,children:a,collapsed:o=!1,shouldExpandNodeInitially:s,indentWidth:c=15,displayObjectSize:l=!0,shortenTextAfterLength:u=30,stringEllipsis:d,highlightUpdates:f=!0,enableClipboard:p=!0,displayDataTypes:m=!0,objectSortKeys:h=!1,onExpand:g,onCopied:_,beforeCopy:v}=e,y=ZM(e,BF),b=X({lineHeight:1.4,fontFamily:`var(--w-rjv-font-family, Menlo, monospace)`,color:`var(--w-rjv-color, #002b36)`,backgroundColor:`var(--w-rjv-background-color, #00000000)`,fontSize:13},r),x=[`w-json-view-container`,`w-rjv`,n].filter(Boolean).join(` `);return(0,I.jsxs)(GN,{initialState:{value:i,objectSortKeys:h,indentWidth:c,shouldExpandNodeInitially:o===!1?s:void 0,displayObjectSize:l,collapsed:o,enableClipboard:p,shortenTextAfterLength:u,stringEllipsis:d,highlightUpdates:f,onCopied:_,onExpand:g,beforeCopy:v},initialTypes:{displayDataTypes:m},children:[(0,I.jsx)(_F,X({value:i},y,{ref:t,className:x,style:b})),a]})});VF.Bigint=EF,VF.Date=DF,VF.False=OF,VF.Float=kF,VF.Int=AF,VF.Map=jF,VF.Nan=MF,VF.Null=NF,VF.Set=PF,VF.String=FF,VF.True=IF,VF.Undefined=LF,VF.Url=RF,VF.ValueQuote=TF,VF.Arrow=SF,VF.Colon=CF,VF.Quote=wF,VF.Ellipsis=pF,VF.BraceLeft=vF,VF.BraceRight=yF,VF.BracketsLeft=bF,VF.BracketsRight=xF,VF.Copied=zF,VF.CountInfo=uF,VF.CountInfoExtra=oF,VF.KeyName=UP,VF.Row=qP,VF.displayName=`JVR.JsonView`;var HF=VF;function UF(e){return JSON.stringify(e,null,2)}const WF={"--w-rjv-font-family":`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace`,"--w-rjv-background-color":`transparent`,"--w-rjv-color":`var(--foreground)`,"--w-rjv-border-left":`1px dashed var(--border)`,"--w-rjv-line-color":`var(--border)`,"--w-rjv-arrow-color":`var(--muted-foreground)`,"--w-rjv-info-color":`var(--muted-foreground)`,"--w-rjv-curlybraces-color":`var(--foreground)`,"--w-rjv-brackets-color":`var(--foreground)`,"--w-rjv-colon-color":`var(--muted-foreground)`,"--w-rjv-key-string":`var(--foreground)`,"--w-rjv-type-string-color":`oklch(0.52 0.16 250)`,"--w-rjv-type-int-color":`oklch(0.56 0.16 145)`,"--w-rjv-type-float-color":`oklch(0.56 0.16 145)`,"--w-rjv-type-boolean-color":`oklch(0.58 0.19 30)`,"--w-rjv-type-null-color":`var(--muted-foreground)`,"--w-rjv-type-undefined-color":`var(--muted-foreground)`,"--w-rjv-type-date-color":`oklch(0.56 0.16 145)`,"--w-rjv-type-url-color":`oklch(0.52 0.16 250)`};function GF(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}function KF(e){return e.capture.bodyPolicy===`off`?`Body 记录策略为 off,未记录请求/响应 body。`:e.capture.bodyPolicy===`full`?`Body 记录策略为 full,当前展示的是完整内容。`:e.capture.bodyPolicy===`masked`?`当前配置中的 bodyPolicy=masked 会按完整内容展示。`:null}function qF(e){return e.startsWith(`openai`)?`openai`:e.startsWith(`anthropic`)?`anthropic`:e}function JF(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}function YF(e){return e==null?null:typeof e==`string`?e:JSON.stringify(e,null,2)}function XF(e){if(!e)return!1;let t=e.toLowerCase();return t.includes(`application/json`)||t.includes(`+json`)}function ZF(e){let t=e.trim();return t?/^(?:\{|\[|"|-?\d|true$|false$|null$)/.test(t):!1}function QF(e,t){if(e==null)return{kind:`empty`};if(typeof e==`string`){let n=e.trim();if(!n)return{kind:`text`,text:e};if(XF(t)||ZF(n))try{let e=JSON.parse(n);return typeof e==`object`&&e?{kind:`json-tree`,value:e}:{kind:`json-primitive`,value:e}}catch{return{kind:`text`,text:e}}return{kind:`text`,text:e}}return typeof e==`object`?{kind:`json-tree`,value:e}:{kind:`json-primitive`,value:e}}function $F(e,t){return Object.entries(e).filter(([e])=>{let n=e.toLowerCase();return!(n===`content-length`||n===`host`||t===`provider`&&(n===`authorization`||n===`x-api-key`))}).sort(([e],[t])=>e.localeCompare(t))}function eI(e){return e.startsWith(`anthropic`)?[`x-api-key`,`<PROVIDER_API_KEY>`]:[`Authorization`,`Bearer <PROVIDER_API_KEY>`]}function tI(e){let t=e.request.requestBody;return!t||typeof t!=`object`||Array.isArray(t)?t:{...t,model:e.summary.modelIn}}function nI(e,t){let n=t===`provider`?e.upstream.targetUrl:new URL(e.request.path,window.location.origin).toString(),r=YF(t===`provider`?e.request.requestBody:tI(e)),i=$F(e.request.requestHeaders??{},t),a=t===`provider`?eI(e.summary.routeType):null,o=[`curl`,` -X ${e.request.method}`,` ${JF(n)}`];return i.forEach(([e,t])=>{o.push(` -H ${JF(`${e}: ${t}`)}`)}),t===`provider`&&a&&(o.push(` -H ${JF(`${a[0]}: ${a[1]}`)}`),o.push(` -H ${JF(`accept-encoding: identity`)}`)),r!==null&&o.push(` --data-raw ${JF(r)}`),`${o.join(` \\
|
|
178
|
+
`)}`}function rI(e){let t=e.split(`
|
|
179
|
+
`),n=[];return t.forEach((e,t)=>{let r=e.trim();if(!r)return;let i=t+1;if(r.startsWith(`data:`)){let e=r.slice(5).trim();if(!e)return;try{n.push({type:`json`,lineNo:i,value:JSON.parse(e)})}catch{n.push({type:`raw`,lineNo:i,value:r})}return}try{n.push({type:`json`,lineNo:i,value:JSON.parse(r)})}catch{n.push({type:`raw`,lineNo:i,value:r})}}),n}function iI({value:e,contentType:t,emptyText:n,className:r,noScroll:i=!1}){let a=(0,F.useMemo)(()=>QF(e,t),[t,e]);if(a.kind===`empty`)return(0,I.jsx)(`div`,{className:K(`rounded-md border bg-muted/30 p-3 text-xs text-muted-foreground`,r),children:n??`-`});if(a.kind===`json-tree`)return(0,I.jsx)(`div`,{className:K(i?`rounded-md border bg-muted/20 p-3 text-xs`:`max-h-[320px] overflow-auto rounded-md border bg-muted/20 p-3 text-xs`,r),children:(0,I.jsx)(HF,{value:a.value,displayDataTypes:!1,displayObjectSize:!1,enableClipboard:!0,shortenTextAfterLength:0,shouldExpandNodeInitially:(e,{level:t})=>t<2,style:WF})});let o=a.kind===`json-primitive`?UF(a.value):a.text??UF(e);return(0,I.jsx)(`pre`,{className:K(i?`rounded-md border bg-muted/30 p-3 text-xs whitespace-pre-wrap break-all`:`max-h-[320px] overflow-auto rounded-md border bg-muted/30 p-3 text-xs whitespace-pre-wrap break-all`,r),children:o})}function aI({title:e,value:t,contentType:n,emptyText:r}){let i=(0,F.useMemo)(()=>t==null?``:typeof t==`string`?t:JSON.stringify(t,null,2)??String(t),[t]);return(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-xs text-muted-foreground`,children:[(0,I.jsx)(`span`,{children:e}),(0,I.jsx)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,disabled:!i,onClick:async()=>{i&&(await navigator.clipboard.writeText(i),L.success(`已复制 ${e}`))},"aria-label":`复制 ${e}`,title:`复制 ${e}`,children:(0,I.jsx)(aa,{className:`h-3 w-3`})})]}),(0,I.jsx)(iI,{value:t,contentType:n,emptyText:r})]})}function oI({label:e,value:t,mono:n=!1}){return(0,I.jsxs)(`div`,{className:`rounded-md border bg-muted/20 px-3 py-2`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-xs text-muted-foreground`,children:[(0,I.jsx)(`span`,{children:e}),(0,I.jsx)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,onClick:async()=>{await navigator.clipboard.writeText(t),L.success(`已复制 ${e}`)},"aria-label":`复制 ${e}`,title:`复制 ${e}`,children:(0,I.jsx)(aa,{className:`h-3 w-3`})})]}),(0,I.jsx)(`div`,{className:`mt-1 break-all ${n?`font-mono text-xs`:`text-sm`}`,children:t})]})}function sI({detail:e}){let t=e.plugins;return!t||!t.request?.length&&!t.response?.length?null:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`插件管线`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`请求/响应经过的插件处理链路(洋葱模型)`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[t.request&&t.request.length>0?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`请求阶段(正序)`}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:`用户请求`}),t.request.map((e,t)=>(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`→`}),(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs`,children:e.name})]},`req-${e.name}-${t}`)),(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`→`}),(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:`Provider 请求`})]})]}):null,t.response&&t.response.length>0?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`响应阶段(逆序)`}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:`Provider 响应`}),[...t.response].reverse().map((e,t)=>(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`→`}),(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs`,children:e.name})]},`res-${e.name}-${t}`)),(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`→`}),(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:`用户响应`})]})]}):null]})]}),(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`插件详情`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`各插件的包名与参数配置`})]}),(0,I.jsx)(`div`,{className:`space-y-3 px-3 py-3`,children:(t.request??t.response??[]).map((e,t)=>(0,I.jsxs)(`div`,{className:`rounded-md border bg-muted/20 p-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs`,children:e.name}),(0,I.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:e.package})]}),Object.keys(e.params).length>0?(0,I.jsxs)(`div`,{className:`mt-2`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`params`}),(0,I.jsx)(`pre`,{className:`mt-1 rounded-md border bg-muted/30 p-2 text-xs`,children:JSON.stringify(e.params,null,2)})]}):null]},`detail-${e.name}-${t}`))})]}),t.requestUrlAfterPlugins?(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`插件修改记录`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`插件对请求/响应的修改`})]}),(0,I.jsx)(`div`,{className:`space-y-3 px-3 py-3`,children:(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`插件处理后 URL`}),(0,I.jsx)(`div`,{className:`rounded-md border bg-muted/30 p-2 font-mono text-xs break-all`,children:t.requestUrlAfterPlugins})]})})]}):null]})}function cI({step:e,title:t,description:n}){return(0,I.jsxs)(`div`,{className:`flex items-start gap-3 border-b px-3 py-3`,children:[(0,I.jsx)(`div`,{className:`flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary text-xs font-bold text-primary-foreground`,children:e}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:t}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:n})]})]})}function lI({title:e,headers:t,emptyText:n}){let r=(0,F.useMemo)(()=>t?Object.entries(t).sort(([e],[t])=>e.localeCompare(t)):[],[t]);return(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e}),r.length===0?(0,I.jsx)(`div`,{className:`rounded-md border bg-muted/30 p-3 text-xs text-muted-foreground`,children:n??`-`}):(0,I.jsx)(`div`,{className:`overflow-hidden rounded-md border bg-muted/10`,children:(0,I.jsx)(IM,{className:`text-xs`,children:(0,I.jsx)(RM,{children:r.map(([e,t])=>(0,I.jsxs)(BM,{className:`hover:bg-transparent`,children:[(0,I.jsx)(HM,{className:`w-[240px] max-w-[240px] align-top font-mono text-[11px] text-muted-foreground whitespace-normal break-all`,children:e}),(0,I.jsx)(HM,{className:`align-top font-mono whitespace-normal break-all`,children:t}),(0,I.jsx)(HM,{className:`w-10 align-top text-right`,children:(0,I.jsx)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,onClick:async()=>{await navigator.clipboard.writeText(`${e}: ${t}`),L.success(`已复制 ${e}`)},"aria-label":`复制 ${e}`,title:`复制 ${e}`,children:(0,I.jsx)(aa,{className:`h-3 w-3`})})})]},e))})})})]})}function uI({detail:e}){let t=e.plugins,n=!!(t&&(t.request?.length||t.response?.length)),[r,i]=(0,F.useState)(1),a=tI(e),o=t?.requestBodyAfterPlugins??e.request.requestBody,s=t?.requestUrlAfterPlugins??e.upstream.targetUrl,c=t?.responseBodyBeforePlugins??e.response.responseBody,l=e.response.responseBody,u=[{key:`user-request`,step:1,title:`用户请求`,shortTitle:`用户请求`,description:`用户发送给 local-router 的原始请求(插件处理前)`,tag:`request`,connector:n?`插件: ${t?.request?.map(e=>e.name).join(` → `)??`-`}`:void 0},{key:`provider-request`,step:2,title:`发送给 Provider 的请求`,shortTitle:`Provider 请求`,description:`local-router 插件处理后最终发给 ${e.summary.provider} 的请求`,tag:`request`,connector:`${e.summary.provider} 处理`},{key:`provider-response`,step:3,title:`Provider 响应`,shortTitle:`Provider 响应`,description:`${e.summary.provider} 返回给 local-router 的原始响应(插件处理前)`,tag:`response`,connector:n?`插件: ${t?.response?[...t.response].reverse().map(e=>e.name).join(` → `):`-`}`:void 0},{key:`final-response`,step:4,title:`最终响应`,shortTitle:`最终响应`,description:`local-router 插件处理后最终返回给用户的响应`,tag:`response`}];return(0,I.jsxs)(`div`,{className:`space-y-3 md:space-y-0`,children:[(0,I.jsx)(`div`,{className:`flex gap-1 md:hidden`,children:u.map(e=>(0,I.jsxs)(`button`,{type:`button`,onClick:()=>i(e.step),className:K(`flex-1 rounded-md border px-2 py-1.5 text-center text-xs transition-colors`,r===e.step?`border-primary bg-primary/10 font-medium text-foreground`:`text-muted-foreground hover:bg-muted/50`),children:[(0,I.jsx)(`div`,{className:`font-medium`,children:e.step}),(0,I.jsx)(`div`,{className:`mt-0.5 truncate text-[10px]`,children:e.shortTitle})]},e.key))}),(0,I.jsxs)(`div`,{className:`flex gap-5`,children:[(0,I.jsx)(`div`,{className:`hidden w-44 shrink-0 md:block`,children:(0,I.jsx)(`div`,{className:`sticky top-4 rounded-lg border bg-background px-2 py-3`,children:(0,I.jsx)(`div`,{className:`relative flex flex-col`,children:u.map((e,t)=>(0,I.jsxs)(`div`,{className:`flex flex-col`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:()=>i(e.step),className:K(`group relative flex items-start gap-3 rounded-lg px-2.5 py-2.5 text-left transition-all`,r===e.step?`bg-primary/8 shadow-sm ring-1 ring-primary/20`:`hover:bg-muted/60`),children:[(0,I.jsx)(`div`,{className:K(`relative z-10 mt-0.5 flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-bold transition-all`,r===e.step?`bg-primary text-primary-foreground shadow-md shadow-primary/25`:`border-2 bg-background text-muted-foreground group-hover:border-primary/40 group-hover:text-foreground`),children:e.step}),(0,I.jsxs)(`div`,{className:`min-w-0 pt-0.5`,children:[(0,I.jsx)(`div`,{className:K(`text-sm font-medium leading-tight transition-colors`,r===e.step?`text-foreground`:`text-muted-foreground group-hover:text-foreground`),children:e.shortTitle}),(0,I.jsx)(`div`,{className:K(`mt-1 inline-flex rounded-full px-1.5 py-0.5 text-[10px] font-medium leading-none`,e.tag===`request`?`bg-blue-500/10 text-blue-600 dark:text-blue-400`:`bg-green-500/10 text-green-600 dark:text-green-400`),children:e.tag===`request`?`REQUEST`:`RESPONSE`})]})]}),t<u.length-1?(0,I.jsxs)(`div`,{className:`flex items-stretch gap-3 px-2.5`,children:[(0,I.jsx)(`div`,{className:`flex w-7 justify-center`,children:(0,I.jsx)(`div`,{className:K(`w-px`,r===e.step||r===u[t+1].step?`bg-primary/40`:`bg-border`),style:{minHeight:`40px`}})}),(0,I.jsx)(`div`,{className:`flex items-center py-2`,children:e.connector?(0,I.jsx)(`div`,{className:`rounded-md border bg-muted/40 px-2 py-1 text-[10px] leading-snug text-muted-foreground`,children:e.connector}):(0,I.jsx)(`div`,{className:`h-px`})})]}):null]},e.key))})})}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[r===1?(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(cI,{step:1,title:`用户请求`,description:`用户发送给 local-router 的原始请求(插件处理前)`}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-2 text-sm sm:grid-cols-3`,children:[(0,I.jsx)(oI,{label:`method`,value:e.request.method}),(0,I.jsx)(oI,{label:`path`,value:e.request.path,mono:!0}),(0,I.jsx)(oI,{label:`content-type`,value:e.request.contentType??`-`,mono:!0})]}),(0,I.jsx)(lI,{title:`headers`,headers:e.request.requestHeaders}),(0,I.jsx)(aI,{title:`body`,value:a,contentType:e.request.contentType,emptyText:`无请求 body 或未采集。`})]})]}):null,r===2?(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(cI,{step:2,title:`发送给 Provider 的请求`,description:`local-router 插件处理后最终发给 ${e.summary.provider} 的请求`}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-2 text-sm sm:grid-cols-2`,children:[(0,I.jsx)(oI,{label:`target_url`,value:s,mono:!0}),(0,I.jsx)(oI,{label:`provider`,value:e.summary.provider})]}),(0,I.jsx)(aI,{title:`body`,value:o,contentType:e.request.contentType,emptyText:`无请求 body 或未采集。`}),n&&t?.requestBodyAfterPlugins!==void 0?(0,I.jsx)(`div`,{className:`rounded-md border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-xs text-muted-foreground`,children:`插件已修改请求 body,此处展示的是修改后的内容。`}):n?null:(0,I.jsx)(`div`,{className:`rounded-md border bg-muted/30 px-3 py-2 text-xs text-muted-foreground`,children:`无插件处理,请求内容与用户请求一致(model 已由路由改写)。`})]})]}):null,r===3?(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(cI,{step:3,title:`Provider 响应`,description:`${e.summary.provider} 返回给 local-router 的原始响应(插件处理前)`}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-2 text-sm sm:grid-cols-2`,children:[(0,I.jsx)(oI,{label:`upstream_status`,value:String(e.response.upstreamStatus)}),(0,I.jsx)(oI,{label:`content-type`,value:e.response.contentType??`-`,mono:!0})]}),(0,I.jsx)(lI,{title:`headers`,headers:e.response.responseHeaders}),(0,I.jsx)(aI,{title:`body`,value:c,contentType:e.response.contentType,emptyText:e.upstream.isStream?`流式响应,请在「会话 / 追踪」标签页查看 stream 内容。`:`无响应 body 或未采集。`})]})]}):null,r===4?(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(cI,{step:4,title:`最终响应`,description:`local-router 插件处理后最终返回给用户的响应`}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-2 text-sm sm:grid-cols-2`,children:[(0,I.jsx)(oI,{label:`status`,value:String(e.response.upstreamStatus)}),(0,I.jsx)(oI,{label:`content-type`,value:e.response.contentType??`-`,mono:!0})]}),(0,I.jsx)(aI,{title:`body`,value:l,contentType:e.response.contentType,emptyText:e.upstream.isStream?`流式响应,请在「会话 / 追踪」标签页查看 stream 内容。`:`无响应 body 或未采集。`}),n&&t?.responseBodyAfterPlugins!==void 0?(0,I.jsx)(`div`,{className:`rounded-md border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-xs text-muted-foreground`,children:`插件已修改响应 body,此处展示的是修改后的最终内容。`}):n?null:(0,I.jsx)(`div`,{className:`rounded-md border bg-muted/30 px-3 py-2 text-xs text-muted-foreground`,children:`无插件处理,响应内容与 Provider 响应一致。`})]})]}):null]})]})]})}function dI({label:e,value:t,mono:n=!1}){return(0,I.jsxs)(`div`,{className:`rounded-md border bg-background/90 px-2 py-1`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-1 text-[11px] leading-4 text-muted-foreground`,children:[(0,I.jsx)(`span`,{children:e}),(0,I.jsx)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,onClick:async()=>{await navigator.clipboard.writeText(t),L.success(`已复制 ${e}`)},"aria-label":`复制 ${e}`,title:`复制 ${e}`,children:(0,I.jsx)(aa,{className:`h-3 w-3`})})]}),(0,I.jsx)(`div`,{className:`mt-0.5 break-all text-xs ${n?`font-mono`:``}`,children:t})]})}function fI({interfaceType:e,routeType:t,modelIn:n,provider:r,modelOut:i,routeRuleKey:a}){return(0,I.jsx)(`div`,{className:`rounded-xl border bg-linear-to-br from-muted/20 to-muted/40 p-3`,children:(0,I.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-[1fr_auto_1fr] lg:items-center`,children:[(0,I.jsxs)(`div`,{className:`space-y-2 rounded-lg border bg-background/70 p-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium`,children:`入站请求`}),(0,I.jsx)(Y,{variant:`outline`,children:`IN`})]}),(0,I.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,I.jsx)(dI,{label:`接口类型`,value:e}),(0,I.jsx)(dI,{label:`routeType`,value:t,mono:!0})]}),(0,I.jsx)(dI,{label:`原始模型(model_in)`,value:n,mono:!0})]}),(0,I.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-1 py-1`,children:[(0,I.jsx)(`div`,{className:`hidden h-0.5 w-16 bg-border lg:block`}),(0,I.jsx)(`div`,{className:`rounded-full border bg-background px-3 py-1 text-xs text-muted-foreground`,children:`路由匹配并改写`}),(0,I.jsx)(`div`,{className:`text-xl leading-none text-muted-foreground`,children:`→`}),(0,I.jsx)(`div`,{className:`hidden h-0.5 w-16 bg-border lg:block`})]}),(0,I.jsxs)(`div`,{className:`space-y-2 rounded-lg border bg-background/70 p-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium`,children:`出站转发`}),(0,I.jsx)(Y,{variant:`outline`,children:`OUT`})]}),(0,I.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,I.jsx)(dI,{label:`目标 provider`,value:r}),(0,I.jsx)(dI,{label:`命中规则`,value:a,mono:!0})]}),(0,I.jsx)(dI,{label:`路由模型(model_out)`,value:i,mono:!0})]})]})})}function pI({title:e,content:t,emptyText:n}){let r=(0,F.useMemo)(()=>t?rI(t):[],[t]),i=(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e}),(0,I.jsxs)(q,{size:`sm`,variant:`outline`,disabled:!t,onClick:async()=>{t&&(await navigator.clipboard.writeText(t),L.success(`已复制 stream content`))},children:[(0,I.jsx)(aa,{className:`h-3.5 w-3.5`}),`复制`]})]});return!t||r.length===0?(0,I.jsxs)(`div`,{className:`space-y-1`,children:[i,(0,I.jsx)(`pre`,{className:`rounded-md border bg-muted/30 p-3 text-xs whitespace-pre-wrap break-all`,children:n??`-`})]}):(0,I.jsxs)(`div`,{className:`space-y-1`,children:[i,(0,I.jsx)(`div`,{className:`space-y-2 rounded-md border bg-muted/30 p-3`,children:r.map(e=>(0,I.jsxs)(`div`,{className:`space-y-1 rounded-md border bg-background/80 p-2`,children:[(0,I.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[`line `,e.lineNo]}),(0,I.jsx)(iI,{value:(e.type,e.value),className:`bg-muted/40`,noScroll:!0})]},`${e.lineNo}-${e.type}`))})]})}var mI=Ka(`relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current`,{variants:{variant:{default:`bg-card text-card-foreground`,destructive:`text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90`}},defaultVariants:{variant:`default`}});function hI({className:e,variant:t,...n}){return(0,I.jsx)(`div`,{"data-slot":`alert`,role:`alert`,className:K(mI({variant:t}),e),...n})}function gI({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`alert-title`,className:K(`col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight`,e),...t})}function _I({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`alert-description`,className:K(`text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed`,e),...t})}function vI({...e}){return(0,I.jsx)(Ro,{"data-slot":`collapsible`,...e})}function yI({...e}){return(0,I.jsx)(No,{"data-slot":`collapsible-trigger`,...e})}function bI({...e}){return(0,I.jsx)(Fo,{"data-slot":`collapsible-content`,...e})}function xI({className:e,orientation:t=`horizontal`,...n}){return(0,I.jsx)(Dy,{"data-slot":`tabs`,"data-orientation":t,orientation:t,className:K(`group/tabs flex gap-2 data-[orientation=horizontal]:flex-col`,e),...n})}var SI=Ka(`rounded-lg p-[3px] group-data-[orientation=horizontal]/tabs:h-9 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col`,{variants:{variant:{default:`bg-muted`,line:`gap-1 bg-transparent`}},defaultVariants:{variant:`default`}});function CI({className:e,variant:t=`default`,...n}){return(0,I.jsx)(Oy,{"data-slot":`tabs-list`,"data-variant":t,className:K(SI({variant:t}),e),...n})}function wI({className:e,...t}){return(0,I.jsx)(ky,{"data-slot":`tabs-trigger`,className:K(`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent`,`data-[state=active]:bg-background dark:data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 data-[state=active]:text-foreground`,`after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100`,e),...t})}function TI({className:e,...t}){return(0,I.jsx)(Ay,{"data-slot":`tabs-content`,className:K(`flex-1 outline-none`,e),...t})}function EI(e){return JSON.stringify(e,null,2)}function DI(e){return e===`assistant`?`border-sky-300/50 bg-sky-500/5`:e===`user`?`border-emerald-300/50 bg-emerald-500/5`:e===`system`?`border-violet-300/50 bg-violet-500/5`:`border-amber-300/50 bg-amber-500/5`}function OI({title:e,defaultOpen:t=!1,children:n}){let[r,i]=(0,F.useState)(t);return(0,I.jsx)(vI,{open:r,onOpenChange:i,children:(0,I.jsxs)(`div`,{className:`rounded-md border bg-muted/20`,children:[(0,I.jsx)(yI,{asChild:!0,children:(0,I.jsxs)(q,{variant:`ghost`,size:`sm`,className:`h-8 w-full justify-between rounded-b-none rounded-t-md px-2`,children:[(0,I.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e}),r?(0,I.jsx)(ea,{className:`h-3.5 w-3.5`}):(0,I.jsx)(ta,{className:`h-3.5 w-3.5`})]})}),(0,I.jsx)(bI,{children:(0,I.jsx)(`div`,{className:`px-2 pb-2`,children:n})})]})})}function kI({text:e,copyLabel:t,className:n}){return(0,I.jsxs)(`div`,{className:`relative`,children:[(0,I.jsxs)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,className:`absolute top-2 right-2 z-10`,onClick:async()=>{try{await navigator.clipboard.writeText(e),L.success(`已复制 ${t}`)}catch{L.error(`复制 ${t} 失败`)}},children:[(0,I.jsx)(aa,{className:`h-3.5 w-3.5`}),(0,I.jsxs)(`span`,{className:`sr-only`,children:[`复制 `,t]})]}),(0,I.jsx)(`pre`,{className:K(`overflow-auto rounded-md border bg-background p-2 pr-10 text-xs`,n),children:e})]})}function AI(e,t){return e.type===`text`?(0,I.jsx)(kI,{text:e.text||`(empty text)`,copyLabel:`text block`,className:`whitespace-pre-wrap`},t):e.type===`thinking`?(0,I.jsxs)(OI,{title:`thinking`,defaultOpen:!1,children:[(0,I.jsx)(kI,{text:e.thinking||`(empty thinking)`,copyLabel:`thinking block`,className:`whitespace-pre-wrap`}),e.signature?(0,I.jsx)(kI,{text:`signature: ${e.signature}`,copyLabel:`thinking signature`,className:`mt-2 whitespace-pre-wrap`}):null]},t):e.type===`image`?(0,I.jsxs)(OI,{title:`image`,defaultOpen:!1,children:[(0,I.jsxs)(`div`,{className:`space-y-1 text-xs`,children:[(0,I.jsxs)(`div`,{children:[`url: `,e.url??`-`]}),(0,I.jsxs)(`div`,{children:[`mime: `,e.mimeType??`-`]}),(0,I.jsxs)(`div`,{children:[`detail: `,e.detail??`-`]})]}),e.data?(0,I.jsx)(kI,{text:`${e.data.slice(0,1200)}${e.data.length>1200?`
|
|
180
|
+
... (truncated)`:``}`,copyLabel:`image data`,className:`mt-2 max-h-40`}):null]},t):e.type===`tool_use`?(0,I.jsxs)(OI,{title:`tool_use${e.partial?` (partial)`:``}`,defaultOpen:!1,children:[(0,I.jsxs)(`div`,{className:`space-y-1 text-xs`,children:[(0,I.jsxs)(`div`,{children:[`id: `,e.id??`-`]}),(0,I.jsxs)(`div`,{children:[`name: `,e.name??`-`]})]}),(0,I.jsx)(kI,{text:e.input===void 0?e.rawInput??`(no input)`:EI(e.input),copyLabel:`tool_use input`,className:`mt-2 max-h-52`})]},t):e.type===`tool_result`?(0,I.jsxs)(OI,{title:`tool_result${e.isError?` (error)`:``}`,defaultOpen:!1,children:[(0,I.jsx)(`div`,{className:`space-y-1 text-xs`,children:(0,I.jsxs)(`div`,{children:[`tool_use_id: `,e.toolUseId??`-`]})}),(0,I.jsx)(kI,{text:EI(e.content),copyLabel:`tool_result content`,className:`mt-2 max-h-52`})]},t):(0,I.jsx)(OI,{title:e.label??`unknown`,defaultOpen:!1,children:(0,I.jsx)(kI,{text:EI(e.raw),copyLabel:`unknown block`,className:`max-h-52`})},t)}function jI({message:e,index:t}){let n=EI({role:e.role,source:e.source,meta:e.meta??null,blocks:e.blocks}),r=(0,I.jsx)(`div`,{className:`space-y-2`,children:e.blocks.length>0?e.blocks.map((e,t)=>AI(e,t)):null});return(0,I.jsx)(`div`,{className:K(`space-y-2 rounded-md border p-2`,DI(e.role)),children:(0,I.jsxs)(xI,{defaultValue:`content`,className:`space-y-2`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,I.jsxs)(Y,{variant:`outline`,children:[`#`,t+1]}),(0,I.jsx)(Y,{variant:`outline`,children:e.role}),(0,I.jsx)(Y,{variant:`outline`,children:e.source}),e.meta?.stopReason?(0,I.jsxs)(Y,{variant:`secondary`,children:[`stop: `,e.meta.stopReason]}):null,e.meta?.partial?(0,I.jsx)(Y,{variant:`secondary`,children:`partial`}):null,(0,I.jsxs)(CI,{className:`ml-auto`,children:[(0,I.jsx)(wI,{value:`content`,className:`text-xs`,children:`内容`}),(0,I.jsx)(wI,{value:`json`,className:`text-xs`,children:`JSON`})]})]}),(0,I.jsx)(TI,{value:`content`,className:`mt-0`,children:e.role===`system`?(0,I.jsx)(OI,{title:`system content`,defaultOpen:!1,children:r}):r}),(0,I.jsx)(TI,{value:`json`,className:`mt-0`,children:(0,I.jsxs)(`div`,{className:`relative`,children:[(0,I.jsxs)(q,{type:`button`,size:`icon-xs`,variant:`ghost`,className:`absolute top-2 right-2 z-10`,onClick:async()=>{try{await navigator.clipboard.writeText(n),L.success(`已复制 JSON #${t+1}`)}catch{L.error(`复制 JSON #${t+1} 失败`)}},children:[(0,I.jsx)(aa,{className:`h-3.5 w-3.5`}),(0,I.jsx)(`span`,{className:`sr-only`,children:`复制 JSON`})]}),(0,I.jsx)(`pre`,{className:`max-h-72 overflow-auto rounded-md border bg-background p-2 pr-10 text-xs whitespace-pre-wrap`,children:n})]})})]})})}function MI({parsed:e}){let t=e.warnings.length>0;return(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`Chat History`}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,I.jsxs)(Y,{variant:`outline`,children:[`messages: `,e.messages.length]}),(0,I.jsxs)(Y,{variant:`outline`,children:[`input: `,e.stats.inputCount]}),(0,I.jsxs)(Y,{variant:`outline`,children:[`output: `,e.stats.outputCount]}),e.stats.streamEventCount>0?(0,I.jsxs)(Y,{variant:`outline`,children:[`stream events: `,e.stats.streamEventCount]}):null,e.stats.streamPartial?(0,I.jsx)(Y,{variant:`secondary`,children:`stream partial`}):null,(0,I.jsx)(Y,{variant:t?`secondary`:`outline`,children:t?`warnings: ${e.warnings.length}`:`parse ok`})]})]}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`由 request + response/stream 自动还原的消息历史`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[t?(0,I.jsxs)(hI,{children:[(0,I.jsx)(Ra,{className:`h-4 w-4`}),(0,I.jsx)(gI,{children:`解析提示`}),(0,I.jsx)(_I,{children:e.warnings.map(e=>(0,I.jsxs)(`div`,{children:[`• `,e]},e))})]}):null,e.messages.length===0?(0,I.jsx)(`pre`,{className:`max-h-[320px] overflow-auto rounded-md border bg-muted/30 p-3 text-xs`,children:`无可还原的消息历史。`}):(0,I.jsx)(`div`,{className:`space-y-2`,children:e.messages.map((e,t)=>(0,I.jsx)(jI,{message:e,index:t},`${t}-${e.role}-${e.source}`))})]})]})}function NI({...e}){return(0,I.jsx)(Tg,{"data-slot":`dropdown-menu`,...e})}function PI({...e}){return(0,I.jsx)(Eg,{"data-slot":`dropdown-menu-trigger`,...e})}function FI({className:e,sideOffset:t=4,...n}){return(0,I.jsx)(Dg,{children:(0,I.jsx)(Og,{"data-slot":`dropdown-menu-content`,sideOffset:t,className:K(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md`,e),...n})})}function II({className:e,inset:t,variant:n=`default`,...r}){return(0,I.jsx)(kg,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:K(`focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r})}function LI(e){let t=[],n=e.replace(/\r\n/g,`
|
|
181
181
|
`),r=[],i=n.includes(`[TRUNCATED]`),a=n.split(`
|
|
182
182
|
|
|
183
183
|
`);for(let e=0;e<a.length;e+=1){let n=a[e],o=n.trim();if(!o)continue;if(o===`[TRUNCATED]`){i=!0;continue}let s=n.split(`
|
|
184
184
|
`),c=null,l=[];for(let e of s){let t=e.trimEnd();if(t){if(t.startsWith(`event:`)){c=t.slice(6).trim()||null;continue}if(t.startsWith(`data:`)){l.push(t.slice(5).trimStart());continue}if(t===`[TRUNCATED]`){i=!0;continue}l.push(t)}}if(l.length===0){t.push(`SSE frame #${e+1} has no data.`);continue}r.push({event:c,data:l.join(`
|
|
185
185
|
`),frameNo:e+1,rawFrame:n})}if(r.length>0){let e=r[r.length-1]?.data?.trim();e&&e!==`[DONE]`&&!n.endsWith(`
|
|
186
186
|
|
|
187
|
-
`)&&!i&&(t.push(`SSE stream tail may be incomplete.`),i=!0)}return{frames:r,warnings:t,partial:i}}function
|
|
188
|
-
`);e&&r.push({role:`system`,source:`request`,blocks:[{type:`text`,text:e}]})}for(let e of LI(n.messages)){let t=zI(e);if(!t)continue;let n=BI(t.role,`user`),i=HI(t.content);r.push({role:n,source:`request`,blocks:i})}return r}function WI(e,t){if(!e)return t.push(`Anthropic non-stream response body is empty.`),[];let n=RI(e);return!n.value||!II(n.value)?(t.push(`Anthropic response JSON parse failed: ${n.error??`invalid json`}`),[{role:`assistant`,source:`response`,blocks:[{type:`text`,text:e}],meta:{parseWarnings:[`fallback-to-raw-text`]}}]):[{role:`assistant`,source:`response`,blocks:HI(n.value.content),meta:{model:Z(n.value.model)??void 0,stopReason:Z(n.value.stop_reason),usage:n.value.usage}}]}function GI(e){return e.kind===`text`?{type:`text`,text:e.text}:e.kind===`thinking`?{type:`thinking`,thinking:e.thinking,signature:e.signature}:e.kind===`tool_use`?{type:`tool_use`,id:e.id,name:e.name,input:e.input,rawInput:e.inputRaw||void 0,partial:e.partial}:e.kind===`tool_result`?{type:`tool_result`,toolUseId:e.toolUseId,content:e.content,isError:e.isError}:e.kind===`image`?{type:`image`,mimeType:e.mimeType,data:e.data,detail:e.detail}:{type:`unknown`,raw:e.raw,label:`anthropic.stream`}}function KI(e){let t=zI(e);if(!t)return{kind:`unknown`,raw:e};let n=Z(t.type);if(n===`text`)return{kind:`text`,text:Z(t.text)??``};if(n===`thinking`)return{kind:`thinking`,thinking:Z(t.thinking)??``,signature:Z(t.signature)??void 0};if(n===`tool_use`)return{kind:`tool_use`,id:Z(t.id)??void 0,name:Z(t.name)??void 0,inputRaw:``,partial:!1,input:t.input};if(n===`tool_result`)return{kind:`tool_result`,toolUseId:Z(t.tool_use_id)??void 0,content:t.content,isError:t.is_error===!0};if(n===`image`){let e=zI(t.source);return{kind:`image`,mimeType:Z(e?.media_type)??void 0,data:Z(e?.data)??void 0,detail:Z(e?.type)??void 0}}return{kind:`unknown`,raw:e}}function qI(e,t){if(!e)return t.push(`Anthropic stream content is empty.`),{messages:[],streamEventCount:0,partial:!1};let n=FI(e);t.push(...n.warnings.map(e=>`Anthropic stream: ${e}`));let r=new Map,i=[],a=`assistant`,o,s,c;for(let e of n.frames){let n=e.data.trim();if(!n||n===`[DONE]`)continue;let l=RI(n);if(!l.value||!II(l.value)){t.push(`Anthropic stream frame #${e.frameNo} JSON parse failed.`);continue}let u=Z(l.value.type);if(!u){t.push(`Anthropic stream frame #${e.frameNo} missing type.`);continue}if(u===`message_start`){let e=zI(l.value.message);a=BI(e?.role,`assistant`)===`tool`?`tool`:`assistant`,o=Z(e?.model)??o,c=e?.usage??c;continue}if(u===`content_block_start`){let e=typeof l.value.index==`number`?l.value.index:i.length,t=KI(l.value.content_block);r.set(e,t),i.includes(e)||i.push(e);continue}if(u===`content_block_delta`){let n=typeof l.value.index==`number`?l.value.index:i.length,a=zI(l.value.delta);if(!a){t.push(`Anthropic stream frame #${e.frameNo} has invalid delta.`);continue}let o=r.get(n);o||(o={kind:`unknown`,raw:{inferredFromDelta:!0,delta:a}},r.set(n,o),i.push(n));let s=Z(a.type);if(!s){t.push(`Anthropic stream frame #${e.frameNo} delta missing type.`);continue}if(s===`text_delta`){o.kind!==`text`&&(o={kind:`text`,text:``},r.set(n,o)),o.text+=Z(a.text)??``;continue}if(s===`thinking_delta`){o.kind!==`thinking`&&(o={kind:`thinking`,thinking:``},r.set(n,o)),o.thinking+=Z(a.thinking)??``;continue}if(s===`signature_delta`){o.kind!==`thinking`&&(o={kind:`thinking`,thinking:``},r.set(n,o)),o.signature=`${o.signature??``}${Z(a.signature)??``}`;continue}if(s===`input_json_delta`){o.kind!==`tool_use`&&(o={kind:`tool_use`,id:void 0,name:void 0,inputRaw:``,partial:!0},r.set(n,o)),o.inputRaw+=Z(a.partial_json)??``;continue}t.push(`Anthropic stream delta type not handled: ${s}`),r.set(n,{kind:`unknown`,raw:a});continue}if(u===`content_block_stop`){let e=typeof l.value.index==`number`?l.value.index:-1,n=r.get(e);if(n?.kind===`tool_use`&&n.inputRaw){let r=RI(n.inputRaw);r.value==null?(n.partial=!0,t.push(`Anthropic tool_use JSON parse failed at block ${e}: ${r.error}`)):(n.input=r.value,n.partial=!1)}continue}if(u===`message_delta`){let e=zI(l.value.delta);e&&(s=Z(e.stop_reason)??s),l.value.usage!==void 0&&(c=l.value.usage);continue}u===`message_stop`||u===`ping`||t.push(`Anthropic stream event not handled: ${u}`)}let l=i.sort((e,t)=>e-t).map(e=>r.get(e)).filter(e=>e!=null).map(GI);if(l.length===0)return t.push(`Anthropic stream produced no content blocks.`),{messages:[],streamEventCount:n.frames.length,partial:n.partial};let u=l.some(e=>e.type===`tool_use`&&e.partial===!0);return{messages:[{role:a,source:`stream`,blocks:l,meta:{model:o,stopReason:s,usage:c,partial:n.partial||u}}],streamEventCount:n.frames.length,partial:n.partial||u}}function JI(e){let t=[],n=UI(e.request.requestBody,t),r=[],i=0,a=!1;if(e.upstream.isStream){let n=qI(e.upstream.streamContent,t);r=n.messages,i=n.streamEventCount,a=n.partial}else r=WI(e.response.responseBody,t);return{inputMessages:n,outputMessages:r,warnings:t,streamEventCount:i,partial:a}}function YI(e){if(typeof e==`string`)return[{type:`text`,text:e}];if(!Array.isArray(e))return e==null?[]:[{type:`unknown`,raw:e,label:`openai.request.content`}];let t=[];for(let n of e){let e=zI(n);if(!e){t.push({type:`unknown`,raw:n,label:`openai.request.part`});continue}let r=Z(e.type);if(r===`text`||r===`input_text`){t.push({type:`text`,text:Z(e.text)??``});continue}if(r===`image_url`||r===`input_image`){let n=zI(e.image_url);t.push({type:`image`,url:Z(n?.url)??Z(e.image_url)??void 0,detail:Z(n?.detail)??void 0});continue}t.push({type:`unknown`,raw:n,label:`openai.request.part`})}return t}function XI(e,t){let n=zI(e);if(!n)return t.push(`OpenAI completions request body is missing or invalid.`),[];let r=[];for(let e of LI(n.messages)){let t=zI(e);if(!t)continue;let n=BI(t.role,`user`),i=YI(t.content);if(Array.isArray(t.tool_calls))for(let e of t.tool_calls){let t=zI(e);if(!t){i.push({type:`unknown`,raw:e,label:`openai.request.tool_call`});continue}let n=zI(t.function),r,a=Z(n?.arguments);a&&(r=RI(a).value??a),i.push({type:`tool_use`,id:Z(t.id)??void 0,name:Z(n?.name)??void 0,input:r,rawInput:a??void 0,partial:!1})}r.push({role:n,source:`request`,blocks:i.length>0?i:[{type:`text`,text:``}]})}return r}function ZI(e){let t=[],n=e.content;typeof n==`string`?t.push({type:`text`,text:n}):Array.isArray(n)?t.push(...YI(n)):n!=null&&t.push({type:`unknown`,raw:n,label:`openai.response.content`});let r=LI(e.tool_calls);for(let e of r){let n=zI(e);if(!n){t.push({type:`unknown`,raw:e,label:`openai.response.tool_call`});continue}let r=zI(n.function),i=Z(r?.arguments),a,o=!1;if(i){let e=RI(i);a=e.value??i,o=e.value==null}t.push({type:`tool_use`,id:Z(n.id)??void 0,name:Z(r?.name)??void 0,input:a,rawInput:i??void 0,partial:o})}return t.length===0&&t.push({type:`text`,text:``}),t}function QI(e,t){if(!e)return t.push(`OpenAI completions non-stream response body is empty.`),[];let n=RI(e);if(!n.value||!II(n.value))return t.push(`OpenAI completions response JSON parse failed: ${n.error??`invalid json`}`),[{role:`assistant`,source:`response`,blocks:[{type:`text`,text:e}],meta:{parseWarnings:[`fallback-to-raw-text`]}}];let r=zI(LI(n.value.choices)[0]),i=zI(r?.message);return i?[{role:BI(i.role,`assistant`),source:`response`,blocks:ZI(i),meta:{model:Z(n.value.model)??void 0,stopReason:Z(r?.finish_reason),usage:n.value.usage}}]:(t.push(`OpenAI completions response missing choices[0].message.`),[])}function $I(e,t){if(!e)return t.push(`OpenAI completions stream content is empty.`),{messages:[],streamEventCount:0,partial:!1};let n=FI(e);t.push(...n.warnings.map(e=>`OpenAI completions stream: ${e}`));let r=``,i=`assistant`,a,o,s=new Map;for(let e of n.frames){let n=e.data.trim();if(!n||n===`[DONE]`)continue;let c=RI(n);if(!c.value||!II(c.value)){t.push(`OpenAI completions frame #${e.frameNo} JSON parse failed.`);continue}a=Z(c.value.model)??a;for(let e of LI(c.value.choices)){let t=zI(e);if(!t)continue;o=Z(t.finish_reason)??o;let n=zI(t.delta);if(!n)continue;let a=Z(n.role);(a===`assistant`||a===`tool`)&&(i=a);let c=Z(n.content);c&&(r+=c);for(let e of LI(n.tool_calls)){let t=zI(e);if(!t)continue;let n=typeof t.index==`number`?t.index:s.size,r=s.get(n)??{argumentsRaw:``,partial:!1};r.id=Z(t.id)??r.id;let i=zI(t.function);r.name=Z(i?.name)??r.name,r.argumentsRaw+=Z(i?.arguments)??``,s.set(n,r)}}}let c=[];r&&c.push({type:`text`,text:r});let l=Array.from(s.entries()).sort((e,t)=>e[0]-t[0]);for(let[,e]of l){if(e.argumentsRaw){let n=RI(e.argumentsRaw);n.value==null?(e.parsedArguments=void 0,e.partial=!0,t.push(`OpenAI completions tool call arguments parse failed: ${n.error}`)):(e.parsedArguments=n.value,e.partial=!1)}c.push({type:`tool_use`,id:e.id,name:e.name,input:e.parsedArguments,rawInput:e.argumentsRaw||void 0,partial:e.partial})}if(c.length===0)return t.push(`OpenAI completions stream produced no assistant content.`),{messages:[],streamEventCount:n.frames.length,partial:n.partial};let u=c.some(e=>e.type===`tool_use`&&e.partial===!0);return{messages:[{role:i,source:`stream`,blocks:c,meta:{model:a,stopReason:o,partial:n.partial||u}}],streamEventCount:n.frames.length,partial:n.partial||u}}function eL(e){let t=[],n=XI(e.request.requestBody,t),r=[],i=0,a=!1;if(e.upstream.isStream){let n=$I(e.upstream.streamContent,t);r=n.messages,i=n.streamEventCount,a=n.partial}else r=QI(e.response.responseBody,t);return{inputMessages:n,outputMessages:r,warnings:t,streamEventCount:i,partial:a}}function tL(e){let t=zI(e);if(!t)return null;let n=BI(t.role,`user`);if(typeof t.content==`string`)return{role:n,source:`request`,blocks:[{type:`text`,text:t.content}]};let r=[];for(let e of LI(t.content)){let t=zI(e);if(!t){r.push({type:`unknown`,raw:e,label:`responses.input`});continue}let n=Z(t.type);if(n===`input_text`||n===`text`){r.push({type:`text`,text:Z(t.text)??``});continue}if(n===`input_image`||n===`image_url`){let e=zI(t.image_url);r.push({type:`image`,url:Z(e?.url)??Z(t.image_url)??void 0,detail:Z(e?.detail)??void 0});continue}if(n===`input_tool_result`){r.push({type:`tool_result`,toolUseId:Z(t.call_id)??void 0,content:t.output,isError:t.is_error===!0});continue}r.push({type:`unknown`,raw:e,label:`responses.input`})}return{role:n,source:`request`,blocks:r.length>0?r:[{type:`text`,text:``}]}}function nL(e,t){let n=zI(e);if(!n)return t.push(`OpenAI responses request body is missing or invalid.`),[];let r=n.input;if(typeof r==`string`)return[{role:`user`,source:`request`,blocks:[{type:`text`,text:r}]}];let i=[];for(let e of LI(r)){let t=tL(e);t&&i.push(t)}return i}function rL(e,t){let n=[];for(let t of e){let e=zI(t);if(!e){n.push({type:`unknown`,raw:t,label:`responses.output`});continue}let r=Z(e.type);if(r===`message`){for(let t of LI(e.content)){let e=zI(t);if(!e){n.push({type:`unknown`,raw:t,label:`responses.message.content`});continue}let r=Z(e.type);if(r===`output_text`||r===`text`)n.push({type:`text`,text:Z(e.text)??``});else if(r===`output_image`||r===`image_url`){let t=zI(e.image_url);n.push({type:`image`,url:Z(t?.url)??Z(e.image_url)??void 0,detail:Z(t?.detail)??void 0})}else n.push({type:`unknown`,raw:t,label:`responses.message.content`})}continue}if(r===`function_call`||r===`tool_call`){let t=Z(e.arguments)??Z(e.input)??``,r=t?RI(t):{value:void 0,error:null};n.push({type:`tool_use`,id:Z(e.call_id)??Z(e.id)??void 0,name:Z(e.name)??void 0,input:r.value??void 0,rawInput:t||void 0,partial:t?r.value==null:!1});continue}if(r===`function_call_output`||r===`tool_result`){n.push({type:`tool_result`,toolUseId:Z(e.call_id)??void 0,content:e.output,isError:e.is_error===!0});continue}n.push({type:`unknown`,raw:t,label:`responses.output`})}return n.length===0?[]:[{role:`assistant`,source:t,blocks:n}]}function iL(e,t){if(!e)return t.push(`OpenAI responses non-stream response body is empty.`),[];let n=RI(e);if(!n.value||!II(n.value))return t.push(`OpenAI responses JSON parse failed: ${n.error??`invalid json`}`),[{role:`assistant`,source:`response`,blocks:[{type:`text`,text:e}],meta:{parseWarnings:[`fallback-to-raw-text`]}}];let r=n.value,i=rL(LI(r.output),`response`);return i.length===0?[]:i.map(e=>({...e,meta:{model:Z(r.model)??void 0,stopReason:Z(r.status)??null,usage:r.usage}}))}function aL(e,t){if(!e)return t.push(`OpenAI responses stream content is empty.`),{messages:[],streamEventCount:0,partial:!1};let n=FI(e);t.push(...n.warnings.map(e=>`OpenAI responses stream: ${e}`));let r={text:``,functionCalls:new Map,rawItems:[]};for(let e of n.frames){let n=e.data.trim();if(!n||n===`[DONE]`)continue;let i=RI(n);if(!i.value||!II(i.value)){t.push(`OpenAI responses frame #${e.frameNo} JSON parse failed.`);continue}let a=Z(i.value.type)??e.event??``;if(a===`response.output_text.delta`){r.text+=Z(i.value.delta)??``;continue}if(a===`response.output_item.added`){let e=i.value.item;r.rawItems.push(e);continue}if(a===`response.function_call_arguments.delta`){let e=Z(i.value.call_id)??`unknown`,t=r.functionCalls.get(e)??{argumentsRaw:``,partial:!1};t.name=Z(i.value.name)??t.name,t.argumentsRaw+=Z(i.value.delta)??``,r.functionCalls.set(e,t);continue}if(a===`response.completed`){r.status=Z(i.value.status)??r.status,r.model=Z(i.value.model)??r.model;continue}a&&t.push(`OpenAI responses stream event not handled: ${a}`)}let i=[];r.text&&i.push({type:`text`,text:r.text});for(let[e,n]of r.functionCalls.entries()){if(n.argumentsRaw){let r=RI(n.argumentsRaw);r.value==null?(n.partial=!0,t.push(`OpenAI responses function_call arguments parse failed (${e}).`)):(n.parsed=r.value,n.partial=!1)}i.push({type:`tool_use`,id:e,name:n.name,input:n.parsed,rawInput:n.argumentsRaw||void 0,partial:n.partial})}if(r.rawItems.length>0){let e=rL(r.rawItems,`stream`)[0]?.blocks??[];i.push(...e)}if(i.length===0)return{messages:[],streamEventCount:n.frames.length,partial:n.partial};let a=n.partial||i.some(e=>e.type===`tool_use`&&e.partial);return{messages:[{role:`assistant`,source:`stream`,blocks:i,meta:{model:r.model,stopReason:r.status??null,partial:a}}],streamEventCount:n.frames.length,partial:a}}function oL(e){let t=[],n=nL(e.request.requestBody,t),r=[],i=0,a=!1;if(e.upstream.isStream){let n=aL(e.upstream.streamContent,t);r=n.messages,i=n.streamEventCount,a=n.partial}else r=iL(e.response.responseBody,t);return{inputMessages:n,outputMessages:r,warnings:t,streamEventCount:i,partial:a}}function sL(e){return{inputMessages:[],outputMessages:[],warnings:[e],streamEventCount:0,partial:!1}}function cL(e){let t=e.summary.routeType;return t===`anthropic-messages`?JI(e):t===`openai-completions`?eL(e):t===`openai-responses`?oL(e):sL(`Route type not supported for chat history parse: ${t}`)}function lL(e){let t=cL(e),n=[...t.warnings];return e.capture.requestBodyAvailable||n.unshift(`请求 body 不可用,输入历史可能不完整。`),e.capture.bodyPolicy===`off`&&n.unshift(`bodyPolicy=off,无法完整还原请求/响应消息体。`),e.upstream.isStream&&!e.capture.streamCaptured&&n.push(`流式请求未捕获 streamContent,输出消息可能缺失。`),{messages:[...t.inputMessages,...t.outputMessages],warnings:n,stats:{inputCount:t.inputMessages.length,outputCount:t.outputMessages.length,streamEventCount:t.streamEventCount,streamPartial:t.partial}}}function uL(){let e=Sr(),{id:t}=br({from:`/logs/$id`}),[n,r]=(0,F.useState)(null),[i,a]=(0,F.useState)(!0),[o,s]=(0,F.useState)(null);(0,F.useEffect)(()=>{let e=!1;async function n(){a(!0),s(null);try{let n=await pS(t);e||(r(n),a(!1))}catch(t){e||(s(t instanceof Error?t.message:`日志详情加载失败`),a(!1))}}return n(),()=>{e=!0}},[t]);let c=(0,F.useMemo)(()=>{if(!n)return[];let e=[...n.capture.truncatedHints],t=WF(n);return t&&e.unshift(t),e},[n]),l=(0,F.useMemo)(()=>n?GF(n.summary.routeType):`-`,[n]),u=(0,F.useMemo)(()=>n?lL(n):null,[n]);if(i)return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(EM,{className:`h-8 w-56`}),(0,I.jsx)(EM,{className:`h-24 w-full`}),(0,I.jsx)(EM,{className:`h-56 w-full`})]});if(o||!n)return(0,I.jsxs)(bM,{className:`min-h-[240px] p-6 md:p-6`,children:[(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`日志详情加载失败`}),(0,I.jsx)(TM,{children:o??`日志事件不存在`})]}),(0,I.jsx)(q,{variant:`outline`,onClick:()=>e({to:`/logs`,search:{user:void 0,session:void 0}}),children:`返回日志列表`})]});let d=!!(n.plugins&&(n.plugins.request?.length||n.plugins.response?.length));return(0,I.jsxs)(yI,{defaultValue:`overview`,className:`space-y-2`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 rounded-lg border bg-background px-3 py-2`,children:[(0,I.jsxs)(q,{variant:`outline`,size:`sm`,onClick:()=>e({to:`/logs`,search:{user:void 0,session:void 0}}),children:[(0,I.jsx)(Yi,{className:`h-4 w-4`}),`返回列表`]}),(0,I.jsxs)(xI,{variant:`line`,className:`h-auto shrink-0`,children:[(0,I.jsx)(SI,{value:`overview`,children:`概览`}),(0,I.jsx)(SI,{value:`request-response`,children:`请求 / 响应`}),d?(0,I.jsx)(SI,{value:`plugins`,children:`插件`}):null,(0,I.jsx)(SI,{value:`session-tracing`,children:`会话 / 追踪`}),(0,I.jsx)(SI,{value:`raw`,children:`Raw`})]}),(0,I.jsxs)(q,{size:`sm`,variant:`outline`,className:`ml-auto`,onClick:async()=>{await navigator.clipboard.writeText(VF(n.rawEvent)),L.success(`已复制完整日志 JSON`)},children:[(0,I.jsx)(aa,{className:`h-4 w-4`}),`复制 Raw JSON`]}),(0,I.jsxs)(jI,{children:[(0,I.jsx)(MI,{asChild:!0,children:(0,I.jsxs)(q,{size:`sm`,variant:`outline`,children:[(0,I.jsx)(aa,{className:`h-4 w-4`}),`Copy as cURL`,(0,I.jsx)(ea,{className:`h-4 w-4`})]})}),(0,I.jsxs)(NI,{align:`end`,children:[(0,I.jsx)(PI,{onClick:async()=>{await navigator.clipboard.writeText(eI(n,`local-router`)),L.success(`已复制 local-router cURL`)},children:`复制发给 local-router 的请求`}),(0,I.jsx)(PI,{onClick:async()=>{await navigator.clipboard.writeText(eI(n,`provider`)),L.success(`已复制 provider cURL(API Key 为占位符)`)},children:`复制发给 provider 的请求`})]})]})]}),(0,I.jsxs)(CI,{value:`overview`,className:`mt-0 space-y-4`,children:[(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`概览`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`核心元信息与定位字段`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,I.jsx)(Y,{variant:`outline`,children:n.summary.level}),(0,I.jsx)(Y,{variant:`outline`,children:n.summary.provider}),(0,I.jsx)(Y,{variant:`outline`,children:n.summary.routeType}),(0,I.jsx)(Y,{variant:`outline`,children:n.summary.statusClass}),(0,I.jsx)(Y,{variant:n.summary.hasError?`secondary`:`outline`,children:n.summary.upstreamStatus})]}),(0,I.jsxs)(`div`,{className:`grid gap-2 text-sm sm:grid-cols-2 lg:grid-cols-3`,children:[(0,I.jsx)(iI,{label:`时间`,value:UF(n.summary.ts)}),(0,I.jsx)(iI,{label:`request_id`,value:n.summary.requestId,mono:!0}),(0,I.jsx)(iI,{label:`model_in`,value:n.summary.modelIn,mono:!0}),(0,I.jsx)(iI,{label:`model_out`,value:n.summary.modelOut,mono:!0}),(0,I.jsx)(iI,{label:`route_rule_key`,value:n.summary.routeRuleKey,mono:!0}),(0,I.jsx)(iI,{label:`latency`,value:`${n.summary.latencyMs} ms`}),(0,I.jsx)(iI,{label:`target_url`,value:n.upstream.targetUrl,mono:!0}),(0,I.jsx)(iI,{label:`proxy_url`,value:n.upstream.proxyUrl??`-`,mono:!0}),(0,I.jsx)(iI,{label:`定位`,value:`${n.location.file}:${n.location.line}`,mono:!0})]}),c.length>0?(0,I.jsx)(`div`,{className:`space-y-1 rounded-md border bg-muted/30 px-3 py-2 text-xs text-muted-foreground`,children:c.map(e=>(0,I.jsxs)(`div`,{children:[`• `,e]},e))}):null]})]}),(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`路由链路`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`入站请求到出站转发的完整可视化链路`})]}),(0,I.jsx)(`div`,{className:`px-3 py-3`,children:(0,I.jsx)(uI,{interfaceType:l,routeType:n.summary.routeType,modelIn:n.summary.modelIn,provider:n.summary.provider,modelOut:n.summary.modelOut,routeRuleKey:n.summary.routeRuleKey})})]})]}),(0,I.jsx)(CI,{value:`request-response`,className:`mt-0 space-y-4`,children:(0,I.jsx)(cI,{detail:n})}),d?(0,I.jsx)(CI,{value:`plugins`,className:`mt-0 space-y-4`,children:(0,I.jsx)(aI,{detail:n})}):null,(0,I.jsxs)(CI,{value:`session-tracing`,className:`mt-0 space-y-4`,children:[u?(0,I.jsx)(AI,{parsed:u}):null,(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(`div`,{className:`border-b px-3 py-3`,children:(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`Upstream / Tracing`})}),(0,I.jsxs)(`div`,{className:`grid gap-2 px-3 py-3 text-sm sm:grid-cols-2 lg:grid-cols-3`,children:[(0,I.jsx)(iI,{label:`provider_request_id`,value:n.upstream.providerRequestId??`-`,mono:!0}),(0,I.jsx)(iI,{label:`error_type`,value:n.upstream.errorType??`-`,mono:!0}),(0,I.jsx)(iI,{label:`error_message`,value:n.upstream.errorMessage??`-`}),(0,I.jsx)(iI,{label:`is_stream`,value:n.upstream.isStream?`true`:`false`}),(0,I.jsx)(iI,{label:`stream_file`,value:n.upstream.streamFile??`无 stream 数据`,mono:!0})]}),(0,I.jsx)(`div`,{className:`px-3 pb-3`,children:(0,I.jsx)(dI,{title:`stream content`,content:n.upstream.streamContent,emptyText:n.upstream.isStream?`未捕获 stream 内容。`:`非流式请求,无 stream 内容。`})})]})]}),(0,I.jsx)(CI,{value:`raw`,className:`mt-0`,children:(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`Raw`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`完整事件 JSON`})]}),(0,I.jsx)(`div`,{className:`px-3 py-3`,children:(0,I.jsx)(rI,{title:`event`,value:n.rawEvent})})]})})]})}function dL(e,t){return typeof e==`function`?e(t):e}function fL(e,t){return n=>{t.setState(t=>({...t,[e]:dL(n,t[e])}))}}function pL(e){return e instanceof Function}function mL(e){return Array.isArray(e)&&e.every(e=>typeof e==`number`)}function hL(e,t){let n=[],r=e=>{e.forEach(e=>{n.push(e);let i=t(e);i!=null&&i.length&&r(i)})};return r(e),n}function Q(e,t,n){let r=[],i;return a=>{let o;n.key&&n.debug&&(o=Date.now());let s=e(a);if(!(s.length!==r.length||s.some((e,t)=>r[t]!==e)))return i;r=s;let c;if(n.key&&n.debug&&(c=Date.now()),i=t(...s),n==null||n.onChange==null||n.onChange(i),n.key&&n.debug&&n!=null&&n.debug()){let e=Math.round((Date.now()-o)*100)/100,t=Math.round((Date.now()-c)*100)/100,r=t/16,i=(e,t)=>{for(e=String(e);e.length<t;)e=` `+e;return e};console.info(`%c⏱ ${i(t,5)} /${i(e,5)} ms`,`
|
|
187
|
+
`)&&!i&&(t.push(`SSE stream tail may be incomplete.`),i=!0)}return{frames:r,warnings:t,partial:i}}function RI(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function zI(e){return Array.isArray(e)?e:[]}function Z(e){return typeof e==`string`?e:null}function BI(e){try{return{value:JSON.parse(e),error:null}}catch(e){return{value:null,error:e instanceof Error?e.message:`JSON parse failed`}}}function VI(e){return RI(e)?e:null}function HI(e,t){return e===`user`||e===`assistant`||e===`system`||e===`tool`?e:t}function UI(e){if(!RI(e))return{type:`unknown`,raw:e,label:`anthropic.content`};let t=Z(e.type);if(t===`text`)return{type:`text`,text:Z(e.text)??``};if(t===`thinking`)return{type:`thinking`,thinking:Z(e.thinking)??``,signature:Z(e.signature)??void 0};if(t===`tool_use`)return{type:`tool_use`,id:Z(e.id)??void 0,name:Z(e.name)??void 0,input:e.input};if(t===`tool_result`)return{type:`tool_result`,toolUseId:Z(e.tool_use_id)??void 0,content:e.content,isError:e.is_error===!0};if(t===`image`){let t=VI(e.source);return{type:`image`,mimeType:Z(t?.media_type)??void 0,data:Z(t?.data)??void 0,detail:Z(t?.type)??void 0}}return{type:`unknown`,raw:e,label:`anthropic.content`}}function WI(e){if(typeof e==`string`)return[{type:`text`,text:e}];let t=zI(e).map(UI);return t.length>0?t:[{type:`unknown`,raw:e,label:`anthropic.content`}]}function GI(e,t){let n=VI(e);if(!n)return t.push(`Anthropic request body is missing or invalid.`),[];let r=[],i=n.system;if(typeof i==`string`)r.push({role:`system`,source:`request`,blocks:[{type:`text`,text:i}]});else if(Array.isArray(i)){let e=i.map(e=>{if(typeof e==`string`)return e;let t=VI(e);return t?Z(t.text)??``:``}).filter(Boolean).join(`
|
|
188
|
+
`);e&&r.push({role:`system`,source:`request`,blocks:[{type:`text`,text:e}]})}for(let e of zI(n.messages)){let t=VI(e);if(!t)continue;let n=HI(t.role,`user`),i=WI(t.content);r.push({role:n,source:`request`,blocks:i})}return r}function KI(e,t){if(!e)return t.push(`Anthropic non-stream response body is empty.`),[];let n=BI(e);return!n.value||!RI(n.value)?(t.push(`Anthropic response JSON parse failed: ${n.error??`invalid json`}`),[{role:`assistant`,source:`response`,blocks:[{type:`text`,text:e}],meta:{parseWarnings:[`fallback-to-raw-text`]}}]):[{role:`assistant`,source:`response`,blocks:WI(n.value.content),meta:{model:Z(n.value.model)??void 0,stopReason:Z(n.value.stop_reason),usage:n.value.usage}}]}function qI(e){return e.kind===`text`?{type:`text`,text:e.text}:e.kind===`thinking`?{type:`thinking`,thinking:e.thinking,signature:e.signature}:e.kind===`tool_use`?{type:`tool_use`,id:e.id,name:e.name,input:e.input,rawInput:e.inputRaw||void 0,partial:e.partial}:e.kind===`tool_result`?{type:`tool_result`,toolUseId:e.toolUseId,content:e.content,isError:e.isError}:e.kind===`image`?{type:`image`,mimeType:e.mimeType,data:e.data,detail:e.detail}:{type:`unknown`,raw:e.raw,label:`anthropic.stream`}}function JI(e){let t=VI(e);if(!t)return{kind:`unknown`,raw:e};let n=Z(t.type);if(n===`text`)return{kind:`text`,text:Z(t.text)??``};if(n===`thinking`)return{kind:`thinking`,thinking:Z(t.thinking)??``,signature:Z(t.signature)??void 0};if(n===`tool_use`)return{kind:`tool_use`,id:Z(t.id)??void 0,name:Z(t.name)??void 0,inputRaw:``,partial:!1,input:t.input};if(n===`tool_result`)return{kind:`tool_result`,toolUseId:Z(t.tool_use_id)??void 0,content:t.content,isError:t.is_error===!0};if(n===`image`){let e=VI(t.source);return{kind:`image`,mimeType:Z(e?.media_type)??void 0,data:Z(e?.data)??void 0,detail:Z(e?.type)??void 0}}return{kind:`unknown`,raw:e}}function YI(e,t){if(!e)return t.push(`Anthropic stream content is empty.`),{messages:[],streamEventCount:0,partial:!1};let n=LI(e);t.push(...n.warnings.map(e=>`Anthropic stream: ${e}`));let r=new Map,i=[],a=`assistant`,o,s,c;for(let e of n.frames){let n=e.data.trim();if(!n||n===`[DONE]`)continue;let l=BI(n);if(!l.value||!RI(l.value)){t.push(`Anthropic stream frame #${e.frameNo} JSON parse failed.`);continue}let u=Z(l.value.type);if(!u){t.push(`Anthropic stream frame #${e.frameNo} missing type.`);continue}if(u===`message_start`){let e=VI(l.value.message);a=HI(e?.role,`assistant`)===`tool`?`tool`:`assistant`,o=Z(e?.model)??o,c=e?.usage??c;continue}if(u===`content_block_start`){let e=typeof l.value.index==`number`?l.value.index:i.length,t=JI(l.value.content_block);r.set(e,t),i.includes(e)||i.push(e);continue}if(u===`content_block_delta`){let n=typeof l.value.index==`number`?l.value.index:i.length,a=VI(l.value.delta);if(!a){t.push(`Anthropic stream frame #${e.frameNo} has invalid delta.`);continue}let o=r.get(n);o||(o={kind:`unknown`,raw:{inferredFromDelta:!0,delta:a}},r.set(n,o),i.push(n));let s=Z(a.type);if(!s){t.push(`Anthropic stream frame #${e.frameNo} delta missing type.`);continue}if(s===`text_delta`){o.kind!==`text`&&(o={kind:`text`,text:``},r.set(n,o)),o.text+=Z(a.text)??``;continue}if(s===`thinking_delta`){o.kind!==`thinking`&&(o={kind:`thinking`,thinking:``},r.set(n,o)),o.thinking+=Z(a.thinking)??``;continue}if(s===`signature_delta`){o.kind!==`thinking`&&(o={kind:`thinking`,thinking:``},r.set(n,o)),o.signature=`${o.signature??``}${Z(a.signature)??``}`;continue}if(s===`input_json_delta`){o.kind!==`tool_use`&&(o={kind:`tool_use`,id:void 0,name:void 0,inputRaw:``,partial:!0},r.set(n,o)),o.inputRaw+=Z(a.partial_json)??``;continue}t.push(`Anthropic stream delta type not handled: ${s}`),r.set(n,{kind:`unknown`,raw:a});continue}if(u===`content_block_stop`){let e=typeof l.value.index==`number`?l.value.index:-1,n=r.get(e);if(n?.kind===`tool_use`&&n.inputRaw){let r=BI(n.inputRaw);r.value==null?(n.partial=!0,t.push(`Anthropic tool_use JSON parse failed at block ${e}: ${r.error}`)):(n.input=r.value,n.partial=!1)}continue}if(u===`message_delta`){let e=VI(l.value.delta);e&&(s=Z(e.stop_reason)??s),l.value.usage!==void 0&&(c=l.value.usage);continue}u===`message_stop`||u===`ping`||t.push(`Anthropic stream event not handled: ${u}`)}let l=i.sort((e,t)=>e-t).map(e=>r.get(e)).filter(e=>e!=null).map(qI);if(l.length===0)return t.push(`Anthropic stream produced no content blocks.`),{messages:[],streamEventCount:n.frames.length,partial:n.partial};let u=l.some(e=>e.type===`tool_use`&&e.partial===!0);return{messages:[{role:a,source:`stream`,blocks:l,meta:{model:o,stopReason:s,usage:c,partial:n.partial||u}}],streamEventCount:n.frames.length,partial:n.partial||u}}function XI(e){let t=[],n=GI(e.request.requestBody,t),r=[],i=0,a=!1;if(e.upstream.isStream){let n=YI(e.upstream.streamContent,t);r=n.messages,i=n.streamEventCount,a=n.partial}else r=KI(e.response.responseBody,t);return{inputMessages:n,outputMessages:r,warnings:t,streamEventCount:i,partial:a}}function ZI(e){if(typeof e==`string`)return[{type:`text`,text:e}];if(!Array.isArray(e))return e==null?[]:[{type:`unknown`,raw:e,label:`openai.request.content`}];let t=[];for(let n of e){let e=VI(n);if(!e){t.push({type:`unknown`,raw:n,label:`openai.request.part`});continue}let r=Z(e.type);if(r===`text`||r===`input_text`){t.push({type:`text`,text:Z(e.text)??``});continue}if(r===`image_url`||r===`input_image`){let n=VI(e.image_url);t.push({type:`image`,url:Z(n?.url)??Z(e.image_url)??void 0,detail:Z(n?.detail)??void 0});continue}t.push({type:`unknown`,raw:n,label:`openai.request.part`})}return t}function QI(e,t){let n=VI(e);if(!n)return t.push(`OpenAI completions request body is missing or invalid.`),[];let r=[];for(let e of zI(n.messages)){let t=VI(e);if(!t)continue;let n=HI(t.role,`user`),i=ZI(t.content);if(Array.isArray(t.tool_calls))for(let e of t.tool_calls){let t=VI(e);if(!t){i.push({type:`unknown`,raw:e,label:`openai.request.tool_call`});continue}let n=VI(t.function),r,a=Z(n?.arguments);a&&(r=BI(a).value??a),i.push({type:`tool_use`,id:Z(t.id)??void 0,name:Z(n?.name)??void 0,input:r,rawInput:a??void 0,partial:!1})}r.push({role:n,source:`request`,blocks:i.length>0?i:[{type:`text`,text:``}]})}return r}function $I(e){let t=[],n=e.content;typeof n==`string`?t.push({type:`text`,text:n}):Array.isArray(n)?t.push(...ZI(n)):n!=null&&t.push({type:`unknown`,raw:n,label:`openai.response.content`});let r=zI(e.tool_calls);for(let e of r){let n=VI(e);if(!n){t.push({type:`unknown`,raw:e,label:`openai.response.tool_call`});continue}let r=VI(n.function),i=Z(r?.arguments),a,o=!1;if(i){let e=BI(i);a=e.value??i,o=e.value==null}t.push({type:`tool_use`,id:Z(n.id)??void 0,name:Z(r?.name)??void 0,input:a,rawInput:i??void 0,partial:o})}return t.length===0&&t.push({type:`text`,text:``}),t}function eL(e,t){if(!e)return t.push(`OpenAI completions non-stream response body is empty.`),[];let n=BI(e);if(!n.value||!RI(n.value))return t.push(`OpenAI completions response JSON parse failed: ${n.error??`invalid json`}`),[{role:`assistant`,source:`response`,blocks:[{type:`text`,text:e}],meta:{parseWarnings:[`fallback-to-raw-text`]}}];let r=VI(zI(n.value.choices)[0]),i=VI(r?.message);return i?[{role:HI(i.role,`assistant`),source:`response`,blocks:$I(i),meta:{model:Z(n.value.model)??void 0,stopReason:Z(r?.finish_reason),usage:n.value.usage}}]:(t.push(`OpenAI completions response missing choices[0].message.`),[])}function tL(e,t){if(!e)return t.push(`OpenAI completions stream content is empty.`),{messages:[],streamEventCount:0,partial:!1};let n=LI(e);t.push(...n.warnings.map(e=>`OpenAI completions stream: ${e}`));let r=``,i=`assistant`,a,o,s=new Map;for(let e of n.frames){let n=e.data.trim();if(!n||n===`[DONE]`)continue;let c=BI(n);if(!c.value||!RI(c.value)){t.push(`OpenAI completions frame #${e.frameNo} JSON parse failed.`);continue}a=Z(c.value.model)??a;for(let e of zI(c.value.choices)){let t=VI(e);if(!t)continue;o=Z(t.finish_reason)??o;let n=VI(t.delta);if(!n)continue;let a=Z(n.role);(a===`assistant`||a===`tool`)&&(i=a);let c=Z(n.content);c&&(r+=c);for(let e of zI(n.tool_calls)){let t=VI(e);if(!t)continue;let n=typeof t.index==`number`?t.index:s.size,r=s.get(n)??{argumentsRaw:``,partial:!1};r.id=Z(t.id)??r.id;let i=VI(t.function);r.name=Z(i?.name)??r.name,r.argumentsRaw+=Z(i?.arguments)??``,s.set(n,r)}}}let c=[];r&&c.push({type:`text`,text:r});let l=Array.from(s.entries()).sort((e,t)=>e[0]-t[0]);for(let[,e]of l){if(e.argumentsRaw){let n=BI(e.argumentsRaw);n.value==null?(e.parsedArguments=void 0,e.partial=!0,t.push(`OpenAI completions tool call arguments parse failed: ${n.error}`)):(e.parsedArguments=n.value,e.partial=!1)}c.push({type:`tool_use`,id:e.id,name:e.name,input:e.parsedArguments,rawInput:e.argumentsRaw||void 0,partial:e.partial})}if(c.length===0)return t.push(`OpenAI completions stream produced no assistant content.`),{messages:[],streamEventCount:n.frames.length,partial:n.partial};let u=c.some(e=>e.type===`tool_use`&&e.partial===!0);return{messages:[{role:i,source:`stream`,blocks:c,meta:{model:a,stopReason:o,partial:n.partial||u}}],streamEventCount:n.frames.length,partial:n.partial||u}}function nL(e){let t=[],n=QI(e.request.requestBody,t),r=[],i=0,a=!1;if(e.upstream.isStream){let n=tL(e.upstream.streamContent,t);r=n.messages,i=n.streamEventCount,a=n.partial}else r=eL(e.response.responseBody,t);return{inputMessages:n,outputMessages:r,warnings:t,streamEventCount:i,partial:a}}function rL(e){let t=VI(e);if(!t)return null;let n=HI(t.role,`user`);if(typeof t.content==`string`)return{role:n,source:`request`,blocks:[{type:`text`,text:t.content}]};let r=[];for(let e of zI(t.content)){let t=VI(e);if(!t){r.push({type:`unknown`,raw:e,label:`responses.input`});continue}let n=Z(t.type);if(n===`input_text`||n===`text`){r.push({type:`text`,text:Z(t.text)??``});continue}if(n===`input_image`||n===`image_url`){let e=VI(t.image_url);r.push({type:`image`,url:Z(e?.url)??Z(t.image_url)??void 0,detail:Z(e?.detail)??void 0});continue}if(n===`input_tool_result`){r.push({type:`tool_result`,toolUseId:Z(t.call_id)??void 0,content:t.output,isError:t.is_error===!0});continue}r.push({type:`unknown`,raw:e,label:`responses.input`})}return{role:n,source:`request`,blocks:r.length>0?r:[{type:`text`,text:``}]}}function iL(e,t){let n=VI(e);if(!n)return t.push(`OpenAI responses request body is missing or invalid.`),[];let r=n.input;if(typeof r==`string`)return[{role:`user`,source:`request`,blocks:[{type:`text`,text:r}]}];let i=[];for(let e of zI(r)){let t=rL(e);t&&i.push(t)}return i}function aL(e,t){let n=[];for(let t of e){let e=VI(t);if(!e){n.push({type:`unknown`,raw:t,label:`responses.output`});continue}let r=Z(e.type);if(r===`message`){for(let t of zI(e.content)){let e=VI(t);if(!e){n.push({type:`unknown`,raw:t,label:`responses.message.content`});continue}let r=Z(e.type);if(r===`output_text`||r===`text`)n.push({type:`text`,text:Z(e.text)??``});else if(r===`output_image`||r===`image_url`){let t=VI(e.image_url);n.push({type:`image`,url:Z(t?.url)??Z(e.image_url)??void 0,detail:Z(t?.detail)??void 0})}else n.push({type:`unknown`,raw:t,label:`responses.message.content`})}continue}if(r===`function_call`||r===`tool_call`){let t=Z(e.arguments)??Z(e.input)??``,r=t?BI(t):{value:void 0,error:null};n.push({type:`tool_use`,id:Z(e.call_id)??Z(e.id)??void 0,name:Z(e.name)??void 0,input:r.value??void 0,rawInput:t||void 0,partial:t?r.value==null:!1});continue}if(r===`function_call_output`||r===`tool_result`){n.push({type:`tool_result`,toolUseId:Z(e.call_id)??void 0,content:e.output,isError:e.is_error===!0});continue}n.push({type:`unknown`,raw:t,label:`responses.output`})}return n.length===0?[]:[{role:`assistant`,source:t,blocks:n}]}function oL(e,t){if(!e)return t.push(`OpenAI responses non-stream response body is empty.`),[];let n=BI(e);if(!n.value||!RI(n.value))return t.push(`OpenAI responses JSON parse failed: ${n.error??`invalid json`}`),[{role:`assistant`,source:`response`,blocks:[{type:`text`,text:e}],meta:{parseWarnings:[`fallback-to-raw-text`]}}];let r=n.value,i=aL(zI(r.output),`response`);return i.length===0?[]:i.map(e=>({...e,meta:{model:Z(r.model)??void 0,stopReason:Z(r.status)??null,usage:r.usage}}))}function sL(e,t){if(!e)return t.push(`OpenAI responses stream content is empty.`),{messages:[],streamEventCount:0,partial:!1};let n=LI(e);t.push(...n.warnings.map(e=>`OpenAI responses stream: ${e}`));let r={text:``,functionCalls:new Map,rawItems:[]};for(let e of n.frames){let n=e.data.trim();if(!n||n===`[DONE]`)continue;let i=BI(n);if(!i.value||!RI(i.value)){t.push(`OpenAI responses frame #${e.frameNo} JSON parse failed.`);continue}let a=Z(i.value.type)??e.event??``;if(a===`response.output_text.delta`){r.text+=Z(i.value.delta)??``;continue}if(a===`response.output_item.added`){let e=i.value.item;r.rawItems.push(e);continue}if(a===`response.function_call_arguments.delta`){let e=Z(i.value.call_id)??`unknown`,t=r.functionCalls.get(e)??{argumentsRaw:``,partial:!1};t.name=Z(i.value.name)??t.name,t.argumentsRaw+=Z(i.value.delta)??``,r.functionCalls.set(e,t);continue}if(a===`response.completed`){r.status=Z(i.value.status)??r.status,r.model=Z(i.value.model)??r.model;continue}a&&t.push(`OpenAI responses stream event not handled: ${a}`)}let i=[];r.text&&i.push({type:`text`,text:r.text});for(let[e,n]of r.functionCalls.entries()){if(n.argumentsRaw){let r=BI(n.argumentsRaw);r.value==null?(n.partial=!0,t.push(`OpenAI responses function_call arguments parse failed (${e}).`)):(n.parsed=r.value,n.partial=!1)}i.push({type:`tool_use`,id:e,name:n.name,input:n.parsed,rawInput:n.argumentsRaw||void 0,partial:n.partial})}if(r.rawItems.length>0){let e=aL(r.rawItems,`stream`)[0]?.blocks??[];i.push(...e)}if(i.length===0)return{messages:[],streamEventCount:n.frames.length,partial:n.partial};let a=n.partial||i.some(e=>e.type===`tool_use`&&e.partial);return{messages:[{role:`assistant`,source:`stream`,blocks:i,meta:{model:r.model,stopReason:r.status??null,partial:a}}],streamEventCount:n.frames.length,partial:a}}function cL(e){let t=[],n=iL(e.request.requestBody,t),r=[],i=0,a=!1;if(e.upstream.isStream){let n=sL(e.upstream.streamContent,t);r=n.messages,i=n.streamEventCount,a=n.partial}else r=oL(e.response.responseBody,t);return{inputMessages:n,outputMessages:r,warnings:t,streamEventCount:i,partial:a}}function lL(e){return{inputMessages:[],outputMessages:[],warnings:[e],streamEventCount:0,partial:!1}}function uL(e){let t=e.summary.routeType;return t===`anthropic-messages`?XI(e):t===`openai-completions`?nL(e):t===`openai-responses`?cL(e):lL(`Route type not supported for chat history parse: ${t}`)}function dL(e){let t=uL(e),n=[...t.warnings];return e.capture.requestBodyAvailable||n.unshift(`请求 body 不可用,输入历史可能不完整。`),e.capture.bodyPolicy===`off`&&n.unshift(`bodyPolicy=off,无法完整还原请求/响应消息体。`),e.upstream.isStream&&!e.capture.streamCaptured&&n.push(`流式请求未捕获 streamContent,输出消息可能缺失。`),{messages:[...t.inputMessages,...t.outputMessages],warnings:n,stats:{inputCount:t.inputMessages.length,outputCount:t.outputMessages.length,streamEventCount:t.streamEventCount,streamPartial:t.partial}}}function fL(){let e=Sr(),{id:t}=br({from:`/logs/$id`}),[n,r]=(0,F.useState)(null),[i,a]=(0,F.useState)(!0),[o,s]=(0,F.useState)(null);(0,F.useEffect)(()=>{let e=!1;async function n(){a(!0),s(null);try{let n=await pS(t);e||(r(n),a(!1))}catch(t){e||(s(t instanceof Error?t.message:`日志详情加载失败`),a(!1))}}return n(),()=>{e=!0}},[t]);let c=(0,F.useMemo)(()=>{if(!n)return[];let e=[...n.capture.truncatedHints],t=KF(n);return t&&e.unshift(t),e},[n]),l=(0,F.useMemo)(()=>n?qF(n.summary.routeType):`-`,[n]),u=(0,F.useMemo)(()=>n?dL(n):null,[n]);if(i)return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(OM,{className:`h-8 w-56`}),(0,I.jsx)(OM,{className:`h-24 w-full`}),(0,I.jsx)(OM,{className:`h-56 w-full`})]});if(o||!n)return(0,I.jsxs)(SM,{className:`min-h-[240px] p-6 md:p-6`,children:[(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`日志详情加载失败`}),(0,I.jsx)(DM,{children:o??`日志事件不存在`})]}),(0,I.jsx)(q,{variant:`outline`,onClick:()=>e({to:`/logs`,search:{user:void 0,session:void 0}}),children:`返回日志列表`})]});let d=!!(n.plugins&&(n.plugins.request?.length||n.plugins.response?.length));return(0,I.jsxs)(xI,{defaultValue:`overview`,className:`space-y-2`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 rounded-lg border bg-background px-3 py-2`,children:[(0,I.jsxs)(q,{variant:`outline`,size:`sm`,onClick:()=>e({to:`/logs`,search:{user:void 0,session:void 0}}),children:[(0,I.jsx)(Yi,{className:`h-4 w-4`}),`返回列表`]}),(0,I.jsxs)(CI,{variant:`line`,className:`h-auto shrink-0`,children:[(0,I.jsx)(wI,{value:`overview`,children:`概览`}),(0,I.jsx)(wI,{value:`request-response`,children:`请求 / 响应`}),d?(0,I.jsx)(wI,{value:`plugins`,children:`插件`}):null,(0,I.jsx)(wI,{value:`session-tracing`,children:`会话 / 追踪`}),(0,I.jsx)(wI,{value:`raw`,children:`Raw`})]}),(0,I.jsxs)(q,{size:`sm`,variant:`outline`,className:`ml-auto`,onClick:async()=>{await navigator.clipboard.writeText(UF(n.rawEvent)),L.success(`已复制完整日志 JSON`)},children:[(0,I.jsx)(aa,{className:`h-4 w-4`}),`复制 Raw JSON`]}),(0,I.jsxs)(NI,{children:[(0,I.jsx)(PI,{asChild:!0,children:(0,I.jsxs)(q,{size:`sm`,variant:`outline`,children:[(0,I.jsx)(aa,{className:`h-4 w-4`}),`Copy as cURL`,(0,I.jsx)(ea,{className:`h-4 w-4`})]})}),(0,I.jsxs)(FI,{align:`end`,children:[(0,I.jsx)(II,{onClick:async()=>{await navigator.clipboard.writeText(nI(n,`local-router`)),L.success(`已复制 local-router cURL`)},children:`复制发给 local-router 的请求`}),(0,I.jsx)(II,{onClick:async()=>{await navigator.clipboard.writeText(nI(n,`provider`)),L.success(`已复制 provider cURL(API Key 为占位符)`)},children:`复制发给 provider 的请求`})]})]})]}),(0,I.jsxs)(TI,{value:`overview`,className:`mt-0 space-y-4`,children:[(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`概览`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`核心元信息与定位字段`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,I.jsx)(Y,{variant:`outline`,children:n.summary.level}),(0,I.jsx)(Y,{variant:`outline`,children:n.summary.provider}),(0,I.jsx)(Y,{variant:`outline`,children:n.summary.routeType}),(0,I.jsx)(Y,{variant:`outline`,children:n.summary.statusClass}),(0,I.jsx)(Y,{variant:n.summary.hasError?`secondary`:`outline`,children:n.summary.upstreamStatus})]}),(0,I.jsxs)(`div`,{className:`grid gap-2 text-sm sm:grid-cols-2 lg:grid-cols-3`,children:[(0,I.jsx)(oI,{label:`时间`,value:GF(n.summary.ts)}),(0,I.jsx)(oI,{label:`request_id`,value:n.summary.requestId,mono:!0}),(0,I.jsx)(oI,{label:`model_in`,value:n.summary.modelIn,mono:!0}),(0,I.jsx)(oI,{label:`model_out`,value:n.summary.modelOut,mono:!0}),(0,I.jsx)(oI,{label:`route_rule_key`,value:n.summary.routeRuleKey,mono:!0}),(0,I.jsx)(oI,{label:`latency`,value:`${n.summary.latencyMs} ms`}),(0,I.jsx)(oI,{label:`target_url`,value:n.upstream.targetUrl,mono:!0}),(0,I.jsx)(oI,{label:`proxy_url`,value:n.upstream.proxyUrl??`-`,mono:!0}),(0,I.jsx)(oI,{label:`定位`,value:`${n.location.file}:${n.location.line}`,mono:!0})]}),c.length>0?(0,I.jsx)(`div`,{className:`space-y-1 rounded-md border bg-muted/30 px-3 py-2 text-xs text-muted-foreground`,children:c.map(e=>(0,I.jsxs)(`div`,{children:[`• `,e]},e))}):null]})]}),(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`路由链路`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`入站请求到出站转发的完整可视化链路`})]}),(0,I.jsx)(`div`,{className:`px-3 py-3`,children:(0,I.jsx)(fI,{interfaceType:l,routeType:n.summary.routeType,modelIn:n.summary.modelIn,provider:n.summary.provider,modelOut:n.summary.modelOut,routeRuleKey:n.summary.routeRuleKey})})]})]}),(0,I.jsx)(TI,{value:`request-response`,className:`mt-0 space-y-4`,children:(0,I.jsx)(uI,{detail:n})}),d?(0,I.jsx)(TI,{value:`plugins`,className:`mt-0 space-y-4`,children:(0,I.jsx)(sI,{detail:n})}):null,(0,I.jsxs)(TI,{value:`session-tracing`,className:`mt-0 space-y-4`,children:[u?(0,I.jsx)(MI,{parsed:u}):null,(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(`div`,{className:`border-b px-3 py-3`,children:(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`Upstream / Tracing`})}),(0,I.jsxs)(`div`,{className:`grid gap-2 px-3 py-3 text-sm sm:grid-cols-2 lg:grid-cols-3`,children:[(0,I.jsx)(oI,{label:`provider_request_id`,value:n.upstream.providerRequestId??`-`,mono:!0}),(0,I.jsx)(oI,{label:`error_type`,value:n.upstream.errorType??`-`,mono:!0}),(0,I.jsx)(oI,{label:`error_message`,value:n.upstream.errorMessage??`-`}),(0,I.jsx)(oI,{label:`is_stream`,value:n.upstream.isStream?`true`:`false`}),(0,I.jsx)(oI,{label:`stream_file`,value:n.upstream.streamFile??`无 stream 数据`,mono:!0})]}),(0,I.jsx)(`div`,{className:`px-3 pb-3`,children:(0,I.jsx)(pI,{title:`stream content`,content:n.upstream.streamContent,emptyText:n.upstream.isStream?`未捕获 stream 内容。`:`非流式请求,无 stream 内容。`})})]})]}),(0,I.jsx)(TI,{value:`raw`,className:`mt-0`,children:(0,I.jsxs)(`section`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`Raw`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`完整事件 JSON`})]}),(0,I.jsx)(`div`,{className:`px-3 py-3`,children:(0,I.jsx)(aI,{title:`event`,value:n.rawEvent})})]})})]})}function pL(e,t){return typeof e==`function`?e(t):e}function mL(e,t){return n=>{t.setState(t=>({...t,[e]:pL(n,t[e])}))}}function hL(e){return e instanceof Function}function gL(e){return Array.isArray(e)&&e.every(e=>typeof e==`number`)}function _L(e,t){let n=[],r=e=>{e.forEach(e=>{n.push(e);let i=t(e);i!=null&&i.length&&r(i)})};return r(e),n}function Q(e,t,n){let r=[],i;return a=>{let o;n.key&&n.debug&&(o=Date.now());let s=e(a);if(!(s.length!==r.length||s.some((e,t)=>r[t]!==e)))return i;r=s;let c;if(n.key&&n.debug&&(c=Date.now()),i=t(...s),n==null||n.onChange==null||n.onChange(i),n.key&&n.debug&&n!=null&&n.debug()){let e=Math.round((Date.now()-o)*100)/100,t=Math.round((Date.now()-c)*100)/100,r=t/16,i=(e,t)=>{for(e=String(e);e.length<t;)e=` `+e;return e};console.info(`%c⏱ ${i(t,5)} /${i(e,5)} ms`,`
|
|
189
189
|
font-size: .6rem;
|
|
190
190
|
font-weight: bold;
|
|
191
|
-
color: hsl(${Math.max(0,Math.min(120-120*r,120))}deg 100% 31%);`,n?.key)}return i}}function $(e,t,n,r){return{debug:()=>e?.debugAll??e[t],key:!1,onChange:r}}function gL(e,t,n,r){let i={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:()=>i.getValue()??e.options.renderFallbackValue,getContext:Q(()=>[e,n,t,i],(e,t,n,r)=>({table:e,column:t,row:n,cell:r,getValue:r.getValue,renderValue:r.renderValue}),$(e.options,`debugCells`,`cell.getContext`))};return e._features.forEach(r=>{r.createCell==null||r.createCell(i,n,t,e)},{}),i}function _L(e,t,n,r){let i={...e._getDefaultColumnDef(),...t},a=i.accessorKey,o=i.id??(a?typeof String.prototype.replaceAll==`function`?a.replaceAll(`.`,`_`):a.replace(/\./g,`_`):void 0)??(typeof i.header==`string`?i.header:void 0),s;if(i.accessorFn?s=i.accessorFn:a&&(s=a.includes(`.`)?e=>{let t=e;for(let e of a.split(`.`))t=t?.[e];return t}:e=>e[i.accessorKey]),!o)throw Error();let c={id:`${String(o)}`,accessorFn:s,parent:r,depth:n,columnDef:i,columns:[],getFlatColumns:Q(()=>[!0],()=>[c,...c.columns?.flatMap(e=>e.getFlatColumns())],$(e.options,`debugColumns`,`column.getFlatColumns`)),getLeafColumns:Q(()=>[e._getOrderColumnsFn()],e=>{var t;return(t=c.columns)!=null&&t.length?e(c.columns.flatMap(e=>e.getLeafColumns())):[c]},$(e.options,`debugColumns`,`column.getLeafColumns`))};for(let t of e._features)t.createColumn==null||t.createColumn(c,e);return c}var vL=`debugHeaders`;function yL(e,t,n){let r={id:n.id??t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{let e=[],t=n=>{n.subHeaders&&n.subHeaders.length&&n.subHeaders.map(t),e.push(n)};return t(r),e},getContext:()=>({table:e,header:r,column:t})};return e._features.forEach(t=>{t.createHeader==null||t.createHeader(r,e)}),r}var bL={createTable:e=>{e.getHeaderGroups=Q(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>{let a=r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],o=i?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],s=n.filter(e=>!(r!=null&&r.includes(e.id))&&!(i!=null&&i.includes(e.id)));return xL(t,[...a,...s,...o],e)},$(e.options,vL,`getHeaderGroups`)),e.getCenterHeaderGroups=Q(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>(n=n.filter(e=>!(r!=null&&r.includes(e.id))&&!(i!=null&&i.includes(e.id))),xL(t,n,e,`center`)),$(e.options,vL,`getCenterHeaderGroups`)),e.getLeftHeaderGroups=Q(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>xL(t,r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],e,`left`),$(e.options,vL,`getLeftHeaderGroups`)),e.getRightHeaderGroups=Q(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>xL(t,r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],e,`right`),$(e.options,vL,`getRightHeaderGroups`)),e.getFooterGroups=Q(()=>[e.getHeaderGroups()],e=>[...e].reverse(),$(e.options,vL,`getFooterGroups`)),e.getLeftFooterGroups=Q(()=>[e.getLeftHeaderGroups()],e=>[...e].reverse(),$(e.options,vL,`getLeftFooterGroups`)),e.getCenterFooterGroups=Q(()=>[e.getCenterHeaderGroups()],e=>[...e].reverse(),$(e.options,vL,`getCenterFooterGroups`)),e.getRightFooterGroups=Q(()=>[e.getRightHeaderGroups()],e=>[...e].reverse(),$(e.options,vL,`getRightFooterGroups`)),e.getFlatHeaders=Q(()=>[e.getHeaderGroups()],e=>e.map(e=>e.headers).flat(),$(e.options,vL,`getFlatHeaders`)),e.getLeftFlatHeaders=Q(()=>[e.getLeftHeaderGroups()],e=>e.map(e=>e.headers).flat(),$(e.options,vL,`getLeftFlatHeaders`)),e.getCenterFlatHeaders=Q(()=>[e.getCenterHeaderGroups()],e=>e.map(e=>e.headers).flat(),$(e.options,vL,`getCenterFlatHeaders`)),e.getRightFlatHeaders=Q(()=>[e.getRightHeaderGroups()],e=>e.map(e=>e.headers).flat(),$(e.options,vL,`getRightFlatHeaders`)),e.getCenterLeafHeaders=Q(()=>[e.getCenterFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),$(e.options,vL,`getCenterLeafHeaders`)),e.getLeftLeafHeaders=Q(()=>[e.getLeftFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),$(e.options,vL,`getLeftLeafHeaders`)),e.getRightLeafHeaders=Q(()=>[e.getRightFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),$(e.options,vL,`getRightLeafHeaders`)),e.getLeafHeaders=Q(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(e,t,n)=>[...e[0]?.headers??[],...t[0]?.headers??[],...n[0]?.headers??[]].map(e=>e.getLeafHeaders()).flat(),$(e.options,vL,`getLeafHeaders`))}};function xL(e,t,n,r){let i=0,a=function(e,t){t===void 0&&(t=1),i=Math.max(i,t),e.filter(e=>e.getIsVisible()).forEach(e=>{var n;(n=e.columns)!=null&&n.length&&a(e.columns,t+1)},0)};a(e);let o=[],s=(e,t)=>{let i={depth:t,id:[r,`${t}`].filter(Boolean).join(`_`),headers:[]},a=[];e.forEach(e=>{let o=[...a].reverse()[0],s=e.column.depth===i.depth,c,l=!1;if(s&&e.column.parent?c=e.column.parent:(c=e.column,l=!0),o&&o?.column===c)o.subHeaders.push(e);else{let i=yL(n,c,{id:[r,t,c.id,e?.id].filter(Boolean).join(`_`),isPlaceholder:l,placeholderId:l?`${a.filter(e=>e.column===c).length}`:void 0,depth:t,index:a.length});i.subHeaders.push(e),a.push(i)}i.headers.push(e),e.headerGroup=i}),o.push(i),t>0&&s(a,t-1)};s(t.map((e,t)=>yL(n,e,{depth:i,index:t})),i-1),o.reverse();let c=e=>e.filter(e=>e.column.getIsVisible()).map(e=>{let t=0,n=0,r=[0];e.subHeaders&&e.subHeaders.length?(r=[],c(e.subHeaders).forEach(e=>{let{colSpan:n,rowSpan:i}=e;t+=n,r.push(i)})):t=1;let i=Math.min(...r);return n+=i,e.colSpan=t,e.rowSpan=n,{colSpan:t,rowSpan:n}});return c(o[0]?.headers??[]),o}var SL=(e,t,n,r,i,a,o)=>{let s={id:t,index:r,original:n,depth:i,parentId:o,_valuesCache:{},_uniqueValuesCache:{},getValue:t=>{if(s._valuesCache.hasOwnProperty(t))return s._valuesCache[t];let n=e.getColumn(t);if(n!=null&&n.accessorFn)return s._valuesCache[t]=n.accessorFn(s.original,r),s._valuesCache[t]},getUniqueValues:t=>{if(s._uniqueValuesCache.hasOwnProperty(t))return s._uniqueValuesCache[t];let n=e.getColumn(t);if(n!=null&&n.accessorFn)return n.columnDef.getUniqueValues?(s._uniqueValuesCache[t]=n.columnDef.getUniqueValues(s.original,r),s._uniqueValuesCache[t]):(s._uniqueValuesCache[t]=[s.getValue(t)],s._uniqueValuesCache[t])},renderValue:t=>s.getValue(t)??e.options.renderFallbackValue,subRows:a??[],getLeafRows:()=>hL(s.subRows,e=>e.subRows),getParentRow:()=>s.parentId?e.getRow(s.parentId,!0):void 0,getParentRows:()=>{let e=[],t=s;for(;;){let n=t.getParentRow();if(!n)break;e.push(n),t=n}return e.reverse()},getAllCells:Q(()=>[e.getAllLeafColumns()],t=>t.map(t=>gL(e,s,t,t.id)),$(e.options,`debugRows`,`getAllCells`)),_getAllCellsByColumnId:Q(()=>[s.getAllCells()],e=>e.reduce((e,t)=>(e[t.column.id]=t,e),{}),$(e.options,`debugRows`,`getAllCellsByColumnId`))};for(let t=0;t<e._features.length;t++){let n=e._features[t];n==null||n.createRow==null||n.createRow(s,e)}return s},CL={createColumn:(e,t)=>{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},wL=(e,t,n)=>{var r,i;let a=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((i=e.getValue(t))==null||(i=i.toString())==null||(i=i.toLowerCase())==null)&&i.includes(a))};wL.autoRemove=e=>PL(e);var TL=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};TL.autoRemove=e=>PL(e);var EL=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===n?.toLowerCase()};EL.autoRemove=e=>PL(e);var DL=(e,t,n)=>e.getValue(t)?.includes(n);DL.autoRemove=e=>PL(e);var OL=(e,t,n)=>!n.some(n=>{var r;return!((r=e.getValue(t))!=null&&r.includes(n))});OL.autoRemove=e=>PL(e)||!(e!=null&&e.length);var kL=(e,t,n)=>n.some(n=>e.getValue(t)?.includes(n));kL.autoRemove=e=>PL(e)||!(e!=null&&e.length);var AL=(e,t,n)=>e.getValue(t)===n;AL.autoRemove=e=>PL(e);var jL=(e,t,n)=>e.getValue(t)==n;jL.autoRemove=e=>PL(e);var ML=(e,t,n)=>{let[r,i]=n,a=e.getValue(t);return a>=r&&a<=i};ML.resolveFilterValue=e=>{let[t,n]=e,r=typeof t==`number`?t:parseFloat(t),i=typeof n==`number`?n:parseFloat(n),a=t===null||Number.isNaN(r)?-1/0:r,o=n===null||Number.isNaN(i)?1/0:i;if(a>o){let e=a;a=o,o=e}return[a,o]},ML.autoRemove=e=>PL(e)||PL(e[0])&&PL(e[1]);var NL={includesString:wL,includesStringSensitive:TL,equalsString:EL,arrIncludes:DL,arrIncludesAll:OL,arrIncludesSome:kL,equals:AL,weakEquals:jL,inNumberRange:ML};function PL(e){return e==null||e===``}var FL={getDefaultColumnDef:()=>({filterFn:`auto`}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:fL(`columnFilters`,e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{let n=t.getCoreRowModel().flatRows[0]?.getValue(e.id);return typeof n==`string`?NL.includesString:typeof n==`number`?NL.inNumberRange:typeof n==`boolean`||typeof n==`object`&&n?NL.equals:Array.isArray(n)?NL.arrIncludes:NL.weakEquals},e.getFilterFn=()=>pL(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn===`auto`?e.getAutoFilterFn():t.options.filterFns?.[e.columnDef.filterFn]??NL[e.columnDef.filterFn],e.getCanFilter=()=>(e.columnDef.enableColumnFilter??!0)&&(t.options.enableColumnFilters??!0)&&(t.options.enableFilters??!0)&&!!e.accessorFn,e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(t=>t.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>t.getState().columnFilters?.findIndex(t=>t.id===e.id)??-1,e.setFilterValue=n=>{t.setColumnFilters(t=>{let r=e.getFilterFn(),i=t?.find(t=>t.id===e.id),a=dL(n,i?i.value:void 0);if(IL(r,a,e))return t?.filter(t=>t.id!==e.id)??[];let o={id:e.id,value:a};return i?t?.map(t=>t.id===e.id?o:t)??[]:t!=null&&t.length?[...t,o]:[o]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{let n=e.getAllLeafColumns();e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(e=>dL(t,e)?.filter(e=>{let t=n.find(t=>t.id===e.id);return!(t&&IL(t.getFilterFn(),e.value,t))}))},e.resetColumnFilters=t=>{e.setColumnFilters(t?[]:e.initialState?.columnFilters??[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function IL(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||t===void 0||typeof t==`string`&&!t}var LL={sum:(e,t,n)=>n.reduce((t,n)=>{let r=n.getValue(e);return t+(typeof r==`number`?r:0)},0),min:(e,t,n)=>{let r;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}),r},max:(e,t,n)=>{let r;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r<n||r===void 0&&n>=n)&&(r=n)}),r},extent:(e,t,n)=>{let r,i;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r===void 0?n>=n&&(r=i=n):(r>n&&(r=n),i<n&&(i=n)))}),[r,i]},mean:(e,t)=>{let n=0,r=0;if(t.forEach(t=>{let i=t.getValue(e);i!=null&&(i=+i)>=i&&(++n,r+=i)}),n)return r/n},median:(e,t)=>{if(!t.length)return;let n=t.map(t=>t.getValue(e));if(!mL(n))return;if(n.length===1)return n[0];let r=Math.floor(n.length/2),i=n.sort((e,t)=>e-t);return n.length%2==0?(i[r-1]+i[r])/2:i[r]},unique:(e,t)=>Array.from(new Set(t.map(t=>t.getValue(e))).values()),uniqueCount:(e,t)=>new Set(t.map(t=>t.getValue(e))).size,count:(e,t)=>t.length},RL={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t;return((t=e.getValue())==null||t.toString==null?void 0:t.toString())??null},aggregationFn:`auto`}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:fL(`grouping`,e),groupedColumnMode:`reorder`}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(t=>t!=null&&t.includes(e.id)?t.filter(t=>t!==e.id):[...t??[],e.id])},e.getCanGroup=()=>(e.columnDef.enableGrouping??!0)&&(t.options.enableGrouping??!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue),e.getIsGrouped=()=>t.getState().grouping?.includes(e.id),e.getGroupedIndex=()=>t.getState().grouping?.indexOf(e.id),e.getToggleGroupingHandler=()=>{let t=e.getCanGroup();return()=>{t&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{let n=t.getCoreRowModel().flatRows[0]?.getValue(e.id);if(typeof n==`number`)return LL.sum;if(Object.prototype.toString.call(n)===`[object Date]`)return LL.extent},e.getAggregationFn=()=>{if(!e)throw Error();return pL(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn===`auto`?e.getAutoAggregationFn():t.options.aggregationFns?.[e.columnDef.aggregationFn]??LL[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{e.setGrouping(t?[]:e.initialState?.grouping??[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];let r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var t;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((t=n.subRows)!=null&&t.length)}}};function zL(e,t,n){if(!(t!=null&&t.length)||!n)return e;let r=e.filter(e=>!t.includes(e.id));return n===`remove`?r:[...t.map(t=>e.find(e=>e.id===t)).filter(Boolean),...r]}var BL={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:fL(`columnOrder`,e)}),createColumn:(e,t)=>{e.getIndex=Q(e=>[ZL(t,e)],t=>t.findIndex(t=>t.id===e.id),$(t.options,`debugColumns`,`getIndex`)),e.getIsFirstColumn=n=>ZL(t,n)[0]?.id===e.id,e.getIsLastColumn=n=>{let r=ZL(t,n);return r[r.length-1]?.id===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{e.setColumnOrder(t?[]:e.initialState.columnOrder??[])},e._getOrderColumnsFn=Q(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(e,t,n)=>r=>{let i=[];if(!(e!=null&&e.length))i=r;else{let t=[...e],n=[...r];for(;n.length&&t.length;){let e=t.shift(),r=n.findIndex(t=>t.id===e);r>-1&&i.push(n.splice(r,1)[0])}i=[...i,...n]}return zL(i,t,n)},$(e.options,`debugTable`,`_getOrderColumnsFn`))}},VL=()=>({left:[],right:[]}),HL={getInitialState:e=>({columnPinning:VL(),...e}),getDefaultOptions:e=>({onColumnPinningChange:fL(`columnPinning`,e)}),createColumn:(e,t)=>{e.pin=n=>{let r=e.getLeafColumns().map(e=>e.id).filter(Boolean);t.setColumnPinning(e=>n===`right`?{left:(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),right:[...(e?.right??[]).filter(e=>!(r!=null&&r.includes(e))),...r]}:n===`left`?{left:[...(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),...r],right:(e?.right??[]).filter(e=>!(r!=null&&r.includes(e)))}:{left:(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),right:(e?.right??[]).filter(e=>!(r!=null&&r.includes(e)))})},e.getCanPin=()=>e.getLeafColumns().some(e=>(e.columnDef.enablePinning??!0)&&(t.options.enableColumnPinning??t.options.enablePinning??!0)),e.getIsPinned=()=>{let n=e.getLeafColumns().map(e=>e.id),{left:r,right:i}=t.getState().columnPinning,a=n.some(e=>r?.includes(e)),o=n.some(e=>i?.includes(e));return a?`left`:o?`right`:!1},e.getPinnedIndex=()=>{var n;let r=e.getIsPinned();return r?((n=t.getState().columnPinning)==null||(n=n[r])==null?void 0:n.indexOf(e.id))??-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=Q(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(e,t,n)=>{let r=[...t??[],...n??[]];return e.filter(e=>!r.includes(e.column.id))},$(t.options,`debugRows`,`getCenterVisibleCells`)),e.getLeftVisibleCells=Q(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(e,t)=>(t??[]).map(t=>e.find(e=>e.column.id===t)).filter(Boolean).map(e=>({...e,position:`left`})),$(t.options,`debugRows`,`getLeftVisibleCells`)),e.getRightVisibleCells=Q(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(e,t)=>(t??[]).map(t=>e.find(e=>e.column.id===t)).filter(Boolean).map(e=>({...e,position:`right`})),$(t.options,`debugRows`,`getRightVisibleCells`))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>e.setColumnPinning(t?VL():e.initialState?.columnPinning??VL()),e.getIsSomeColumnsPinned=t=>{let n=e.getState().columnPinning;return t?!!n[t]?.length:!!(n.left?.length||n.right?.length)},e.getLeftLeafColumns=Q(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(e,t)=>(t??[]).map(t=>e.find(e=>e.id===t)).filter(Boolean),$(e.options,`debugColumns`,`getLeftLeafColumns`)),e.getRightLeafColumns=Q(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(e,t)=>(t??[]).map(t=>e.find(e=>e.id===t)).filter(Boolean),$(e.options,`debugColumns`,`getRightLeafColumns`)),e.getCenterLeafColumns=Q(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(e,t,n)=>{let r=[...t??[],...n??[]];return e.filter(e=>!r.includes(e.id))},$(e.options,`debugColumns`,`getCenterLeafColumns`))}};function UL(e){return e||(typeof document<`u`?document:null)}var WL={size:150,minSize:20,maxSize:2**53-1},GL=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),KL={getDefaultColumnDef:()=>WL,getInitialState:e=>({columnSizing:{},columnSizingInfo:GL(),...e}),getDefaultOptions:e=>({columnResizeMode:`onEnd`,columnResizeDirection:`ltr`,onColumnSizingChange:fL(`columnSizing`,e),onColumnSizingInfoChange:fL(`columnSizingInfo`,e)}),createColumn:(e,t)=>{e.getSize=()=>{let n=t.getState().columnSizing[e.id];return Math.min(Math.max(e.columnDef.minSize??WL.minSize,n??e.columnDef.size??WL.size),e.columnDef.maxSize??WL.maxSize)},e.getStart=Q(e=>[e,ZL(t,e),t.getState().columnSizing],(t,n)=>n.slice(0,e.getIndex(t)).reduce((e,t)=>e+t.getSize(),0),$(t.options,`debugColumns`,`getStart`)),e.getAfter=Q(e=>[e,ZL(t,e),t.getState().columnSizing],(t,n)=>n.slice(e.getIndex(t)+1).reduce((e,t)=>e+t.getSize(),0),$(t.options,`debugColumns`,`getAfter`)),e.resetSize=()=>{t.setColumnSizing(t=>{let{[e.id]:n,...r}=t;return r})},e.getCanResize=()=>(e.columnDef.enableResizing??!0)&&(t.options.enableColumnResizing??!0),e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let t=0,n=e=>{e.subHeaders.length?e.subHeaders.forEach(n):t+=e.column.getSize()??0};return n(e),t},e.getStart=()=>{if(e.index>0){let t=e.headerGroup.headers[e.index-1];return t.getStart()+t.getSize()}return 0},e.getResizeHandler=n=>{let r=t.getColumn(e.column.id),i=r?.getCanResize();return a=>{if(!r||!i||(a.persist==null||a.persist(),YL(a)&&a.touches&&a.touches.length>1))return;let o=e.getSize(),s=e?e.getLeafHeaders().map(e=>[e.column.id,e.column.getSize()]):[[r.id,r.getSize()]],c=YL(a)?Math.round(a.touches[0].clientX):a.clientX,l={},u=(e,n)=>{typeof n==`number`&&(t.setColumnSizingInfo(e=>{let r=t.options.columnResizeDirection===`rtl`?-1:1,i=(n-(e?.startOffset??0))*r,a=Math.max(i/(e?.startSize??0),-.999999);return e.columnSizingStart.forEach(e=>{let[t,n]=e;l[t]=Math.round(Math.max(n+n*a,0)*100)/100}),{...e,deltaOffset:i,deltaPercentage:a}}),(t.options.columnResizeMode===`onChange`||e===`end`)&&t.setColumnSizing(e=>({...e,...l})))},d=e=>u(`move`,e),f=e=>{u(`end`,e),t.setColumnSizingInfo(e=>({...e,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},p=UL(n),m={moveHandler:e=>d(e.clientX),upHandler:e=>{p?.removeEventListener(`mousemove`,m.moveHandler),p?.removeEventListener(`mouseup`,m.upHandler),f(e.clientX)}},h={moveHandler:e=>(e.cancelable&&(e.preventDefault(),e.stopPropagation()),d(e.touches[0].clientX),!1),upHandler:e=>{p?.removeEventListener(`touchmove`,h.moveHandler),p?.removeEventListener(`touchend`,h.upHandler),e.cancelable&&(e.preventDefault(),e.stopPropagation()),f(e.touches[0]?.clientX)}},g=JL()?{passive:!1}:!1;YL(a)?(p?.addEventListener(`touchmove`,h.moveHandler,g),p?.addEventListener(`touchend`,h.upHandler,g)):(p?.addEventListener(`mousemove`,m.moveHandler,g),p?.addEventListener(`mouseup`,m.upHandler,g)),t.setColumnSizingInfo(e=>({...e,startOffset:c,startSize:o,deltaOffset:0,deltaPercentage:0,columnSizingStart:s,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{e.setColumnSizing(t?{}:e.initialState.columnSizing??{})},e.resetHeaderSizeInfo=t=>{e.setColumnSizingInfo(t?GL():e.initialState.columnSizingInfo??GL())},e.getTotalSize=()=>e.getHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getLeftTotalSize=()=>e.getLeftHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getCenterTotalSize=()=>e.getCenterHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getRightTotalSize=()=>e.getRightHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0}},qL=null;function JL(){if(typeof qL==`boolean`)return qL;let e=!1;try{let t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener(`test`,n,t),window.removeEventListener(`test`,n)}catch{e=!1}return qL=e,qL}function YL(e){return e.type===`touchstart`}var XL={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:fL(`columnVisibility`,e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(t=>({...t,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{let n=e.columns;return(n.length?n.some(e=>e.getIsVisible()):t.getState().columnVisibility?.[e.id])??!0},e.getCanHide=()=>(e.columnDef.enableHiding??!0)&&(t.options.enableHiding??!0),e.getToggleVisibilityHandler=()=>t=>{e.toggleVisibility==null||e.toggleVisibility(t.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=Q(()=>[e.getAllCells(),t.getState().columnVisibility],e=>e.filter(e=>e.column.getIsVisible()),$(t.options,`debugRows`,`_getAllVisibleCells`)),e.getVisibleCells=Q(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(e,t,n)=>[...e,...t,...n],$(t.options,`debugRows`,`getVisibleCells`))},createTable:e=>{let t=(t,n)=>Q(()=>[n(),n().filter(e=>e.getIsVisible()).map(e=>e.id).join(`_`)],e=>e.filter(e=>e.getIsVisible==null?void 0:e.getIsVisible()),$(e.options,`debugColumns`,t));e.getVisibleFlatColumns=t(`getVisibleFlatColumns`,()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t(`getVisibleLeafColumns`,()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t(`getLeftVisibleLeafColumns`,()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t(`getRightVisibleLeafColumns`,()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t(`getCenterVisibleLeafColumns`,()=>e.getCenterLeafColumns()),e.setColumnVisibility=t=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(t),e.resetColumnVisibility=t=>{e.setColumnVisibility(t?{}:e.initialState.columnVisibility??{})},e.toggleAllColumnsVisible=t=>{t??=!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((e,n)=>({...e,[n.id]:t||!(n.getCanHide!=null&&n.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(e=>!(e.getIsVisible!=null&&e.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(e=>e.getIsVisible==null?void 0:e.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>t=>{e.toggleAllColumnsVisible(t.target?.checked)}}};function ZL(e,t){return t?t===`center`?e.getCenterVisibleLeafColumns():t===`left`?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}var QL={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,`__global__`),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,`__global__`),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,`__global__`),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},$L={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:fL(`globalFilter`,e),globalFilterFn:`auto`,getColumnCanGlobalFilter:t=>{var n;let r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r==`string`||typeof r==`number`}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>(e.columnDef.enableGlobalFilter??!0)&&(t.options.enableGlobalFilter??!0)&&(t.options.enableFilters??!0)&&((t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))??!0)&&!!e.accessorFn},createTable:e=>{e.getGlobalAutoFilterFn=()=>NL.includesString,e.getGlobalFilterFn=()=>{let{globalFilterFn:t}=e.options;return pL(t)?t:t===`auto`?e.getGlobalAutoFilterFn():e.options.filterFns?.[t]??NL[t]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},eR={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:fL(`expanded`,e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{if(!t){e._queue(()=>{t=!0});return}if(e.options.autoResetAll??e.options.autoResetExpanded??!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=t=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(t),e.toggleAllRowsExpanded=t=>{t??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=t=>{e.setExpanded(t?{}:e.initialState?.expanded??{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(e=>e.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>t=>{t.persist==null||t.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{let t=e.getState().expanded;return t===!0||Object.values(t).some(Boolean)},e.getIsAllRowsExpanded=()=>{let t=e.getState().expanded;return typeof t==`boolean`?t===!0:!(!Object.keys(t).length||e.getRowModel().flatRows.some(e=>!e.getIsExpanded()))},e.getExpandedDepth=()=>{let t=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(e=>{let n=e.split(`.`);t=Math.max(t,n.length)}),t},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{let i=r===!0?!0:!!(r!=null&&r[e.id]),a={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(e=>{a[e]=!0}):a=r,n??=!i,!i&&n)return{...a,[e.id]:!0};if(i&&!n){let{[e.id]:t,...n}=a;return n}return r})},e.getIsExpanded=()=>{let n=t.getState().expanded;return!!((t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))??(n===!0||n?.[e.id]))},e.getCanExpand=()=>{var n;return(t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))??((t.options.enableExpanding??!0)&&!!((n=e.subRows)!=null&&n.length))},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{let t=e.getCanExpand();return()=>{t&&e.toggleExpanded()}}}},tR=0,nR=10,rR=()=>({pageIndex:tR,pageSize:nR}),iR={getInitialState:e=>({...e,pagination:{...rR(),...e?.pagination}}),getDefaultOptions:e=>({onPaginationChange:fL(`pagination`,e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{if(!t){e._queue(()=>{t=!0});return}if(e.options.autoResetAll??e.options.autoResetPageIndex??!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=t=>e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(e=>dL(t,e)),e.resetPagination=t=>{e.setPagination(t?rR():e.initialState.pagination??rR())},e.setPageIndex=t=>{e.setPagination(n=>{let r=dL(t,n.pageIndex),i=e.options.pageCount===void 0||e.options.pageCount===-1?2**53-1:e.options.pageCount-1;return r=Math.max(0,Math.min(r,i)),{...n,pageIndex:r}})},e.resetPageIndex=t=>{var n;e.setPageIndex(t?tR:((n=e.initialState)==null||(n=n.pagination)==null?void 0:n.pageIndex)??tR)},e.resetPageSize=t=>{var n;e.setPageSize(t?nR:((n=e.initialState)==null||(n=n.pagination)==null?void 0:n.pageSize)??nR)},e.setPageSize=t=>{e.setPagination(e=>{let n=Math.max(1,dL(t,e.pageSize)),r=e.pageSize*e.pageIndex,i=Math.floor(r/n);return{...e,pageIndex:i,pageSize:n}})},e.setPageCount=t=>e.setPagination(n=>{let r=dL(t,e.options.pageCount??-1);return typeof r==`number`&&(r=Math.max(-1,r)),{...n,pageCount:r}}),e.getPageOptions=Q(()=>[e.getPageCount()],e=>{let t=[];return e&&e>0&&(t=[...Array(e)].fill(null).map((e,t)=>t)),t},$(e.options,`debugTable`,`getPageOptions`)),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{let{pageIndex:t}=e.getState().pagination,n=e.getPageCount();return n===-1?!0:n===0?!1:t<n-1},e.previousPage=()=>e.setPageIndex(e=>e-1),e.nextPage=()=>e.setPageIndex(e=>e+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>e.options.pageCount??Math.ceil(e.getRowCount()/e.getState().pagination.pageSize),e.getRowCount=()=>e.options.rowCount??e.getPrePaginationRowModel().rows.length}},aR=()=>({top:[],bottom:[]}),oR={getInitialState:e=>({rowPinning:aR(),...e}),getDefaultOptions:e=>({onRowPinningChange:fL(`rowPinning`,e)}),createRow:(e,t)=>{e.pin=(n,r,i)=>{let a=r?e.getLeafRows().map(e=>{let{id:t}=e;return t}):[],o=i?e.getParentRows().map(e=>{let{id:t}=e;return t}):[],s=new Set([...o,e.id,...a]);t.setRowPinning(e=>n===`bottom`?{top:(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),bottom:[...(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e))),...Array.from(s)]}:n===`top`?{top:[...(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),...Array.from(s)],bottom:(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e)))}:{top:(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),bottom:(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e)))})},e.getCanPin=()=>{let{enableRowPinning:n,enablePinning:r}=t.options;return typeof n==`function`?n(e):n??r??!0},e.getIsPinned=()=>{let n=[e.id],{top:r,bottom:i}=t.getState().rowPinning,a=n.some(e=>r?.includes(e)),o=n.some(e=>i?.includes(e));return a?`top`:o?`bottom`:!1},e.getPinnedIndex=()=>{let n=e.getIsPinned();return n?((n===`top`?t.getTopRows():t.getBottomRows())?.map(e=>{let{id:t}=e;return t}))?.indexOf(e.id)??-1:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>e.setRowPinning(t?aR():e.initialState?.rowPinning??aR()),e.getIsSomeRowsPinned=t=>{let n=e.getState().rowPinning;return t?!!n[t]?.length:!!(n.top?.length||n.bottom?.length)},e._getPinnedRows=(t,n,r)=>(e.options.keepPinnedRows??!0?(n??[]).map(t=>{let n=e.getRow(t,!0);return n.getIsAllParentsExpanded()?n:null}):(n??[]).map(e=>t.find(t=>t.id===e))).filter(Boolean).map(e=>({...e,position:r})),e.getTopRows=Q(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,`top`),$(e.options,`debugRows`,`getTopRows`)),e.getBottomRows=Q(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,`bottom`),$(e.options,`debugRows`,`getBottomRows`)),e.getCenterRows=Q(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(e,t,n)=>{let r=new Set([...t??[],...n??[]]);return e.filter(e=>!r.has(e.id))},$(e.options,`debugRows`,`getCenterRows`))}},sR={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:fL(`rowSelection`,e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>e.setRowSelection(t?{}:e.initialState.rowSelection??{}),e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=t===void 0?!e.getIsAllRowsSelected():t;let r={...n},i=e.getPreGroupedRowModel().flatRows;return t?i.forEach(e=>{e.getCanSelect()&&(r[e.id]=!0)}):i.forEach(e=>{delete r[e.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{let r=t===void 0?!e.getIsAllPageRowsSelected():t,i={...n};return e.getRowModel().rows.forEach(t=>{cR(i,t.id,r,!0,e)}),i}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=Q(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?lR(e,n):{rows:[],flatRows:[],rowsById:{}},$(e.options,`debugTable`,`getSelectedRowModel`)),e.getFilteredSelectedRowModel=Q(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?lR(e,n):{rows:[],flatRows:[],rowsById:{}},$(e.options,`debugTable`,`getFilteredSelectedRowModel`)),e.getGroupedSelectedRowModel=Q(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?lR(e,n):{rows:[],flatRows:[],rowsById:{}},$(e.options,`debugTable`,`getGroupedSelectedRowModel`)),e.getIsAllRowsSelected=()=>{let t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState(),r=!!(t.length&&Object.keys(n).length);return r&&t.some(e=>e.getCanSelect()&&!n[e.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows.filter(e=>e.getCanSelect()),{rowSelection:n}=e.getState(),r=!!t.length;return r&&t.some(e=>!n[e.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{let t=Object.keys(e.getState().rowSelection??{}).length;return t>0&&t<e.getFilteredRowModel().flatRows.length},e.getIsSomePageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(e=>e.getCanSelect()).some(e=>e.getIsSelected()||e.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{let i=e.getIsSelected();t.setRowSelection(a=>{if(n=n===void 0?!i:n,e.getCanSelect()&&i===n)return a;let o={...a};return cR(o,e.id,n,r?.selectChildren??!0,t),o})},e.getIsSelected=()=>{let{rowSelection:n}=t.getState();return uR(e,n)},e.getIsSomeSelected=()=>{let{rowSelection:n}=t.getState();return dR(e,n)===`some`},e.getIsAllSubRowsSelected=()=>{let{rowSelection:n}=t.getState();return dR(e,n)===`all`},e.getCanSelect=()=>typeof t.options.enableRowSelection==`function`?t.options.enableRowSelection(e):t.options.enableRowSelection??!0,e.getCanSelectSubRows=()=>typeof t.options.enableSubRowSelection==`function`?t.options.enableSubRowSelection(e):t.options.enableSubRowSelection??!0,e.getCanMultiSelect=()=>typeof t.options.enableMultiRowSelection==`function`?t.options.enableMultiRowSelection(e):t.options.enableMultiRowSelection??!0,e.getToggleSelectedHandler=()=>{let t=e.getCanSelect();return n=>{t&&e.toggleSelected(n.target?.checked)}}}},cR=(e,t,n,r,i)=>{var a;let o=i.getRow(t,!0);n?(o.getCanMultiSelect()||Object.keys(e).forEach(t=>delete e[t]),o.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(a=o.subRows)!=null&&a.length&&o.getCanSelectSubRows()&&o.subRows.forEach(t=>cR(e,t.id,n,r,i))};function lR(e,t){let n=e.getState().rowSelection,r=[],i={},a=function(e,t){return e.map(e=>{var t;let o=uR(e,n);if(o&&(r.push(e),i[e.id]=e),(t=e.subRows)!=null&&t.length&&(e={...e,subRows:a(e.subRows)}),o)return e}).filter(Boolean)};return{rows:a(t.rows),flatRows:r,rowsById:i}}function uR(e,t){return t[e.id]??!1}function dR(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let i=!0,a=!1;return e.subRows.forEach(e=>{if(!(a&&!i)&&(e.getCanSelect()&&(uR(e,t)?a=!0:i=!1),e.subRows&&e.subRows.length)){let n=dR(e,t);n===`all`?a=!0:(n===`some`&&(a=!0),i=!1)}}),i?`all`:a?`some`:!1}var fR=/([0-9]+)/gm,pR=(e,t,n)=>xR(bR(e.getValue(n)).toLowerCase(),bR(t.getValue(n)).toLowerCase()),mR=(e,t,n)=>xR(bR(e.getValue(n)),bR(t.getValue(n))),hR=(e,t,n)=>yR(bR(e.getValue(n)).toLowerCase(),bR(t.getValue(n)).toLowerCase()),gR=(e,t,n)=>yR(bR(e.getValue(n)),bR(t.getValue(n))),_R=(e,t,n)=>{let r=e.getValue(n),i=t.getValue(n);return r>i?1:r<i?-1:0},vR=(e,t,n)=>yR(e.getValue(n),t.getValue(n));function yR(e,t){return e===t?0:e>t?1:-1}function bR(e){return typeof e==`number`?isNaN(e)||e===1/0||e===-1/0?``:String(e):typeof e==`string`?e:``}function xR(e,t){let n=e.split(fR).filter(Boolean),r=t.split(fR).filter(Boolean);for(;n.length&&r.length;){let e=n.shift(),t=r.shift(),i=parseInt(e,10),a=parseInt(t,10),o=[i,a].sort();if(isNaN(o[0])){if(e>t)return 1;if(t>e)return-1;continue}if(isNaN(o[1]))return isNaN(i)?-1:1;if(i>a)return 1;if(a>i)return-1}return n.length-r.length}var SR={alphanumeric:pR,alphanumericCaseSensitive:mR,text:hR,textCaseSensitive:gR,datetime:_R,basic:vR},CR=[bL,XL,BL,HL,CL,FL,QL,$L,{getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:`auto`,sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:fL(`sorting`,e),isMultiSortEvent:e=>e.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{let n=t.getFilteredRowModel().flatRows.slice(10),r=!1;for(let t of n){let n=t?.getValue(e.id);if(Object.prototype.toString.call(n)===`[object Date]`)return SR.datetime;if(typeof n==`string`&&(r=!0,n.split(fR).length>1))return SR.alphanumeric}return r?SR.text:SR.basic},e.getAutoSortDir=()=>typeof t.getFilteredRowModel().flatRows[0]?.getValue(e.id)==`string`?`asc`:`desc`,e.getSortingFn=()=>{if(!e)throw Error();return pL(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn===`auto`?e.getAutoSortingFn():t.options.sortingFns?.[e.columnDef.sortingFn]??SR[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{let i=e.getNextSortingOrder(),a=n!=null;t.setSorting(o=>{let s=o?.find(t=>t.id===e.id),c=o?.findIndex(t=>t.id===e.id),l=[],u,d=a?n:i===`desc`;return u=o!=null&&o.length&&e.getCanMultiSort()&&r?s?`toggle`:`add`:o!=null&&o.length&&c!==o.length-1?`replace`:s?`toggle`:`replace`,u===`toggle`&&(a||i||(u=`remove`)),u===`add`?(l=[...o,{id:e.id,desc:d}],l.splice(0,l.length-(t.options.maxMultiSortColCount??2**53-1))):l=u===`toggle`?o.map(t=>t.id===e.id?{...t,desc:d}:t):u===`remove`?o.filter(t=>t.id!==e.id):[{id:e.id,desc:d}],l})},e.getFirstSortDir=()=>e.columnDef.sortDescFirst??t.options.sortDescFirst??e.getAutoSortDir()===`desc`?`desc`:`asc`,e.getNextSortingOrder=n=>{let r=e.getFirstSortDir(),i=e.getIsSorted();return i?i!==r&&(t.options.enableSortingRemoval??!0)&&(!n||(t.options.enableMultiRemove??!0))?!1:i===`desc`?`asc`:`desc`:r},e.getCanSort=()=>(e.columnDef.enableSorting??!0)&&(t.options.enableSorting??!0)&&!!e.accessorFn,e.getCanMultiSort=()=>e.columnDef.enableMultiSort??t.options.enableMultiSort??!!e.accessorFn,e.getIsSorted=()=>{let n=t.getState().sorting?.find(t=>t.id===e.id);return n?n.desc?`desc`:`asc`:!1},e.getSortIndex=()=>t.getState().sorting?.findIndex(t=>t.id===e.id)??-1,e.clearSorting=()=>{t.setSorting(t=>t!=null&&t.length?t.filter(t=>t.id!==e.id):[])},e.getToggleSortingHandler=()=>{let n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{e.setSorting(t?[]:e.initialState?.sorting??[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},RL,eR,iR,oR,sR,KL];function wR(e){let t=[...CR,...e._features??[]],n={_features:t},r=n._features.reduce((e,t)=>Object.assign(e,t.getDefaultOptions==null?void 0:t.getDefaultOptions(n)),{}),i=e=>n.options.mergeOptions?n.options.mergeOptions(r,e):{...r,...e},a={...e.initialState??{}};n._features.forEach(e=>{a=(e.getInitialState==null?void 0:e.getInitialState(a))??a});let o=[],s=!1,c={_features:t,options:{...r,...e},initialState:a,_queue:e=>{o.push(e),s||(s=!0,Promise.resolve().then(()=>{for(;o.length;)o.shift()();s=!1}).catch(e=>setTimeout(()=>{throw e})))},reset:()=>{n.setState(n.initialState)},setOptions:e=>{n.options=i(dL(e,n.options))},getState:()=>n.options.state,setState:e=>{n.options.onStateChange==null||n.options.onStateChange(e)},_getRowId:(e,t,r)=>(n.options.getRowId==null?void 0:n.options.getRowId(e,t,r))??`${r?[r.id,t].join(`.`):t}`,getCoreRowModel:()=>(n._getCoreRowModel||=n.options.getCoreRowModel(n),n._getCoreRowModel()),getRowModel:()=>n.getPaginationRowModel(),getRow:(e,t)=>{let r=(t?n.getPrePaginationRowModel():n.getRowModel()).rowsById[e];if(!r&&(r=n.getCoreRowModel().rowsById[e],!r))throw Error();return r},_getDefaultColumnDef:Q(()=>[n.options.defaultColumn],e=>(e??={},{header:e=>{let t=e.header.column.columnDef;return t.accessorKey?t.accessorKey:t.accessorFn?t.id:null},cell:e=>{var t;return((t=e.renderValue())==null||t.toString==null?void 0:t.toString())??null},...n._features.reduce((e,t)=>Object.assign(e,t.getDefaultColumnDef==null?void 0:t.getDefaultColumnDef()),{}),...e}),$(e,`debugColumns`,`_getDefaultColumnDef`)),_getColumnDefs:()=>n.options.columns,getAllColumns:Q(()=>[n._getColumnDefs()],e=>{let t=function(e,r,i){return i===void 0&&(i=0),e.map(e=>{let a=_L(n,e,i,r),o=e;return a.columns=o.columns?t(o.columns,a,i+1):[],a})};return t(e)},$(e,`debugColumns`,`getAllColumns`)),getAllFlatColumns:Q(()=>[n.getAllColumns()],e=>e.flatMap(e=>e.getFlatColumns()),$(e,`debugColumns`,`getAllFlatColumns`)),_getAllFlatColumnsById:Q(()=>[n.getAllFlatColumns()],e=>e.reduce((e,t)=>(e[t.id]=t,e),{}),$(e,`debugColumns`,`getAllFlatColumnsById`)),getAllLeafColumns:Q(()=>[n.getAllColumns(),n._getOrderColumnsFn()],(e,t)=>t(e.flatMap(e=>e.getLeafColumns())),$(e,`debugColumns`,`getAllLeafColumns`)),getColumn:e=>n._getAllFlatColumnsById()[e]};Object.assign(n,c);for(let e=0;e<n._features.length;e++){let t=n._features[e];t==null||t.createTable==null||t.createTable(n)}return n}function TR(){return e=>Q(()=>[e.options.data],t=>{let n={rows:[],flatRows:[],rowsById:{}},r=function(t,i,a){i===void 0&&(i=0);let o=[];for(let c=0;c<t.length;c++){let l=SL(e,e._getRowId(t[c],c,a),t[c],c,i,void 0,a?.id);if(n.flatRows.push(l),n.rowsById[l.id]=l,o.push(l),e.options.getSubRows){var s;l.originalSubRows=e.options.getSubRows(t[c],c),(s=l.originalSubRows)!=null&&s.length&&(l.subRows=r(l.originalSubRows,i+1,l))}}return o};return n.rows=r(t),n},$(e.options,`debugTable`,`getRowModel`,()=>e._autoResetPageIndex()))}function ER(e,t){return e?DR(e)?F.createElement(e,t):e:null}function DR(e){return OR(e)||typeof e==`function`||kR(e)}function OR(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function kR(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function AR(e){let t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=F.useState(()=>({current:wR(t)})),[r,i]=F.useState(()=>n.current.initialState);return n.current.setOptions(t=>({...t,...e,state:{...r,...e.state},onStateChange:t=>{i(t),e.onStateChange==null||e.onStateChange(t)}})),n.current}function jR({level:e}){return e===`error`?(0,I.jsx)(Y,{variant:`destructive`,children:`error`}):(0,I.jsx)(Y,{variant:`outline`,children:`info`})}function MR({statusClass:e}){return e===`2xx`?(0,I.jsx)(Y,{variant:`outline`,children:`2xx`}):e===`4xx`?(0,I.jsx)(Y,{variant:`secondary`,children:`4xx`}):e===`5xx`?(0,I.jsx)(Y,{variant:`destructive`,children:`5xx`}):(0,I.jsx)(Y,{variant:`secondary`,children:`network`})}function NR(e,t){return[{accessorKey:`ts`,header:()=>(0,I.jsxs)(q,{variant:`ghost`,size:`sm`,className:`h-7 px-1`,onClick:()=>e(t===`time_desc`?`time_asc`:`time_desc`),children:[`时间`,(0,I.jsx)(Zi,{className:`h-3.5 w-3.5`})]}),cell:({row:e})=>{let t=e.original.ts;return(0,I.jsx)(`div`,{className:`text-xs tabular-nums`,children:new Date(t).toLocaleString()})}},{accessorKey:`level`,header:`级别`,cell:({row:e})=>(0,I.jsx)(jR,{level:e.original.level})},{accessorKey:`provider`,header:`Provider`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[140px] truncate text-xs`,title:e.original.provider,children:e.original.provider})},{accessorKey:`routeType`,header:`路由`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[160px] truncate text-xs`,title:e.original.routeType,children:e.original.routeType})},{accessorKey:`modelIn`,header:`模型链路`,cell:({row:e})=>(0,I.jsxs)(`div`,{className:`max-w-[260px] truncate font-mono text-xs`,title:`${e.original.modelIn} -> ${e.original.modelOut}`,children:[e.original.modelIn,` -> `,e.original.modelOut]})},{accessorKey:`message`,header:`消息`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[400px] truncate text-xs`,title:e.original.message,children:e.original.message})},{accessorKey:`latencyMs`,header:`延迟`,cell:({row:e})=>(0,I.jsxs)(`div`,{className:`text-xs tabular-nums`,children:[e.original.latencyMs,` ms`]})},{accessorKey:`statusClass`,header:`状态`,cell:({row:e})=>(0,I.jsx)(MR,{statusClass:e.original.statusClass})},{accessorKey:`userKey`,header:`用户`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[180px] truncate font-mono text-xs`,title:e.original.userKey??`-`,children:e.original.userKey??`-`})},{accessorKey:`sessionId`,header:`会话`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[220px] truncate font-mono text-xs`,title:e.original.sessionId??`-`,children:e.original.sessionId??`-`})},{accessorKey:`requestId`,header:`Request ID`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[220px] truncate font-mono text-xs`,title:e.original.requestId,children:e.original.requestId})}]}function PR(e){let{data:t,sort:n,onSortChange:r,onRowClick:i}=e,[a,o]=(0,F.useState)({}),s=(0,F.useMemo)(()=>NR(r,n),[r,n]),c=AR({data:t,columns:s,getCoreRowModel:TR(),state:{columnVisibility:a},onColumnVisibilityChange:o});return(0,I.jsx)(`div`,{className:`rounded-md border`,children:(0,I.jsxs)(PM,{children:[(0,I.jsx)(FM,{children:c.getHeaderGroups().map(e=>(0,I.jsx)(RM,{children:e.headers.map(e=>(0,I.jsx)(zM,{children:e.isPlaceholder?null:ER(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,I.jsx)(IM,{children:c.getRowModel().rows?.length?c.getRowModel().rows.map(e=>(0,I.jsx)(FR,{row:e,onClick:i},e.id)):(0,I.jsx)(RM,{children:(0,I.jsx)(BM,{colSpan:s.length,className:`h-24 text-center text-sm text-muted-foreground`,children:`暂无日志数据`})})})]})})}function FR({row:e,onClick:t}){return(0,I.jsx)(RM,{className:`cursor-pointer`,onClick:()=>t(e.original),children:e.getVisibleCells().map(e=>(0,I.jsx)(BM,{children:ER(e.column.columnDef.cell,e.getContext())},e.id))})}function IR({className:e,type:t,...n}){return(0,I.jsx)(`input`,{type:t,"data-slot":`input`,className:K(`file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm`,`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,e),...n})}function LR({className:e,...t}){return(0,I.jsx)(Mg,{"data-slot":`label`,className:K(`flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,e),...t})}function RR({className:e,size:t=`default`,...n}){return(0,I.jsx)(uy,{"data-slot":`switch`,"data-size":t,className:K(`peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6`,e),...n,children:(0,I.jsx)(dy,{"data-slot":`switch-thumb`,className:K(`bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0`)})})}var zR={window:`24h`,from:``,to:``,levels:[],provider:``,routeType:``,modelIn:``,modelOut:``,user:``,session:``,statusClass:[],hasError:`all`,q:``},BR=null,VR=null;function HR(e,t){return{window:e.filters.window,from:e.filters.from||void 0,to:e.filters.to||void 0,levels:e.filters.levels,provider:e.filters.provider||void 0,routeType:e.filters.routeType||void 0,modelIn:e.filters.modelIn||void 0,modelOut:e.filters.modelOut||void 0,user:e.filters.user||void 0,session:e.filters.session||void 0,statusClass:e.filters.statusClass,hasError:e.filters.hasError===`all`?void 0:e.filters.hasError===`true`,q:e.filters.q||void 0,sort:e.sort,limit:50,cursor:t??void 0}}function UR(e,t){let n=new Map;for(let t of e)n.set(t.id,t);for(let e of t)n.set(e.id,e);return Array.from(n.values()).sort((e,t)=>Date.parse(t.ts)-Date.parse(e.ts))}const WR=qx((e,t)=>({filters:{...zR},sort:`time_desc`,items:[],nextCursor:null,hasMore:!1,stats:null,meta:null,loading:!1,loadingMore:!1,error:null,autoRefreshEnabled:!1,refreshIntervalSec:5,savedViews:[],tailEnabled:!1,tailConnected:!1,tailError:null,setFilter:(t,n)=>{e(e=>({filters:{...e.filters,[t]:n}}))},setSort:t=>e({sort:t}),applyFilters:async()=>{await t().fetchFirstPage()},resetFilters:async()=>{e({filters:{...zR},sort:`time_desc`}),await t().fetchFirstPage()},fetchFirstPage:async()=>{e({loading:!0,error:null});try{let n=await fS(HR(t()));e({items:n.items,nextCursor:n.nextCursor,hasMore:n.hasMore,stats:n.stats,meta:n.meta,loading:!1,loadingMore:!1})}catch(t){e({loading:!1,loadingMore:!1,error:t instanceof Error?t.message:`日志查询失败`})}},fetchNextPage:async()=>{let n=t();if(!(!n.nextCursor||n.loadingMore)){e({loadingMore:!0,error:null});try{let t=await fS(HR(n,n.nextCursor));e({items:[...n.items,...t.items],nextCursor:t.nextCursor,hasMore:t.hasMore,stats:t.stats,meta:t.meta,loadingMore:!1})}catch(t){e({loadingMore:!1,error:t instanceof Error?t.message:`加载更多日志失败`})}}},setAutoRefreshEnabled:n=>{e({autoRefreshEnabled:n}),n?t().startAutoRefresh():t().stopAutoRefresh()},setRefreshIntervalSec:n=>{e({refreshIntervalSec:Math.max(2,Math.min(60,n))}),t().autoRefreshEnabled&&t().startAutoRefresh()},startAutoRefresh:()=>{BR&&=(clearInterval(BR),null);let e=Math.max(2,t().refreshIntervalSec)*1e3;BR=setInterval(()=>{t().fetchFirstPage()},e)},stopAutoRefresh:()=>{BR&&=(clearInterval(BR),null)},setTailEnabled:n=>{e({tailEnabled:n}),n?t().startTail():t().stopTail()},startTail:()=>{VR&&=(VR(),null);let n=t();VR=hS({window:n.filters.window,levels:n.filters.levels,provider:n.filters.provider||void 0,routeType:n.filters.routeType||void 0,modelIn:n.filters.modelIn||void 0,modelOut:n.filters.modelOut||void 0,user:n.filters.user||void 0,session:n.filters.session||void 0,statusClass:n.filters.statusClass,hasError:n.filters.hasError===`all`?void 0:n.filters.hasError===`true`,q:n.filters.q||void 0,sort:n.sort},{onReady:()=>{e({tailConnected:!0,tailError:null})},onEvents:t=>{e(e=>({tailConnected:!0,tailError:null,items:UR(e.items,t.items),stats:t.stats,meta:t.meta}))},onError:t=>{e({tailConnected:!1,tailError:t})}})},stopTail:()=>{VR&&=(VR(),null),e({tailConnected:!1,tailError:null})},saveCurrentView:n=>{let r=n.trim();if(!r)return;let i=t(),a={id:crypto.randomUUID(),name:r,filters:{...i.filters},sort:i.sort};e(e=>({savedViews:[a,...e.savedViews].slice(0,20)}))},applySavedView:async n=>{let r=t().savedViews.find(e=>e.id===n);r&&(e({filters:{...r.filters},sort:r.sort}),await t().fetchFirstPage())},deleteSavedView:t=>{e(e=>({savedViews:e.savedViews.filter(e=>e.id!==t)}))}}));function GR(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),URL.revokeObjectURL(n)}function KR(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}T${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function qR(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toISOString()}function JR(){let e=Sr(),t=xr({from:`/logs`}),n=WR(e=>e.filters),r=WR(e=>e.sort),i=WR(e=>e.items),a=WR(e=>e.hasMore),o=WR(e=>e.stats),s=WR(e=>e.meta),c=WR(e=>e.loading),l=WR(e=>e.loadingMore),u=WR(e=>e.error),d=WR(e=>e.autoRefreshEnabled),f=WR(e=>e.refreshIntervalSec),p=WR(e=>e.savedViews),m=WR(e=>e.tailEnabled),h=WR(e=>e.tailConnected),g=WR(e=>e.tailError),_=WR(e=>e.setFilter),v=WR(e=>e.setSort),y=WR(e=>e.applyFilters),b=WR(e=>e.resetFilters),x=WR(e=>e.fetchNextPage),S=WR(e=>e.setAutoRefreshEnabled),C=WR(e=>e.setRefreshIntervalSec),w=WR(e=>e.saveCurrentView),T=WR(e=>e.applySavedView),E=WR(e=>e.deleteSavedView),ee=WR(e=>e.setTailEnabled),[D,O]=(0,F.useState)(``);(0,F.useEffect)(()=>{t.user&&_(`user`,t.user),t.session&&_(`session`,t.session),y()},[y,t.user,t.session,_]);let k=(0,F.useMemo)(()=>Array.from(new Set(i.map(e=>e.provider))).sort((e,t)=>e.localeCompare(t)),[i]),te=(0,F.useMemo)(()=>Array.from(new Set(i.map(e=>e.routeType))).sort((e,t)=>e.localeCompare(t)),[i]),A=(0,F.useMemo)(()=>Array.from(new Set(i.map(e=>e.modelIn).filter(Boolean))).sort((e,t)=>e.localeCompare(t)),[i]),ne=(0,F.useMemo)(()=>Array.from(new Set(i.map(e=>e.modelOut).filter(Boolean))).sort((e,t)=>e.localeCompare(t)),[i]);async function re(e){try{GR(await mS({window:n.window,from:n.from||void 0,to:n.to||void 0,levels:n.levels,provider:n.provider||void 0,routeType:n.routeType||void 0,modelIn:n.modelIn||void 0,modelOut:n.modelOut||void 0,user:n.user||void 0,session:n.session||void 0,statusClass:n.statusClass,hasError:n.hasError===`all`?void 0:n.hasError===`true`,q:n.q||void 0,sort:r},e),`logs-export.${e}`),L.success(`已导出 ${e.toUpperCase()} 文件`)}catch(e){L.error(e instanceof Error?e.message:`导出失败`)}}return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`日志检索`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`多条件过滤、详情定位、导出与实时追踪`})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`检索条件`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`支持窗口、范围、关键词与多维过滤`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{children:`时间窗口`}),(0,I.jsxs)(iM,{value:n.window,onValueChange:e=>_(`window`,e),children:[(0,I.jsx)(sM,{className:`h-8 w-full`,children:(0,I.jsx)(oM,{})}),(0,I.jsxs)(cM,{children:[(0,I.jsx)(uM,{value:`1h`,children:`最近 1 小时`}),(0,I.jsx)(uM,{value:`6h`,children:`最近 6 小时`}),(0,I.jsx)(uM,{value:`24h`,children:`最近 24 小时`})]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`from`,children:`起始时间`}),(0,I.jsx)(IR,{id:`from`,type:`datetime-local`,className:`h-8`,value:KR(n.from),onChange:e=>_(`from`,qR(e.target.value))})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`to`,children:`结束时间`}),(0,I.jsx)(IR,{id:`to`,type:`datetime-local`,className:`h-8`,value:KR(n.to),onChange:e=>_(`to`,qR(e.target.value))})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`keyword`,children:`关键词`}),(0,I.jsx)(IR,{id:`keyword`,className:`h-8`,value:n.q,onChange:e=>_(`q`,e.target.value),placeholder:`request id / path / message`})]})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-6`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{children:`级别`}),(0,I.jsxs)(iM,{value:n.levels.length===0?`all`:n.levels.join(`,`),onValueChange:e=>_(`levels`,e===`all`?[]:e.split(`,`)),children:[(0,I.jsx)(sM,{className:`h-8 w-full`,children:(0,I.jsx)(oM,{})}),(0,I.jsxs)(cM,{children:[(0,I.jsx)(uM,{value:`all`,children:`全部`}),(0,I.jsx)(uM,{value:`info`,children:`info`}),(0,I.jsx)(uM,{value:`error`,children:`error`}),(0,I.jsx)(uM,{value:`info,error`,children:`info + error`})]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{children:`Provider`}),(0,I.jsxs)(iM,{value:n.provider||`all`,onValueChange:e=>_(`provider`,e===`all`?``:e),children:[(0,I.jsx)(sM,{className:`h-8 w-full`,children:(0,I.jsx)(oM,{})}),(0,I.jsxs)(cM,{children:[(0,I.jsx)(uM,{value:`all`,children:`全部`}),k.map(e=>(0,I.jsx)(uM,{value:e,children:e},e))]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{children:`路由类型`}),(0,I.jsxs)(iM,{value:n.routeType||`all`,onValueChange:e=>_(`routeType`,e===`all`?``:e),children:[(0,I.jsx)(sM,{className:`h-8 w-full`,children:(0,I.jsx)(oM,{})}),(0,I.jsxs)(cM,{children:[(0,I.jsx)(uM,{value:`all`,children:`全部`}),te.map(e=>(0,I.jsx)(uM,{value:e,children:e},e))]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{children:`原始模型`}),(0,I.jsxs)(iM,{value:n.modelIn||`all`,onValueChange:e=>_(`modelIn`,e===`all`?``:e),children:[(0,I.jsx)(sM,{className:`h-8 w-full`,children:(0,I.jsx)(oM,{})}),(0,I.jsxs)(cM,{children:[(0,I.jsx)(uM,{value:`all`,children:`全部`}),A.map(e=>(0,I.jsx)(uM,{value:e,children:e},e))]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{children:`路由模型`}),(0,I.jsxs)(iM,{value:n.modelOut||`all`,onValueChange:e=>_(`modelOut`,e===`all`?``:e),children:[(0,I.jsx)(sM,{className:`h-8 w-full`,children:(0,I.jsx)(oM,{})}),(0,I.jsxs)(cM,{children:[(0,I.jsx)(uM,{value:`all`,children:`全部`}),ne.map(e=>(0,I.jsx)(uM,{value:e,children:e},e))]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{children:`是否错误`}),(0,I.jsxs)(iM,{value:n.hasError,onValueChange:e=>_(`hasError`,e),children:[(0,I.jsx)(sM,{className:`h-8 w-full`,children:(0,I.jsx)(oM,{})}),(0,I.jsxs)(cM,{children:[(0,I.jsx)(uM,{value:`all`,children:`全部`}),(0,I.jsx)(uM,{value:`true`,children:`仅错误`}),(0,I.jsx)(uM,{value:`false`,children:`仅成功`})]})]})]})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`user-key`,children:`用户标识`}),(0,I.jsx)(IR,{id:`user-key`,className:`h-8`,value:n.user,onChange:e=>_(`user`,e.target.value),placeholder:`userKey 或原始 user_id`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`session-id`,children:`会话 ID`}),(0,I.jsx)(IR,{id:`session-id`,className:`h-8`,value:n.session,onChange:e=>_(`session`,e.target.value),placeholder:`sessionId`})]})]}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,I.jsx)(q,{size:`sm`,onClick:()=>void y(),disabled:c,children:`查询`}),(0,I.jsx)(q,{size:`sm`,variant:`outline`,onClick:()=>void b(),disabled:c,children:`重置`}),(0,I.jsxs)(q,{size:`sm`,variant:`outline`,onClick:()=>void re(`csv`),children:[(0,I.jsx)(oa,{className:`h-3.5 w-3.5`}),`导出 CSV`]}),(0,I.jsxs)(q,{size:`sm`,variant:`outline`,onClick:()=>void re(`json`),children:[(0,I.jsx)(oa,{className:`h-3.5 w-3.5`}),`导出 JSON`]})]})]})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-5`,children:[(0,I.jsx)(YR,{title:`总条数`,value:o?.total??0}),(0,I.jsx)(YR,{title:`错误率`,value:`${o?.errorRate??0}%`}),(0,I.jsx)(YR,{title:`P95`,value:`${o?.p95LatencyMs??0} ms`}),(0,I.jsx)(YR,{title:`平均延迟`,value:`${o?.avgLatencyMs??0} ms`}),(0,I.jsx)(YR,{title:`扫描行数`,value:s?.scannedLines??0})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`结果列表`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:s?`文件 ${s.scannedFiles} · 行 ${s.scannedLines} · 解析异常 ${s.parseErrors}${s.truncated?` · 已截断`:``}`:`等待查询`})]}),(0,I.jsx)(`div`,{className:`space-y-3 px-3 py-3`,children:u?(0,I.jsx)(bM,{className:`min-h-[160px] p-6 md:p-6`,children:(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`日志检索失败`}),(0,I.jsx)(TM,{children:u})]})}):c?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(EM,{className:`h-10 w-full`}),(0,I.jsx)(EM,{className:`h-10 w-full`}),(0,I.jsx)(EM,{className:`h-10 w-full`})]}):i.length===0?(0,I.jsx)(bM,{className:`min-h-[200px] p-6 md:p-6`,children:(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`没有匹配日志`}),(0,I.jsx)(TM,{children:`请调整筛选条件后重试`})]})}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(PR,{data:i,sort:r,onSortChange:v,onRowClick:t=>void e({to:`/logs/$id`,params:{id:t.id}})}),(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`已加载 `,i.length,` 条`]}),(0,I.jsx)(q,{size:`sm`,variant:`outline`,disabled:!a||l,onClick:()=>void x(),children:l?`加载中...`:a?`加载更多`:`已到底部`})]})]})})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`增强功能`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`预设视图、自动刷新、实时追踪(可选)`})]}),(0,I.jsxs)(`div`,{className:`space-y-4 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(RR,{checked:d,onCheckedChange:S}),(0,I.jsx)(`span`,{className:`text-sm`,children:`自动刷新`}),(0,I.jsx)(Ea,{className:`h-4 w-4 text-muted-foreground`})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(LR,{className:`text-sm`,children:`间隔`}),(0,I.jsxs)(iM,{value:String(f),onValueChange:e=>C(Number.parseInt(e,10)||5),children:[(0,I.jsx)(sM,{className:`h-8 w-[120px]`,children:(0,I.jsx)(oM,{})}),(0,I.jsxs)(cM,{children:[(0,I.jsx)(uM,{value:`3`,children:`3 秒`}),(0,I.jsx)(uM,{value:`5`,children:`5 秒`}),(0,I.jsx)(uM,{value:`10`,children:`10 秒`}),(0,I.jsx)(uM,{value:`30`,children:`30 秒`})]})]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(RR,{checked:m,onCheckedChange:ee}),(0,I.jsx)(`span`,{className:`text-sm`,children:`实时追踪`}),(0,I.jsx)(Ta,{className:`h-4 w-4 text-muted-foreground`}),m?(0,I.jsx)(Y,{variant:h?`outline`:`secondary`,children:h?`已连接`:`连接中`}):null]})]}),g?(0,I.jsx)(`div`,{className:`text-xs text-destructive`,children:g}):null,(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(IR,{className:`h-8 max-w-sm`,value:D,onChange:e=>O(e.target.value),placeholder:`输入视图名称`}),(0,I.jsxs)(q,{size:`sm`,variant:`outline`,onClick:()=>{D.trim()&&(w(D.trim()),O(``))},children:[(0,I.jsx)(ka,{className:`h-3.5 w-3.5`}),`保存当前筛选`]})]}),(0,I.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:p.length===0?(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`暂无预设视图`}):p.map(e=>(0,I.jsxs)(`div`,{className:`flex items-center gap-1 rounded-md border px-2 py-1`,children:[(0,I.jsx)(`button`,{type:`button`,className:`text-xs hover:underline`,onClick:()=>void T(e.id),children:e.name}),(0,I.jsx)(`button`,{type:`button`,className:`text-xs text-muted-foreground hover:text-destructive`,onClick:()=>E(e.id),children:`删除`})]},e.id))})]})]})]})]})}function YR({title:e,value:t}){return(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background px-3 py-3`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium`,children:e}),(0,I.jsx)(`div`,{className:`mt-1 text-lg font-semibold`,children:t})]})}function XR(e){return e.log??{}}function ZR(){let e=vS(e=>e.draft),t=vS(e=>e.updateDraft);if(!e)return null;let n=e.log,r=n?.enabled!==!1&&n!==void 0;function i(e){t(t=>(t.log=e(XR(t)),t))}return(0,I.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-6 lg:overflow-hidden`,children:[(0,I.jsxs)(`div`,{className:`shrink-0`,children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`日志配置`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`控制请求/响应日志的记录范围与存储策略`})]}),(0,I.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4`,children:[(0,I.jsx)(`div`,{className:`rounded-lg border bg-background`,children:(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`启用日志`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`开启后将记录所有代理请求的元数据`})]}),(0,I.jsx)(RR,{checked:r,onCheckedChange:e=>{e?i(e=>({...e,enabled:!0})):n&&i(e=>({...e,enabled:!1}))}})]})}),n?(0,I.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-2`,children:[(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`通用设置`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`日志目录、Body 记录范围等通用配置`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{children:`Body 记录范围`}),(0,I.jsxs)(iM,{value:n.bodyPolicy===`masked`?`full`:n.bodyPolicy??`off`,onValueChange:e=>i(t=>({...t,bodyPolicy:e})),children:[(0,I.jsx)(sM,{className:`h-8`,children:(0,I.jsx)(oM,{})}),(0,I.jsxs)(cM,{children:[(0,I.jsx)(uM,{value:`off`,children:`off — 不记录 body(推荐)`}),(0,I.jsx)(uM,{value:`full`,children:`full — 记录完整 body(仅调试)`})]})]}),(n.bodyPolicy===`full`||n.bodyPolicy===`masked`)&&(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`当前会保存完整 body,可能包含敏感信息,建议仅在排障时临时开启。`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`log-basedir`,children:`日志目录`}),(0,I.jsx)(IR,{id:`log-basedir`,value:n.baseDir??``,onChange:e=>i(t=>({...t,baseDir:e.target.value||void 0})),placeholder:`默认: ~/.local-router/logs/`,className:`h-8`}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`留空则使用默认路径`})]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`事件日志`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`按天分片的 JSONL 格式结构化日志`})]}),(0,I.jsx)(`div`,{className:`px-3 py-3`,children:(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`events-retain`,children:`保留天数`}),(0,I.jsx)(IR,{id:`events-retain`,type:`number`,min:1,value:n.events?.retainDays??14,onChange:e=>i(t=>({...t,events:{...t.events,retainDays:Number.parseInt(e.target.value)||14}})),className:`h-8`})]})})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(`div`,{className:`border-b px-3 py-3`,children:(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`流式日志`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`SSE 原始响应文本`})]}),(0,I.jsx)(RR,{checked:n.streams?.enabled!==!1,onCheckedChange:e=>i(t=>({...t,streams:{...t.streams,enabled:e}}))})]})}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`streams-retain`,children:`保留天数`}),(0,I.jsx)(IR,{id:`streams-retain`,type:`number`,min:1,value:n.streams?.retainDays??7,onChange:e=>i(t=>({...t,streams:{...t.streams,retainDays:Number.parseInt(e.target.value)||7}})),className:`h-8`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`streams-maxbytes`,children:`单请求最大字节数`}),(0,I.jsx)(IR,{id:`streams-maxbytes`,type:`number`,min:1,value:n.streams?.maxBytesPerRequest??10485760,onChange:e=>i(t=>({...t,streams:{...t.streams,maxBytesPerRequest:Number.parseInt(e.target.value)||10485760}})),className:`h-8`}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`默认 10MB (10485760),超出部分将被截断`})]})]})]})]})]}):(0,I.jsx)(`div`,{className:`rounded-lg border bg-background py-12 text-center text-sm text-muted-foreground`,children:`当前未启用日志配置,请先打开上方开关`})]})]})}function QR({className:e,orientation:t=`horizontal`,decorative:n=!0,...r}){return(0,I.jsx)(Qv,{"data-slot":`separator`,decorative:n,orientation:t,className:K(`bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px`,e),...r})}function $R({className:e,...t}){return(0,I.jsx)(`textarea`,{"data-slot":`textarea`,className:K(`border-input placeholder:text-muted-foreground 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:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm`,e),...t})}function ez({models:e,onChange:t}){let n=Object.entries(e),r=(0,F.useRef)(new Map),i=(0,F.useRef)(0),a=new Set(n.map(([e])=>e));for(let e of r.current.keys())a.has(e)||r.current.delete(e);function o(e){let t=r.current.get(e);if(t)return t;i.current+=1;let n=`model-row-${i.current}`;return r.current.set(e,n),n}function s(){let n=`model-${Date.now()}`;t({...e,[n]:{}})}function c(n){let r={...e};delete r[n],t(r)}function l(n,i){if(i===n)return;let a=r.current.get(n);a&&(r.current.delete(n),r.current.set(i,a));let o={};for(let[t,r]of Object.entries(e))o[t===n?i:t]=r;t(o)}function u(n,r,i){t({...e,[n]:{...e[n],[r]:i}})}return(0,I.jsxs)(`div`,{className:`space-y-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,I.jsx)(LR,{className:`text-sm font-medium`,children:`模型列表`}),(0,I.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:s,children:[(0,I.jsx)(wa,{className:`h-3.5 w-3.5 mr-1`}),`添加模型`]})]}),n.length===0?(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground py-4 text-center`,children:`暂无模型,点击上方按钮添加`}):(0,I.jsx)(`div`,{className:`rounded-md border`,children:(0,I.jsxs)(PM,{children:[(0,I.jsx)(FM,{children:(0,I.jsxs)(RM,{children:[(0,I.jsx)(zM,{children:`模型ID`}),(0,I.jsx)(zM,{className:`w-24 text-center`,children:`图像输入`}),(0,I.jsx)(zM,{className:`w-24 text-center`,children:`推理输出`}),(0,I.jsx)(zM,{className:`w-16`})]})}),(0,I.jsx)(IM,{children:n.map(([e,t])=>(0,I.jsxs)(RM,{children:[(0,I.jsx)(BM,{children:(0,I.jsx)(IR,{value:e,onChange:t=>l(e,t.target.value),className:`h-8 text-sm`})}),(0,I.jsx)(BM,{className:`text-center`,children:(0,I.jsx)(RR,{checked:t[`image-input`]??!1,onCheckedChange:t=>u(e,`image-input`,t)})}),(0,I.jsx)(BM,{className:`text-center`,children:(0,I.jsx)(RR,{checked:t.reasoning??!1,onCheckedChange:t=>u(e,`reasoning`,t)})}),(0,I.jsx)(BM,{children:(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 text-destructive hover:text-destructive`,onClick:()=>c(e),children:(0,I.jsx)(La,{className:`h-3.5 w-3.5`})})})]},o(e)))})]})})]})}var tz=[{value:`openai-completions`,label:`OpenAI Completions`},{value:`openai-responses`,label:`OpenAI Responses`},{value:`anthropic-messages`,label:`Anthropic Messages`}],nz={"openai-completions":`/v1/chat/completions`,"openai-responses":`/v1/responses`,"anthropic-messages":`/v1/messages`};function rz({name:e,config:t,isNew:n,onChange:r}){let[i,a]=(0,F.useState)(!1),o=`${t.base.replace(/\/+$/,``)}${nz[t.type]}`;return(0,I.jsxs)(`div`,{className:`space-y-5`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`provider-name`,children:`Provider 名称`}),(0,I.jsx)(IR,{id:`provider-name`,value:e,disabled:!n,readOnly:!n,className:`font-mono`}),!n&&(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`名称在创建后不可修改`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{children:`协议类型`}),(0,I.jsxs)(iM,{value:t.type,onValueChange:e=>r({...t,type:e}),children:[(0,I.jsx)(sM,{children:(0,I.jsx)(oM,{})}),(0,I.jsx)(cM,{children:tz.map(e=>(0,I.jsx)(uM,{value:e.value,children:e.label},e.value))})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`provider-base`,children:`Base URL`}),(0,I.jsx)(IR,{id:`provider-base`,value:t.base,onChange:e=>r({...t,base:e.target.value}),placeholder:`https://api.example.com`}),t.base&&(0,I.jsxs)(`p`,{className:`text-xs text-muted-foreground break-all`,children:[`预览 URL: `,(0,I.jsx)(`span`,{className:`font-mono`,children:o})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`provider-proxy`,children:`Proxy URL(可选)`}),(0,I.jsx)(IR,{id:`provider-proxy`,value:t.proxy??``,onChange:e=>r({...t,proxy:e.target.value}),placeholder:`http://127.0.0.1:7890`}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`留空表示直连上游;仅此 provider 生效,不读取环境变量代理。`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`provider-apikey`,children:`API Key`}),(0,I.jsxs)(`div`,{className:`relative`,children:[(0,I.jsx)(IR,{id:`provider-apikey`,type:i?`text`:`password`,value:t.apiKey,onChange:e=>r({...t,apiKey:e.target.value}),className:`pr-10 font-mono`,placeholder:`sk-...`}),(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`absolute right-0 top-0 h-full px-3 hover:bg-transparent`,onClick:()=>a(!i),children:i?(0,I.jsx)(ca,{className:`h-4 w-4`}):(0,I.jsx)(la,{className:`h-4 w-4`})})]})]}),(0,I.jsx)(QR,{}),(0,I.jsx)(ez,{models:t.models,onChange:e=>r({...t,models:e})}),(0,I.jsx)(QR,{}),(0,I.jsx)(oz,{plugins:t.plugins??[],onChange:e=>r({...t,plugins:e.length>0?e:void 0})})]})}var iz=0;function az(){return`plugin-${Date.now()}-${++iz}`}function oz({plugins:e,onChange:t}){let[n,r]=(0,F.useState)(()=>e.map(e=>({id:az(),config:e}))),i=(0,F.useRef)(e);(0,F.useEffect)(()=>{i.current!==e&&(i.current=e,(e.length!==n.length||e.some((e,t)=>e.package!==n[t]?.config.package||JSON.stringify(e.params)!==JSON.stringify(n[t]?.config.params)))&&r(e.map(e=>({id:az(),config:e}))))},[e,n.length]);function a(e){r(e),t(e.map(e=>e.config))}function o(){a([...n,{id:az(),config:{package:``}}])}function s(e){a(n.filter((t,n)=>n!==e))}function c(e,t){let r=[...n];r[e]={...r[e],config:t},a(r)}function l(e){if(e<=0)return;let t=[...n];[t[e-1],t[e]]=[t[e],t[e-1]],a(t)}function u(e){if(e>=n.length-1)return;let t=[...n];[t[e],t[e+1]]=[t[e+1],t[e]],a(t)}return(0,I.jsxs)(`div`,{className:`space-y-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(LR,{children:`插件列表`}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`数组顺序决定洋葱模型层级:请求正序、响应逆序执行`})]}),(0,I.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:o,children:[(0,I.jsx)(wa,{className:`h-3.5 w-3.5 mr-1`}),`添加插件`]})]}),n.length===0&&(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground py-2`,children:`暂无插件配置`}),n.map((e,t)=>(0,I.jsx)(sz,{plugin:e.config,index:t,total:n.length,onUpdate:e=>c(t,e),onRemove:()=>s(t),onMoveUp:()=>l(t),onMoveDown:()=>u(t)},e.id))]})}function sz({plugin:e,index:t,total:n,onUpdate:r,onRemove:i,onMoveUp:a,onMoveDown:o}){let[s,c]=(0,F.useState)(e.params?JSON.stringify(e.params,null,2):``),[l,u]=(0,F.useState)(null),d=(0,F.useRef)(e.params);(0,F.useEffect)(()=>{d.current!==e.params&&(d.current=e.params,c(e.params?JSON.stringify(e.params,null,2):``),u(null))},[e.params]);function f(t){if(c(t),!t.trim()){u(null),r({...e,params:void 0});return}try{let n=JSON.parse(t);if(typeof n!=`object`||!n||Array.isArray(n)){u(`params 必须是 JSON 对象`);return}u(null),r({...e,params:n})}catch{u(`JSON 格式不正确`)}}return(0,I.jsxs)(`div`,{className:`rounded-lg border p-3 space-y-2`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(ha,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,I.jsxs)(`span`,{className:`text-xs text-muted-foreground shrink-0`,children:[`#`,t+1]}),(0,I.jsx)(IR,{value:e.package,onChange:t=>r({...e,package:t.target.value}),placeholder:`npm-package-name 或 ./local/path.ts`,className:`font-mono text-xs h-8`}),(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 shrink-0`,onClick:a,disabled:t<=0,children:(0,I.jsx)(na,{className:`h-3.5 w-3.5`})}),(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 shrink-0`,onClick:o,disabled:t>=n-1,children:(0,I.jsx)(ea,{className:`h-3.5 w-3.5`})}),(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 shrink-0 text-destructive hover:text-destructive`,onClick:i,children:(0,I.jsx)(La,{className:`h-3.5 w-3.5`})})]}),(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(LR,{className:`text-xs`,children:`params (JSON)`}),(0,I.jsx)($R,{value:s,onChange:e=>f(e.target.value),placeholder:`{ "key": "value" }`,className:`font-mono text-xs min-h-[60px]`,rows:3}),l&&(0,I.jsx)(`p`,{className:`text-xs text-destructive`,children:l})]})]})}function cz({...e}){return(0,I.jsx)(nu,{"data-slot":`alert-dialog`,...e})}function lz({...e}){return(0,I.jsx)(ru,{"data-slot":`alert-dialog-trigger`,...e})}function uz({...e}){return(0,I.jsx)(iu,{"data-slot":`alert-dialog-portal`,...e})}function dz({className:e,...t}){return(0,I.jsx)(au,{"data-slot":`alert-dialog-overlay`,className:K(`data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50`,e),...t})}function fz({className:e,size:t=`default`,...n}){return(0,I.jsxs)(uz,{children:[(0,I.jsx)(dz,{}),(0,I.jsx)(ou,{"data-slot":`alert-dialog-content`,"data-size":t,className:K(`bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg`,e),...n})]})}function pz({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`alert-dialog-header`,className:K(`grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,e),...t})}function mz({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`alert-dialog-footer`,className:K(`flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,e),...t})}function hz({className:e,...t}){return(0,I.jsx)(lu,{"data-slot":`alert-dialog-title`,className:K(`text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,e),...t})}function gz({className:e,...t}){return(0,I.jsx)(uu,{"data-slot":`alert-dialog-description`,className:K(`text-muted-foreground text-sm`,e),...t})}function _z({className:e,variant:t=`default`,size:n=`default`,...r}){return(0,I.jsx)(q,{variant:t,size:n,asChild:!0,children:(0,I.jsx)(su,{"data-slot":`alert-dialog-action`,className:K(e),...r})})}function vz({className:e,variant:t=`outline`,size:n=`default`,...r}){return(0,I.jsx)(q,{variant:t,size:n,asChild:!0,children:(0,I.jsx)(cu,{"data-slot":`alert-dialog-cancel`,className:K(e),...r})})}function yz({...e}){return(0,I.jsx)(Rh,{"data-slot":`context-menu`,...e})}function bz({...e}){return(0,I.jsx)(zh,{"data-slot":`context-menu-trigger`,...e})}function xz({className:e,...t}){return(0,I.jsx)(Bh,{children:(0,I.jsx)(Vh,{"data-slot":`context-menu-content`,className:K(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md`,e),...t})})}function Sz({className:e,inset:t,variant:n=`default`,...r}){return(0,I.jsx)(Hh,{"data-slot":`context-menu-item`,"data-inset":t,"data-variant":n,className:K(`focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r})}function Cz({className:e,...t}){return(0,I.jsx)(Uh,{"data-slot":`context-menu-separator`,className:K(`bg-border -mx-1 my-1 h-px`,e),...t})}function wz(e,t){let n=getComputedStyle(e);return t*parseFloat(n.fontSize)}function Tz(e,t){let n=getComputedStyle(e.ownerDocument.body);return t*parseFloat(n.fontSize)}function Ez(e){return e/100*window.innerHeight}function Dz(e){return e/100*window.innerWidth}function Oz(e){switch(typeof e){case`number`:return[e,`px`];case`string`:{let t=parseFloat(e);return e.endsWith(`%`)?[t,`%`]:e.endsWith(`px`)?[t,`px`]:e.endsWith(`rem`)?[t,`rem`]:e.endsWith(`em`)?[t,`em`]:e.endsWith(`vh`)?[t,`vh`]:e.endsWith(`vw`)?[t,`vw`]:[t,`%`]}}}function kz({groupSize:e,panelElement:t,styleProp:n}){let r,[i,a]=Oz(n);switch(a){case`%`:r=i/100*e;break;case`px`:r=i;break;case`rem`:r=Tz(t,i);break;case`em`:r=wz(t,i);break;case`vh`:r=Ez(i);break;case`vw`:r=Dz(i);break}return r}function Az(e){return parseFloat(e.toFixed(3))}function jz({group:e}){let{orientation:t,panels:n}=e;return n.reduce((e,n)=>(e+=t===`horizontal`?n.element.offsetWidth:n.element.offsetHeight,e),0)}function Mz(e){let{panels:t}=e,n=jz({group:e});return n===0?t.map(e=>({groupResizeBehavior:e.panelConstraints.groupResizeBehavior,collapsedSize:0,collapsible:e.panelConstraints.collapsible===!0,defaultSize:void 0,disabled:e.panelConstraints.disabled,minSize:0,maxSize:100,panelId:e.id})):t.map(e=>{let{element:t,panelConstraints:r}=e,i=0;r.collapsedSize!==void 0&&(i=Az(kz({groupSize:n,panelElement:t,styleProp:r.collapsedSize})/n*100));let a;r.defaultSize!==void 0&&(a=Az(kz({groupSize:n,panelElement:t,styleProp:r.defaultSize})/n*100));let o=0;r.minSize!==void 0&&(o=Az(kz({groupSize:n,panelElement:t,styleProp:r.minSize})/n*100));let s=100;return r.maxSize!==void 0&&(s=Az(kz({groupSize:n,panelElement:t,styleProp:r.maxSize})/n*100)),{groupResizeBehavior:r.groupResizeBehavior,collapsedSize:i,collapsible:r.collapsible===!0,defaultSize:a,disabled:r.disabled,minSize:o,maxSize:s,panelId:e.id}})}function Nz(e,t=`Assertion error`){if(!e)throw Error(t)}function Pz(e,t){return Array.from(t).sort(e===`horizontal`?Fz:Iz)}function Fz(e,t){let n=e.element.offsetLeft-t.element.offsetLeft;return n===0?e.element.offsetWidth-t.element.offsetWidth:n}function Iz(e,t){let n=e.element.offsetTop-t.element.offsetTop;return n===0?e.element.offsetHeight-t.element.offsetHeight:n}function Lz(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.ELEMENT_NODE}function Rz(e,t){return{x:e.x>=t.left&&e.x<=t.right?0:Math.min(Math.abs(e.x-t.left),Math.abs(e.x-t.right)),y:e.y>=t.top&&e.y<=t.bottom?0:Math.min(Math.abs(e.y-t.top),Math.abs(e.y-t.bottom))}}function zz({orientation:e,rects:t,targetRect:n}){let r={x:n.x+n.width/2,y:n.y+n.height/2},i,a=Number.MAX_VALUE;for(let n of t){let{x:t,y:o}=Rz(r,n),s=e===`horizontal`?t:o;s<a&&(a=s,i=n)}return Nz(i,`No rect found`),i}var Bz;function Vz(){return Bz===void 0&&(Bz=typeof matchMedia==`function`?!!matchMedia(`(pointer:coarse)`).matches:!1),Bz}function Hz(e){let{element:t,orientation:n,panels:r,separators:i}=e,a=Pz(n,Array.from(t.children).filter(Lz).map(e=>({element:e}))).map(({element:e})=>e),o=[],s=!1,c=!1,l=-1,u=-1,d=0,f,p=[];{let e=-1;for(let t of a)t.hasAttribute(`data-panel`)&&(e++,t.ariaDisabled===null&&(d++,l===-1&&(l=e),u=e))}if(d>1){let t=-1;for(let d of a)if(d.hasAttribute(`data-panel`)){t++;let i=r.find(e=>e.element===d);if(i){if(f){let r=f.element.getBoundingClientRect(),a=d.getBoundingClientRect(),m;if(c){let e=n===`horizontal`?new DOMRect(r.right,r.top,0,r.height):new DOMRect(r.left,r.bottom,r.width,0),t=n===`horizontal`?new DOMRect(a.left,a.top,0,a.height):new DOMRect(a.left,a.top,a.width,0);switch(p.length){case 0:m=[e,t];break;case 1:{let i=p[0];m=[i,zz({orientation:n,rects:[r,a],targetRect:i.element.getBoundingClientRect()})===r?t:e];break}default:m=p;break}}else m=p.length?p:[n===`horizontal`?new DOMRect(r.right,a.top,a.left-r.right,a.height):new DOMRect(a.left,r.bottom,a.width,a.top-r.bottom)];for(let n of m){let r=`width`in n?n:n.element.getBoundingClientRect(),a=Vz()?e.resizeTargetMinimumSize.coarse:e.resizeTargetMinimumSize.fine;if(r.width<a){let e=a-r.width;r=new DOMRect(r.x-e/2,r.y,r.width+e,r.height)}if(r.height<a){let e=a-r.height;r=new DOMRect(r.x,r.y-e/2,r.width,r.height+e)}!s&&!(t<=l||t>u)&&o.push({group:e,groupSize:jz({group:e}),panels:[f,i],separator:`width`in n?void 0:n,rect:r}),s=!1}}c=!1,f=i,p=[]}}else if(d.hasAttribute(`data-separator`)){d.ariaDisabled!==null&&(s=!0);let e=i.find(e=>e.element===d);e?p.push(e):(f=void 0,p=[])}else c=!0}return o}var Uz=class{#e={};addListener(e,t){let n=this.#e[e];return n===void 0?this.#e[e]=[t]:n.includes(t)||n.push(t),()=>{this.removeListener(e,t)}}emit(e,t){let n=this.#e[e];if(n!==void 0)if(n.length===1)n[0].call(null,t);else{let e=!1,r=null,i=Array.from(n);for(let n=0;n<i.length;n++){let a=i[n];try{a.call(null,t)}catch(t){r===null&&(e=!0,r=t)}}if(e)throw r}}removeAllListeners(){this.#e={}}removeListener(e,t){let n=this.#e[e];if(n!==void 0){let e=n.indexOf(t);e>=0&&n.splice(e,1)}}},Wz=new Map,Gz=new Uz;function Kz(e){Wz=new Map(Wz),Wz.delete(e)}function qz(e,t){for(let[t]of Wz)if(t.id===e)return t}function Jz(e,t){for(let[t,n]of Wz)if(t.id===e)return n;if(t)throw Error(`Could not find data for Group with id ${e}`)}function Yz(){return Wz}function Xz(e,t){return Gz.addListener(`groupChange`,n=>{n.group.id===e&&t(n)})}function Zz(e,t){let n=Wz.get(e);Wz=new Map(Wz),Wz.set(e,t),Gz.emit(`groupChange`,{group:e,prev:n,next:t})}function Qz(e,t,n){let r,i={x:1/0,y:1/0};for(let a of t){let t=Rz(n,a.rect);switch(e){case`horizontal`:t.x<=i.x&&(r=a,i=t);break;case`vertical`:t.y<=i.y&&(r=a,i=t);break}}return r?{distance:i,hitRegion:r}:void 0}function $z(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function eB(e,t){if(e===t)throw Error(`Cannot compare node with itself`);let n={a:oB(e),b:oB(t)},r;for(;n.a.at(-1)===n.b.at(-1);)r=n.a.pop(),n.b.pop();Nz(r,`Stacking order can only be calculated for elements with a common ancestor`);let i={a:aB(iB(n.a)),b:aB(iB(n.b))};if(i.a===i.b){let e=r.childNodes,t={a:n.a.at(-1),b:n.b.at(-1)},i=e.length;for(;i--;){let n=e[i];if(n===t.a)return 1;if(n===t.b)return-1}}return Math.sign(i.a-i.b)}var tB=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function nB(e){let t=getComputedStyle(sB(e)??e).display;return t===`flex`||t===`inline-flex`}function rB(e){let t=getComputedStyle(e);return!!(t.position===`fixed`||t.zIndex!==`auto`&&(t.position!==`static`||nB(e))||+t.opacity<1||`transform`in t&&t.transform!==`none`||`webkitTransform`in t&&t.webkitTransform!==`none`||`mixBlendMode`in t&&t.mixBlendMode!==`normal`||`filter`in t&&t.filter!==`none`||`webkitFilter`in t&&t.webkitFilter!==`none`||`isolation`in t&&t.isolation===`isolate`||tB.test(t.willChange)||t.webkitOverflowScrolling===`touch`)}function iB(e){let t=e.length;for(;t--;){let n=e[t];if(Nz(n,`Missing node`),rB(n))return n}return null}function aB(e){return e&&Number(getComputedStyle(e).zIndex)||0}function oB(e){let t=[];for(;e;)t.push(e),e=sB(e);return t}function sB(e){let{parentNode:t}=e;return $z(t)?t.host:t}function cB(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function lB({groupElement:e,hitRegion:t,pointerEventTarget:n}){if(!Lz(n)||n.contains(e)||e.contains(n))return!0;if(eB(n,e)>0){let r=n;for(;r;){if(r.contains(e))return!0;if(cB(r.getBoundingClientRect(),t))return!1;r=r.parentElement}}return!0}function uB(e,t){let n=[];return t.forEach((t,r)=>{if(r.disabled)return;let i=Hz(r),a=Qz(r.orientation,i,{x:e.clientX,y:e.clientY});a&&a.distance.x<=0&&a.distance.y<=0&&lB({groupElement:r.element,hitRegion:a.hitRegion.rect,pointerEventTarget:e.target})&&n.push(a.hitRegion)}),n}function dB(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0}function fB(e,t,n=0){return Math.abs(Az(e)-Az(t))<=n}function pB(e,t){return fB(e,t)?0:e>t?1:-1}function mB({overrideDisabledPanels:e,panelConstraints:t,prevSize:n,size:r}){let{collapsedSize:i=0,collapsible:a,disabled:o,maxSize:s=100,minSize:c=0}=t;if(o&&!e)return n;if(pB(r,c)<0)if(a){let e=(i+c)/2;r=pB(r,e)<0?i:c}else r=c;return r=Math.min(s,r),r=Az(r),r}function hB({delta:e,initialLayout:t,panelConstraints:n,pivotIndices:r,prevLayout:i,trigger:a}){if(fB(e,0))return t;let o=a===`imperative-api`,s=Object.values(t),c=Object.values(i),l=[...s],[u,d]=r;Nz(u!=null,`Invalid first pivot index`),Nz(d!=null,`Invalid second pivot index`);let f=0;switch(a){case`keyboard`:{let t=e<0?d:u,r=n[t];Nz(r,`Panel constraints not found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:o=0}=r;if(a){let n=s[t];if(Nz(n!=null,`Previous layout not found for panel index ${t}`),fB(n,i)){let t=o-n;pB(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}{let t=e<0?u:d,r=n[t];Nz(r,`No panel constraints found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:o=0}=r;if(a){let n=s[t];if(Nz(n!=null,`Previous layout not found for panel index ${t}`),fB(n,o)){let t=n-i;pB(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}break;default:{let t=e<0?d:u,r=n[t];Nz(r,`Panel constraints not found for index ${t}`);let i=s[t],{collapsible:a,collapsedSize:o,minSize:c}=r;if(a&&pB(i,c)<0)if(e>0){let t=c-o,n=t/2;pB(i+e,c)<0&&(e=pB(e,n)<=0?0:t)}else{let t=c-o,n=100-t/2;pB(i-e,c)<0&&(e=pB(100+e,n)>0?0:-t)}break}}{let t=e<0?1:-1,r=e<0?d:u,i=0;for(;;){let e=s[r];Nz(e!=null,`Previous layout not found for panel index ${r}`);let a=mB({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:e,size:100})-e;if(i+=a,r+=t,r<0||r>=n.length)break}let a=Math.min(Math.abs(e),Math.abs(i));e=e<0?0-a:a}{let t=e<0?u:d;for(;t>=0&&t<n.length;){let r=Math.abs(e)-Math.abs(f),i=s[t];Nz(i!=null,`Previous layout not found for panel index ${t}`);let a=i-r,c=mB({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:i,size:a});if(!fB(i,c)&&(f+=i-c,l[t]=c,f.toFixed(3).localeCompare(Math.abs(e).toFixed(3),void 0,{numeric:!0})>=0))break;e<0?t--:t++}}if(dB(c,l))return i;{let t=e<0?d:u,r=s[t];Nz(r!=null,`Previous layout not found for panel index ${t}`);let i=r+f,a=mB({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:r,size:i});if(l[t]=a,!fB(a,i)){let t=i-a,r=e<0?d:u;for(;r>=0&&r<n.length;){let i=l[r];Nz(i!=null,`Previous layout not found for panel index ${r}`);let a=i+t,s=mB({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:i,size:a});if(fB(i,s)||(t-=s-i,l[r]=s),fB(t,0))break;e>0?r--:r++}}}if(!fB(Object.values(l).reduce((e,t)=>t+e,0),100,.1))return i;let p=Object.keys(i);return l.reduce((e,t,n)=>(e[p[n]]=t,e),{})}function gB(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(t[n]===void 0||pB(e[n],t[n])!==0)return!1;return!0}function _B({layout:e,panelConstraints:t}){let n=Object.values(e),r=[...n],i=r.reduce((e,t)=>e+t,0);if(r.length!==t.length)throw Error(`Invalid ${t.length} panel layout: ${r.map(e=>`${e}%`).join(`, `)}`);if(!fB(i,100)&&r.length>0)for(let e=0;e<t.length;e++){let t=r[e];Nz(t!=null,`No layout data found for index ${e}`),r[e]=100/i*t}let a=0;for(let e=0;e<t.length;e++){let i=n[e];Nz(i!=null,`No layout data found for index ${e}`);let o=r[e];Nz(o!=null,`No layout data found for index ${e}`);let s=mB({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:i,size:o});o!=s&&(a+=o-s,r[e]=s)}if(!fB(a,0))for(let e=0;e<t.length;e++){let n=r[e];Nz(n!=null,`No layout data found for index ${e}`);let i=n+a,o=mB({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:n,size:i});if(n!==o&&(a-=o-n,r[e]=o,fB(a,0)))break}let o=Object.keys(e);return r.reduce((e,t,n)=>(e[o[n]]=t,e),{})}function vB({groupId:e,panelId:t}){let n=()=>{let t=Yz();for(let[n,{defaultLayoutDeferred:r,derivedPanelConstraints:i,layout:a,groupSize:o,separatorToPanels:s}]of t)if(n.id===e)return{defaultLayoutDeferred:r,derivedPanelConstraints:i,group:n,groupSize:o,layout:a,separatorToPanels:s};throw Error(`Group ${e} not found`)},r=()=>{let e=n().derivedPanelConstraints.find(e=>e.panelId===t);if(e!==void 0)return e;throw Error(`Panel constraints not found for Panel ${t}`)},i=()=>{let e=n().group.panels.find(e=>e.id===t);if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},a=()=>{let e=n().layout[t];if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},o=e=>{let r=a();if(e===r)return;let{defaultLayoutDeferred:i,derivedPanelConstraints:o,group:s,groupSize:c,layout:l,separatorToPanels:u}=n(),d=s.panels.findIndex(e=>e.id===t),f=d===s.panels.length-1,p=_B({layout:hB({delta:f?r-e:e-r,initialLayout:l,panelConstraints:o,pivotIndices:f?[d-1,d]:[d,d+1],prevLayout:l,trigger:`imperative-api`}),panelConstraints:o});gB(l,p)||Zz(s,{defaultLayoutDeferred:i,derivedPanelConstraints:o,groupSize:c,layout:p,separatorToPanels:u})};return{collapse:()=>{let{collapsible:e,collapsedSize:t}=r(),{mutableValues:n}=i(),s=a();e&&s!==t&&(n.expandToSize=s,o(t))},expand:()=>{let{collapsible:e,collapsedSize:t,minSize:n}=r(),{mutableValues:s}=i(),c=a();if(e&&c===t){let e=s.expandToSize??n;e===0&&(e=1),o(e)}},getSize:()=>{let{group:e}=n(),t=a(),{element:r}=i();return{asPercentage:t,inPixels:e.orientation===`horizontal`?r.offsetWidth:r.offsetHeight}},isCollapsed:()=>{let{collapsible:e,collapsedSize:t}=r(),n=a();return e&&fB(t,n)},resize:e=>{if(a()!==e){let t;switch(typeof e){case`number`:{let{group:r}=n();t=Az(e/jz({group:r})*100);break}case`string`:t=parseFloat(e);break}o(t)}}}}function yB(e){e.defaultPrevented||uB(e,Yz()).forEach(t=>{if(t.separator){let n=t.panels.find(e=>e.panelConstraints.defaultSize!==void 0);if(n){let r=n.panelConstraints.defaultSize,i=vB({groupId:t.group.id,panelId:n.id});i&&r!==void 0&&(i.resize(r),e.preventDefault())}}})}function bB(e){let t=Yz();for(let[n]of t)if(n.separators.some(t=>t.element===e))return n;throw Error(`Could not find parent Group for separator element`)}function xB({groupId:e}){let t=()=>{let t=Yz();for(let[n,r]of t)if(n.id===e)return{group:n,...r};throw Error(`Could not find Group with id "${e}"`)};return{getLayout(){let{defaultLayoutDeferred:e,layout:n}=t();return e?{}:n},setLayout(e){let{defaultLayoutDeferred:n,derivedPanelConstraints:r,group:i,groupSize:a,layout:o,separatorToPanels:s}=t(),c=_B({layout:e,panelConstraints:r});return n?o:(gB(o,c)||Zz(i,{defaultLayoutDeferred:n,derivedPanelConstraints:r,groupSize:a,layout:c,separatorToPanels:s}),c)}}}function SB(e,t){let n=bB(e),r=Jz(n.id,!0),i=n.separators.find(t=>t.element===e);Nz(i,`Matching separator not found`);let a=r.separatorToPanels.get(i);Nz(a,`Matching panels not found`);let o=a.map(e=>n.panels.indexOf(e)),s=xB({groupId:n.id}).getLayout(),c=_B({layout:hB({delta:t,initialLayout:s,panelConstraints:r.derivedPanelConstraints,pivotIndices:o,prevLayout:s,trigger:`keyboard`}),panelConstraints:r.derivedPanelConstraints});gB(s,c)||Zz(n,{defaultLayoutDeferred:r.defaultLayoutDeferred,derivedPanelConstraints:r.derivedPanelConstraints,groupSize:r.groupSize,layout:c,separatorToPanels:r.separatorToPanels})}function CB(e){if(e.defaultPrevented)return;let t=e.currentTarget,n=bB(t);if(!n.disabled)switch(e.key){case`ArrowDown`:e.preventDefault(),n.orientation===`vertical`&&SB(t,5);break;case`ArrowLeft`:e.preventDefault(),n.orientation===`horizontal`&&SB(t,-5);break;case`ArrowRight`:e.preventDefault(),n.orientation===`horizontal`&&SB(t,5);break;case`ArrowUp`:e.preventDefault(),n.orientation===`vertical`&&SB(t,-5);break;case`End`:e.preventDefault(),SB(t,100);break;case`Enter`:{e.preventDefault();let n=bB(t),{derivedPanelConstraints:r,layout:i,separatorToPanels:a}=Jz(n.id,!0),o=n.separators.find(e=>e.element===t);Nz(o,`Matching separator not found`);let s=a.get(o);Nz(s,`Matching panels not found`);let c=s[0],l=r.find(e=>e.panelId===c.id);if(Nz(l,`Panel metadata not found`),l.collapsible){let e=i[c.id];SB(t,(l.collapsedSize===e?n.mutableState.expandedPanelSizes[c.id]??l.minSize:l.collapsedSize)-e)}break}case`F6`:{e.preventDefault();let n=bB(t).separators.map(e=>e.element),r=Array.from(n).findIndex(t=>t===e.currentTarget);Nz(r!==null,`Index not found`),n[e.shiftKey?r>0?r-1:n.length-1:r+1<n.length?r+1:0].focus();break}case`Home`:e.preventDefault(),SB(t,-100);break}}var wB={cursorFlags:0,state:`inactive`},TB=new Uz;function EB(){return wB}function DB(e){return TB.addListener(`change`,e)}function OB(e){let t=wB,n={...wB};n.cursorFlags=e,wB=n,TB.emit(`change`,{prev:t,next:n})}function kB(e){let t=wB;wB=e,TB.emit(`change`,{prev:t,next:e})}function AB(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=Yz(),n=uB(e,t),r=new Map,i=!1;n.forEach(e=>{e.separator&&(i||(i=!0,e.separator.element.focus()));let n=t.get(e.group);n&&r.set(e.group,n.layout)}),kB({cursorFlags:0,hitRegions:n,initialLayoutMap:r,pointerDownAtPoint:{x:e.clientX,y:e.clientY},state:`active`}),n.length&&e.preventDefault()}var jB=e=>e,MB=()=>{},NB=1,PB=2,FB=4,IB=8,LB=3,RB=12,zB;function BB(){return zB===void 0&&(zB=!1,typeof window<`u`&&(window.navigator.userAgent.includes(`Chrome`)||window.navigator.userAgent.includes(`Firefox`))&&(zB=!0)),zB}function VB({cursorFlags:e,groups:t,state:n}){let r=0,i=0;switch(n){case`active`:case`hover`:t.forEach(e=>{if(!e.mutableState.disableCursor)switch(e.orientation){case`horizontal`:r++;break;case`vertical`:i++;break}})}if(!(r===0&&i===0)){switch(n){case`active`:if(e&&BB()){let t=(e&NB)!==0,n=(e&PB)!==0,r=(e&FB)!==0,i=(e&IB)!==0;if(t)return r?`se-resize`:i?`ne-resize`:`e-resize`;if(n)return r?`sw-resize`:i?`nw-resize`:`w-resize`;if(r)return`s-resize`;if(i)return`n-resize`}break}return BB()?r>0&&i>0?`move`:r>0?`ew-resize`:`ns-resize`:r>0&&i>0?`grab`:r>0?`col-resize`:`row-resize`}}var HB=new WeakMap;function UB(e){if(e.defaultView===null||e.defaultView===void 0)return;let{prevStyle:t,styleSheet:n}=HB.get(e)??{};n===void 0&&(n=new e.defaultView.CSSStyleSheet,e.adoptedStyleSheets&&e.adoptedStyleSheets.push(n));let r=EB();switch(r.state){case`active`:case`hover`:{let e=VB({cursorFlags:r.cursorFlags,groups:r.hitRegions.map(e=>e.group),state:r.state}),i=`*, *:hover {cursor: ${e} !important; }`;if(t===i)return;t=i,e?n.cssRules.length===0?n.insertRule(i):n.replaceSync(i):n.cssRules.length===1&&n.deleteRule(0);break}case`inactive`:t=void 0,n.cssRules.length===1&&n.deleteRule(0);break}HB.set(e,{prevStyle:t,styleSheet:n})}function WB({document:e,event:t,hitRegions:n,initialLayoutMap:r,mountedGroups:i,pointerDownAtPoint:a,prevCursorFlags:o}){let s=0;n.forEach(e=>{let{group:n,groupSize:o}=e,{orientation:c,panels:l}=n,{disableCursor:u}=n.mutableState,d=0;d=a?c===`horizontal`?(t.clientX-a.x)/o*100:(t.clientY-a.y)/o*100:c===`horizontal`?t.clientX<0?-100:100:t.clientY<0?-100:100;let f=r.get(n),p=i.get(n);if(!f||!p)return;let{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:_,separatorToPanels:v}=p;if(h&&_&&v){let t=hB({delta:d,initialLayout:f,panelConstraints:h,pivotIndices:e.panels.map(e=>l.indexOf(e)),prevLayout:_,trigger:`mouse-or-touch`});if(gB(t,_)){if(d!==0&&!u)switch(c){case`horizontal`:s|=d<0?NB:PB;break;case`vertical`:s|=d<0?FB:IB;break}}else Zz(e.group,{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:t,separatorToPanels:v})}});let c=0;t.movementX===0?c|=o&LB:c|=s&LB,t.movementY===0?c|=o&RB:c|=s&RB,OB(c),UB(e)}function GB(e){let t=Yz(),n=EB();switch(n.state){case`active`:WB({document:e.currentTarget,event:e,hitRegions:n.hitRegions,initialLayoutMap:n.initialLayoutMap,mountedGroups:t,prevCursorFlags:n.cursorFlags})}}function KB(e){if(e.defaultPrevented)return;let t=EB(),n=Yz();switch(t.state){case`active`:if(e.buttons===0){kB({cursorFlags:0,state:`inactive`}),t.hitRegions.forEach(e=>{let t=Jz(e.group.id,!0);Zz(e.group,t)});return}WB({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:n,pointerDownAtPoint:t.pointerDownAtPoint,prevCursorFlags:t.cursorFlags});break;default:{let r=uB(e,n);r.length===0?t.state!==`inactive`&&kB({cursorFlags:0,state:`inactive`}):kB({cursorFlags:0,hitRegions:r,state:`hover`}),UB(e.currentTarget);break}}}function qB(e){if(e.relatedTarget instanceof HTMLIFrameElement)switch(EB().state){case`hover`:kB({cursorFlags:0,state:`inactive`})}}function JB(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=EB();switch(t.state){case`active`:kB({cursorFlags:0,state:`inactive`}),t.hitRegions.length>0&&(UB(e.currentTarget),t.hitRegions.forEach(e=>{let t=Jz(e.group.id,!0);Zz(e.group,t)}),e.preventDefault())}}function YB(e){let t=0,n=0,r={};for(let i of e)if(i.defaultSize!==void 0){t++;let e=Az(i.defaultSize);n+=e,r[i.panelId]=e}else r[i.panelId]=void 0;let i=e.length-t;if(i!==0){let t=Az((100-n)/i);for(let n of e)n.defaultSize===void 0&&(r[n.panelId]=t)}return r}function XB(e,t,n){if(!n[0])return;let r=e.panels.find(e=>e.element===t);if(!r||!r.onResize)return;let i=jz({group:e}),a=e.orientation===`horizontal`?r.element.offsetWidth:r.element.offsetHeight,o=r.mutableValues.prevSize,s={asPercentage:Az(a/i*100),inPixels:a};r.mutableValues.prevSize=s,r.onResize(s,r.id,o)}function ZB(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function QB({group:e,nextGroupSize:t,prevGroupSize:n,prevLayout:r}){if(n<=0||t<=0||n===t)return r;let i=0,a=0,o=!1,s=new Map,c=[];for(let l of e.panels){let e=r[l.id]??0;switch(l.panelConstraints.groupResizeBehavior){case`preserve-pixel-size`:{o=!0;let r=Az(e/100*n/t*100);s.set(l.id,r),i+=r;break}case`preserve-relative-size`:default:c.push(l.id),a+=e;break}}if(!o||c.length===0)return r;let l=100-i,u={...r};if(s.forEach((e,t)=>{u[t]=e}),a>0)for(let e of c)u[e]=Az((r[e]??0)/a*l);else{let e=Az(l/c.length);for(let t of c)u[t]=e}return u}function $B(e,t){let n=e.map(e=>e.id),r=Object.keys(t);if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}var eV=new Map;function tV(e){let t=!0;Nz(e.element.ownerDocument.defaultView,`Cannot register an unmounted Group`);let n=e.element.ownerDocument.defaultView.ResizeObserver,r=new Set,i=new Set,a=new n(n=>{for(let r of n){let{borderBoxSize:n,target:i}=r;if(i===e.element){if(t){let t=jz({group:e});if(t===0)return;let n=Jz(e.id);if(!n)return;let r=Mz(e),i=n.defaultLayoutDeferred?YB(r):n.layout,a=_B({layout:QB({group:e,nextGroupSize:t,prevGroupSize:n.groupSize,prevLayout:i}),panelConstraints:r});if(!n.defaultLayoutDeferred&&gB(n.layout,a)&&ZB(n.derivedPanelConstraints,r)&&n.groupSize===t)return;Zz(e,{defaultLayoutDeferred:!1,derivedPanelConstraints:r,groupSize:t,layout:a,separatorToPanels:n.separatorToPanels})}}else XB(e,i,n)}});a.observe(e.element),e.panels.forEach(e=>{Nz(!r.has(e.id),`Panel ids must be unique; id "${e.id}" was used more than once`),r.add(e.id),e.onResize&&a.observe(e.element)});let o=jz({group:e}),s=Mz(e),c=e.panels.map(({id:e})=>e).join(`,`),l=e.mutableState.defaultLayout;l&&($B(e.panels,l)||(l=void 0));let u=_B({layout:e.mutableState.layouts[c]??l??YB(s),panelConstraints:s}),d=e.element.ownerDocument;eV.set(d,(eV.get(d)??0)+1);let f=new Map;return Hz(e).forEach(e=>{e.separator&&f.set(e.separator,e.panels)}),Zz(e,{defaultLayoutDeferred:o===0,derivedPanelConstraints:s,groupSize:o,layout:u,separatorToPanels:f}),e.separators.forEach(e=>{Nz(!i.has(e.id),`Separator ids must be unique; id "${e.id}" was used more than once`),i.add(e.id),e.element.addEventListener(`keydown`,CB)}),eV.get(d)===1&&(d.addEventListener(`dblclick`,yB,!0),d.addEventListener(`pointerdown`,AB,!0),d.addEventListener(`pointerleave`,GB),d.addEventListener(`pointermove`,KB),d.addEventListener(`pointerout`,qB),d.addEventListener(`pointerup`,JB,!0)),function(){t=!1,eV.set(d,Math.max(0,(eV.get(d)??0)-1)),Kz(e),e.separators.forEach(e=>{e.element.removeEventListener(`keydown`,CB)}),eV.get(d)||(d.removeEventListener(`dblclick`,yB,!0),d.removeEventListener(`pointerdown`,AB,!0),d.removeEventListener(`pointerleave`,GB),d.removeEventListener(`pointermove`,KB),d.removeEventListener(`pointerout`,qB),d.removeEventListener(`pointerup`,JB,!0)),a.disconnect()}}function nV(){let[e,t]=(0,F.useState)({});return[e,(0,F.useCallback)(()=>t({}),[])]}function rV(e){let t=(0,F.useId)();return`${e??t}`}var iV=typeof window<`u`?F.useLayoutEffect:F.useEffect;function aV(e){let t=(0,F.useRef)(e);return iV(()=>{t.current=e},[e]),(0,F.useCallback)((...e)=>t.current?.(...e),[t])}function oV(...e){return aV(t=>{e.forEach(e=>{if(e)switch(typeof e){case`function`:e(t);break;case`object`:e.current=t;break}})})}function sV(e){let t=(0,F.useRef)({...e});return iV(()=>{for(let n in e)t.current[n]=e[n]},[e]),t.current}var cV=(0,F.createContext)(null);function lV(e,t){let n=(0,F.useRef)({getLayout:()=>({}),setLayout:jB});(0,F.useImperativeHandle)(t,()=>n.current,[]),iV(()=>{Object.assign(n.current,xB({groupId:e}))})}function uV({children:e,className:t,defaultLayout:n,disableCursor:r,disabled:i,elementRef:a,groupRef:o,id:s,onLayoutChange:c,onLayoutChanged:l,orientation:u=`horizontal`,resizeTargetMinimumSize:d={coarse:20,fine:10},style:f,...p}){let m=(0,F.useRef)({onLayoutChange:{},onLayoutChanged:{}}),h=aV(e=>{gB(m.current.onLayoutChange,e)||(m.current.onLayoutChange=e,c?.(e))}),g=aV(e=>{gB(m.current.onLayoutChanged,e)||(m.current.onLayoutChanged=e,l?.(e))}),_=rV(s),v=(0,F.useRef)(null),[y,b]=nV(),x=(0,F.useRef)({lastExpandedPanelSizes:{},layouts:{},panels:[],resizeTargetMinimumSize:d,separators:[]}),S=oV(v,a);lV(_,o);let C=aV((e,t)=>{let r=EB(),i=qz(e),a=Jz(e);if(a){let e=!1;switch(r.state){case`active`:e=r.hitRegions.some(e=>e.group===i);break}return{flexGrow:a.layout[t]??1,pointerEvents:e?`none`:void 0}}return{flexGrow:n?.[t]??1}}),w=sV({defaultLayout:n,disableCursor:r}),T=(0,F.useMemo)(()=>({get disableCursor(){return!!w.disableCursor},getPanelStyles:C,id:_,orientation:u,registerPanel:e=>{let t=x.current;return t.panels=Pz(u,[...t.panels,e]),b(),()=>{t.panels=t.panels.filter(t=>t!==e),b()}},registerSeparator:e=>{let t=x.current;return t.separators=Pz(u,[...t.separators,e]),b(),()=>{t.separators=t.separators.filter(t=>t!==e),b()}},togglePanelDisabled:(e,t)=>{let n=x.current.panels.find(t=>t.id===e);n&&(n.panelConstraints.disabled=t);let r=qz(_),i=Jz(_);r&&i&&Zz(r,{...i,derivedPanelConstraints:Mz(r)})},toggleSeparatorDisabled:(e,t)=>{let n=x.current.separators.find(t=>t.id===e);n&&(n.disabled=t)}}),[C,_,b,u,w]),E=(0,F.useRef)(null);return iV(()=>{let e=v.current;if(e===null)return;let t=x.current,n;if(w.defaultLayout!==void 0&&Object.keys(w.defaultLayout).length===t.panels.length){n={};for(let e of t.panels){let t=w.defaultLayout[e.id];t!==void 0&&(n[e.id]=t)}}let r={disabled:!!i,element:e,id:_,mutableState:{defaultLayout:n,disableCursor:!!w.disableCursor,expandedPanelSizes:x.current.lastExpandedPanelSizes,layouts:x.current.layouts},orientation:u,panels:t.panels,resizeTargetMinimumSize:t.resizeTargetMinimumSize,separators:t.separators};E.current=r;let a=tV(r),{defaultLayoutDeferred:o,derivedPanelConstraints:s,layout:c}=Jz(r.id,!0);!o&&s.length>0&&(h(c),g(c));let l=Xz(_,e=>{let{defaultLayoutDeferred:t,derivedPanelConstraints:n,layout:i}=e.next;if(t||n.length===0)return;let a=r.panels.map(({id:e})=>e).join(`,`);r.mutableState.layouts[a]=i,n.forEach(t=>{if(t.collapsible){let{layout:n}=e.prev??{};if(n){let e=fB(t.collapsedSize,i[t.panelId]),a=fB(t.collapsedSize,n[t.panelId]);e&&!a&&(r.mutableState.expandedPanelSizes[t.panelId]=n[t.panelId])}}});let o=EB().state!==`active`;h(i),o&&g(i)});return()=>{E.current=null,a(),l()}},[i,_,g,h,u,y,w]),(0,F.useEffect)(()=>{let e=E.current;e&&(e.mutableState.defaultLayout=n,e.mutableState.disableCursor=!!r)}),(0,I.jsx)(cV.Provider,{value:T,children:(0,I.jsx)(`div`,{...p,className:t,"data-group":!0,"data-testid":_,id:_,ref:S,style:{height:`100%`,width:`100%`,overflow:`hidden`,...f,display:`flex`,flexDirection:u===`horizontal`?`row`:`column`,flexWrap:`nowrap`,touchAction:u===`horizontal`?`pan-y`:`pan-x`},children:e})})}uV.displayName=`Group`;function dV(){let e=(0,F.useContext)(cV);return Nz(e,`Group Context not found; did you render a Panel or Separator outside of a Group?`),e}function fV(e,t){let{id:n}=dV(),r=(0,F.useRef)({collapse:MB,expand:MB,getSize:()=>({asPercentage:0,inPixels:0}),isCollapsed:()=>!1,resize:MB});(0,F.useImperativeHandle)(t,()=>r.current,[]),iV(()=>{Object.assign(r.current,vB({groupId:n,panelId:e}))})}function pV({children:e,className:t,collapsedSize:n=`0%`,collapsible:r=!1,defaultSize:i,disabled:a,elementRef:o,groupResizeBehavior:s=`preserve-relative-size`,id:c,maxSize:l=`100%`,minSize:u=`0%`,onResize:d,panelRef:f,style:p,...m}){let h=!!c,g=rV(c),_=sV({disabled:a}),v=(0,F.useRef)(null),y=oV(v,o),{getPanelStyles:b,id:x,orientation:S,registerPanel:C,togglePanelDisabled:w}=dV(),T=d!==null,E=aV((e,t,n)=>{d?.(e,c,n)});iV(()=>{let e=v.current;if(e!==null)return C({element:e,id:g,idIsStable:h,mutableValues:{expandToSize:void 0,prevSize:void 0},onResize:T?E:void 0,panelConstraints:{groupResizeBehavior:s,collapsedSize:n,collapsible:r,defaultSize:i,disabled:_.disabled,maxSize:l,minSize:u}})},[s,n,r,i,T,g,h,l,u,E,C,_]),(0,F.useEffect)(()=>{w(g,!!a)},[a,g,w]),fV(g,f);let ee=(0,F.useSyncExternalStore)(e=>Xz(x,e),()=>JSON.stringify(b(x,g)),()=>JSON.stringify(b(x,g)));return(0,I.jsx)(`div`,{...m,"aria-disabled":a||void 0,"data-panel":!0,"data-testid":g,id:g,ref:y,style:{...mV,display:`flex`,flexBasis:0,flexShrink:1,overflow:`visible`,...JSON.parse(ee)},children:(0,I.jsx)(`div`,{className:t,style:{maxHeight:`100%`,maxWidth:`100%`,flexGrow:1,overflow:`auto`,...p,touchAction:S===`horizontal`?`pan-y`:`pan-x`},children:e})})}pV.displayName=`Panel`;var mV={minHeight:0,maxHeight:`100%`,height:`auto`,minWidth:0,maxWidth:`100%`,width:`auto`,border:`none`,borderWidth:0,padding:0,margin:0};function hV({layout:e,panelConstraints:t,panelId:n,panelIndex:r}){let i,a,o=e[n],s=t.find(e=>e.panelId===n);if(s){let c=s.maxSize,l=s.collapsible?s.collapsedSize:s.minSize,u=[r,r+1];a=_B({layout:hB({delta:l-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n],i=_B({layout:hB({delta:c-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n]}return{valueControls:n,valueMax:i,valueMin:a,valueNow:o}}function gV({children:e,className:t,disabled:n,elementRef:r,id:i,style:a,...o}){let s=rV(i),c=sV({disabled:n}),[l,u]=(0,F.useState)({}),[d,f]=(0,F.useState)(`inactive`),p=(0,F.useRef)(null),m=oV(p,r),{disableCursor:h,id:g,orientation:_,registerSeparator:v,toggleSeparatorDisabled:y}=dV(),b=_===`horizontal`?`vertical`:`horizontal`;iV(()=>{let e=p.current;if(e!==null){let t={disabled:c.disabled,element:e,id:s},n=v(t),r=DB(e=>{f(e.next.state!==`inactive`&&e.next.hitRegions.some(e=>e.separator===t)?e.next.state:`inactive`)}),i=Xz(g,e=>{let{derivedPanelConstraints:n,layout:r,separatorToPanels:i}=e.next,a=i.get(t);if(a){let e=a[0],t=a.indexOf(e);u(hV({layout:r,panelConstraints:n,panelId:e.id,panelIndex:t}))}});return()=>{r(),i(),n()}}},[g,s,v,c]),(0,F.useEffect)(()=>{y(s,!!n)},[n,s,y]);let x;return n&&!h&&(x=`not-allowed`),(0,I.jsx)(`div`,{...o,"aria-controls":l.valueControls,"aria-disabled":n||void 0,"aria-orientation":b,"aria-valuemax":l.valueMax,"aria-valuemin":l.valueMin,"aria-valuenow":l.valueNow,children:e,className:t,"data-separator":n?`disabled`:d,"data-testid":s,id:s,ref:m,role:`separator`,style:{flexBasis:`auto`,cursor:x,...a,flexGrow:0,flexShrink:0,touchAction:`none`},tabIndex:n?void 0:0})}gV.displayName=`Separator`;function _V({className:e,...t}){return(0,I.jsx)(uV,{"data-slot":`resizable-panel-group`,className:K(`flex h-full w-full aria-[orientation=vertical]:flex-col`,e),...t})}function vV({...e}){return(0,I.jsx)(pV,{"data-slot":`resizable-panel`,...e})}function yV({withHandle:e,className:t,...n}){return(0,I.jsx)(gV,{"data-slot":`resizable-handle`,className:K(`bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90`,t),...n,children:e&&(0,I.jsx)(`div`,{className:`bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border`,children:(0,I.jsx)(ha,{className:`size-2.5`})})})}var bV={type:`openai-completions`,base:``,apiKey:``,proxy:``,models:{}};function xV(e,t,n,r){let i=Object.keys(e);if(t===n)return e;let a=i.filter(e=>e!==t),o=a.indexOf(n);if(o===-1)return e;r===`after`&&(o+=1),a.splice(o,0,t);let s={};for(let t of a)s[t]=e[t];return s}function SV(e,t,n){let r=Object.keys(e),i=r.indexOf(t);if(i===-1)return e;let a=Math.max(0,Math.min(n,r.length-1));if(a===i)return e;let o=[...r];o.splice(i,1),o.splice(a,0,t);let s={};for(let t of o)s[t]=e[t];return s}function CV(){let e=vS(e=>e.draft),t=vS(e=>e.updateDraft),n=e?.providers??{},r=Object.keys(n),[i,a]=(0,F.useState)(r[0]??null),[o,s]=(0,F.useState)(``),[c,l]=(0,F.useState)(!1),[u,d]=(0,F.useState)(!1),[f,p]=(0,F.useState)(``),[m,h]=(0,F.useState)(null),[g,_]=(0,F.useState)(null),[v,y]=(0,F.useState)(null),[b,x]=(0,F.useState)(null);if(!e)return null;function S(){let e=o.trim().toLowerCase().replace(/[^a-z0-9-]/g,`-`);!e||n[e]||(t(t=>(t.providers[e]={...bV},t)),a(e),s(``),l(!1))}function C(e,n){t(t=>(t.providers[e]=n,t))}function w(e){t(t=>(delete t.providers[e],t)),a(r.find(t=>t!==e)??null),_(null)}function T(e){h(e),d(!0)}function E(){if(!m||!n[m])return;let e=f.trim().toLowerCase().replace(/[^a-z0-9-]/g,`-`);!e||n[e]||(t(t=>(t.providers[e]=structuredClone(t.providers[m]),t)),a(e),p(``),h(null),d(!1))}function ee(e,n){t(t=>(t.providers=SV(t.providers,e,n),t))}function D(e){let t=e.currentTarget.getBoundingClientRect();return e.clientY-t.top<t.height/2?`before`:`after`}function O(e,t){e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,t),y(t),x(null)}function k(e,t){v&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,x({name:t,position:D(e)}))}function te(){y(null),x(null)}function A(e,n){if(!v)return;e.preventDefault();let r=D(e);t(e=>(e.providers=xV(e.providers,v,n,r),e)),te()}return(0,I.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-6 lg:overflow-hidden`,children:[(0,I.jsxs)(`div`,{className:`shrink-0`,children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`Providers`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`管理上游 API 服务商配置`})]}),(0,I.jsxs)(_V,{orientation:`horizontal`,className:`min-h-0 flex-1`,children:[(0,I.jsx)(vV,{defaultSize:`280px`,minSize:`180px`,maxSize:`50%`,className:`min-w-0`,children:(0,I.jsxs)(`div`,{className:`flex h-full min-w-0 min-h-0 flex-col gap-3 overflow-hidden`,children:[(0,I.jsx)(qk,{className:`min-h-0 min-w-0 flex-1 **:data-[slot=scroll-area-viewport]:min-w-0 **:data-[slot=scroll-area-viewport]:overflow-x-hidden [&_[data-slot=scroll-area-viewport]>div]:block! [&_[data-slot=scroll-area-viewport]>div]:min-w-0 [&_[data-slot=scroll-area-viewport]>div]:w-full`,children:(0,I.jsx)(`div`,{className:`w-full min-w-0 space-y-2 pr-2`,children:r.map(e=>{let t=n[e],o=Object.keys(t.models).length,s=b?.name===e&&b.position===`before`&&v!==e,c=b?.name===e&&b.position===`after`&&v!==e;return(0,I.jsxs)(`div`,{className:`relative`,children:[(0,I.jsx)(`div`,{className:K(`pointer-events-none absolute inset-x-2 z-10 h-0.5 rounded-full bg-primary transition-opacity`,s?`top-0 opacity-100`:`top-0 opacity-0`)}),(0,I.jsxs)(yz,{children:[(0,I.jsx)(bz,{asChild:!0,children:(0,I.jsxs)(`button`,{type:`button`,draggable:!0,className:K(`w-full min-w-0 cursor-pointer overflow-hidden rounded-lg border p-3 text-left transition-colors hover:bg-accent`,i===e?`border-primary bg-accent`:`border-border`,v===e&&`opacity-60`),onClick:()=>a(e),onContextMenu:()=>a(e),onDragStart:t=>O(t,e),onDragOver:t=>k(t,e),onDrop:t=>A(t,e),onDragEnd:te,children:[(0,I.jsxs)(`div`,{className:`flex w-full min-w-0 items-center gap-2`,children:[(0,I.jsx)(ha,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,I.jsx)(`span`,{className:`block min-w-0 flex-1 truncate font-medium text-sm`,children:e})]}),(0,I.jsxs)(`div`,{className:`mt-1.5 flex w-full min-w-0 items-center gap-2`,children:[(0,I.jsx)(Y,{variant:`outline`,className:`min-w-0 max-w-full overflow-hidden text-xs`,children:(0,I.jsx)(`span`,{className:`block min-w-0 truncate`,children:t.type})}),(0,I.jsxs)(`span`,{className:`shrink-0 whitespace-nowrap text-xs text-muted-foreground`,children:[o,` 个模型`]})]})]})}),(0,I.jsxs)(xz,{className:`w-48`,children:[(0,I.jsxs)(Sz,{onSelect:()=>T(e),children:[(0,I.jsx)(aa,{className:`h-4 w-4`}),`复制`]}),(0,I.jsxs)(Sz,{onSelect:()=>_(e),variant:`destructive`,children:[(0,I.jsx)(La,{className:`h-4 w-4`}),`删除`]}),(0,I.jsx)(Cz,{}),(0,I.jsxs)(Sz,{onSelect:()=>ee(e,r.indexOf(e)-1),disabled:r.indexOf(e)<=0,children:[(0,I.jsx)(na,{className:`h-4 w-4`}),`上移`]}),(0,I.jsxs)(Sz,{onSelect:()=>ee(e,r.indexOf(e)+1),disabled:r.indexOf(e)>=r.length-1,children:[(0,I.jsx)(ea,{className:`h-4 w-4`}),`下移`]}),(0,I.jsxs)(Sz,{onSelect:()=>ee(e,0),disabled:r.indexOf(e)<=0,children:[(0,I.jsx)(na,{className:`h-4 w-4`}),`上移至顶部`]}),(0,I.jsxs)(Sz,{onSelect:()=>ee(e,r.length-1),disabled:r.indexOf(e)>=r.length-1,children:[(0,I.jsx)(ea,{className:`h-4 w-4`}),`下移至底部`]})]})]}),(0,I.jsx)(`div`,{className:K(`pointer-events-none absolute inset-x-2 bottom-0 z-10 h-0.5 rounded-full bg-primary transition-opacity`,c?`opacity-100`:`opacity-0`)})]},e)})})}),(0,I.jsx)(`div`,{className:`shrink-0 pr-2`,children:(0,I.jsxs)(Rk,{open:c,onOpenChange:l,children:[(0,I.jsx)(zk,{asChild:!0,children:(0,I.jsxs)(q,{variant:`outline`,className:`w-full`,children:[(0,I.jsx)(wa,{className:`h-4 w-4 mr-1`}),`添加 Provider`]})}),(0,I.jsxs)(Hk,{children:[(0,I.jsxs)(Uk,{children:[(0,I.jsx)(Gk,{children:`添加 Provider`}),(0,I.jsx)(Kk,{children:`输入新 Provider 的名称(kebab-case 格式)`})]}),(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(LR,{htmlFor:`new-provider-name`,children:`名称`}),(0,I.jsx)(IR,{id:`new-provider-name`,value:o,onChange:e=>s(e.target.value),placeholder:`my-provider`,className:`font-mono`,onKeyDown:e=>e.key===`Enter`&&S()})]}),(0,I.jsx)(Wk,{children:(0,I.jsx)(q,{onClick:S,disabled:!o.trim(),children:`创建`})})]})]})})]})}),(0,I.jsx)(yV,{withHandle:!0,className:`bg-transparent transition-colors duration-200 hover:bg-border focus-visible:bg-border active:bg-border [&>div]:opacity-0 [&>div]:transition-opacity [&>div]:duration-200 hover:[&>div]:opacity-100 focus-visible:[&>div]:opacity-100 active:[&>div]:opacity-100`}),(0,I.jsx)(vV,{minSize:`400px`,children:(0,I.jsx)(`div`,{className:`flex h-full flex-col min-h-0 pl-2 pb-3 lg:pb-0`,children:(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background flex flex-col min-h-0 h-full`,children:[(0,I.jsx)(`div`,{className:`border-b px-3 py-3 shrink-0`,children:(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2 min-w-0`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold truncate`,children:i?`${i}`:`选择一个 Provider`}),i&&n[i]&&(0,I.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,I.jsxs)(Rk,{open:u,onOpenChange:e=>{d(e),e||(p(``),h(null))},children:[(0,I.jsx)(zk,{asChild:!0,children:(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8`,"aria-label":`复制此 Provider`,onClick:()=>i&&T(i),children:(0,I.jsx)(aa,{className:`h-4 w-4`})})}),(0,I.jsxs)(Hk,{children:[(0,I.jsxs)(Uk,{children:[(0,I.jsx)(Gk,{children:`复制 Provider`}),(0,I.jsx)(Kk,{children:`输入新 Provider 的名称(kebab-case 格式)`})]}),(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(LR,{htmlFor:`copy-provider-name`,children:`名称`}),(0,I.jsx)(IR,{id:`copy-provider-name`,value:f,onChange:e=>p(e.target.value),placeholder:`my-provider-copy`,className:`font-mono`,onKeyDown:e=>e.key===`Enter`&&E()})]}),(0,I.jsx)(Wk,{children:(0,I.jsx)(q,{onClick:E,disabled:!f.trim(),children:`复制`})})]})]}),(0,I.jsxs)(cz,{open:g!==null,onOpenChange:e=>{e||_(null)},children:[(0,I.jsx)(lz,{asChild:!0,children:(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 text-destructive hover:text-destructive`,"aria-label":`删除此 Provider`,onClick:()=>i&&_(i),children:(0,I.jsx)(La,{className:`h-4 w-4`})})}),(0,I.jsxs)(fz,{children:[(0,I.jsxs)(pz,{children:[(0,I.jsx)(hz,{children:`确认删除`}),(0,I.jsxs)(gz,{children:[`确定要删除 Provider「`,g,`」吗?引用此 Provider 的路由规则将失效。`]})]}),(0,I.jsxs)(mz,{children:[(0,I.jsx)(vz,{children:`取消`}),(0,I.jsx)(_z,{onClick:()=>g&&w(g),children:`删除`})]})]})]})]})]})}),(0,I.jsx)(qk,{className:`min-h-0 flex-1`,children:(0,I.jsx)(`div`,{className:`px-3 py-3`,children:i&&n[i]?(0,I.jsx)(rz,{name:i,config:n[i],isNew:!1,onChange:e=>C(i,e)},i):(0,I.jsx)(`p`,{className:`text-muted-foreground text-sm py-8 text-center`,children:r.length===0?`暂无 Provider,点击左侧「添加 Provider」按钮创建`:`请从左侧列表中选择一个 Provider`})})})]})})})]})]})}var wV={"openai-completions":`OpenAI Completions`,"openai-responses":`OpenAI Responses`,"anthropic-messages":`Anthropic Messages`};function TV({modelMap:e,providers:t,onChange:n}){let r=Object.entries(e),i=r.filter(([e])=>e!==`*`),a=r.find(([e])=>e===`*`);function o(t){if(t===`*`)return;let r={...e};delete r[t],n(r)}function s(t,r){if(r===t)return;let i={};for(let[n,a]of Object.entries(e))i[n===t?r:n]=a;n(i)}function c(t,r,i){n({...e,[t]:{...e[t],[r]:i}})}function l(e){let n=t[e];return n?Object.keys(n.models):[]}return(0,I.jsxs)(`div`,{className:`relative space-y-3`,children:[(0,I.jsx)(`div`,{className:`absolute left-0 top-0 bottom-6 w-px bg-border`}),(0,I.jsxs)(`div`,{className:`ml-5 flex items-center gap-1.5 px-2 text-xs font-medium text-muted-foreground translate-x-[-0.5px] translate-y-[-1px]`,children:[(0,I.jsx)(`span`,{className:`w-[200px] min-w-[120px]`,children:`请求模型`}),(0,I.jsx)(`span`,{className:`w-5 shrink-0`}),(0,I.jsx)(`span`,{className:`min-w-0 flex-1`,children:`路由目标`}),(0,I.jsx)(`span`,{className:`w-8 shrink-0`})]}),i.length>0&&(0,I.jsx)(`div`,{className:`space-y-1.5 translate-x-[-0.5px] translate-y-[-1px]`,children:i.map(([e,n])=>(0,I.jsxs)(`div`,{className:`relative pl-5`,children:[(0,I.jsx)(EV,{}),(0,I.jsx)(DV,{ruleKey:e,target:n,isWildcard:!1,providers:t,getModelsForProvider:l,onKeyCommit:t=>s(e,t),onTargetChange:(t,n)=>c(e,t,n),onRemove:()=>o(e)})]},e))}),a&&i.length>0&&(0,I.jsxs)(`div`,{className:`relative ml-5 translate-x-[-0.5px] translate-y-[-1px]`,children:[(0,I.jsx)(`div`,{className:`absolute inset-0 flex items-center`,children:(0,I.jsx)(`div`,{className:`w-full border-t border-dashed`})}),(0,I.jsx)(`div`,{className:`relative flex justify-center`,children:(0,I.jsx)(`span`,{className:`bg-background px-2 text-[11px] text-muted-foreground`,children:`兜底规则 — 未匹配的请求将路由至此`})})]}),a&&(0,I.jsxs)(`div`,{className:`relative pl-5 translate-x-[-0.5px] translate-y-[-1px]`,children:[(0,I.jsx)(EV,{}),(0,I.jsx)(DV,{ruleKey:a[0],target:a[1],isWildcard:!0,providers:t,getModelsForProvider:l,onKeyCommit:()=>{},onTargetChange:(e,t)=>c(`*`,e,t),onRemove:()=>{}})]})]})}function EV(){return(0,I.jsx)(`svg`,{className:`pointer-events-none absolute left-0 top-1/2 -translate-y-1/2 text-border`,width:`20`,height:`20`,viewBox:`0 0 20 20`,fill:`none`,"aria-hidden":`true`,children:(0,I.jsx)(`path`,{d:`M1 0A10 10 0 0 0 11 10H20`,className:`stroke-current`,strokeWidth:`1`,strokeLinecap:`round`})})}function DV({ruleKey:e,target:t,isWildcard:n,providers:r,getModelsForProvider:i,onKeyCommit:a,onTargetChange:o,onRemove:s}){let[c,l]=(0,F.useState)(e);(0,F.useEffect)(()=>{l(e)},[e]);function u(){c!==e&&a(c)}let d=i(t.provider),f=Object.entries(r).reduce((e,[t,n])=>(e[n.type].push(t),e),{"openai-completions":[],"openai-responses":[],"anthropic-messages":[]});return(0,I.jsxs)(`div`,{className:n?`grid grid-cols-[minmax(120px,200px)_20px_1fr_32px] items-center gap-x-1.5 rounded-lg border border-dashed bg-muted/30 p-2 transition-colors`:`grid grid-cols-[minmax(120px,200px)_20px_1fr_32px] items-center gap-x-1.5 rounded-lg border border-solid bg-background p-2 transition-colors`,children:[n?(0,I.jsxs)(`div`,{className:`flex w-full items-center gap-1.5 px-1`,children:[(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs font-mono`,children:`*`}),(0,I.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`所有`})]}):(0,I.jsx)(IR,{value:c,onChange:e=>l(e.target.value),onBlur:u,onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur()},className:`h-7 text-sm font-mono`}),(0,I.jsx)(Xi,{className:`h-3.5 w-3.5 text-muted-foreground mx-auto`}),(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,I.jsxs)(iM,{value:t.provider,onValueChange:e=>o(`provider`,e),children:[(0,I.jsx)(sM,{className:`h-7 text-sm w-[320px] shrink-0`,children:(0,I.jsx)(oM,{placeholder:`Provider`})}),(0,I.jsx)(cM,{children:Object.keys(wV).map(e=>{let t=f[e];return t.length===0?null:(0,I.jsxs)(aM,{children:[(0,I.jsx)(lM,{children:wV[e]}),t.map(e=>(0,I.jsx)(uM,{value:e,children:e},e))]},e)})})]}),(0,I.jsx)(`span`,{className:`text-muted-foreground text-xs shrink-0`,children:`/`}),d.length>0?(0,I.jsxs)(iM,{value:t.model,onValueChange:e=>o(`model`,e),children:[(0,I.jsx)(sM,{className:`h-7 text-sm flex-1 min-w-0`,children:(0,I.jsx)(oM,{placeholder:`模型`})}),(0,I.jsx)(cM,{children:d.map(e=>(0,I.jsx)(uM,{value:e,children:e},e))})]}):(0,I.jsx)(IR,{value:t.model,onChange:e=>o(`model`,e.target.value),className:`h-7 text-sm font-mono flex-1 min-w-0`,placeholder:`模型名称`})]}),(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-7 w-7 text-destructive hover:text-destructive`,disabled:n,onClick:s,children:(0,I.jsx)(La,{className:`h-3 w-3`})})]})}var OV=[`openai-completions`,`openai-responses`,`anthropic-messages`];function kV(){let e=vS(e=>e.draft),t=vS(e=>e.updateDraft),n=Object.keys(e?.routes??{}),[r,i]=(0,F.useState)(``),a=OV.filter(e=>!n.includes(e));if(!e)return null;let o=e;function s(){if(!r)return;let e=Object.keys(o.providers)[0]??``,n=e?Object.keys(o.providers[e]?.models??{})[0]??``:``;t(t=>(t.routes[r]={"*":{provider:e,model:n}},t)),i(``)}function c(e){t(t=>(delete t.routes[e],t))}function l(e,n){t(t=>(t.routes[e]=n,t))}function u(e){let n=Object.keys(o.providers)[0]??``,r=n?Object.keys(o.providers[n]?.models??{})[0]??``:``;t(t=>{let i=t.routes[e]??{};return t.routes[e]={...i,[`alias-${Date.now()}`]:{provider:n,model:r}},t})}return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`路由`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`管理协议入口与模型路由映射`})]}),n.length===0?(0,I.jsx)(`div`,{className:`rounded-lg border bg-background py-12 text-center text-muted-foreground`,children:`暂无路由配置,请先添加一个协议入口`}):(0,I.jsx)(`div`,{className:`space-y-6`,children:n.map(t=>{let n=e.routes[t],r=Object.keys(n).length;return(0,I.jsxs)(`div`,{className:`relative`,children:[(0,I.jsx)(`div`,{className:`rounded-lg border bg-card text-card-foreground px-3 py-2`,children:(0,I.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(`h3`,{className:`text-sm font-semibold`,children:t}),(0,I.jsxs)(Y,{variant:`secondary`,className:`text-xs`,children:[r,` 个规则`]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,className:`h-7 px-2.5 text-xs`,onClick:()=>u(t),children:[(0,I.jsx)(wa,{className:`mr-1 h-3.5 w-3.5`}),`添加规则`]}),(0,I.jsxs)(cz,{children:[(0,I.jsx)(lz,{asChild:!0,children:(0,I.jsx)(q,{variant:`ghost`,size:`icon`,className:`h-7 w-7 text-destructive hover:text-destructive`,children:(0,I.jsx)(La,{className:`h-3.5 w-3.5`})})}),(0,I.jsxs)(fz,{children:[(0,I.jsxs)(pz,{children:[(0,I.jsx)(hz,{children:`确认删除`}),(0,I.jsxs)(gz,{children:[`确定要删除协议入口「`,t,`」及其所有路由规则吗?`]})]}),(0,I.jsxs)(mz,{children:[(0,I.jsx)(vz,{children:`取消`}),(0,I.jsx)(_z,{onClick:()=>c(t),children:`删除`})]})]})]})]})]})}),(0,I.jsxs)(`div`,{className:`relative mt-3 ml-3`,children:[(0,I.jsx)(`div`,{className:`absolute left-0 -top-3 h-3 w-px bg-border`}),(0,I.jsx)(TV,{routeType:t,modelMap:e.routes[t],providers:e.providers,onChange:e=>l(t,e)})]})]},t)})}),a.length>0&&(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsxs)(iM,{value:r,onValueChange:i,children:[(0,I.jsx)(sM,{className:`w-[240px]`,children:(0,I.jsx)(oM,{placeholder:`选择协议类型...`})}),(0,I.jsx)(cM,{children:a.map(e=>(0,I.jsx)(uM,{value:e,children:e},e))})]}),(0,I.jsxs)(q,{onClick:s,disabled:!r,children:[(0,I.jsx)(wa,{className:`h-4 w-4 mr-1`}),`添加协议入口`]})]})]})}var AV={window:`24h`,from:``,to:``,user:``,session:``,q:``};const jV=qx((e,t)=>({filters:{...AV},summary:null,users:[],meta:null,from:``,to:``,loading:!1,error:null,setFilter:(t,n)=>{e(e=>({filters:{...e.filters,[t]:n}}))},fetchData:async()=>{e({loading:!0,error:null});try{let n=t(),r=await dS({window:n.filters.window,from:n.filters.from||void 0,to:n.filters.to||void 0,user:n.filters.user||void 0,session:n.filters.session||void 0,q:n.filters.q||void 0});e({summary:r.summary,users:r.users,meta:r.meta,from:r.from,to:r.to,loading:!1,error:null})}catch(t){e({loading:!1,error:t instanceof Error?t.message:`用户会话查询失败`})}},resetFilters:async()=>{e({filters:{...AV}}),await t().fetchData()}}));function MV(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}T${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function NV(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toISOString()}function PV(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}function FV(e){return e.length===0?`-`:e.slice(0,3).map(e=>`${e.key}(${e.count})`).join(`, `)}function IV(e,t=6){return e.length<=t*2+3?e:`${e.slice(0,t)}...${e.slice(-t)}`}function LV(){let e=Sr(),t=jV(e=>e.filters),n=jV(e=>e.summary),r=jV(e=>e.users),i=jV(e=>e.meta),a=jV(e=>e.from),o=jV(e=>e.to),s=jV(e=>e.loading),c=jV(e=>e.error),l=jV(e=>e.setFilter),u=jV(e=>e.fetchData),d=jV(e=>e.resetFilters),[f,p]=(0,F.useState)({});(0,F.useEffect)(()=>{u()},[u]);let m=r.length>0,h=(0,F.useMemo)(()=>({users:n?.uniqueUsers??0,sessions:n?.uniqueSessions??0,requests:n?.totalRequests??0,metadataRequests:n?.metadataRequests??0}),[n]);return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`用户会话`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`解析日志 metadata 中的 user ↔ session 映射,查看活跃度并跳转日志检索`})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`检索条件`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`支持时间窗、范围、用户/会话精确筛选与关键词检索`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{children:`时间窗口`}),(0,I.jsxs)(iM,{value:t.window,onValueChange:e=>l(`window`,e),children:[(0,I.jsx)(sM,{className:`h-8 w-full`,children:(0,I.jsx)(oM,{})}),(0,I.jsxs)(cM,{children:[(0,I.jsx)(uM,{value:`1h`,children:`最近 1 小时`}),(0,I.jsx)(uM,{value:`6h`,children:`最近 6 小时`}),(0,I.jsx)(uM,{value:`24h`,children:`最近 24 小时`})]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`sessions-from`,children:`起始时间`}),(0,I.jsx)(IR,{id:`sessions-from`,type:`datetime-local`,className:`h-8`,value:MV(t.from),onChange:e=>l(`from`,NV(e.target.value))})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`sessions-to`,children:`结束时间`}),(0,I.jsx)(IR,{id:`sessions-to`,type:`datetime-local`,className:`h-8`,value:MV(t.to),onChange:e=>l(`to`,NV(e.target.value))})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`sessions-q`,children:`关键词`}),(0,I.jsx)(IR,{id:`sessions-q`,className:`h-8`,value:t.q,onChange:e=>l(`q`,e.target.value),placeholder:`user/session/model/provider`})]})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`sessions-user`,children:`用户标识`}),(0,I.jsx)(IR,{id:`sessions-user`,className:`h-8`,value:t.user,onChange:e=>l(`user`,e.target.value),placeholder:`userKey 或 raw user_id`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(LR,{htmlFor:`sessions-session`,children:`会话 ID`}),(0,I.jsx)(IR,{id:`sessions-session`,className:`h-8`,value:t.session,onChange:e=>l(`session`,e.target.value),placeholder:`sessionId`})]})]}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,I.jsxs)(q,{size:`sm`,onClick:()=>void u(),disabled:s,children:[(0,I.jsx)(Aa,{className:`h-3.5 w-3.5`}),`查询`]}),(0,I.jsx)(q,{size:`sm`,variant:`outline`,onClick:()=>void d(),disabled:s,children:`重置`}),a&&o?(0,I.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`生效范围:`,PV(a),` - `,PV(o)]}):null]})]})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,I.jsx)(RV,{title:`用户数`,value:h.users}),(0,I.jsx)(RV,{title:`会话数`,value:h.sessions}),(0,I.jsx)(RV,{title:`请求数`,value:h.requests}),(0,I.jsx)(RV,{title:`含 metadata 请求`,value:h.metadataRequests})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`用户与会话`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:i?`文件 ${i.scannedFiles} · 行 ${i.scannedLines} · 解析异常 ${i.parseErrors}${i.truncated?` · 已截断`:``}`:`等待查询`})]}),(0,I.jsx)(`div`,{className:`px-3 py-3`,children:c?(0,I.jsx)(bM,{className:`min-h-[160px] p-6 md:p-6`,children:(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`用户会话查询失败`}),(0,I.jsx)(TM,{children:c})]})}):s?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(EM,{className:`h-10 w-full`}),(0,I.jsx)(EM,{className:`h-10 w-full`}),(0,I.jsx)(EM,{className:`h-10 w-full`})]}):m?(0,I.jsx)(`div`,{className:`rounded-md border`,children:(0,I.jsxs)(PM,{children:[(0,I.jsx)(FM,{children:(0,I.jsxs)(RM,{children:[(0,I.jsx)(zM,{className:`w-[46px]`}),(0,I.jsx)(zM,{children:`用户`}),(0,I.jsx)(zM,{children:`请求数`}),(0,I.jsx)(zM,{children:`会话数`}),(0,I.jsx)(zM,{children:`首次活跃`}),(0,I.jsx)(zM,{children:`最近活跃`}),(0,I.jsx)(zM,{children:`模型摘要`}),(0,I.jsx)(zM,{children:`Provider`}),(0,I.jsx)(zM,{children:`RouteType`}),(0,I.jsx)(zM,{className:`sticky right-0 z-10 bg-background text-right`,children:`操作`})]})}),(0,I.jsx)(IM,{children:r.map(t=>{let n=f[t.userKey]??!0;return(0,I.jsxs)(F.Fragment,{children:[(0,I.jsxs)(RM,{children:[(0,I.jsx)(BM,{children:(0,I.jsx)(q,{size:`icon-xs`,variant:`ghost`,onClick:()=>p(e=>({...e,[t.userKey]:!n})),children:n?(0,I.jsx)(ea,{className:`h-3.5 w-3.5`}):(0,I.jsx)(ta,{className:`h-3.5 w-3.5`})})}),(0,I.jsx)(BM,{className:`font-mono text-xs`,title:t.userKey,children:IV(t.userKey,10)}),(0,I.jsx)(BM,{children:t.requestCount}),(0,I.jsx)(BM,{children:t.sessionCount}),(0,I.jsx)(BM,{className:`text-xs`,children:PV(t.firstSeenAt)}),(0,I.jsx)(BM,{className:`text-xs`,children:PV(t.lastSeenAt)}),(0,I.jsx)(BM,{className:`max-w-[260px] truncate text-xs`,title:FV(t.models),children:FV(t.models)}),(0,I.jsx)(BM,{children:(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:t.providers.length})}),(0,I.jsx)(BM,{children:(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:t.routeTypes.length})}),(0,I.jsx)(BM,{className:`sticky right-0 z-10 bg-background text-right`,children:(0,I.jsx)(q,{size:`sm`,variant:`outline`,onClick:()=>void e({to:`/logs`,search:{user:t.userKey,session:void 0}}),children:`查看日志`})})]},t.userKey),n?t.sessions.map(n=>(0,I.jsxs)(RM,{className:`bg-muted/20`,children:[(0,I.jsx)(BM,{}),(0,I.jsx)(BM,{className:`text-muted-foreground text-xs`,children:`↳ 会话`}),(0,I.jsx)(BM,{children:n.requestCount}),(0,I.jsx)(BM,{className:`text-xs text-muted-foreground`,children:n.sessionId}),(0,I.jsx)(BM,{className:`text-xs`,children:PV(n.firstSeenAt)}),(0,I.jsx)(BM,{className:`text-xs`,children:PV(n.lastSeenAt)}),(0,I.jsx)(BM,{className:`max-w-[260px] truncate text-xs`,title:FV(n.models),children:FV(n.models)}),(0,I.jsxs)(BM,{className:`text-xs text-muted-foreground`,colSpan:2,children:[`最近 requestId: `,IV(n.latestRequestId,8)]}),(0,I.jsx)(BM,{className:`sticky right-0 z-10 bg-background text-right`,children:(0,I.jsx)(q,{size:`sm`,variant:`outline`,onClick:()=>void e({to:`/logs`,search:{user:t.userKey,session:n.sessionId}}),children:`查看日志`})})]},`${t.userKey}-${n.sessionId}`)):null]},t.userKey)})})]})}):(0,I.jsx)(bM,{className:`min-h-[220px] p-6 md:p-6`,children:(0,I.jsxs)(xM,{children:[(0,I.jsx)(wM,{children:`暂无可用用户会话`}),(0,I.jsx)(TM,{children:`请确认 bodyPolicy 不为 off,并调整筛选条件后重试`})]})})})]})]})}function RV({title:e,value:t}){return(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background px-3 py-3`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium`,children:e}),(0,I.jsx)(`div`,{className:`mt-1 text-lg font-semibold`,children:t})]})}var zV=Vr({component:rM}),BV=zr({getParentRoute:()=>zV,path:`/`,component:()=>(0,I.jsx)(Cr,{to:`/dashboard`,replace:!0})}),VV=zr({getParentRoute:()=>zV,path:`/dashboard`,component:JM}),HV=zr({getParentRoute:()=>zV,path:`/chat`,component:hM}),UV=zr({getParentRoute:()=>zV,path:`/providers`,component:CV}),WV=zr({getParentRoute:()=>zV,path:`/routes`,component:kV}),GV=zr({getParentRoute:()=>zV,path:`/logs`,validateSearch:e=>({user:typeof e.user==`string`?e.user:void 0,session:typeof e.session==`string`?e.session:void 0}),component:JR}),KV=zr({getParentRoute:()=>zV,path:`/sessions`,component:LV}),qV=zr({getParentRoute:()=>zV,path:`/logs/$id`,component:uL}),JV=zr({getParentRoute:()=>zV,path:`/logs-settings`,component:ZR});const YV=ai({routeTree:zV.addChildren([BV,VV,HV,UV,WV,GV,KV,qV,JV]),basepath:`/admin`,defaultPreload:`intent`});function XV({children:e,...t}){return(0,I.jsx)(jk,{...t,children:e})}(0,li.createRoot)(document.getElementById(`root`)).render((0,I.jsx)(F.StrictMode,{children:(0,I.jsx)(XV,{attribute:`class`,defaultTheme:`system`,enableSystem:!0,children:(0,I.jsx)(ci,{router:YV})})}));
|
|
191
|
+
color: hsl(${Math.max(0,Math.min(120-120*r,120))}deg 100% 31%);`,n?.key)}return i}}function $(e,t,n,r){return{debug:()=>e?.debugAll??e[t],key:!1,onChange:r}}function vL(e,t,n,r){let i={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:()=>i.getValue()??e.options.renderFallbackValue,getContext:Q(()=>[e,n,t,i],(e,t,n,r)=>({table:e,column:t,row:n,cell:r,getValue:r.getValue,renderValue:r.renderValue}),$(e.options,`debugCells`,`cell.getContext`))};return e._features.forEach(r=>{r.createCell==null||r.createCell(i,n,t,e)},{}),i}function yL(e,t,n,r){let i={...e._getDefaultColumnDef(),...t},a=i.accessorKey,o=i.id??(a?typeof String.prototype.replaceAll==`function`?a.replaceAll(`.`,`_`):a.replace(/\./g,`_`):void 0)??(typeof i.header==`string`?i.header:void 0),s;if(i.accessorFn?s=i.accessorFn:a&&(s=a.includes(`.`)?e=>{let t=e;for(let e of a.split(`.`))t=t?.[e];return t}:e=>e[i.accessorKey]),!o)throw Error();let c={id:`${String(o)}`,accessorFn:s,parent:r,depth:n,columnDef:i,columns:[],getFlatColumns:Q(()=>[!0],()=>[c,...c.columns?.flatMap(e=>e.getFlatColumns())],$(e.options,`debugColumns`,`column.getFlatColumns`)),getLeafColumns:Q(()=>[e._getOrderColumnsFn()],e=>{var t;return(t=c.columns)!=null&&t.length?e(c.columns.flatMap(e=>e.getLeafColumns())):[c]},$(e.options,`debugColumns`,`column.getLeafColumns`))};for(let t of e._features)t.createColumn==null||t.createColumn(c,e);return c}var bL=`debugHeaders`;function xL(e,t,n){let r={id:n.id??t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{let e=[],t=n=>{n.subHeaders&&n.subHeaders.length&&n.subHeaders.map(t),e.push(n)};return t(r),e},getContext:()=>({table:e,header:r,column:t})};return e._features.forEach(t=>{t.createHeader==null||t.createHeader(r,e)}),r}var SL={createTable:e=>{e.getHeaderGroups=Q(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>{let a=r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],o=i?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],s=n.filter(e=>!(r!=null&&r.includes(e.id))&&!(i!=null&&i.includes(e.id)));return CL(t,[...a,...s,...o],e)},$(e.options,bL,`getHeaderGroups`)),e.getCenterHeaderGroups=Q(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>(n=n.filter(e=>!(r!=null&&r.includes(e.id))&&!(i!=null&&i.includes(e.id))),CL(t,n,e,`center`)),$(e.options,bL,`getCenterHeaderGroups`)),e.getLeftHeaderGroups=Q(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>CL(t,r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],e,`left`),$(e.options,bL,`getLeftHeaderGroups`)),e.getRightHeaderGroups=Q(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>CL(t,r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],e,`right`),$(e.options,bL,`getRightHeaderGroups`)),e.getFooterGroups=Q(()=>[e.getHeaderGroups()],e=>[...e].reverse(),$(e.options,bL,`getFooterGroups`)),e.getLeftFooterGroups=Q(()=>[e.getLeftHeaderGroups()],e=>[...e].reverse(),$(e.options,bL,`getLeftFooterGroups`)),e.getCenterFooterGroups=Q(()=>[e.getCenterHeaderGroups()],e=>[...e].reverse(),$(e.options,bL,`getCenterFooterGroups`)),e.getRightFooterGroups=Q(()=>[e.getRightHeaderGroups()],e=>[...e].reverse(),$(e.options,bL,`getRightFooterGroups`)),e.getFlatHeaders=Q(()=>[e.getHeaderGroups()],e=>e.map(e=>e.headers).flat(),$(e.options,bL,`getFlatHeaders`)),e.getLeftFlatHeaders=Q(()=>[e.getLeftHeaderGroups()],e=>e.map(e=>e.headers).flat(),$(e.options,bL,`getLeftFlatHeaders`)),e.getCenterFlatHeaders=Q(()=>[e.getCenterHeaderGroups()],e=>e.map(e=>e.headers).flat(),$(e.options,bL,`getCenterFlatHeaders`)),e.getRightFlatHeaders=Q(()=>[e.getRightHeaderGroups()],e=>e.map(e=>e.headers).flat(),$(e.options,bL,`getRightFlatHeaders`)),e.getCenterLeafHeaders=Q(()=>[e.getCenterFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),$(e.options,bL,`getCenterLeafHeaders`)),e.getLeftLeafHeaders=Q(()=>[e.getLeftFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),$(e.options,bL,`getLeftLeafHeaders`)),e.getRightLeafHeaders=Q(()=>[e.getRightFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),$(e.options,bL,`getRightLeafHeaders`)),e.getLeafHeaders=Q(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(e,t,n)=>[...e[0]?.headers??[],...t[0]?.headers??[],...n[0]?.headers??[]].map(e=>e.getLeafHeaders()).flat(),$(e.options,bL,`getLeafHeaders`))}};function CL(e,t,n,r){let i=0,a=function(e,t){t===void 0&&(t=1),i=Math.max(i,t),e.filter(e=>e.getIsVisible()).forEach(e=>{var n;(n=e.columns)!=null&&n.length&&a(e.columns,t+1)},0)};a(e);let o=[],s=(e,t)=>{let i={depth:t,id:[r,`${t}`].filter(Boolean).join(`_`),headers:[]},a=[];e.forEach(e=>{let o=[...a].reverse()[0],s=e.column.depth===i.depth,c,l=!1;if(s&&e.column.parent?c=e.column.parent:(c=e.column,l=!0),o&&o?.column===c)o.subHeaders.push(e);else{let i=xL(n,c,{id:[r,t,c.id,e?.id].filter(Boolean).join(`_`),isPlaceholder:l,placeholderId:l?`${a.filter(e=>e.column===c).length}`:void 0,depth:t,index:a.length});i.subHeaders.push(e),a.push(i)}i.headers.push(e),e.headerGroup=i}),o.push(i),t>0&&s(a,t-1)};s(t.map((e,t)=>xL(n,e,{depth:i,index:t})),i-1),o.reverse();let c=e=>e.filter(e=>e.column.getIsVisible()).map(e=>{let t=0,n=0,r=[0];e.subHeaders&&e.subHeaders.length?(r=[],c(e.subHeaders).forEach(e=>{let{colSpan:n,rowSpan:i}=e;t+=n,r.push(i)})):t=1;let i=Math.min(...r);return n+=i,e.colSpan=t,e.rowSpan=n,{colSpan:t,rowSpan:n}});return c(o[0]?.headers??[]),o}var wL=(e,t,n,r,i,a,o)=>{let s={id:t,index:r,original:n,depth:i,parentId:o,_valuesCache:{},_uniqueValuesCache:{},getValue:t=>{if(s._valuesCache.hasOwnProperty(t))return s._valuesCache[t];let n=e.getColumn(t);if(n!=null&&n.accessorFn)return s._valuesCache[t]=n.accessorFn(s.original,r),s._valuesCache[t]},getUniqueValues:t=>{if(s._uniqueValuesCache.hasOwnProperty(t))return s._uniqueValuesCache[t];let n=e.getColumn(t);if(n!=null&&n.accessorFn)return n.columnDef.getUniqueValues?(s._uniqueValuesCache[t]=n.columnDef.getUniqueValues(s.original,r),s._uniqueValuesCache[t]):(s._uniqueValuesCache[t]=[s.getValue(t)],s._uniqueValuesCache[t])},renderValue:t=>s.getValue(t)??e.options.renderFallbackValue,subRows:a??[],getLeafRows:()=>_L(s.subRows,e=>e.subRows),getParentRow:()=>s.parentId?e.getRow(s.parentId,!0):void 0,getParentRows:()=>{let e=[],t=s;for(;;){let n=t.getParentRow();if(!n)break;e.push(n),t=n}return e.reverse()},getAllCells:Q(()=>[e.getAllLeafColumns()],t=>t.map(t=>vL(e,s,t,t.id)),$(e.options,`debugRows`,`getAllCells`)),_getAllCellsByColumnId:Q(()=>[s.getAllCells()],e=>e.reduce((e,t)=>(e[t.column.id]=t,e),{}),$(e.options,`debugRows`,`getAllCellsByColumnId`))};for(let t=0;t<e._features.length;t++){let n=e._features[t];n==null||n.createRow==null||n.createRow(s,e)}return s},TL={createColumn:(e,t)=>{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},EL=(e,t,n)=>{var r,i;let a=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((i=e.getValue(t))==null||(i=i.toString())==null||(i=i.toLowerCase())==null)&&i.includes(a))};EL.autoRemove=e=>IL(e);var DL=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};DL.autoRemove=e=>IL(e);var OL=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===n?.toLowerCase()};OL.autoRemove=e=>IL(e);var kL=(e,t,n)=>e.getValue(t)?.includes(n);kL.autoRemove=e=>IL(e);var AL=(e,t,n)=>!n.some(n=>{var r;return!((r=e.getValue(t))!=null&&r.includes(n))});AL.autoRemove=e=>IL(e)||!(e!=null&&e.length);var jL=(e,t,n)=>n.some(n=>e.getValue(t)?.includes(n));jL.autoRemove=e=>IL(e)||!(e!=null&&e.length);var ML=(e,t,n)=>e.getValue(t)===n;ML.autoRemove=e=>IL(e);var NL=(e,t,n)=>e.getValue(t)==n;NL.autoRemove=e=>IL(e);var PL=(e,t,n)=>{let[r,i]=n,a=e.getValue(t);return a>=r&&a<=i};PL.resolveFilterValue=e=>{let[t,n]=e,r=typeof t==`number`?t:parseFloat(t),i=typeof n==`number`?n:parseFloat(n),a=t===null||Number.isNaN(r)?-1/0:r,o=n===null||Number.isNaN(i)?1/0:i;if(a>o){let e=a;a=o,o=e}return[a,o]},PL.autoRemove=e=>IL(e)||IL(e[0])&&IL(e[1]);var FL={includesString:EL,includesStringSensitive:DL,equalsString:OL,arrIncludes:kL,arrIncludesAll:AL,arrIncludesSome:jL,equals:ML,weakEquals:NL,inNumberRange:PL};function IL(e){return e==null||e===``}var LL={getDefaultColumnDef:()=>({filterFn:`auto`}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:mL(`columnFilters`,e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{let n=t.getCoreRowModel().flatRows[0]?.getValue(e.id);return typeof n==`string`?FL.includesString:typeof n==`number`?FL.inNumberRange:typeof n==`boolean`||typeof n==`object`&&n?FL.equals:Array.isArray(n)?FL.arrIncludes:FL.weakEquals},e.getFilterFn=()=>hL(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn===`auto`?e.getAutoFilterFn():t.options.filterFns?.[e.columnDef.filterFn]??FL[e.columnDef.filterFn],e.getCanFilter=()=>(e.columnDef.enableColumnFilter??!0)&&(t.options.enableColumnFilters??!0)&&(t.options.enableFilters??!0)&&!!e.accessorFn,e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(t=>t.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>t.getState().columnFilters?.findIndex(t=>t.id===e.id)??-1,e.setFilterValue=n=>{t.setColumnFilters(t=>{let r=e.getFilterFn(),i=t?.find(t=>t.id===e.id),a=pL(n,i?i.value:void 0);if(RL(r,a,e))return t?.filter(t=>t.id!==e.id)??[];let o={id:e.id,value:a};return i?t?.map(t=>t.id===e.id?o:t)??[]:t!=null&&t.length?[...t,o]:[o]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{let n=e.getAllLeafColumns();e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(e=>pL(t,e)?.filter(e=>{let t=n.find(t=>t.id===e.id);return!(t&&RL(t.getFilterFn(),e.value,t))}))},e.resetColumnFilters=t=>{e.setColumnFilters(t?[]:e.initialState?.columnFilters??[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function RL(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||t===void 0||typeof t==`string`&&!t}var zL={sum:(e,t,n)=>n.reduce((t,n)=>{let r=n.getValue(e);return t+(typeof r==`number`?r:0)},0),min:(e,t,n)=>{let r;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}),r},max:(e,t,n)=>{let r;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r<n||r===void 0&&n>=n)&&(r=n)}),r},extent:(e,t,n)=>{let r,i;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r===void 0?n>=n&&(r=i=n):(r>n&&(r=n),i<n&&(i=n)))}),[r,i]},mean:(e,t)=>{let n=0,r=0;if(t.forEach(t=>{let i=t.getValue(e);i!=null&&(i=+i)>=i&&(++n,r+=i)}),n)return r/n},median:(e,t)=>{if(!t.length)return;let n=t.map(t=>t.getValue(e));if(!gL(n))return;if(n.length===1)return n[0];let r=Math.floor(n.length/2),i=n.sort((e,t)=>e-t);return n.length%2==0?(i[r-1]+i[r])/2:i[r]},unique:(e,t)=>Array.from(new Set(t.map(t=>t.getValue(e))).values()),uniqueCount:(e,t)=>new Set(t.map(t=>t.getValue(e))).size,count:(e,t)=>t.length},BL={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t;return((t=e.getValue())==null||t.toString==null?void 0:t.toString())??null},aggregationFn:`auto`}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:mL(`grouping`,e),groupedColumnMode:`reorder`}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(t=>t!=null&&t.includes(e.id)?t.filter(t=>t!==e.id):[...t??[],e.id])},e.getCanGroup=()=>(e.columnDef.enableGrouping??!0)&&(t.options.enableGrouping??!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue),e.getIsGrouped=()=>t.getState().grouping?.includes(e.id),e.getGroupedIndex=()=>t.getState().grouping?.indexOf(e.id),e.getToggleGroupingHandler=()=>{let t=e.getCanGroup();return()=>{t&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{let n=t.getCoreRowModel().flatRows[0]?.getValue(e.id);if(typeof n==`number`)return zL.sum;if(Object.prototype.toString.call(n)===`[object Date]`)return zL.extent},e.getAggregationFn=()=>{if(!e)throw Error();return hL(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn===`auto`?e.getAutoAggregationFn():t.options.aggregationFns?.[e.columnDef.aggregationFn]??zL[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{e.setGrouping(t?[]:e.initialState?.grouping??[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];let r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var t;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((t=n.subRows)!=null&&t.length)}}};function VL(e,t,n){if(!(t!=null&&t.length)||!n)return e;let r=e.filter(e=>!t.includes(e.id));return n===`remove`?r:[...t.map(t=>e.find(e=>e.id===t)).filter(Boolean),...r]}var HL={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:mL(`columnOrder`,e)}),createColumn:(e,t)=>{e.getIndex=Q(e=>[$L(t,e)],t=>t.findIndex(t=>t.id===e.id),$(t.options,`debugColumns`,`getIndex`)),e.getIsFirstColumn=n=>$L(t,n)[0]?.id===e.id,e.getIsLastColumn=n=>{let r=$L(t,n);return r[r.length-1]?.id===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{e.setColumnOrder(t?[]:e.initialState.columnOrder??[])},e._getOrderColumnsFn=Q(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(e,t,n)=>r=>{let i=[];if(!(e!=null&&e.length))i=r;else{let t=[...e],n=[...r];for(;n.length&&t.length;){let e=t.shift(),r=n.findIndex(t=>t.id===e);r>-1&&i.push(n.splice(r,1)[0])}i=[...i,...n]}return VL(i,t,n)},$(e.options,`debugTable`,`_getOrderColumnsFn`))}},UL=()=>({left:[],right:[]}),WL={getInitialState:e=>({columnPinning:UL(),...e}),getDefaultOptions:e=>({onColumnPinningChange:mL(`columnPinning`,e)}),createColumn:(e,t)=>{e.pin=n=>{let r=e.getLeafColumns().map(e=>e.id).filter(Boolean);t.setColumnPinning(e=>n===`right`?{left:(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),right:[...(e?.right??[]).filter(e=>!(r!=null&&r.includes(e))),...r]}:n===`left`?{left:[...(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),...r],right:(e?.right??[]).filter(e=>!(r!=null&&r.includes(e)))}:{left:(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),right:(e?.right??[]).filter(e=>!(r!=null&&r.includes(e)))})},e.getCanPin=()=>e.getLeafColumns().some(e=>(e.columnDef.enablePinning??!0)&&(t.options.enableColumnPinning??t.options.enablePinning??!0)),e.getIsPinned=()=>{let n=e.getLeafColumns().map(e=>e.id),{left:r,right:i}=t.getState().columnPinning,a=n.some(e=>r?.includes(e)),o=n.some(e=>i?.includes(e));return a?`left`:o?`right`:!1},e.getPinnedIndex=()=>{var n;let r=e.getIsPinned();return r?((n=t.getState().columnPinning)==null||(n=n[r])==null?void 0:n.indexOf(e.id))??-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=Q(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(e,t,n)=>{let r=[...t??[],...n??[]];return e.filter(e=>!r.includes(e.column.id))},$(t.options,`debugRows`,`getCenterVisibleCells`)),e.getLeftVisibleCells=Q(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(e,t)=>(t??[]).map(t=>e.find(e=>e.column.id===t)).filter(Boolean).map(e=>({...e,position:`left`})),$(t.options,`debugRows`,`getLeftVisibleCells`)),e.getRightVisibleCells=Q(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(e,t)=>(t??[]).map(t=>e.find(e=>e.column.id===t)).filter(Boolean).map(e=>({...e,position:`right`})),$(t.options,`debugRows`,`getRightVisibleCells`))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>e.setColumnPinning(t?UL():e.initialState?.columnPinning??UL()),e.getIsSomeColumnsPinned=t=>{let n=e.getState().columnPinning;return t?!!n[t]?.length:!!(n.left?.length||n.right?.length)},e.getLeftLeafColumns=Q(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(e,t)=>(t??[]).map(t=>e.find(e=>e.id===t)).filter(Boolean),$(e.options,`debugColumns`,`getLeftLeafColumns`)),e.getRightLeafColumns=Q(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(e,t)=>(t??[]).map(t=>e.find(e=>e.id===t)).filter(Boolean),$(e.options,`debugColumns`,`getRightLeafColumns`)),e.getCenterLeafColumns=Q(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(e,t,n)=>{let r=[...t??[],...n??[]];return e.filter(e=>!r.includes(e.id))},$(e.options,`debugColumns`,`getCenterLeafColumns`))}};function GL(e){return e||(typeof document<`u`?document:null)}var KL={size:150,minSize:20,maxSize:2**53-1},qL=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),JL={getDefaultColumnDef:()=>KL,getInitialState:e=>({columnSizing:{},columnSizingInfo:qL(),...e}),getDefaultOptions:e=>({columnResizeMode:`onEnd`,columnResizeDirection:`ltr`,onColumnSizingChange:mL(`columnSizing`,e),onColumnSizingInfoChange:mL(`columnSizingInfo`,e)}),createColumn:(e,t)=>{e.getSize=()=>{let n=t.getState().columnSizing[e.id];return Math.min(Math.max(e.columnDef.minSize??KL.minSize,n??e.columnDef.size??KL.size),e.columnDef.maxSize??KL.maxSize)},e.getStart=Q(e=>[e,$L(t,e),t.getState().columnSizing],(t,n)=>n.slice(0,e.getIndex(t)).reduce((e,t)=>e+t.getSize(),0),$(t.options,`debugColumns`,`getStart`)),e.getAfter=Q(e=>[e,$L(t,e),t.getState().columnSizing],(t,n)=>n.slice(e.getIndex(t)+1).reduce((e,t)=>e+t.getSize(),0),$(t.options,`debugColumns`,`getAfter`)),e.resetSize=()=>{t.setColumnSizing(t=>{let{[e.id]:n,...r}=t;return r})},e.getCanResize=()=>(e.columnDef.enableResizing??!0)&&(t.options.enableColumnResizing??!0),e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let t=0,n=e=>{e.subHeaders.length?e.subHeaders.forEach(n):t+=e.column.getSize()??0};return n(e),t},e.getStart=()=>{if(e.index>0){let t=e.headerGroup.headers[e.index-1];return t.getStart()+t.getSize()}return 0},e.getResizeHandler=n=>{let r=t.getColumn(e.column.id),i=r?.getCanResize();return a=>{if(!r||!i||(a.persist==null||a.persist(),ZL(a)&&a.touches&&a.touches.length>1))return;let o=e.getSize(),s=e?e.getLeafHeaders().map(e=>[e.column.id,e.column.getSize()]):[[r.id,r.getSize()]],c=ZL(a)?Math.round(a.touches[0].clientX):a.clientX,l={},u=(e,n)=>{typeof n==`number`&&(t.setColumnSizingInfo(e=>{let r=t.options.columnResizeDirection===`rtl`?-1:1,i=(n-(e?.startOffset??0))*r,a=Math.max(i/(e?.startSize??0),-.999999);return e.columnSizingStart.forEach(e=>{let[t,n]=e;l[t]=Math.round(Math.max(n+n*a,0)*100)/100}),{...e,deltaOffset:i,deltaPercentage:a}}),(t.options.columnResizeMode===`onChange`||e===`end`)&&t.setColumnSizing(e=>({...e,...l})))},d=e=>u(`move`,e),f=e=>{u(`end`,e),t.setColumnSizingInfo(e=>({...e,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},p=GL(n),m={moveHandler:e=>d(e.clientX),upHandler:e=>{p?.removeEventListener(`mousemove`,m.moveHandler),p?.removeEventListener(`mouseup`,m.upHandler),f(e.clientX)}},h={moveHandler:e=>(e.cancelable&&(e.preventDefault(),e.stopPropagation()),d(e.touches[0].clientX),!1),upHandler:e=>{p?.removeEventListener(`touchmove`,h.moveHandler),p?.removeEventListener(`touchend`,h.upHandler),e.cancelable&&(e.preventDefault(),e.stopPropagation()),f(e.touches[0]?.clientX)}},g=XL()?{passive:!1}:!1;ZL(a)?(p?.addEventListener(`touchmove`,h.moveHandler,g),p?.addEventListener(`touchend`,h.upHandler,g)):(p?.addEventListener(`mousemove`,m.moveHandler,g),p?.addEventListener(`mouseup`,m.upHandler,g)),t.setColumnSizingInfo(e=>({...e,startOffset:c,startSize:o,deltaOffset:0,deltaPercentage:0,columnSizingStart:s,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{e.setColumnSizing(t?{}:e.initialState.columnSizing??{})},e.resetHeaderSizeInfo=t=>{e.setColumnSizingInfo(t?qL():e.initialState.columnSizingInfo??qL())},e.getTotalSize=()=>e.getHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getLeftTotalSize=()=>e.getLeftHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getCenterTotalSize=()=>e.getCenterHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getRightTotalSize=()=>e.getRightHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0}},YL=null;function XL(){if(typeof YL==`boolean`)return YL;let e=!1;try{let t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener(`test`,n,t),window.removeEventListener(`test`,n)}catch{e=!1}return YL=e,YL}function ZL(e){return e.type===`touchstart`}var QL={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:mL(`columnVisibility`,e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(t=>({...t,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{let n=e.columns;return(n.length?n.some(e=>e.getIsVisible()):t.getState().columnVisibility?.[e.id])??!0},e.getCanHide=()=>(e.columnDef.enableHiding??!0)&&(t.options.enableHiding??!0),e.getToggleVisibilityHandler=()=>t=>{e.toggleVisibility==null||e.toggleVisibility(t.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=Q(()=>[e.getAllCells(),t.getState().columnVisibility],e=>e.filter(e=>e.column.getIsVisible()),$(t.options,`debugRows`,`_getAllVisibleCells`)),e.getVisibleCells=Q(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(e,t,n)=>[...e,...t,...n],$(t.options,`debugRows`,`getVisibleCells`))},createTable:e=>{let t=(t,n)=>Q(()=>[n(),n().filter(e=>e.getIsVisible()).map(e=>e.id).join(`_`)],e=>e.filter(e=>e.getIsVisible==null?void 0:e.getIsVisible()),$(e.options,`debugColumns`,t));e.getVisibleFlatColumns=t(`getVisibleFlatColumns`,()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t(`getVisibleLeafColumns`,()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t(`getLeftVisibleLeafColumns`,()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t(`getRightVisibleLeafColumns`,()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t(`getCenterVisibleLeafColumns`,()=>e.getCenterLeafColumns()),e.setColumnVisibility=t=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(t),e.resetColumnVisibility=t=>{e.setColumnVisibility(t?{}:e.initialState.columnVisibility??{})},e.toggleAllColumnsVisible=t=>{t??=!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((e,n)=>({...e,[n.id]:t||!(n.getCanHide!=null&&n.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(e=>!(e.getIsVisible!=null&&e.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(e=>e.getIsVisible==null?void 0:e.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>t=>{e.toggleAllColumnsVisible(t.target?.checked)}}};function $L(e,t){return t?t===`center`?e.getCenterVisibleLeafColumns():t===`left`?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}var eR={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,`__global__`),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,`__global__`),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,`__global__`),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},tR={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:mL(`globalFilter`,e),globalFilterFn:`auto`,getColumnCanGlobalFilter:t=>{var n;let r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r==`string`||typeof r==`number`}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>(e.columnDef.enableGlobalFilter??!0)&&(t.options.enableGlobalFilter??!0)&&(t.options.enableFilters??!0)&&((t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))??!0)&&!!e.accessorFn},createTable:e=>{e.getGlobalAutoFilterFn=()=>FL.includesString,e.getGlobalFilterFn=()=>{let{globalFilterFn:t}=e.options;return hL(t)?t:t===`auto`?e.getGlobalAutoFilterFn():e.options.filterFns?.[t]??FL[t]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},nR={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:mL(`expanded`,e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{if(!t){e._queue(()=>{t=!0});return}if(e.options.autoResetAll??e.options.autoResetExpanded??!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=t=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(t),e.toggleAllRowsExpanded=t=>{t??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=t=>{e.setExpanded(t?{}:e.initialState?.expanded??{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(e=>e.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>t=>{t.persist==null||t.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{let t=e.getState().expanded;return t===!0||Object.values(t).some(Boolean)},e.getIsAllRowsExpanded=()=>{let t=e.getState().expanded;return typeof t==`boolean`?t===!0:!(!Object.keys(t).length||e.getRowModel().flatRows.some(e=>!e.getIsExpanded()))},e.getExpandedDepth=()=>{let t=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(e=>{let n=e.split(`.`);t=Math.max(t,n.length)}),t},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{let i=r===!0?!0:!!(r!=null&&r[e.id]),a={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(e=>{a[e]=!0}):a=r,n??=!i,!i&&n)return{...a,[e.id]:!0};if(i&&!n){let{[e.id]:t,...n}=a;return n}return r})},e.getIsExpanded=()=>{let n=t.getState().expanded;return!!((t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))??(n===!0||n?.[e.id]))},e.getCanExpand=()=>{var n;return(t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))??((t.options.enableExpanding??!0)&&!!((n=e.subRows)!=null&&n.length))},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{let t=e.getCanExpand();return()=>{t&&e.toggleExpanded()}}}},rR=0,iR=10,aR=()=>({pageIndex:rR,pageSize:iR}),oR={getInitialState:e=>({...e,pagination:{...aR(),...e?.pagination}}),getDefaultOptions:e=>({onPaginationChange:mL(`pagination`,e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{if(!t){e._queue(()=>{t=!0});return}if(e.options.autoResetAll??e.options.autoResetPageIndex??!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=t=>e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(e=>pL(t,e)),e.resetPagination=t=>{e.setPagination(t?aR():e.initialState.pagination??aR())},e.setPageIndex=t=>{e.setPagination(n=>{let r=pL(t,n.pageIndex),i=e.options.pageCount===void 0||e.options.pageCount===-1?2**53-1:e.options.pageCount-1;return r=Math.max(0,Math.min(r,i)),{...n,pageIndex:r}})},e.resetPageIndex=t=>{var n;e.setPageIndex(t?rR:((n=e.initialState)==null||(n=n.pagination)==null?void 0:n.pageIndex)??rR)},e.resetPageSize=t=>{var n;e.setPageSize(t?iR:((n=e.initialState)==null||(n=n.pagination)==null?void 0:n.pageSize)??iR)},e.setPageSize=t=>{e.setPagination(e=>{let n=Math.max(1,pL(t,e.pageSize)),r=e.pageSize*e.pageIndex,i=Math.floor(r/n);return{...e,pageIndex:i,pageSize:n}})},e.setPageCount=t=>e.setPagination(n=>{let r=pL(t,e.options.pageCount??-1);return typeof r==`number`&&(r=Math.max(-1,r)),{...n,pageCount:r}}),e.getPageOptions=Q(()=>[e.getPageCount()],e=>{let t=[];return e&&e>0&&(t=[...Array(e)].fill(null).map((e,t)=>t)),t},$(e.options,`debugTable`,`getPageOptions`)),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{let{pageIndex:t}=e.getState().pagination,n=e.getPageCount();return n===-1?!0:n===0?!1:t<n-1},e.previousPage=()=>e.setPageIndex(e=>e-1),e.nextPage=()=>e.setPageIndex(e=>e+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>e.options.pageCount??Math.ceil(e.getRowCount()/e.getState().pagination.pageSize),e.getRowCount=()=>e.options.rowCount??e.getPrePaginationRowModel().rows.length}},sR=()=>({top:[],bottom:[]}),cR={getInitialState:e=>({rowPinning:sR(),...e}),getDefaultOptions:e=>({onRowPinningChange:mL(`rowPinning`,e)}),createRow:(e,t)=>{e.pin=(n,r,i)=>{let a=r?e.getLeafRows().map(e=>{let{id:t}=e;return t}):[],o=i?e.getParentRows().map(e=>{let{id:t}=e;return t}):[],s=new Set([...o,e.id,...a]);t.setRowPinning(e=>n===`bottom`?{top:(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),bottom:[...(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e))),...Array.from(s)]}:n===`top`?{top:[...(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),...Array.from(s)],bottom:(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e)))}:{top:(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),bottom:(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e)))})},e.getCanPin=()=>{let{enableRowPinning:n,enablePinning:r}=t.options;return typeof n==`function`?n(e):n??r??!0},e.getIsPinned=()=>{let n=[e.id],{top:r,bottom:i}=t.getState().rowPinning,a=n.some(e=>r?.includes(e)),o=n.some(e=>i?.includes(e));return a?`top`:o?`bottom`:!1},e.getPinnedIndex=()=>{let n=e.getIsPinned();return n?((n===`top`?t.getTopRows():t.getBottomRows())?.map(e=>{let{id:t}=e;return t}))?.indexOf(e.id)??-1:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>e.setRowPinning(t?sR():e.initialState?.rowPinning??sR()),e.getIsSomeRowsPinned=t=>{let n=e.getState().rowPinning;return t?!!n[t]?.length:!!(n.top?.length||n.bottom?.length)},e._getPinnedRows=(t,n,r)=>(e.options.keepPinnedRows??!0?(n??[]).map(t=>{let n=e.getRow(t,!0);return n.getIsAllParentsExpanded()?n:null}):(n??[]).map(e=>t.find(t=>t.id===e))).filter(Boolean).map(e=>({...e,position:r})),e.getTopRows=Q(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,`top`),$(e.options,`debugRows`,`getTopRows`)),e.getBottomRows=Q(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,`bottom`),$(e.options,`debugRows`,`getBottomRows`)),e.getCenterRows=Q(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(e,t,n)=>{let r=new Set([...t??[],...n??[]]);return e.filter(e=>!r.has(e.id))},$(e.options,`debugRows`,`getCenterRows`))}},lR={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:mL(`rowSelection`,e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>e.setRowSelection(t?{}:e.initialState.rowSelection??{}),e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=t===void 0?!e.getIsAllRowsSelected():t;let r={...n},i=e.getPreGroupedRowModel().flatRows;return t?i.forEach(e=>{e.getCanSelect()&&(r[e.id]=!0)}):i.forEach(e=>{delete r[e.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{let r=t===void 0?!e.getIsAllPageRowsSelected():t,i={...n};return e.getRowModel().rows.forEach(t=>{uR(i,t.id,r,!0,e)}),i}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=Q(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?dR(e,n):{rows:[],flatRows:[],rowsById:{}},$(e.options,`debugTable`,`getSelectedRowModel`)),e.getFilteredSelectedRowModel=Q(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?dR(e,n):{rows:[],flatRows:[],rowsById:{}},$(e.options,`debugTable`,`getFilteredSelectedRowModel`)),e.getGroupedSelectedRowModel=Q(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?dR(e,n):{rows:[],flatRows:[],rowsById:{}},$(e.options,`debugTable`,`getGroupedSelectedRowModel`)),e.getIsAllRowsSelected=()=>{let t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState(),r=!!(t.length&&Object.keys(n).length);return r&&t.some(e=>e.getCanSelect()&&!n[e.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows.filter(e=>e.getCanSelect()),{rowSelection:n}=e.getState(),r=!!t.length;return r&&t.some(e=>!n[e.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{let t=Object.keys(e.getState().rowSelection??{}).length;return t>0&&t<e.getFilteredRowModel().flatRows.length},e.getIsSomePageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(e=>e.getCanSelect()).some(e=>e.getIsSelected()||e.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{let i=e.getIsSelected();t.setRowSelection(a=>{if(n=n===void 0?!i:n,e.getCanSelect()&&i===n)return a;let o={...a};return uR(o,e.id,n,r?.selectChildren??!0,t),o})},e.getIsSelected=()=>{let{rowSelection:n}=t.getState();return fR(e,n)},e.getIsSomeSelected=()=>{let{rowSelection:n}=t.getState();return pR(e,n)===`some`},e.getIsAllSubRowsSelected=()=>{let{rowSelection:n}=t.getState();return pR(e,n)===`all`},e.getCanSelect=()=>typeof t.options.enableRowSelection==`function`?t.options.enableRowSelection(e):t.options.enableRowSelection??!0,e.getCanSelectSubRows=()=>typeof t.options.enableSubRowSelection==`function`?t.options.enableSubRowSelection(e):t.options.enableSubRowSelection??!0,e.getCanMultiSelect=()=>typeof t.options.enableMultiRowSelection==`function`?t.options.enableMultiRowSelection(e):t.options.enableMultiRowSelection??!0,e.getToggleSelectedHandler=()=>{let t=e.getCanSelect();return n=>{t&&e.toggleSelected(n.target?.checked)}}}},uR=(e,t,n,r,i)=>{var a;let o=i.getRow(t,!0);n?(o.getCanMultiSelect()||Object.keys(e).forEach(t=>delete e[t]),o.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(a=o.subRows)!=null&&a.length&&o.getCanSelectSubRows()&&o.subRows.forEach(t=>uR(e,t.id,n,r,i))};function dR(e,t){let n=e.getState().rowSelection,r=[],i={},a=function(e,t){return e.map(e=>{var t;let o=fR(e,n);if(o&&(r.push(e),i[e.id]=e),(t=e.subRows)!=null&&t.length&&(e={...e,subRows:a(e.subRows)}),o)return e}).filter(Boolean)};return{rows:a(t.rows),flatRows:r,rowsById:i}}function fR(e,t){return t[e.id]??!1}function pR(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let i=!0,a=!1;return e.subRows.forEach(e=>{if(!(a&&!i)&&(e.getCanSelect()&&(fR(e,t)?a=!0:i=!1),e.subRows&&e.subRows.length)){let n=pR(e,t);n===`all`?a=!0:(n===`some`&&(a=!0),i=!1)}}),i?`all`:a?`some`:!1}var mR=/([0-9]+)/gm,hR=(e,t,n)=>CR(SR(e.getValue(n)).toLowerCase(),SR(t.getValue(n)).toLowerCase()),gR=(e,t,n)=>CR(SR(e.getValue(n)),SR(t.getValue(n))),_R=(e,t,n)=>xR(SR(e.getValue(n)).toLowerCase(),SR(t.getValue(n)).toLowerCase()),vR=(e,t,n)=>xR(SR(e.getValue(n)),SR(t.getValue(n))),yR=(e,t,n)=>{let r=e.getValue(n),i=t.getValue(n);return r>i?1:r<i?-1:0},bR=(e,t,n)=>xR(e.getValue(n),t.getValue(n));function xR(e,t){return e===t?0:e>t?1:-1}function SR(e){return typeof e==`number`?isNaN(e)||e===1/0||e===-1/0?``:String(e):typeof e==`string`?e:``}function CR(e,t){let n=e.split(mR).filter(Boolean),r=t.split(mR).filter(Boolean);for(;n.length&&r.length;){let e=n.shift(),t=r.shift(),i=parseInt(e,10),a=parseInt(t,10),o=[i,a].sort();if(isNaN(o[0])){if(e>t)return 1;if(t>e)return-1;continue}if(isNaN(o[1]))return isNaN(i)?-1:1;if(i>a)return 1;if(a>i)return-1}return n.length-r.length}var wR={alphanumeric:hR,alphanumericCaseSensitive:gR,text:_R,textCaseSensitive:vR,datetime:yR,basic:bR},TR=[SL,QL,HL,WL,TL,LL,eR,tR,{getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:`auto`,sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:mL(`sorting`,e),isMultiSortEvent:e=>e.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{let n=t.getFilteredRowModel().flatRows.slice(10),r=!1;for(let t of n){let n=t?.getValue(e.id);if(Object.prototype.toString.call(n)===`[object Date]`)return wR.datetime;if(typeof n==`string`&&(r=!0,n.split(mR).length>1))return wR.alphanumeric}return r?wR.text:wR.basic},e.getAutoSortDir=()=>typeof t.getFilteredRowModel().flatRows[0]?.getValue(e.id)==`string`?`asc`:`desc`,e.getSortingFn=()=>{if(!e)throw Error();return hL(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn===`auto`?e.getAutoSortingFn():t.options.sortingFns?.[e.columnDef.sortingFn]??wR[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{let i=e.getNextSortingOrder(),a=n!=null;t.setSorting(o=>{let s=o?.find(t=>t.id===e.id),c=o?.findIndex(t=>t.id===e.id),l=[],u,d=a?n:i===`desc`;return u=o!=null&&o.length&&e.getCanMultiSort()&&r?s?`toggle`:`add`:o!=null&&o.length&&c!==o.length-1?`replace`:s?`toggle`:`replace`,u===`toggle`&&(a||i||(u=`remove`)),u===`add`?(l=[...o,{id:e.id,desc:d}],l.splice(0,l.length-(t.options.maxMultiSortColCount??2**53-1))):l=u===`toggle`?o.map(t=>t.id===e.id?{...t,desc:d}:t):u===`remove`?o.filter(t=>t.id!==e.id):[{id:e.id,desc:d}],l})},e.getFirstSortDir=()=>e.columnDef.sortDescFirst??t.options.sortDescFirst??e.getAutoSortDir()===`desc`?`desc`:`asc`,e.getNextSortingOrder=n=>{let r=e.getFirstSortDir(),i=e.getIsSorted();return i?i!==r&&(t.options.enableSortingRemoval??!0)&&(!n||(t.options.enableMultiRemove??!0))?!1:i===`desc`?`asc`:`desc`:r},e.getCanSort=()=>(e.columnDef.enableSorting??!0)&&(t.options.enableSorting??!0)&&!!e.accessorFn,e.getCanMultiSort=()=>e.columnDef.enableMultiSort??t.options.enableMultiSort??!!e.accessorFn,e.getIsSorted=()=>{let n=t.getState().sorting?.find(t=>t.id===e.id);return n?n.desc?`desc`:`asc`:!1},e.getSortIndex=()=>t.getState().sorting?.findIndex(t=>t.id===e.id)??-1,e.clearSorting=()=>{t.setSorting(t=>t!=null&&t.length?t.filter(t=>t.id!==e.id):[])},e.getToggleSortingHandler=()=>{let n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{e.setSorting(t?[]:e.initialState?.sorting??[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},BL,nR,oR,cR,lR,JL];function ER(e){let t=[...TR,...e._features??[]],n={_features:t},r=n._features.reduce((e,t)=>Object.assign(e,t.getDefaultOptions==null?void 0:t.getDefaultOptions(n)),{}),i=e=>n.options.mergeOptions?n.options.mergeOptions(r,e):{...r,...e},a={...e.initialState??{}};n._features.forEach(e=>{a=(e.getInitialState==null?void 0:e.getInitialState(a))??a});let o=[],s=!1,c={_features:t,options:{...r,...e},initialState:a,_queue:e=>{o.push(e),s||(s=!0,Promise.resolve().then(()=>{for(;o.length;)o.shift()();s=!1}).catch(e=>setTimeout(()=>{throw e})))},reset:()=>{n.setState(n.initialState)},setOptions:e=>{n.options=i(pL(e,n.options))},getState:()=>n.options.state,setState:e=>{n.options.onStateChange==null||n.options.onStateChange(e)},_getRowId:(e,t,r)=>(n.options.getRowId==null?void 0:n.options.getRowId(e,t,r))??`${r?[r.id,t].join(`.`):t}`,getCoreRowModel:()=>(n._getCoreRowModel||=n.options.getCoreRowModel(n),n._getCoreRowModel()),getRowModel:()=>n.getPaginationRowModel(),getRow:(e,t)=>{let r=(t?n.getPrePaginationRowModel():n.getRowModel()).rowsById[e];if(!r&&(r=n.getCoreRowModel().rowsById[e],!r))throw Error();return r},_getDefaultColumnDef:Q(()=>[n.options.defaultColumn],e=>(e??={},{header:e=>{let t=e.header.column.columnDef;return t.accessorKey?t.accessorKey:t.accessorFn?t.id:null},cell:e=>{var t;return((t=e.renderValue())==null||t.toString==null?void 0:t.toString())??null},...n._features.reduce((e,t)=>Object.assign(e,t.getDefaultColumnDef==null?void 0:t.getDefaultColumnDef()),{}),...e}),$(e,`debugColumns`,`_getDefaultColumnDef`)),_getColumnDefs:()=>n.options.columns,getAllColumns:Q(()=>[n._getColumnDefs()],e=>{let t=function(e,r,i){return i===void 0&&(i=0),e.map(e=>{let a=yL(n,e,i,r),o=e;return a.columns=o.columns?t(o.columns,a,i+1):[],a})};return t(e)},$(e,`debugColumns`,`getAllColumns`)),getAllFlatColumns:Q(()=>[n.getAllColumns()],e=>e.flatMap(e=>e.getFlatColumns()),$(e,`debugColumns`,`getAllFlatColumns`)),_getAllFlatColumnsById:Q(()=>[n.getAllFlatColumns()],e=>e.reduce((e,t)=>(e[t.id]=t,e),{}),$(e,`debugColumns`,`getAllFlatColumnsById`)),getAllLeafColumns:Q(()=>[n.getAllColumns(),n._getOrderColumnsFn()],(e,t)=>t(e.flatMap(e=>e.getLeafColumns())),$(e,`debugColumns`,`getAllLeafColumns`)),getColumn:e=>n._getAllFlatColumnsById()[e]};Object.assign(n,c);for(let e=0;e<n._features.length;e++){let t=n._features[e];t==null||t.createTable==null||t.createTable(n)}return n}function DR(){return e=>Q(()=>[e.options.data],t=>{let n={rows:[],flatRows:[],rowsById:{}},r=function(t,i,a){i===void 0&&(i=0);let o=[];for(let c=0;c<t.length;c++){let l=wL(e,e._getRowId(t[c],c,a),t[c],c,i,void 0,a?.id);if(n.flatRows.push(l),n.rowsById[l.id]=l,o.push(l),e.options.getSubRows){var s;l.originalSubRows=e.options.getSubRows(t[c],c),(s=l.originalSubRows)!=null&&s.length&&(l.subRows=r(l.originalSubRows,i+1,l))}}return o};return n.rows=r(t),n},$(e.options,`debugTable`,`getRowModel`,()=>e._autoResetPageIndex()))}function OR(e,t){return e?kR(e)?F.createElement(e,t):e:null}function kR(e){return AR(e)||typeof e==`function`||jR(e)}function AR(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function jR(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function MR(e){let t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=F.useState(()=>({current:ER(t)})),[r,i]=F.useState(()=>n.current.initialState);return n.current.setOptions(t=>({...t,...e,state:{...r,...e.state},onStateChange:t=>{i(t),e.onStateChange==null||e.onStateChange(t)}})),n.current}function NR({level:e}){return e===`error`?(0,I.jsx)(Y,{variant:`destructive`,children:`error`}):(0,I.jsx)(Y,{variant:`outline`,children:`info`})}function PR({statusClass:e}){return e===`2xx`?(0,I.jsx)(Y,{variant:`outline`,children:`2xx`}):e===`4xx`?(0,I.jsx)(Y,{variant:`secondary`,children:`4xx`}):e===`5xx`?(0,I.jsx)(Y,{variant:`destructive`,children:`5xx`}):(0,I.jsx)(Y,{variant:`secondary`,children:`network`})}function FR(e,t){return[{accessorKey:`ts`,header:()=>(0,I.jsxs)(q,{variant:`ghost`,size:`sm`,className:`h-7 px-1`,onClick:()=>e(t===`time_desc`?`time_asc`:`time_desc`),children:[`时间`,(0,I.jsx)(Zi,{className:`h-3.5 w-3.5`})]}),cell:({row:e})=>{let t=e.original.ts;return(0,I.jsx)(`div`,{className:`text-xs tabular-nums`,children:new Date(t).toLocaleString()})}},{accessorKey:`level`,header:`级别`,cell:({row:e})=>(0,I.jsx)(NR,{level:e.original.level})},{accessorKey:`provider`,header:`Provider`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[140px] truncate text-xs`,title:e.original.provider,children:e.original.provider})},{accessorKey:`routeType`,header:`路由`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[160px] truncate text-xs`,title:e.original.routeType,children:e.original.routeType})},{accessorKey:`modelIn`,header:`模型链路`,cell:({row:e})=>(0,I.jsxs)(`div`,{className:`max-w-[260px] truncate font-mono text-xs`,title:`${e.original.modelIn} -> ${e.original.modelOut}`,children:[e.original.modelIn,` -> `,e.original.modelOut]})},{accessorKey:`message`,header:`消息`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[400px] truncate text-xs`,title:e.original.message,children:e.original.message})},{accessorKey:`latencyMs`,header:`延迟`,cell:({row:e})=>(0,I.jsxs)(`div`,{className:`text-xs tabular-nums`,children:[e.original.latencyMs,` ms`]})},{accessorKey:`statusClass`,header:`状态`,cell:({row:e})=>(0,I.jsx)(PR,{statusClass:e.original.statusClass})},{accessorKey:`userKey`,header:`用户`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[180px] truncate font-mono text-xs`,title:e.original.userKey??`-`,children:e.original.userKey??`-`})},{accessorKey:`sessionId`,header:`会话`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[220px] truncate font-mono text-xs`,title:e.original.sessionId??`-`,children:e.original.sessionId??`-`})},{accessorKey:`requestId`,header:`Request ID`,cell:({row:e})=>(0,I.jsx)(`div`,{className:`max-w-[220px] truncate font-mono text-xs`,title:e.original.requestId,children:e.original.requestId})}]}function IR(e){let{data:t,sort:n,onSortChange:r,onRowClick:i}=e,[a,o]=(0,F.useState)({}),s=(0,F.useMemo)(()=>FR(r,n),[r,n]),c=MR({data:t,columns:s,getCoreRowModel:DR(),state:{columnVisibility:a},onColumnVisibilityChange:o});return(0,I.jsx)(`div`,{className:`rounded-md border`,children:(0,I.jsxs)(IM,{children:[(0,I.jsx)(LM,{children:c.getHeaderGroups().map(e=>(0,I.jsx)(BM,{children:e.headers.map(e=>(0,I.jsx)(VM,{children:e.isPlaceholder?null:OR(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,I.jsx)(RM,{children:c.getRowModel().rows?.length?c.getRowModel().rows.map(e=>(0,I.jsx)(LR,{row:e,onClick:i},e.id)):(0,I.jsx)(BM,{children:(0,I.jsx)(HM,{colSpan:s.length,className:`h-24 text-center text-sm text-muted-foreground`,children:`暂无日志数据`})})})]})})}function LR({row:e,onClick:t}){return(0,I.jsx)(BM,{className:`cursor-pointer`,onClick:()=>t(e.original),children:e.getVisibleCells().map(e=>(0,I.jsx)(HM,{children:OR(e.column.columnDef.cell,e.getContext())},e.id))})}function RR({className:e,type:t,...n}){return(0,I.jsx)(`input`,{type:t,"data-slot":`input`,className:K(`file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm`,`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,e),...n})}function zR({className:e,...t}){return(0,I.jsx)(Mg,{"data-slot":`label`,className:K(`flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,e),...t})}function BR({className:e,size:t=`default`,...n}){return(0,I.jsx)(uy,{"data-slot":`switch`,"data-size":t,className:K(`peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6`,e),...n,children:(0,I.jsx)(dy,{"data-slot":`switch-thumb`,className:K(`bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0`)})})}var VR={window:`24h`,from:``,to:``,levels:[],provider:``,routeType:``,modelIn:``,modelOut:``,user:``,session:``,statusClass:[],hasError:`all`,q:``},HR=null,UR=null;function WR(e,t){return{window:e.filters.window,from:e.filters.from||void 0,to:e.filters.to||void 0,levels:e.filters.levels,provider:e.filters.provider||void 0,routeType:e.filters.routeType||void 0,modelIn:e.filters.modelIn||void 0,modelOut:e.filters.modelOut||void 0,user:e.filters.user||void 0,session:e.filters.session||void 0,statusClass:e.filters.statusClass,hasError:e.filters.hasError===`all`?void 0:e.filters.hasError===`true`,q:e.filters.q||void 0,sort:e.sort,limit:50,cursor:t??void 0}}function GR(e,t){let n=new Map;for(let t of e)n.set(t.id,t);for(let e of t)n.set(e.id,e);return Array.from(n.values()).sort((e,t)=>Date.parse(t.ts)-Date.parse(e.ts))}const KR=qx((e,t)=>({filters:{...VR},sort:`time_desc`,items:[],nextCursor:null,hasMore:!1,stats:null,meta:null,loading:!1,loadingMore:!1,error:null,autoRefreshEnabled:!1,refreshIntervalSec:5,savedViews:[],tailEnabled:!1,tailConnected:!1,tailError:null,setFilter:(t,n)=>{e(e=>({filters:{...e.filters,[t]:n}}))},setSort:t=>e({sort:t}),applyFilters:async()=>{await t().fetchFirstPage()},resetFilters:async()=>{e({filters:{...VR},sort:`time_desc`}),await t().fetchFirstPage()},fetchFirstPage:async()=>{e({loading:!0,error:null});try{let n=await fS(WR(t()));e({items:n.items,nextCursor:n.nextCursor,hasMore:n.hasMore,stats:n.stats,meta:n.meta,loading:!1,loadingMore:!1})}catch(t){e({loading:!1,loadingMore:!1,error:t instanceof Error?t.message:`日志查询失败`})}},fetchNextPage:async()=>{let n=t();if(!(!n.nextCursor||n.loadingMore)){e({loadingMore:!0,error:null});try{let t=await fS(WR(n,n.nextCursor));e({items:[...n.items,...t.items],nextCursor:t.nextCursor,hasMore:t.hasMore,stats:t.stats,meta:t.meta,loadingMore:!1})}catch(t){e({loadingMore:!1,error:t instanceof Error?t.message:`加载更多日志失败`})}}},setAutoRefreshEnabled:n=>{e({autoRefreshEnabled:n}),n?t().startAutoRefresh():t().stopAutoRefresh()},setRefreshIntervalSec:n=>{e({refreshIntervalSec:Math.max(2,Math.min(60,n))}),t().autoRefreshEnabled&&t().startAutoRefresh()},startAutoRefresh:()=>{HR&&=(clearInterval(HR),null);let e=Math.max(2,t().refreshIntervalSec)*1e3;HR=setInterval(()=>{t().fetchFirstPage()},e)},stopAutoRefresh:()=>{HR&&=(clearInterval(HR),null)},setTailEnabled:n=>{e({tailEnabled:n}),n?t().startTail():t().stopTail()},startTail:()=>{UR&&=(UR(),null);let n=t();UR=hS({window:n.filters.window,levels:n.filters.levels,provider:n.filters.provider||void 0,routeType:n.filters.routeType||void 0,modelIn:n.filters.modelIn||void 0,modelOut:n.filters.modelOut||void 0,user:n.filters.user||void 0,session:n.filters.session||void 0,statusClass:n.filters.statusClass,hasError:n.filters.hasError===`all`?void 0:n.filters.hasError===`true`,q:n.filters.q||void 0,sort:n.sort},{onReady:()=>{e({tailConnected:!0,tailError:null})},onEvents:t=>{e(e=>({tailConnected:!0,tailError:null,items:GR(e.items,t.items),stats:t.stats,meta:t.meta}))},onError:t=>{e({tailConnected:!1,tailError:t})}})},stopTail:()=>{UR&&=(UR(),null),e({tailConnected:!1,tailError:null})},saveCurrentView:n=>{let r=n.trim();if(!r)return;let i=t(),a={id:crypto.randomUUID(),name:r,filters:{...i.filters},sort:i.sort};e(e=>({savedViews:[a,...e.savedViews].slice(0,20)}))},applySavedView:async n=>{let r=t().savedViews.find(e=>e.id===n);r&&(e({filters:{...r.filters},sort:r.sort}),await t().fetchFirstPage())},deleteSavedView:t=>{e(e=>({savedViews:e.savedViews.filter(e=>e.id!==t)}))}}));function qR(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),URL.revokeObjectURL(n)}function JR(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}T${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function YR(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toISOString()}function XR(){let e=Sr(),t=xr({from:`/logs`}),n=KR(e=>e.filters),r=KR(e=>e.sort),i=KR(e=>e.items),a=KR(e=>e.hasMore),o=KR(e=>e.stats),s=KR(e=>e.meta),c=KR(e=>e.loading),l=KR(e=>e.loadingMore),u=KR(e=>e.error),d=KR(e=>e.autoRefreshEnabled),f=KR(e=>e.refreshIntervalSec),p=KR(e=>e.savedViews),m=KR(e=>e.tailEnabled),h=KR(e=>e.tailConnected),g=KR(e=>e.tailError),_=KR(e=>e.setFilter),v=KR(e=>e.setSort),y=KR(e=>e.applyFilters),b=KR(e=>e.resetFilters),x=KR(e=>e.fetchNextPage),S=KR(e=>e.setAutoRefreshEnabled),C=KR(e=>e.setRefreshIntervalSec),w=KR(e=>e.saveCurrentView),T=KR(e=>e.applySavedView),E=KR(e=>e.deleteSavedView),ee=KR(e=>e.setTailEnabled),[D,O]=(0,F.useState)(``);(0,F.useEffect)(()=>{t.user&&_(`user`,t.user),t.session&&_(`session`,t.session),y()},[y,t.user,t.session,_]);let k=(0,F.useMemo)(()=>Array.from(new Set(i.map(e=>e.provider))).sort((e,t)=>e.localeCompare(t)),[i]),te=(0,F.useMemo)(()=>Array.from(new Set(i.map(e=>e.routeType))).sort((e,t)=>e.localeCompare(t)),[i]),A=(0,F.useMemo)(()=>Array.from(new Set(i.map(e=>e.modelIn).filter(Boolean))).sort((e,t)=>e.localeCompare(t)),[i]),ne=(0,F.useMemo)(()=>Array.from(new Set(i.map(e=>e.modelOut).filter(Boolean))).sort((e,t)=>e.localeCompare(t)),[i]);async function re(e){try{qR(await mS({window:n.window,from:n.from||void 0,to:n.to||void 0,levels:n.levels,provider:n.provider||void 0,routeType:n.routeType||void 0,modelIn:n.modelIn||void 0,modelOut:n.modelOut||void 0,user:n.user||void 0,session:n.session||void 0,statusClass:n.statusClass,hasError:n.hasError===`all`?void 0:n.hasError===`true`,q:n.q||void 0,sort:r},e),`logs-export.${e}`),L.success(`已导出 ${e.toUpperCase()} 文件`)}catch(e){L.error(e instanceof Error?e.message:`导出失败`)}}return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`日志检索`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`多条件过滤、详情定位、导出与实时追踪`})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`检索条件`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`支持窗口、范围、关键词与多维过滤`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{children:`时间窗口`}),(0,I.jsxs)(oM,{value:n.window,onValueChange:e=>_(`window`,e),children:[(0,I.jsx)(lM,{className:`h-8 w-full`,children:(0,I.jsx)(cM,{})}),(0,I.jsxs)(uM,{children:[(0,I.jsx)(fM,{value:`1h`,children:`最近 1 小时`}),(0,I.jsx)(fM,{value:`6h`,children:`最近 6 小时`}),(0,I.jsx)(fM,{value:`24h`,children:`最近 24 小时`})]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`from`,children:`起始时间`}),(0,I.jsx)(RR,{id:`from`,type:`datetime-local`,className:`h-8`,value:JR(n.from),onChange:e=>_(`from`,YR(e.target.value))})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`to`,children:`结束时间`}),(0,I.jsx)(RR,{id:`to`,type:`datetime-local`,className:`h-8`,value:JR(n.to),onChange:e=>_(`to`,YR(e.target.value))})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`keyword`,children:`关键词`}),(0,I.jsx)(RR,{id:`keyword`,className:`h-8`,value:n.q,onChange:e=>_(`q`,e.target.value),placeholder:`request id / path / message`})]})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-6`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{children:`级别`}),(0,I.jsxs)(oM,{value:n.levels.length===0?`all`:n.levels.join(`,`),onValueChange:e=>_(`levels`,e===`all`?[]:e.split(`,`)),children:[(0,I.jsx)(lM,{className:`h-8 w-full`,children:(0,I.jsx)(cM,{})}),(0,I.jsxs)(uM,{children:[(0,I.jsx)(fM,{value:`all`,children:`全部`}),(0,I.jsx)(fM,{value:`info`,children:`info`}),(0,I.jsx)(fM,{value:`error`,children:`error`}),(0,I.jsx)(fM,{value:`info,error`,children:`info + error`})]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{children:`Provider`}),(0,I.jsxs)(oM,{value:n.provider||`all`,onValueChange:e=>_(`provider`,e===`all`?``:e),children:[(0,I.jsx)(lM,{className:`h-8 w-full`,children:(0,I.jsx)(cM,{})}),(0,I.jsxs)(uM,{children:[(0,I.jsx)(fM,{value:`all`,children:`全部`}),k.map(e=>(0,I.jsx)(fM,{value:e,children:e},e))]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{children:`路由类型`}),(0,I.jsxs)(oM,{value:n.routeType||`all`,onValueChange:e=>_(`routeType`,e===`all`?``:e),children:[(0,I.jsx)(lM,{className:`h-8 w-full`,children:(0,I.jsx)(cM,{})}),(0,I.jsxs)(uM,{children:[(0,I.jsx)(fM,{value:`all`,children:`全部`}),te.map(e=>(0,I.jsx)(fM,{value:e,children:e},e))]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{children:`原始模型`}),(0,I.jsxs)(oM,{value:n.modelIn||`all`,onValueChange:e=>_(`modelIn`,e===`all`?``:e),children:[(0,I.jsx)(lM,{className:`h-8 w-full`,children:(0,I.jsx)(cM,{})}),(0,I.jsxs)(uM,{children:[(0,I.jsx)(fM,{value:`all`,children:`全部`}),A.map(e=>(0,I.jsx)(fM,{value:e,children:e},e))]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{children:`路由模型`}),(0,I.jsxs)(oM,{value:n.modelOut||`all`,onValueChange:e=>_(`modelOut`,e===`all`?``:e),children:[(0,I.jsx)(lM,{className:`h-8 w-full`,children:(0,I.jsx)(cM,{})}),(0,I.jsxs)(uM,{children:[(0,I.jsx)(fM,{value:`all`,children:`全部`}),ne.map(e=>(0,I.jsx)(fM,{value:e,children:e},e))]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{children:`是否错误`}),(0,I.jsxs)(oM,{value:n.hasError,onValueChange:e=>_(`hasError`,e),children:[(0,I.jsx)(lM,{className:`h-8 w-full`,children:(0,I.jsx)(cM,{})}),(0,I.jsxs)(uM,{children:[(0,I.jsx)(fM,{value:`all`,children:`全部`}),(0,I.jsx)(fM,{value:`true`,children:`仅错误`}),(0,I.jsx)(fM,{value:`false`,children:`仅成功`})]})]})]})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`user-key`,children:`用户标识`}),(0,I.jsx)(RR,{id:`user-key`,className:`h-8`,value:n.user,onChange:e=>_(`user`,e.target.value),placeholder:`userKey 或原始 user_id`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`session-id`,children:`会话 ID`}),(0,I.jsx)(RR,{id:`session-id`,className:`h-8`,value:n.session,onChange:e=>_(`session`,e.target.value),placeholder:`sessionId`})]})]}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,I.jsx)(q,{size:`sm`,onClick:()=>void y(),disabled:c,children:`查询`}),(0,I.jsx)(q,{size:`sm`,variant:`outline`,onClick:()=>void b(),disabled:c,children:`重置`}),(0,I.jsxs)(q,{size:`sm`,variant:`outline`,onClick:()=>void re(`csv`),children:[(0,I.jsx)(oa,{className:`h-3.5 w-3.5`}),`导出 CSV`]}),(0,I.jsxs)(q,{size:`sm`,variant:`outline`,onClick:()=>void re(`json`),children:[(0,I.jsx)(oa,{className:`h-3.5 w-3.5`}),`导出 JSON`]})]})]})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-5`,children:[(0,I.jsx)(ZR,{title:`总条数`,value:o?.total??0}),(0,I.jsx)(ZR,{title:`错误率`,value:`${o?.errorRate??0}%`}),(0,I.jsx)(ZR,{title:`P95`,value:`${o?.p95LatencyMs??0} ms`}),(0,I.jsx)(ZR,{title:`平均延迟`,value:`${o?.avgLatencyMs??0} ms`}),(0,I.jsx)(ZR,{title:`扫描行数`,value:s?.scannedLines??0})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`结果列表`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:s?`文件 ${s.scannedFiles} · 行 ${s.scannedLines} · 解析异常 ${s.parseErrors}${s.truncated?` · 已截断`:``}`:`等待查询`})]}),(0,I.jsx)(`div`,{className:`space-y-3 px-3 py-3`,children:u?(0,I.jsx)(SM,{className:`min-h-[160px] p-6 md:p-6`,children:(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`日志检索失败`}),(0,I.jsx)(DM,{children:u})]})}):c?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(OM,{className:`h-10 w-full`}),(0,I.jsx)(OM,{className:`h-10 w-full`}),(0,I.jsx)(OM,{className:`h-10 w-full`})]}):i.length===0?(0,I.jsx)(SM,{className:`min-h-[200px] p-6 md:p-6`,children:(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`没有匹配日志`}),(0,I.jsx)(DM,{children:`请调整筛选条件后重试`})]})}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(IR,{data:i,sort:r,onSortChange:v,onRowClick:t=>void e({to:`/logs/$id`,params:{id:t.id}})}),(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,I.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`已加载 `,i.length,` 条`]}),(0,I.jsx)(q,{size:`sm`,variant:`outline`,disabled:!a||l,onClick:()=>void x(),children:l?`加载中...`:a?`加载更多`:`已到底部`})]})]})})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`增强功能`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`预设视图、自动刷新、实时追踪(可选)`})]}),(0,I.jsxs)(`div`,{className:`space-y-4 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(BR,{checked:d,onCheckedChange:S}),(0,I.jsx)(`span`,{className:`text-sm`,children:`自动刷新`}),(0,I.jsx)(Ea,{className:`h-4 w-4 text-muted-foreground`})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(zR,{className:`text-sm`,children:`间隔`}),(0,I.jsxs)(oM,{value:String(f),onValueChange:e=>C(Number.parseInt(e,10)||5),children:[(0,I.jsx)(lM,{className:`h-8 w-[120px]`,children:(0,I.jsx)(cM,{})}),(0,I.jsxs)(uM,{children:[(0,I.jsx)(fM,{value:`3`,children:`3 秒`}),(0,I.jsx)(fM,{value:`5`,children:`5 秒`}),(0,I.jsx)(fM,{value:`10`,children:`10 秒`}),(0,I.jsx)(fM,{value:`30`,children:`30 秒`})]})]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(BR,{checked:m,onCheckedChange:ee}),(0,I.jsx)(`span`,{className:`text-sm`,children:`实时追踪`}),(0,I.jsx)(Ta,{className:`h-4 w-4 text-muted-foreground`}),m?(0,I.jsx)(Y,{variant:h?`outline`:`secondary`,children:h?`已连接`:`连接中`}):null]})]}),g?(0,I.jsx)(`div`,{className:`text-xs text-destructive`,children:g}):null,(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(RR,{className:`h-8 max-w-sm`,value:D,onChange:e=>O(e.target.value),placeholder:`输入视图名称`}),(0,I.jsxs)(q,{size:`sm`,variant:`outline`,onClick:()=>{D.trim()&&(w(D.trim()),O(``))},children:[(0,I.jsx)(ka,{className:`h-3.5 w-3.5`}),`保存当前筛选`]})]}),(0,I.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:p.length===0?(0,I.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`暂无预设视图`}):p.map(e=>(0,I.jsxs)(`div`,{className:`flex items-center gap-1 rounded-md border px-2 py-1`,children:[(0,I.jsx)(`button`,{type:`button`,className:`text-xs hover:underline`,onClick:()=>void T(e.id),children:e.name}),(0,I.jsx)(`button`,{type:`button`,className:`text-xs text-muted-foreground hover:text-destructive`,onClick:()=>E(e.id),children:`删除`})]},e.id))})]})]})]})]})}function ZR({title:e,value:t}){return(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background px-3 py-3`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium`,children:e}),(0,I.jsx)(`div`,{className:`mt-1 text-lg font-semibold`,children:t})]})}function QR(e){return e.log??{}}function $R(){let e=vS(e=>e.draft),t=vS(e=>e.updateDraft);if(!e)return null;let n=e.log,r=n?.enabled!==!1&&n!==void 0;function i(e){t(t=>(t.log=e(QR(t)),t))}return(0,I.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-6 lg:overflow-hidden`,children:[(0,I.jsxs)(`div`,{className:`shrink-0`,children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`日志配置`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`控制请求/响应日志的记录范围与存储策略`})]}),(0,I.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4`,children:[(0,I.jsx)(`div`,{className:`rounded-lg border bg-background`,children:(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`启用日志`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`开启后将记录所有代理请求的元数据`})]}),(0,I.jsx)(BR,{checked:r,onCheckedChange:e=>{e?i(e=>({...e,enabled:!0})):n&&i(e=>({...e,enabled:!1}))}})]})}),n?(0,I.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-2`,children:[(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`通用设置`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`日志目录、Body 记录范围等通用配置`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{children:`Body 记录范围`}),(0,I.jsxs)(oM,{value:n.bodyPolicy===`masked`?`full`:n.bodyPolicy??`off`,onValueChange:e=>i(t=>({...t,bodyPolicy:e})),children:[(0,I.jsx)(lM,{className:`h-8`,children:(0,I.jsx)(cM,{})}),(0,I.jsxs)(uM,{children:[(0,I.jsx)(fM,{value:`off`,children:`off — 不记录 body(推荐)`}),(0,I.jsx)(fM,{value:`full`,children:`full — 记录完整 body(仅调试)`})]})]}),(n.bodyPolicy===`full`||n.bodyPolicy===`masked`)&&(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`当前会保存完整 body,可能包含敏感信息,建议仅在排障时临时开启。`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`log-basedir`,children:`日志目录`}),(0,I.jsx)(RR,{id:`log-basedir`,value:n.baseDir??``,onChange:e=>i(t=>({...t,baseDir:e.target.value||void 0})),placeholder:`默认: ~/.local-router/logs/`,className:`h-8`}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`留空则使用默认路径`})]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`事件日志`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`按天分片的 JSONL 格式结构化日志`})]}),(0,I.jsx)(`div`,{className:`px-3 py-3`,children:(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`events-retain`,children:`保留天数`}),(0,I.jsx)(RR,{id:`events-retain`,type:`number`,min:1,value:n.events?.retainDays??14,onChange:e=>i(t=>({...t,events:{...t.events,retainDays:Number.parseInt(e.target.value)||14}})),className:`h-8`})]})})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsx)(`div`,{className:`border-b px-3 py-3`,children:(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`流式日志`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`SSE 原始响应文本`})]}),(0,I.jsx)(BR,{checked:n.streams?.enabled!==!1,onCheckedChange:e=>i(t=>({...t,streams:{...t.streams,enabled:e}}))})]})}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`streams-retain`,children:`保留天数`}),(0,I.jsx)(RR,{id:`streams-retain`,type:`number`,min:1,value:n.streams?.retainDays??7,onChange:e=>i(t=>({...t,streams:{...t.streams,retainDays:Number.parseInt(e.target.value)||7}})),className:`h-8`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`streams-maxbytes`,children:`单请求最大字节数`}),(0,I.jsx)(RR,{id:`streams-maxbytes`,type:`number`,min:1,value:n.streams?.maxBytesPerRequest??10485760,onChange:e=>i(t=>({...t,streams:{...t.streams,maxBytesPerRequest:Number.parseInt(e.target.value)||10485760}})),className:`h-8`}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`默认 10MB (10485760),超出部分将被截断`})]})]})]})]})]}):(0,I.jsx)(`div`,{className:`rounded-lg border bg-background py-12 text-center text-sm text-muted-foreground`,children:`当前未启用日志配置,请先打开上方开关`})]})]})}function ez({className:e,orientation:t=`horizontal`,decorative:n=!0,...r}){return(0,I.jsx)(Qv,{"data-slot":`separator`,decorative:n,orientation:t,className:K(`bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px`,e),...r})}function tz({className:e,...t}){return(0,I.jsx)(`textarea`,{"data-slot":`textarea`,className:K(`border-input placeholder:text-muted-foreground 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:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm`,e),...t})}function nz({models:e,onChange:t}){let n=Object.entries(e),r=(0,F.useRef)(new Map),i=(0,F.useRef)(0),a=new Set(n.map(([e])=>e));for(let e of r.current.keys())a.has(e)||r.current.delete(e);function o(e){let t=r.current.get(e);if(t)return t;i.current+=1;let n=`model-row-${i.current}`;return r.current.set(e,n),n}function s(){let n=`model-${Date.now()}`;t({...e,[n]:{}})}function c(n){let r={...e};delete r[n],t(r)}function l(n,i){if(i===n)return;let a=r.current.get(n);a&&(r.current.delete(n),r.current.set(i,a));let o={};for(let[t,r]of Object.entries(e))o[t===n?i:t]=r;t(o)}function u(n,r,i){t({...e,[n]:{...e[n],[r]:i}})}return(0,I.jsxs)(`div`,{className:`space-y-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,I.jsx)(zR,{className:`text-sm font-medium`,children:`模型列表`}),(0,I.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:s,children:[(0,I.jsx)(wa,{className:`h-3.5 w-3.5 mr-1`}),`添加模型`]})]}),n.length===0?(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground py-4 text-center`,children:`暂无模型,点击上方按钮添加`}):(0,I.jsx)(`div`,{className:`rounded-md border`,children:(0,I.jsxs)(IM,{children:[(0,I.jsx)(LM,{children:(0,I.jsxs)(BM,{children:[(0,I.jsx)(VM,{children:`模型ID`}),(0,I.jsx)(VM,{className:`w-24 text-center`,children:`图像输入`}),(0,I.jsx)(VM,{className:`w-24 text-center`,children:`推理输出`}),(0,I.jsx)(VM,{className:`w-16`})]})}),(0,I.jsx)(RM,{children:n.map(([e,t])=>(0,I.jsxs)(BM,{children:[(0,I.jsx)(HM,{children:(0,I.jsx)(RR,{value:e,onChange:t=>l(e,t.target.value),className:`h-8 text-sm`})}),(0,I.jsx)(HM,{className:`text-center`,children:(0,I.jsx)(BR,{checked:t[`image-input`]??!1,onCheckedChange:t=>u(e,`image-input`,t)})}),(0,I.jsx)(HM,{className:`text-center`,children:(0,I.jsx)(BR,{checked:t.reasoning??!1,onCheckedChange:t=>u(e,`reasoning`,t)})}),(0,I.jsx)(HM,{children:(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 text-destructive hover:text-destructive`,onClick:()=>c(e),children:(0,I.jsx)(La,{className:`h-3.5 w-3.5`})})})]},o(e)))})]})})]})}var rz=[{value:`openai-completions`,label:`OpenAI Completions`},{value:`openai-responses`,label:`OpenAI Responses`},{value:`anthropic-messages`,label:`Anthropic Messages`}],iz={"openai-completions":`/v1/chat/completions`,"openai-responses":`/v1/responses`,"anthropic-messages":`/v1/messages`};function az({name:e,config:t,isNew:n,onChange:r}){let[i,a]=(0,F.useState)(!1),o=`${t.base.replace(/\/+$/,``)}${iz[t.type]}`;return(0,I.jsxs)(`div`,{className:`space-y-5`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`provider-name`,children:`Provider 名称`}),(0,I.jsx)(RR,{id:`provider-name`,value:e,disabled:!n,readOnly:!n,className:`font-mono`}),!n&&(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`名称在创建后不可修改`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{children:`协议类型`}),(0,I.jsxs)(oM,{value:t.type,onValueChange:e=>r({...t,type:e}),children:[(0,I.jsx)(lM,{children:(0,I.jsx)(cM,{})}),(0,I.jsx)(uM,{children:rz.map(e=>(0,I.jsx)(fM,{value:e.value,children:e.label},e.value))})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`provider-base`,children:`Base URL`}),(0,I.jsx)(RR,{id:`provider-base`,value:t.base,onChange:e=>r({...t,base:e.target.value}),placeholder:`https://api.example.com`}),t.base&&(0,I.jsxs)(`p`,{className:`text-xs text-muted-foreground break-all`,children:[`预览 URL: `,(0,I.jsx)(`span`,{className:`font-mono`,children:o})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`provider-proxy`,children:`Proxy URL(可选)`}),(0,I.jsx)(RR,{id:`provider-proxy`,value:t.proxy??``,onChange:e=>r({...t,proxy:e.target.value}),placeholder:`http://127.0.0.1:7890`}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`留空表示直连上游;仅此 provider 生效,不读取环境变量代理。`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`provider-apikey`,children:`API Key`}),(0,I.jsxs)(`div`,{className:`relative`,children:[(0,I.jsx)(RR,{id:`provider-apikey`,type:i?`text`:`password`,value:t.apiKey,onChange:e=>r({...t,apiKey:e.target.value}),className:`pr-10 font-mono`,placeholder:`sk-...`}),(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`absolute right-0 top-0 h-full px-3 hover:bg-transparent`,onClick:()=>a(!i),children:i?(0,I.jsx)(ca,{className:`h-4 w-4`}):(0,I.jsx)(la,{className:`h-4 w-4`})})]})]}),(0,I.jsx)(ez,{}),(0,I.jsx)(nz,{models:t.models,onChange:e=>r({...t,models:e})}),(0,I.jsx)(ez,{}),(0,I.jsx)(cz,{plugins:t.plugins??[],onChange:e=>r({...t,plugins:e.length>0?e:void 0})})]})}var oz=0;function sz(){return`plugin-${Date.now()}-${++oz}`}function cz({plugins:e,onChange:t}){let[n,r]=(0,F.useState)(()=>e.map(e=>({id:sz(),config:e}))),i=(0,F.useRef)(e);(0,F.useEffect)(()=>{i.current!==e&&(i.current=e,(e.length!==n.length||e.some((e,t)=>e.package!==n[t]?.config.package||JSON.stringify(e.params)!==JSON.stringify(n[t]?.config.params)))&&r(e.map(e=>({id:sz(),config:e}))))},[e,n.length]);function a(e){r(e),t(e.map(e=>e.config))}function o(){a([...n,{id:sz(),config:{package:``}}])}function s(e){a(n.filter((t,n)=>n!==e))}function c(e,t){let r=[...n];r[e]={...r[e],config:t},a(r)}function l(e){if(e<=0)return;let t=[...n];[t[e-1],t[e]]=[t[e],t[e-1]],a(t)}function u(e){if(e>=n.length-1)return;let t=[...n];[t[e],t[e+1]]=[t[e+1],t[e]],a(t)}return(0,I.jsxs)(`div`,{className:`space-y-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(zR,{children:`插件列表`}),(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`数组顺序决定洋葱模型层级:请求正序、响应逆序执行`})]}),(0,I.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,onClick:o,children:[(0,I.jsx)(wa,{className:`h-3.5 w-3.5 mr-1`}),`添加插件`]})]}),n.length===0&&(0,I.jsx)(`p`,{className:`text-xs text-muted-foreground py-2`,children:`暂无插件配置`}),n.map((e,t)=>(0,I.jsx)(lz,{plugin:e.config,index:t,total:n.length,onUpdate:e=>c(t,e),onRemove:()=>s(t),onMoveUp:()=>l(t),onMoveDown:()=>u(t)},e.id))]})}function lz({plugin:e,index:t,total:n,onUpdate:r,onRemove:i,onMoveUp:a,onMoveDown:o}){let[s,c]=(0,F.useState)(e.params?JSON.stringify(e.params,null,2):``),[l,u]=(0,F.useState)(null),d=(0,F.useRef)(e.params);(0,F.useEffect)(()=>{d.current!==e.params&&(d.current=e.params,c(e.params?JSON.stringify(e.params,null,2):``),u(null))},[e.params]);function f(t){if(c(t),!t.trim()){u(null),r({...e,params:void 0});return}try{let n=JSON.parse(t);if(typeof n!=`object`||!n||Array.isArray(n)){u(`params 必须是 JSON 对象`);return}u(null),r({...e,params:n})}catch{u(`JSON 格式不正确`)}}return(0,I.jsxs)(`div`,{className:`rounded-lg border p-3 space-y-2`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(ha,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,I.jsxs)(`span`,{className:`text-xs text-muted-foreground shrink-0`,children:[`#`,t+1]}),(0,I.jsx)(RR,{value:e.package,onChange:t=>r({...e,package:t.target.value}),placeholder:`npm-package-name 或 ./local/path.ts`,className:`font-mono text-xs h-8`}),(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 shrink-0`,onClick:a,disabled:t<=0,children:(0,I.jsx)(na,{className:`h-3.5 w-3.5`})}),(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 shrink-0`,onClick:o,disabled:t>=n-1,children:(0,I.jsx)(ea,{className:`h-3.5 w-3.5`})}),(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 shrink-0 text-destructive hover:text-destructive`,onClick:i,children:(0,I.jsx)(La,{className:`h-3.5 w-3.5`})})]}),(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsx)(zR,{className:`text-xs`,children:`params (JSON)`}),(0,I.jsx)(tz,{value:s,onChange:e=>f(e.target.value),placeholder:`{ "key": "value" }`,className:`font-mono text-xs min-h-[60px]`,rows:3}),l&&(0,I.jsx)(`p`,{className:`text-xs text-destructive`,children:l})]})]})}function uz({...e}){return(0,I.jsx)(nu,{"data-slot":`alert-dialog`,...e})}function dz({...e}){return(0,I.jsx)(ru,{"data-slot":`alert-dialog-trigger`,...e})}function fz({...e}){return(0,I.jsx)(iu,{"data-slot":`alert-dialog-portal`,...e})}function pz({className:e,...t}){return(0,I.jsx)(au,{"data-slot":`alert-dialog-overlay`,className:K(`data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50`,e),...t})}function mz({className:e,size:t=`default`,...n}){return(0,I.jsxs)(fz,{children:[(0,I.jsx)(pz,{}),(0,I.jsx)(ou,{"data-slot":`alert-dialog-content`,"data-size":t,className:K(`bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg`,e),...n})]})}function hz({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`alert-dialog-header`,className:K(`grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,e),...t})}function gz({className:e,...t}){return(0,I.jsx)(`div`,{"data-slot":`alert-dialog-footer`,className:K(`flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,e),...t})}function _z({className:e,...t}){return(0,I.jsx)(lu,{"data-slot":`alert-dialog-title`,className:K(`text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,e),...t})}function vz({className:e,...t}){return(0,I.jsx)(uu,{"data-slot":`alert-dialog-description`,className:K(`text-muted-foreground text-sm`,e),...t})}function yz({className:e,variant:t=`default`,size:n=`default`,...r}){return(0,I.jsx)(q,{variant:t,size:n,asChild:!0,children:(0,I.jsx)(su,{"data-slot":`alert-dialog-action`,className:K(e),...r})})}function bz({className:e,variant:t=`outline`,size:n=`default`,...r}){return(0,I.jsx)(q,{variant:t,size:n,asChild:!0,children:(0,I.jsx)(cu,{"data-slot":`alert-dialog-cancel`,className:K(e),...r})})}function xz({...e}){return(0,I.jsx)(Rh,{"data-slot":`context-menu`,...e})}function Sz({...e}){return(0,I.jsx)(zh,{"data-slot":`context-menu-trigger`,...e})}function Cz({className:e,...t}){return(0,I.jsx)(Bh,{children:(0,I.jsx)(Vh,{"data-slot":`context-menu-content`,className:K(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md`,e),...t})})}function wz({className:e,inset:t,variant:n=`default`,...r}){return(0,I.jsx)(Hh,{"data-slot":`context-menu-item`,"data-inset":t,"data-variant":n,className:K(`focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r})}function Tz({className:e,...t}){return(0,I.jsx)(Uh,{"data-slot":`context-menu-separator`,className:K(`bg-border -mx-1 my-1 h-px`,e),...t})}function Ez(e,t){let n=getComputedStyle(e);return t*parseFloat(n.fontSize)}function Dz(e,t){let n=getComputedStyle(e.ownerDocument.body);return t*parseFloat(n.fontSize)}function Oz(e){return e/100*window.innerHeight}function kz(e){return e/100*window.innerWidth}function Az(e){switch(typeof e){case`number`:return[e,`px`];case`string`:{let t=parseFloat(e);return e.endsWith(`%`)?[t,`%`]:e.endsWith(`px`)?[t,`px`]:e.endsWith(`rem`)?[t,`rem`]:e.endsWith(`em`)?[t,`em`]:e.endsWith(`vh`)?[t,`vh`]:e.endsWith(`vw`)?[t,`vw`]:[t,`%`]}}}function jz({groupSize:e,panelElement:t,styleProp:n}){let r,[i,a]=Az(n);switch(a){case`%`:r=i/100*e;break;case`px`:r=i;break;case`rem`:r=Dz(t,i);break;case`em`:r=Ez(t,i);break;case`vh`:r=Oz(i);break;case`vw`:r=kz(i);break}return r}function Mz(e){return parseFloat(e.toFixed(3))}function Nz({group:e}){let{orientation:t,panels:n}=e;return n.reduce((e,n)=>(e+=t===`horizontal`?n.element.offsetWidth:n.element.offsetHeight,e),0)}function Pz(e){let{panels:t}=e,n=Nz({group:e});return n===0?t.map(e=>({groupResizeBehavior:e.panelConstraints.groupResizeBehavior,collapsedSize:0,collapsible:e.panelConstraints.collapsible===!0,defaultSize:void 0,disabled:e.panelConstraints.disabled,minSize:0,maxSize:100,panelId:e.id})):t.map(e=>{let{element:t,panelConstraints:r}=e,i=0;r.collapsedSize!==void 0&&(i=Mz(jz({groupSize:n,panelElement:t,styleProp:r.collapsedSize})/n*100));let a;r.defaultSize!==void 0&&(a=Mz(jz({groupSize:n,panelElement:t,styleProp:r.defaultSize})/n*100));let o=0;r.minSize!==void 0&&(o=Mz(jz({groupSize:n,panelElement:t,styleProp:r.minSize})/n*100));let s=100;return r.maxSize!==void 0&&(s=Mz(jz({groupSize:n,panelElement:t,styleProp:r.maxSize})/n*100)),{groupResizeBehavior:r.groupResizeBehavior,collapsedSize:i,collapsible:r.collapsible===!0,defaultSize:a,disabled:r.disabled,minSize:o,maxSize:s,panelId:e.id}})}function Fz(e,t=`Assertion error`){if(!e)throw Error(t)}function Iz(e,t){return Array.from(t).sort(e===`horizontal`?Lz:Rz)}function Lz(e,t){let n=e.element.offsetLeft-t.element.offsetLeft;return n===0?e.element.offsetWidth-t.element.offsetWidth:n}function Rz(e,t){let n=e.element.offsetTop-t.element.offsetTop;return n===0?e.element.offsetHeight-t.element.offsetHeight:n}function zz(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.ELEMENT_NODE}function Bz(e,t){return{x:e.x>=t.left&&e.x<=t.right?0:Math.min(Math.abs(e.x-t.left),Math.abs(e.x-t.right)),y:e.y>=t.top&&e.y<=t.bottom?0:Math.min(Math.abs(e.y-t.top),Math.abs(e.y-t.bottom))}}function Vz({orientation:e,rects:t,targetRect:n}){let r={x:n.x+n.width/2,y:n.y+n.height/2},i,a=Number.MAX_VALUE;for(let n of t){let{x:t,y:o}=Bz(r,n),s=e===`horizontal`?t:o;s<a&&(a=s,i=n)}return Fz(i,`No rect found`),i}var Hz;function Uz(){return Hz===void 0&&(Hz=typeof matchMedia==`function`?!!matchMedia(`(pointer:coarse)`).matches:!1),Hz}function Wz(e){let{element:t,orientation:n,panels:r,separators:i}=e,a=Iz(n,Array.from(t.children).filter(zz).map(e=>({element:e}))).map(({element:e})=>e),o=[],s=!1,c=!1,l=-1,u=-1,d=0,f,p=[];{let e=-1;for(let t of a)t.hasAttribute(`data-panel`)&&(e++,t.ariaDisabled===null&&(d++,l===-1&&(l=e),u=e))}if(d>1){let t=-1;for(let d of a)if(d.hasAttribute(`data-panel`)){t++;let i=r.find(e=>e.element===d);if(i){if(f){let r=f.element.getBoundingClientRect(),a=d.getBoundingClientRect(),m;if(c){let e=n===`horizontal`?new DOMRect(r.right,r.top,0,r.height):new DOMRect(r.left,r.bottom,r.width,0),t=n===`horizontal`?new DOMRect(a.left,a.top,0,a.height):new DOMRect(a.left,a.top,a.width,0);switch(p.length){case 0:m=[e,t];break;case 1:{let i=p[0];m=[i,Vz({orientation:n,rects:[r,a],targetRect:i.element.getBoundingClientRect()})===r?t:e];break}default:m=p;break}}else m=p.length?p:[n===`horizontal`?new DOMRect(r.right,a.top,a.left-r.right,a.height):new DOMRect(a.left,r.bottom,a.width,a.top-r.bottom)];for(let n of m){let r=`width`in n?n:n.element.getBoundingClientRect(),a=Uz()?e.resizeTargetMinimumSize.coarse:e.resizeTargetMinimumSize.fine;if(r.width<a){let e=a-r.width;r=new DOMRect(r.x-e/2,r.y,r.width+e,r.height)}if(r.height<a){let e=a-r.height;r=new DOMRect(r.x,r.y-e/2,r.width,r.height+e)}!s&&!(t<=l||t>u)&&o.push({group:e,groupSize:Nz({group:e}),panels:[f,i],separator:`width`in n?void 0:n,rect:r}),s=!1}}c=!1,f=i,p=[]}}else if(d.hasAttribute(`data-separator`)){d.ariaDisabled!==null&&(s=!0);let e=i.find(e=>e.element===d);e?p.push(e):(f=void 0,p=[])}else c=!0}return o}var Gz=class{#e={};addListener(e,t){let n=this.#e[e];return n===void 0?this.#e[e]=[t]:n.includes(t)||n.push(t),()=>{this.removeListener(e,t)}}emit(e,t){let n=this.#e[e];if(n!==void 0)if(n.length===1)n[0].call(null,t);else{let e=!1,r=null,i=Array.from(n);for(let n=0;n<i.length;n++){let a=i[n];try{a.call(null,t)}catch(t){r===null&&(e=!0,r=t)}}if(e)throw r}}removeAllListeners(){this.#e={}}removeListener(e,t){let n=this.#e[e];if(n!==void 0){let e=n.indexOf(t);e>=0&&n.splice(e,1)}}},Kz=new Map,qz=new Gz;function Jz(e){Kz=new Map(Kz),Kz.delete(e)}function Yz(e,t){for(let[t]of Kz)if(t.id===e)return t}function Xz(e,t){for(let[t,n]of Kz)if(t.id===e)return n;if(t)throw Error(`Could not find data for Group with id ${e}`)}function Zz(){return Kz}function Qz(e,t){return qz.addListener(`groupChange`,n=>{n.group.id===e&&t(n)})}function $z(e,t){let n=Kz.get(e);Kz=new Map(Kz),Kz.set(e,t),qz.emit(`groupChange`,{group:e,prev:n,next:t})}function eB(e,t,n){let r,i={x:1/0,y:1/0};for(let a of t){let t=Bz(n,a.rect);switch(e){case`horizontal`:t.x<=i.x&&(r=a,i=t);break;case`vertical`:t.y<=i.y&&(r=a,i=t);break}}return r?{distance:i,hitRegion:r}:void 0}function tB(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function nB(e,t){if(e===t)throw Error(`Cannot compare node with itself`);let n={a:cB(e),b:cB(t)},r;for(;n.a.at(-1)===n.b.at(-1);)r=n.a.pop(),n.b.pop();Fz(r,`Stacking order can only be calculated for elements with a common ancestor`);let i={a:sB(oB(n.a)),b:sB(oB(n.b))};if(i.a===i.b){let e=r.childNodes,t={a:n.a.at(-1),b:n.b.at(-1)},i=e.length;for(;i--;){let n=e[i];if(n===t.a)return 1;if(n===t.b)return-1}}return Math.sign(i.a-i.b)}var rB=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function iB(e){let t=getComputedStyle(lB(e)??e).display;return t===`flex`||t===`inline-flex`}function aB(e){let t=getComputedStyle(e);return!!(t.position===`fixed`||t.zIndex!==`auto`&&(t.position!==`static`||iB(e))||+t.opacity<1||`transform`in t&&t.transform!==`none`||`webkitTransform`in t&&t.webkitTransform!==`none`||`mixBlendMode`in t&&t.mixBlendMode!==`normal`||`filter`in t&&t.filter!==`none`||`webkitFilter`in t&&t.webkitFilter!==`none`||`isolation`in t&&t.isolation===`isolate`||rB.test(t.willChange)||t.webkitOverflowScrolling===`touch`)}function oB(e){let t=e.length;for(;t--;){let n=e[t];if(Fz(n,`Missing node`),aB(n))return n}return null}function sB(e){return e&&Number(getComputedStyle(e).zIndex)||0}function cB(e){let t=[];for(;e;)t.push(e),e=lB(e);return t}function lB(e){let{parentNode:t}=e;return tB(t)?t.host:t}function uB(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function dB({groupElement:e,hitRegion:t,pointerEventTarget:n}){if(!zz(n)||n.contains(e)||e.contains(n))return!0;if(nB(n,e)>0){let r=n;for(;r;){if(r.contains(e))return!0;if(uB(r.getBoundingClientRect(),t))return!1;r=r.parentElement}}return!0}function fB(e,t){let n=[];return t.forEach((t,r)=>{if(r.disabled)return;let i=Wz(r),a=eB(r.orientation,i,{x:e.clientX,y:e.clientY});a&&a.distance.x<=0&&a.distance.y<=0&&dB({groupElement:r.element,hitRegion:a.hitRegion.rect,pointerEventTarget:e.target})&&n.push(a.hitRegion)}),n}function pB(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0}function mB(e,t,n=0){return Math.abs(Mz(e)-Mz(t))<=n}function hB(e,t){return mB(e,t)?0:e>t?1:-1}function gB({overrideDisabledPanels:e,panelConstraints:t,prevSize:n,size:r}){let{collapsedSize:i=0,collapsible:a,disabled:o,maxSize:s=100,minSize:c=0}=t;if(o&&!e)return n;if(hB(r,c)<0)if(a){let e=(i+c)/2;r=hB(r,e)<0?i:c}else r=c;return r=Math.min(s,r),r=Mz(r),r}function _B({delta:e,initialLayout:t,panelConstraints:n,pivotIndices:r,prevLayout:i,trigger:a}){if(mB(e,0))return t;let o=a===`imperative-api`,s=Object.values(t),c=Object.values(i),l=[...s],[u,d]=r;Fz(u!=null,`Invalid first pivot index`),Fz(d!=null,`Invalid second pivot index`);let f=0;switch(a){case`keyboard`:{let t=e<0?d:u,r=n[t];Fz(r,`Panel constraints not found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:o=0}=r;if(a){let n=s[t];if(Fz(n!=null,`Previous layout not found for panel index ${t}`),mB(n,i)){let t=o-n;hB(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}{let t=e<0?u:d,r=n[t];Fz(r,`No panel constraints found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:o=0}=r;if(a){let n=s[t];if(Fz(n!=null,`Previous layout not found for panel index ${t}`),mB(n,o)){let t=n-i;hB(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}break;default:{let t=e<0?d:u,r=n[t];Fz(r,`Panel constraints not found for index ${t}`);let i=s[t],{collapsible:a,collapsedSize:o,minSize:c}=r;if(a&&hB(i,c)<0)if(e>0){let t=c-o,n=t/2;hB(i+e,c)<0&&(e=hB(e,n)<=0?0:t)}else{let t=c-o,n=100-t/2;hB(i-e,c)<0&&(e=hB(100+e,n)>0?0:-t)}break}}{let t=e<0?1:-1,r=e<0?d:u,i=0;for(;;){let e=s[r];Fz(e!=null,`Previous layout not found for panel index ${r}`);let a=gB({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:e,size:100})-e;if(i+=a,r+=t,r<0||r>=n.length)break}let a=Math.min(Math.abs(e),Math.abs(i));e=e<0?0-a:a}{let t=e<0?u:d;for(;t>=0&&t<n.length;){let r=Math.abs(e)-Math.abs(f),i=s[t];Fz(i!=null,`Previous layout not found for panel index ${t}`);let a=i-r,c=gB({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:i,size:a});if(!mB(i,c)&&(f+=i-c,l[t]=c,f.toFixed(3).localeCompare(Math.abs(e).toFixed(3),void 0,{numeric:!0})>=0))break;e<0?t--:t++}}if(pB(c,l))return i;{let t=e<0?d:u,r=s[t];Fz(r!=null,`Previous layout not found for panel index ${t}`);let i=r+f,a=gB({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:r,size:i});if(l[t]=a,!mB(a,i)){let t=i-a,r=e<0?d:u;for(;r>=0&&r<n.length;){let i=l[r];Fz(i!=null,`Previous layout not found for panel index ${r}`);let a=i+t,s=gB({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:i,size:a});if(mB(i,s)||(t-=s-i,l[r]=s),mB(t,0))break;e>0?r--:r++}}}if(!mB(Object.values(l).reduce((e,t)=>t+e,0),100,.1))return i;let p=Object.keys(i);return l.reduce((e,t,n)=>(e[p[n]]=t,e),{})}function vB(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(t[n]===void 0||hB(e[n],t[n])!==0)return!1;return!0}function yB({layout:e,panelConstraints:t}){let n=Object.values(e),r=[...n],i=r.reduce((e,t)=>e+t,0);if(r.length!==t.length)throw Error(`Invalid ${t.length} panel layout: ${r.map(e=>`${e}%`).join(`, `)}`);if(!mB(i,100)&&r.length>0)for(let e=0;e<t.length;e++){let t=r[e];Fz(t!=null,`No layout data found for index ${e}`),r[e]=100/i*t}let a=0;for(let e=0;e<t.length;e++){let i=n[e];Fz(i!=null,`No layout data found for index ${e}`);let o=r[e];Fz(o!=null,`No layout data found for index ${e}`);let s=gB({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:i,size:o});o!=s&&(a+=o-s,r[e]=s)}if(!mB(a,0))for(let e=0;e<t.length;e++){let n=r[e];Fz(n!=null,`No layout data found for index ${e}`);let i=n+a,o=gB({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:n,size:i});if(n!==o&&(a-=o-n,r[e]=o,mB(a,0)))break}let o=Object.keys(e);return r.reduce((e,t,n)=>(e[o[n]]=t,e),{})}function bB({groupId:e,panelId:t}){let n=()=>{let t=Zz();for(let[n,{defaultLayoutDeferred:r,derivedPanelConstraints:i,layout:a,groupSize:o,separatorToPanels:s}]of t)if(n.id===e)return{defaultLayoutDeferred:r,derivedPanelConstraints:i,group:n,groupSize:o,layout:a,separatorToPanels:s};throw Error(`Group ${e} not found`)},r=()=>{let e=n().derivedPanelConstraints.find(e=>e.panelId===t);if(e!==void 0)return e;throw Error(`Panel constraints not found for Panel ${t}`)},i=()=>{let e=n().group.panels.find(e=>e.id===t);if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},a=()=>{let e=n().layout[t];if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},o=e=>{let r=a();if(e===r)return;let{defaultLayoutDeferred:i,derivedPanelConstraints:o,group:s,groupSize:c,layout:l,separatorToPanels:u}=n(),d=s.panels.findIndex(e=>e.id===t),f=d===s.panels.length-1,p=yB({layout:_B({delta:f?r-e:e-r,initialLayout:l,panelConstraints:o,pivotIndices:f?[d-1,d]:[d,d+1],prevLayout:l,trigger:`imperative-api`}),panelConstraints:o});vB(l,p)||$z(s,{defaultLayoutDeferred:i,derivedPanelConstraints:o,groupSize:c,layout:p,separatorToPanels:u})};return{collapse:()=>{let{collapsible:e,collapsedSize:t}=r(),{mutableValues:n}=i(),s=a();e&&s!==t&&(n.expandToSize=s,o(t))},expand:()=>{let{collapsible:e,collapsedSize:t,minSize:n}=r(),{mutableValues:s}=i(),c=a();if(e&&c===t){let e=s.expandToSize??n;e===0&&(e=1),o(e)}},getSize:()=>{let{group:e}=n(),t=a(),{element:r}=i();return{asPercentage:t,inPixels:e.orientation===`horizontal`?r.offsetWidth:r.offsetHeight}},isCollapsed:()=>{let{collapsible:e,collapsedSize:t}=r(),n=a();return e&&mB(t,n)},resize:e=>{if(a()!==e){let t;switch(typeof e){case`number`:{let{group:r}=n();t=Mz(e/Nz({group:r})*100);break}case`string`:t=parseFloat(e);break}o(t)}}}}function xB(e){e.defaultPrevented||fB(e,Zz()).forEach(t=>{if(t.separator){let n=t.panels.find(e=>e.panelConstraints.defaultSize!==void 0);if(n){let r=n.panelConstraints.defaultSize,i=bB({groupId:t.group.id,panelId:n.id});i&&r!==void 0&&(i.resize(r),e.preventDefault())}}})}function SB(e){let t=Zz();for(let[n]of t)if(n.separators.some(t=>t.element===e))return n;throw Error(`Could not find parent Group for separator element`)}function CB({groupId:e}){let t=()=>{let t=Zz();for(let[n,r]of t)if(n.id===e)return{group:n,...r};throw Error(`Could not find Group with id "${e}"`)};return{getLayout(){let{defaultLayoutDeferred:e,layout:n}=t();return e?{}:n},setLayout(e){let{defaultLayoutDeferred:n,derivedPanelConstraints:r,group:i,groupSize:a,layout:o,separatorToPanels:s}=t(),c=yB({layout:e,panelConstraints:r});return n?o:(vB(o,c)||$z(i,{defaultLayoutDeferred:n,derivedPanelConstraints:r,groupSize:a,layout:c,separatorToPanels:s}),c)}}}function wB(e,t){let n=SB(e),r=Xz(n.id,!0),i=n.separators.find(t=>t.element===e);Fz(i,`Matching separator not found`);let a=r.separatorToPanels.get(i);Fz(a,`Matching panels not found`);let o=a.map(e=>n.panels.indexOf(e)),s=CB({groupId:n.id}).getLayout(),c=yB({layout:_B({delta:t,initialLayout:s,panelConstraints:r.derivedPanelConstraints,pivotIndices:o,prevLayout:s,trigger:`keyboard`}),panelConstraints:r.derivedPanelConstraints});vB(s,c)||$z(n,{defaultLayoutDeferred:r.defaultLayoutDeferred,derivedPanelConstraints:r.derivedPanelConstraints,groupSize:r.groupSize,layout:c,separatorToPanels:r.separatorToPanels})}function TB(e){if(e.defaultPrevented)return;let t=e.currentTarget,n=SB(t);if(!n.disabled)switch(e.key){case`ArrowDown`:e.preventDefault(),n.orientation===`vertical`&&wB(t,5);break;case`ArrowLeft`:e.preventDefault(),n.orientation===`horizontal`&&wB(t,-5);break;case`ArrowRight`:e.preventDefault(),n.orientation===`horizontal`&&wB(t,5);break;case`ArrowUp`:e.preventDefault(),n.orientation===`vertical`&&wB(t,-5);break;case`End`:e.preventDefault(),wB(t,100);break;case`Enter`:{e.preventDefault();let n=SB(t),{derivedPanelConstraints:r,layout:i,separatorToPanels:a}=Xz(n.id,!0),o=n.separators.find(e=>e.element===t);Fz(o,`Matching separator not found`);let s=a.get(o);Fz(s,`Matching panels not found`);let c=s[0],l=r.find(e=>e.panelId===c.id);if(Fz(l,`Panel metadata not found`),l.collapsible){let e=i[c.id];wB(t,(l.collapsedSize===e?n.mutableState.expandedPanelSizes[c.id]??l.minSize:l.collapsedSize)-e)}break}case`F6`:{e.preventDefault();let n=SB(t).separators.map(e=>e.element),r=Array.from(n).findIndex(t=>t===e.currentTarget);Fz(r!==null,`Index not found`),n[e.shiftKey?r>0?r-1:n.length-1:r+1<n.length?r+1:0].focus();break}case`Home`:e.preventDefault(),wB(t,-100);break}}var EB={cursorFlags:0,state:`inactive`},DB=new Gz;function OB(){return EB}function kB(e){return DB.addListener(`change`,e)}function AB(e){let t=EB,n={...EB};n.cursorFlags=e,EB=n,DB.emit(`change`,{prev:t,next:n})}function jB(e){let t=EB;EB=e,DB.emit(`change`,{prev:t,next:e})}function MB(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=Zz(),n=fB(e,t),r=new Map,i=!1;n.forEach(e=>{e.separator&&(i||(i=!0,e.separator.element.focus()));let n=t.get(e.group);n&&r.set(e.group,n.layout)}),jB({cursorFlags:0,hitRegions:n,initialLayoutMap:r,pointerDownAtPoint:{x:e.clientX,y:e.clientY},state:`active`}),n.length&&e.preventDefault()}var NB=e=>e,PB=()=>{},FB=1,IB=2,LB=4,RB=8,zB=3,BB=12,VB;function HB(){return VB===void 0&&(VB=!1,typeof window<`u`&&(window.navigator.userAgent.includes(`Chrome`)||window.navigator.userAgent.includes(`Firefox`))&&(VB=!0)),VB}function UB({cursorFlags:e,groups:t,state:n}){let r=0,i=0;switch(n){case`active`:case`hover`:t.forEach(e=>{if(!e.mutableState.disableCursor)switch(e.orientation){case`horizontal`:r++;break;case`vertical`:i++;break}})}if(!(r===0&&i===0)){switch(n){case`active`:if(e&&HB()){let t=(e&FB)!==0,n=(e&IB)!==0,r=(e&LB)!==0,i=(e&RB)!==0;if(t)return r?`se-resize`:i?`ne-resize`:`e-resize`;if(n)return r?`sw-resize`:i?`nw-resize`:`w-resize`;if(r)return`s-resize`;if(i)return`n-resize`}break}return HB()?r>0&&i>0?`move`:r>0?`ew-resize`:`ns-resize`:r>0&&i>0?`grab`:r>0?`col-resize`:`row-resize`}}var WB=new WeakMap;function GB(e){if(e.defaultView===null||e.defaultView===void 0)return;let{prevStyle:t,styleSheet:n}=WB.get(e)??{};n===void 0&&(n=new e.defaultView.CSSStyleSheet,e.adoptedStyleSheets&&e.adoptedStyleSheets.push(n));let r=OB();switch(r.state){case`active`:case`hover`:{let e=UB({cursorFlags:r.cursorFlags,groups:r.hitRegions.map(e=>e.group),state:r.state}),i=`*, *:hover {cursor: ${e} !important; }`;if(t===i)return;t=i,e?n.cssRules.length===0?n.insertRule(i):n.replaceSync(i):n.cssRules.length===1&&n.deleteRule(0);break}case`inactive`:t=void 0,n.cssRules.length===1&&n.deleteRule(0);break}WB.set(e,{prevStyle:t,styleSheet:n})}function KB({document:e,event:t,hitRegions:n,initialLayoutMap:r,mountedGroups:i,pointerDownAtPoint:a,prevCursorFlags:o}){let s=0;n.forEach(e=>{let{group:n,groupSize:o}=e,{orientation:c,panels:l}=n,{disableCursor:u}=n.mutableState,d=0;d=a?c===`horizontal`?(t.clientX-a.x)/o*100:(t.clientY-a.y)/o*100:c===`horizontal`?t.clientX<0?-100:100:t.clientY<0?-100:100;let f=r.get(n),p=i.get(n);if(!f||!p)return;let{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:_,separatorToPanels:v}=p;if(h&&_&&v){let t=_B({delta:d,initialLayout:f,panelConstraints:h,pivotIndices:e.panels.map(e=>l.indexOf(e)),prevLayout:_,trigger:`mouse-or-touch`});if(vB(t,_)){if(d!==0&&!u)switch(c){case`horizontal`:s|=d<0?FB:IB;break;case`vertical`:s|=d<0?LB:RB;break}}else $z(e.group,{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:t,separatorToPanels:v})}});let c=0;t.movementX===0?c|=o&zB:c|=s&zB,t.movementY===0?c|=o&BB:c|=s&BB,AB(c),GB(e)}function qB(e){let t=Zz(),n=OB();switch(n.state){case`active`:KB({document:e.currentTarget,event:e,hitRegions:n.hitRegions,initialLayoutMap:n.initialLayoutMap,mountedGroups:t,prevCursorFlags:n.cursorFlags})}}function JB(e){if(e.defaultPrevented)return;let t=OB(),n=Zz();switch(t.state){case`active`:if(e.buttons===0){jB({cursorFlags:0,state:`inactive`}),t.hitRegions.forEach(e=>{let t=Xz(e.group.id,!0);$z(e.group,t)});return}KB({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:n,pointerDownAtPoint:t.pointerDownAtPoint,prevCursorFlags:t.cursorFlags});break;default:{let r=fB(e,n);r.length===0?t.state!==`inactive`&&jB({cursorFlags:0,state:`inactive`}):jB({cursorFlags:0,hitRegions:r,state:`hover`}),GB(e.currentTarget);break}}}function YB(e){if(e.relatedTarget instanceof HTMLIFrameElement)switch(OB().state){case`hover`:jB({cursorFlags:0,state:`inactive`})}}function XB(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=OB();switch(t.state){case`active`:jB({cursorFlags:0,state:`inactive`}),t.hitRegions.length>0&&(GB(e.currentTarget),t.hitRegions.forEach(e=>{let t=Xz(e.group.id,!0);$z(e.group,t)}),e.preventDefault())}}function ZB(e){let t=0,n=0,r={};for(let i of e)if(i.defaultSize!==void 0){t++;let e=Mz(i.defaultSize);n+=e,r[i.panelId]=e}else r[i.panelId]=void 0;let i=e.length-t;if(i!==0){let t=Mz((100-n)/i);for(let n of e)n.defaultSize===void 0&&(r[n.panelId]=t)}return r}function QB(e,t,n){if(!n[0])return;let r=e.panels.find(e=>e.element===t);if(!r||!r.onResize)return;let i=Nz({group:e}),a=e.orientation===`horizontal`?r.element.offsetWidth:r.element.offsetHeight,o=r.mutableValues.prevSize,s={asPercentage:Mz(a/i*100),inPixels:a};r.mutableValues.prevSize=s,r.onResize(s,r.id,o)}function $B(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function eV({group:e,nextGroupSize:t,prevGroupSize:n,prevLayout:r}){if(n<=0||t<=0||n===t)return r;let i=0,a=0,o=!1,s=new Map,c=[];for(let l of e.panels){let e=r[l.id]??0;switch(l.panelConstraints.groupResizeBehavior){case`preserve-pixel-size`:{o=!0;let r=Mz(e/100*n/t*100);s.set(l.id,r),i+=r;break}case`preserve-relative-size`:default:c.push(l.id),a+=e;break}}if(!o||c.length===0)return r;let l=100-i,u={...r};if(s.forEach((e,t)=>{u[t]=e}),a>0)for(let e of c)u[e]=Mz((r[e]??0)/a*l);else{let e=Mz(l/c.length);for(let t of c)u[t]=e}return u}function tV(e,t){let n=e.map(e=>e.id),r=Object.keys(t);if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}var nV=new Map;function rV(e){let t=!0;Fz(e.element.ownerDocument.defaultView,`Cannot register an unmounted Group`);let n=e.element.ownerDocument.defaultView.ResizeObserver,r=new Set,i=new Set,a=new n(n=>{for(let r of n){let{borderBoxSize:n,target:i}=r;if(i===e.element){if(t){let t=Nz({group:e});if(t===0)return;let n=Xz(e.id);if(!n)return;let r=Pz(e),i=n.defaultLayoutDeferred?ZB(r):n.layout,a=yB({layout:eV({group:e,nextGroupSize:t,prevGroupSize:n.groupSize,prevLayout:i}),panelConstraints:r});if(!n.defaultLayoutDeferred&&vB(n.layout,a)&&$B(n.derivedPanelConstraints,r)&&n.groupSize===t)return;$z(e,{defaultLayoutDeferred:!1,derivedPanelConstraints:r,groupSize:t,layout:a,separatorToPanels:n.separatorToPanels})}}else QB(e,i,n)}});a.observe(e.element),e.panels.forEach(e=>{Fz(!r.has(e.id),`Panel ids must be unique; id "${e.id}" was used more than once`),r.add(e.id),e.onResize&&a.observe(e.element)});let o=Nz({group:e}),s=Pz(e),c=e.panels.map(({id:e})=>e).join(`,`),l=e.mutableState.defaultLayout;l&&(tV(e.panels,l)||(l=void 0));let u=yB({layout:e.mutableState.layouts[c]??l??ZB(s),panelConstraints:s}),d=e.element.ownerDocument;nV.set(d,(nV.get(d)??0)+1);let f=new Map;return Wz(e).forEach(e=>{e.separator&&f.set(e.separator,e.panels)}),$z(e,{defaultLayoutDeferred:o===0,derivedPanelConstraints:s,groupSize:o,layout:u,separatorToPanels:f}),e.separators.forEach(e=>{Fz(!i.has(e.id),`Separator ids must be unique; id "${e.id}" was used more than once`),i.add(e.id),e.element.addEventListener(`keydown`,TB)}),nV.get(d)===1&&(d.addEventListener(`dblclick`,xB,!0),d.addEventListener(`pointerdown`,MB,!0),d.addEventListener(`pointerleave`,qB),d.addEventListener(`pointermove`,JB),d.addEventListener(`pointerout`,YB),d.addEventListener(`pointerup`,XB,!0)),function(){t=!1,nV.set(d,Math.max(0,(nV.get(d)??0)-1)),Jz(e),e.separators.forEach(e=>{e.element.removeEventListener(`keydown`,TB)}),nV.get(d)||(d.removeEventListener(`dblclick`,xB,!0),d.removeEventListener(`pointerdown`,MB,!0),d.removeEventListener(`pointerleave`,qB),d.removeEventListener(`pointermove`,JB),d.removeEventListener(`pointerout`,YB),d.removeEventListener(`pointerup`,XB,!0)),a.disconnect()}}function iV(){let[e,t]=(0,F.useState)({});return[e,(0,F.useCallback)(()=>t({}),[])]}function aV(e){let t=(0,F.useId)();return`${e??t}`}var oV=typeof window<`u`?F.useLayoutEffect:F.useEffect;function sV(e){let t=(0,F.useRef)(e);return oV(()=>{t.current=e},[e]),(0,F.useCallback)((...e)=>t.current?.(...e),[t])}function cV(...e){return sV(t=>{e.forEach(e=>{if(e)switch(typeof e){case`function`:e(t);break;case`object`:e.current=t;break}})})}function lV(e){let t=(0,F.useRef)({...e});return oV(()=>{for(let n in e)t.current[n]=e[n]},[e]),t.current}var uV=(0,F.createContext)(null);function dV(e,t){let n=(0,F.useRef)({getLayout:()=>({}),setLayout:NB});(0,F.useImperativeHandle)(t,()=>n.current,[]),oV(()=>{Object.assign(n.current,CB({groupId:e}))})}function fV({children:e,className:t,defaultLayout:n,disableCursor:r,disabled:i,elementRef:a,groupRef:o,id:s,onLayoutChange:c,onLayoutChanged:l,orientation:u=`horizontal`,resizeTargetMinimumSize:d={coarse:20,fine:10},style:f,...p}){let m=(0,F.useRef)({onLayoutChange:{},onLayoutChanged:{}}),h=sV(e=>{vB(m.current.onLayoutChange,e)||(m.current.onLayoutChange=e,c?.(e))}),g=sV(e=>{vB(m.current.onLayoutChanged,e)||(m.current.onLayoutChanged=e,l?.(e))}),_=aV(s),v=(0,F.useRef)(null),[y,b]=iV(),x=(0,F.useRef)({lastExpandedPanelSizes:{},layouts:{},panels:[],resizeTargetMinimumSize:d,separators:[]}),S=cV(v,a);dV(_,o);let C=sV((e,t)=>{let r=OB(),i=Yz(e),a=Xz(e);if(a){let e=!1;switch(r.state){case`active`:e=r.hitRegions.some(e=>e.group===i);break}return{flexGrow:a.layout[t]??1,pointerEvents:e?`none`:void 0}}return{flexGrow:n?.[t]??1}}),w=lV({defaultLayout:n,disableCursor:r}),T=(0,F.useMemo)(()=>({get disableCursor(){return!!w.disableCursor},getPanelStyles:C,id:_,orientation:u,registerPanel:e=>{let t=x.current;return t.panels=Iz(u,[...t.panels,e]),b(),()=>{t.panels=t.panels.filter(t=>t!==e),b()}},registerSeparator:e=>{let t=x.current;return t.separators=Iz(u,[...t.separators,e]),b(),()=>{t.separators=t.separators.filter(t=>t!==e),b()}},togglePanelDisabled:(e,t)=>{let n=x.current.panels.find(t=>t.id===e);n&&(n.panelConstraints.disabled=t);let r=Yz(_),i=Xz(_);r&&i&&$z(r,{...i,derivedPanelConstraints:Pz(r)})},toggleSeparatorDisabled:(e,t)=>{let n=x.current.separators.find(t=>t.id===e);n&&(n.disabled=t)}}),[C,_,b,u,w]),E=(0,F.useRef)(null);return oV(()=>{let e=v.current;if(e===null)return;let t=x.current,n;if(w.defaultLayout!==void 0&&Object.keys(w.defaultLayout).length===t.panels.length){n={};for(let e of t.panels){let t=w.defaultLayout[e.id];t!==void 0&&(n[e.id]=t)}}let r={disabled:!!i,element:e,id:_,mutableState:{defaultLayout:n,disableCursor:!!w.disableCursor,expandedPanelSizes:x.current.lastExpandedPanelSizes,layouts:x.current.layouts},orientation:u,panels:t.panels,resizeTargetMinimumSize:t.resizeTargetMinimumSize,separators:t.separators};E.current=r;let a=rV(r),{defaultLayoutDeferred:o,derivedPanelConstraints:s,layout:c}=Xz(r.id,!0);!o&&s.length>0&&(h(c),g(c));let l=Qz(_,e=>{let{defaultLayoutDeferred:t,derivedPanelConstraints:n,layout:i}=e.next;if(t||n.length===0)return;let a=r.panels.map(({id:e})=>e).join(`,`);r.mutableState.layouts[a]=i,n.forEach(t=>{if(t.collapsible){let{layout:n}=e.prev??{};if(n){let e=mB(t.collapsedSize,i[t.panelId]),a=mB(t.collapsedSize,n[t.panelId]);e&&!a&&(r.mutableState.expandedPanelSizes[t.panelId]=n[t.panelId])}}});let o=OB().state!==`active`;h(i),o&&g(i)});return()=>{E.current=null,a(),l()}},[i,_,g,h,u,y,w]),(0,F.useEffect)(()=>{let e=E.current;e&&(e.mutableState.defaultLayout=n,e.mutableState.disableCursor=!!r)}),(0,I.jsx)(uV.Provider,{value:T,children:(0,I.jsx)(`div`,{...p,className:t,"data-group":!0,"data-testid":_,id:_,ref:S,style:{height:`100%`,width:`100%`,overflow:`hidden`,...f,display:`flex`,flexDirection:u===`horizontal`?`row`:`column`,flexWrap:`nowrap`,touchAction:u===`horizontal`?`pan-y`:`pan-x`},children:e})})}fV.displayName=`Group`;function pV(){let e=(0,F.useContext)(uV);return Fz(e,`Group Context not found; did you render a Panel or Separator outside of a Group?`),e}function mV(e,t){let{id:n}=pV(),r=(0,F.useRef)({collapse:PB,expand:PB,getSize:()=>({asPercentage:0,inPixels:0}),isCollapsed:()=>!1,resize:PB});(0,F.useImperativeHandle)(t,()=>r.current,[]),oV(()=>{Object.assign(r.current,bB({groupId:n,panelId:e}))})}function hV({children:e,className:t,collapsedSize:n=`0%`,collapsible:r=!1,defaultSize:i,disabled:a,elementRef:o,groupResizeBehavior:s=`preserve-relative-size`,id:c,maxSize:l=`100%`,minSize:u=`0%`,onResize:d,panelRef:f,style:p,...m}){let h=!!c,g=aV(c),_=lV({disabled:a}),v=(0,F.useRef)(null),y=cV(v,o),{getPanelStyles:b,id:x,orientation:S,registerPanel:C,togglePanelDisabled:w}=pV(),T=d!==null,E=sV((e,t,n)=>{d?.(e,c,n)});oV(()=>{let e=v.current;if(e!==null)return C({element:e,id:g,idIsStable:h,mutableValues:{expandToSize:void 0,prevSize:void 0},onResize:T?E:void 0,panelConstraints:{groupResizeBehavior:s,collapsedSize:n,collapsible:r,defaultSize:i,disabled:_.disabled,maxSize:l,minSize:u}})},[s,n,r,i,T,g,h,l,u,E,C,_]),(0,F.useEffect)(()=>{w(g,!!a)},[a,g,w]),mV(g,f);let ee=(0,F.useSyncExternalStore)(e=>Qz(x,e),()=>JSON.stringify(b(x,g)),()=>JSON.stringify(b(x,g)));return(0,I.jsx)(`div`,{...m,"aria-disabled":a||void 0,"data-panel":!0,"data-testid":g,id:g,ref:y,style:{...gV,display:`flex`,flexBasis:0,flexShrink:1,overflow:`visible`,...JSON.parse(ee)},children:(0,I.jsx)(`div`,{className:t,style:{maxHeight:`100%`,maxWidth:`100%`,flexGrow:1,overflow:`auto`,...p,touchAction:S===`horizontal`?`pan-y`:`pan-x`},children:e})})}hV.displayName=`Panel`;var gV={minHeight:0,maxHeight:`100%`,height:`auto`,minWidth:0,maxWidth:`100%`,width:`auto`,border:`none`,borderWidth:0,padding:0,margin:0};function _V({layout:e,panelConstraints:t,panelId:n,panelIndex:r}){let i,a,o=e[n],s=t.find(e=>e.panelId===n);if(s){let c=s.maxSize,l=s.collapsible?s.collapsedSize:s.minSize,u=[r,r+1];a=yB({layout:_B({delta:l-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n],i=yB({layout:_B({delta:c-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n]}return{valueControls:n,valueMax:i,valueMin:a,valueNow:o}}function vV({children:e,className:t,disabled:n,elementRef:r,id:i,style:a,...o}){let s=aV(i),c=lV({disabled:n}),[l,u]=(0,F.useState)({}),[d,f]=(0,F.useState)(`inactive`),p=(0,F.useRef)(null),m=cV(p,r),{disableCursor:h,id:g,orientation:_,registerSeparator:v,toggleSeparatorDisabled:y}=pV(),b=_===`horizontal`?`vertical`:`horizontal`;oV(()=>{let e=p.current;if(e!==null){let t={disabled:c.disabled,element:e,id:s},n=v(t),r=kB(e=>{f(e.next.state!==`inactive`&&e.next.hitRegions.some(e=>e.separator===t)?e.next.state:`inactive`)}),i=Qz(g,e=>{let{derivedPanelConstraints:n,layout:r,separatorToPanels:i}=e.next,a=i.get(t);if(a){let e=a[0],t=a.indexOf(e);u(_V({layout:r,panelConstraints:n,panelId:e.id,panelIndex:t}))}});return()=>{r(),i(),n()}}},[g,s,v,c]),(0,F.useEffect)(()=>{y(s,!!n)},[n,s,y]);let x;return n&&!h&&(x=`not-allowed`),(0,I.jsx)(`div`,{...o,"aria-controls":l.valueControls,"aria-disabled":n||void 0,"aria-orientation":b,"aria-valuemax":l.valueMax,"aria-valuemin":l.valueMin,"aria-valuenow":l.valueNow,children:e,className:t,"data-separator":n?`disabled`:d,"data-testid":s,id:s,ref:m,role:`separator`,style:{flexBasis:`auto`,cursor:x,...a,flexGrow:0,flexShrink:0,touchAction:`none`},tabIndex:n?void 0:0})}vV.displayName=`Separator`;function yV({className:e,...t}){return(0,I.jsx)(fV,{"data-slot":`resizable-panel-group`,className:K(`flex h-full w-full aria-[orientation=vertical]:flex-col`,e),...t})}function bV({...e}){return(0,I.jsx)(hV,{"data-slot":`resizable-panel`,...e})}function xV({withHandle:e,className:t,...n}){return(0,I.jsx)(vV,{"data-slot":`resizable-handle`,className:K(`bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90`,t),...n,children:e&&(0,I.jsx)(`div`,{className:`bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border`,children:(0,I.jsx)(ha,{className:`size-2.5`})})})}var SV={type:`openai-completions`,base:``,apiKey:``,proxy:``,models:{}};function CV(e,t,n,r){let i=Object.keys(e);if(t===n)return e;let a=i.filter(e=>e!==t),o=a.indexOf(n);if(o===-1)return e;r===`after`&&(o+=1),a.splice(o,0,t);let s={};for(let t of a)s[t]=e[t];return s}function wV(e,t,n){let r=Object.keys(e),i=r.indexOf(t);if(i===-1)return e;let a=Math.max(0,Math.min(n,r.length-1));if(a===i)return e;let o=[...r];o.splice(i,1),o.splice(a,0,t);let s={};for(let t of o)s[t]=e[t];return s}function TV(){let e=vS(e=>e.draft),t=vS(e=>e.updateDraft),n=e?.providers??{},r=Object.keys(n),[i,a]=(0,F.useState)(r[0]??null),[o,s]=(0,F.useState)(``),[c,l]=(0,F.useState)(!1),[u,d]=(0,F.useState)(!1),[f,p]=(0,F.useState)(``),[m,h]=(0,F.useState)(null),[g,_]=(0,F.useState)(null),[v,y]=(0,F.useState)(null),[b,x]=(0,F.useState)(null);if(!e)return null;function S(){let e=o.trim().toLowerCase().replace(/[^a-z0-9-]/g,`-`);!e||n[e]||(t(t=>(t.providers[e]={...SV},t)),a(e),s(``),l(!1))}function C(e,n){t(t=>(t.providers[e]=n,t))}function w(e){t(t=>(delete t.providers[e],t)),a(r.find(t=>t!==e)??null),_(null)}function T(e){h(e),d(!0)}function E(){if(!m||!n[m])return;let e=f.trim().toLowerCase().replace(/[^a-z0-9-]/g,`-`);!e||n[e]||(t(t=>(t.providers[e]=structuredClone(t.providers[m]),t)),a(e),p(``),h(null),d(!1))}function ee(e,n){t(t=>(t.providers=wV(t.providers,e,n),t))}function D(e){let t=e.currentTarget.getBoundingClientRect();return e.clientY-t.top<t.height/2?`before`:`after`}function O(e,t){e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,t),y(t),x(null)}function k(e,t){v&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,x({name:t,position:D(e)}))}function te(){y(null),x(null)}function A(e,n){if(!v)return;e.preventDefault();let r=D(e);t(e=>(e.providers=CV(e.providers,v,n,r),e)),te()}return(0,I.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-6 lg:overflow-hidden`,children:[(0,I.jsxs)(`div`,{className:`shrink-0`,children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`Providers`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`管理上游 API 服务商配置`})]}),(0,I.jsxs)(yV,{orientation:`horizontal`,className:`min-h-0 flex-1`,children:[(0,I.jsx)(bV,{defaultSize:`280px`,minSize:`180px`,maxSize:`50%`,className:`min-w-0`,children:(0,I.jsxs)(`div`,{className:`flex h-full min-w-0 min-h-0 flex-col gap-3 overflow-hidden`,children:[(0,I.jsx)(qk,{className:`min-h-0 min-w-0 flex-1 **:data-[slot=scroll-area-viewport]:min-w-0 **:data-[slot=scroll-area-viewport]:overflow-x-hidden [&_[data-slot=scroll-area-viewport]>div]:block! [&_[data-slot=scroll-area-viewport]>div]:min-w-0 [&_[data-slot=scroll-area-viewport]>div]:w-full`,children:(0,I.jsx)(`div`,{className:`w-full min-w-0 space-y-2 pr-2`,children:r.map(e=>{let t=n[e],o=Object.keys(t.models).length,s=b?.name===e&&b.position===`before`&&v!==e,c=b?.name===e&&b.position===`after`&&v!==e;return(0,I.jsxs)(`div`,{className:`relative`,children:[(0,I.jsx)(`div`,{className:K(`pointer-events-none absolute inset-x-2 z-10 h-0.5 rounded-full bg-primary transition-opacity`,s?`top-0 opacity-100`:`top-0 opacity-0`)}),(0,I.jsxs)(xz,{children:[(0,I.jsx)(Sz,{asChild:!0,children:(0,I.jsxs)(`button`,{type:`button`,draggable:!0,className:K(`w-full min-w-0 cursor-pointer overflow-hidden rounded-lg border p-3 text-left transition-colors hover:bg-accent`,i===e?`border-primary bg-accent`:`border-border`,v===e&&`opacity-60`),onClick:()=>a(e),onContextMenu:()=>a(e),onDragStart:t=>O(t,e),onDragOver:t=>k(t,e),onDrop:t=>A(t,e),onDragEnd:te,children:[(0,I.jsxs)(`div`,{className:`flex w-full min-w-0 items-center gap-2`,children:[(0,I.jsx)(ha,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,I.jsx)(`span`,{className:`block min-w-0 flex-1 truncate font-medium text-sm`,children:e})]}),(0,I.jsxs)(`div`,{className:`mt-1.5 flex w-full min-w-0 items-center gap-2`,children:[(0,I.jsx)(Y,{variant:`outline`,className:`min-w-0 max-w-full overflow-hidden text-xs`,children:(0,I.jsx)(`span`,{className:`block min-w-0 truncate`,children:t.type})}),(0,I.jsxs)(`span`,{className:`shrink-0 whitespace-nowrap text-xs text-muted-foreground`,children:[o,` 个模型`]})]})]})}),(0,I.jsxs)(Cz,{className:`w-48`,children:[(0,I.jsxs)(wz,{onSelect:()=>T(e),children:[(0,I.jsx)(aa,{className:`h-4 w-4`}),`复制`]}),(0,I.jsxs)(wz,{onSelect:()=>_(e),variant:`destructive`,children:[(0,I.jsx)(La,{className:`h-4 w-4`}),`删除`]}),(0,I.jsx)(Tz,{}),(0,I.jsxs)(wz,{onSelect:()=>ee(e,r.indexOf(e)-1),disabled:r.indexOf(e)<=0,children:[(0,I.jsx)(na,{className:`h-4 w-4`}),`上移`]}),(0,I.jsxs)(wz,{onSelect:()=>ee(e,r.indexOf(e)+1),disabled:r.indexOf(e)>=r.length-1,children:[(0,I.jsx)(ea,{className:`h-4 w-4`}),`下移`]}),(0,I.jsxs)(wz,{onSelect:()=>ee(e,0),disabled:r.indexOf(e)<=0,children:[(0,I.jsx)(na,{className:`h-4 w-4`}),`上移至顶部`]}),(0,I.jsxs)(wz,{onSelect:()=>ee(e,r.length-1),disabled:r.indexOf(e)>=r.length-1,children:[(0,I.jsx)(ea,{className:`h-4 w-4`}),`下移至底部`]})]})]}),(0,I.jsx)(`div`,{className:K(`pointer-events-none absolute inset-x-2 bottom-0 z-10 h-0.5 rounded-full bg-primary transition-opacity`,c?`opacity-100`:`opacity-0`)})]},e)})})}),(0,I.jsx)(`div`,{className:`shrink-0 pr-2`,children:(0,I.jsxs)(Rk,{open:c,onOpenChange:l,children:[(0,I.jsx)(zk,{asChild:!0,children:(0,I.jsxs)(q,{variant:`outline`,className:`w-full`,children:[(0,I.jsx)(wa,{className:`h-4 w-4 mr-1`}),`添加 Provider`]})}),(0,I.jsxs)(Hk,{children:[(0,I.jsxs)(Uk,{children:[(0,I.jsx)(Gk,{children:`添加 Provider`}),(0,I.jsx)(Kk,{children:`输入新 Provider 的名称(kebab-case 格式)`})]}),(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(zR,{htmlFor:`new-provider-name`,children:`名称`}),(0,I.jsx)(RR,{id:`new-provider-name`,value:o,onChange:e=>s(e.target.value),placeholder:`my-provider`,className:`font-mono`,onKeyDown:e=>e.key===`Enter`&&S()})]}),(0,I.jsx)(Wk,{children:(0,I.jsx)(q,{onClick:S,disabled:!o.trim(),children:`创建`})})]})]})})]})}),(0,I.jsx)(xV,{withHandle:!0,className:`bg-transparent transition-colors duration-200 hover:bg-border focus-visible:bg-border active:bg-border [&>div]:opacity-0 [&>div]:transition-opacity [&>div]:duration-200 hover:[&>div]:opacity-100 focus-visible:[&>div]:opacity-100 active:[&>div]:opacity-100`}),(0,I.jsx)(bV,{minSize:`400px`,children:(0,I.jsx)(`div`,{className:`flex h-full flex-col min-h-0 pl-2 pb-3 lg:pb-0`,children:(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background flex flex-col min-h-0 h-full`,children:[(0,I.jsx)(`div`,{className:`border-b px-3 py-3 shrink-0`,children:(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2 min-w-0`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold truncate`,children:i?`${i}`:`选择一个 Provider`}),i&&n[i]&&(0,I.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,I.jsxs)(Rk,{open:u,onOpenChange:e=>{d(e),e||(p(``),h(null))},children:[(0,I.jsx)(zk,{asChild:!0,children:(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8`,"aria-label":`复制此 Provider`,onClick:()=>i&&T(i),children:(0,I.jsx)(aa,{className:`h-4 w-4`})})}),(0,I.jsxs)(Hk,{children:[(0,I.jsxs)(Uk,{children:[(0,I.jsx)(Gk,{children:`复制 Provider`}),(0,I.jsx)(Kk,{children:`输入新 Provider 的名称(kebab-case 格式)`})]}),(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(zR,{htmlFor:`copy-provider-name`,children:`名称`}),(0,I.jsx)(RR,{id:`copy-provider-name`,value:f,onChange:e=>p(e.target.value),placeholder:`my-provider-copy`,className:`font-mono`,onKeyDown:e=>e.key===`Enter`&&E()})]}),(0,I.jsx)(Wk,{children:(0,I.jsx)(q,{onClick:E,disabled:!f.trim(),children:`复制`})})]})]}),(0,I.jsxs)(uz,{open:g!==null,onOpenChange:e=>{e||_(null)},children:[(0,I.jsx)(dz,{asChild:!0,children:(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 text-destructive hover:text-destructive`,"aria-label":`删除此 Provider`,onClick:()=>i&&_(i),children:(0,I.jsx)(La,{className:`h-4 w-4`})})}),(0,I.jsxs)(mz,{children:[(0,I.jsxs)(hz,{children:[(0,I.jsx)(_z,{children:`确认删除`}),(0,I.jsxs)(vz,{children:[`确定要删除 Provider「`,g,`」吗?引用此 Provider 的路由规则将失效。`]})]}),(0,I.jsxs)(gz,{children:[(0,I.jsx)(bz,{children:`取消`}),(0,I.jsx)(yz,{onClick:()=>g&&w(g),children:`删除`})]})]})]})]})]})}),(0,I.jsx)(qk,{className:`min-h-0 flex-1`,children:(0,I.jsx)(`div`,{className:`px-3 py-3`,children:i&&n[i]?(0,I.jsx)(az,{name:i,config:n[i],isNew:!1,onChange:e=>C(i,e)},i):(0,I.jsx)(`p`,{className:`text-muted-foreground text-sm py-8 text-center`,children:r.length===0?`暂无 Provider,点击左侧「添加 Provider」按钮创建`:`请从左侧列表中选择一个 Provider`})})})]})})})]})]})}var EV={"openai-completions":`OpenAI Completions`,"openai-responses":`OpenAI Responses`,"anthropic-messages":`Anthropic Messages`};function DV({modelMap:e,providers:t,onChange:n}){let r=Object.entries(e),i=r.filter(([e])=>e!==`*`),a=r.find(([e])=>e===`*`);function o(t){if(t===`*`)return;let r={...e};delete r[t],n(r)}function s(t,r){if(r===t)return;let i={};for(let[n,a]of Object.entries(e))i[n===t?r:n]=a;n(i)}function c(t,r,i){n({...e,[t]:{...e[t],[r]:i}})}function l(e){let n=t[e];return n?Object.keys(n.models):[]}return(0,I.jsxs)(`div`,{className:`relative space-y-3`,children:[(0,I.jsx)(`div`,{className:`absolute left-0 top-0 bottom-6 w-px bg-border`}),(0,I.jsxs)(`div`,{className:`ml-5 flex items-center gap-1.5 px-2 text-xs font-medium text-muted-foreground translate-x-[-0.5px] translate-y-[-1px]`,children:[(0,I.jsx)(`span`,{className:`w-[200px] min-w-[120px]`,children:`请求模型`}),(0,I.jsx)(`span`,{className:`w-5 shrink-0`}),(0,I.jsx)(`span`,{className:`min-w-0 flex-1`,children:`路由目标`}),(0,I.jsx)(`span`,{className:`w-8 shrink-0`})]}),i.length>0&&(0,I.jsx)(`div`,{className:`space-y-1.5 translate-x-[-0.5px] translate-y-[-1px]`,children:i.map(([e,n])=>(0,I.jsxs)(`div`,{className:`relative pl-5`,children:[(0,I.jsx)(OV,{}),(0,I.jsx)(kV,{ruleKey:e,target:n,isWildcard:!1,providers:t,getModelsForProvider:l,onKeyCommit:t=>s(e,t),onTargetChange:(t,n)=>c(e,t,n),onRemove:()=>o(e)})]},e))}),a&&i.length>0&&(0,I.jsxs)(`div`,{className:`relative ml-5 translate-x-[-0.5px] translate-y-[-1px]`,children:[(0,I.jsx)(`div`,{className:`absolute inset-0 flex items-center`,children:(0,I.jsx)(`div`,{className:`w-full border-t border-dashed`})}),(0,I.jsx)(`div`,{className:`relative flex justify-center`,children:(0,I.jsx)(`span`,{className:`bg-background px-2 text-[11px] text-muted-foreground`,children:`兜底规则 — 未匹配的请求将路由至此`})})]}),a&&(0,I.jsxs)(`div`,{className:`relative pl-5 translate-x-[-0.5px] translate-y-[-1px]`,children:[(0,I.jsx)(OV,{}),(0,I.jsx)(kV,{ruleKey:a[0],target:a[1],isWildcard:!0,providers:t,getModelsForProvider:l,onKeyCommit:()=>{},onTargetChange:(e,t)=>c(`*`,e,t),onRemove:()=>{}})]})]})}function OV(){return(0,I.jsx)(`svg`,{className:`pointer-events-none absolute left-0 top-1/2 -translate-y-1/2 text-border`,width:`20`,height:`20`,viewBox:`0 0 20 20`,fill:`none`,"aria-hidden":`true`,children:(0,I.jsx)(`path`,{d:`M1 0A10 10 0 0 0 11 10H20`,className:`stroke-current`,strokeWidth:`1`,strokeLinecap:`round`})})}function kV({ruleKey:e,target:t,isWildcard:n,providers:r,getModelsForProvider:i,onKeyCommit:a,onTargetChange:o,onRemove:s}){let[c,l]=(0,F.useState)(e);(0,F.useEffect)(()=>{l(e)},[e]);function u(){c!==e&&a(c)}let d=i(t.provider),f=Object.entries(r).reduce((e,[t,n])=>(e[n.type].push(t),e),{"openai-completions":[],"openai-responses":[],"anthropic-messages":[]});return(0,I.jsxs)(`div`,{className:n?`grid grid-cols-[minmax(120px,200px)_20px_1fr_32px] items-center gap-x-1.5 rounded-lg border border-dashed bg-muted/30 p-2 transition-colors`:`grid grid-cols-[minmax(120px,200px)_20px_1fr_32px] items-center gap-x-1.5 rounded-lg border border-solid bg-background p-2 transition-colors`,children:[n?(0,I.jsxs)(`div`,{className:`flex w-full items-center gap-1.5 px-1`,children:[(0,I.jsx)(Y,{variant:`secondary`,className:`text-xs font-mono`,children:`*`}),(0,I.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`所有`})]}):(0,I.jsx)(RR,{value:c,onChange:e=>l(e.target.value),onBlur:u,onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur()},className:`h-7 text-sm font-mono`}),(0,I.jsx)(Xi,{className:`h-3.5 w-3.5 text-muted-foreground mx-auto`}),(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,I.jsxs)(oM,{value:t.provider,onValueChange:e=>o(`provider`,e),children:[(0,I.jsx)(lM,{className:`h-7 text-sm w-[320px] shrink-0`,children:(0,I.jsx)(cM,{placeholder:`Provider`})}),(0,I.jsx)(uM,{children:Object.keys(EV).map(e=>{let t=f[e];return t.length===0?null:(0,I.jsxs)(sM,{children:[(0,I.jsx)(dM,{children:EV[e]}),t.map(e=>(0,I.jsx)(fM,{value:e,children:e},e))]},e)})})]}),(0,I.jsx)(`span`,{className:`text-muted-foreground text-xs shrink-0`,children:`/`}),d.length>0?(0,I.jsxs)(oM,{value:t.model,onValueChange:e=>o(`model`,e),children:[(0,I.jsx)(lM,{className:`h-7 text-sm flex-1 min-w-0`,children:(0,I.jsx)(cM,{placeholder:`模型`})}),(0,I.jsx)(uM,{children:d.map(e=>(0,I.jsx)(fM,{value:e,children:e},e))})]}):(0,I.jsx)(RR,{value:t.model,onChange:e=>o(`model`,e.target.value),className:`h-7 text-sm font-mono flex-1 min-w-0`,placeholder:`模型名称`})]}),(0,I.jsx)(q,{type:`button`,variant:`ghost`,size:`icon`,className:`h-7 w-7 text-destructive hover:text-destructive`,disabled:n,onClick:s,children:(0,I.jsx)(La,{className:`h-3 w-3`})})]})}var AV=[`openai-completions`,`openai-responses`,`anthropic-messages`];function jV(){let e=vS(e=>e.draft),t=vS(e=>e.updateDraft),n=Object.keys(e?.routes??{}),[r,i]=(0,F.useState)(``),a=AV.filter(e=>!n.includes(e));if(!e)return null;let o=e;function s(){if(!r)return;let e=Object.keys(o.providers)[0]??``,n=e?Object.keys(o.providers[e]?.models??{})[0]??``:``;t(t=>(t.routes[r]={"*":{provider:e,model:n}},t)),i(``)}function c(e){t(t=>(delete t.routes[e],t))}function l(e,n){t(t=>(t.routes[e]=n,t))}function u(e){let n=Object.keys(o.providers)[0]??``,r=n?Object.keys(o.providers[n]?.models??{})[0]??``:``;t(t=>{let i=t.routes[e]??{};return t.routes[e]={...i,[`alias-${Date.now()}`]:{provider:n,model:r}},t})}return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`路由`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`管理协议入口与模型路由映射`})]}),n.length===0?(0,I.jsx)(`div`,{className:`rounded-lg border bg-background py-12 text-center text-muted-foreground`,children:`暂无路由配置,请先添加一个协议入口`}):(0,I.jsx)(`div`,{className:`space-y-6`,children:n.map(t=>{let n=e.routes[t],r=Object.keys(n).length;return(0,I.jsxs)(`div`,{className:`relative`,children:[(0,I.jsx)(`div`,{className:`rounded-lg border bg-card text-card-foreground px-3 py-2`,children:(0,I.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(`h3`,{className:`text-sm font-semibold`,children:t}),(0,I.jsxs)(Y,{variant:`secondary`,className:`text-xs`,children:[r,` 个规则`]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsxs)(q,{type:`button`,variant:`outline`,size:`sm`,className:`h-7 px-2.5 text-xs`,onClick:()=>u(t),children:[(0,I.jsx)(wa,{className:`mr-1 h-3.5 w-3.5`}),`添加规则`]}),(0,I.jsxs)(uz,{children:[(0,I.jsx)(dz,{asChild:!0,children:(0,I.jsx)(q,{variant:`ghost`,size:`icon`,className:`h-7 w-7 text-destructive hover:text-destructive`,children:(0,I.jsx)(La,{className:`h-3.5 w-3.5`})})}),(0,I.jsxs)(mz,{children:[(0,I.jsxs)(hz,{children:[(0,I.jsx)(_z,{children:`确认删除`}),(0,I.jsxs)(vz,{children:[`确定要删除协议入口「`,t,`」及其所有路由规则吗?`]})]}),(0,I.jsxs)(gz,{children:[(0,I.jsx)(bz,{children:`取消`}),(0,I.jsx)(yz,{onClick:()=>c(t),children:`删除`})]})]})]})]})]})}),(0,I.jsxs)(`div`,{className:`relative mt-3 ml-3`,children:[(0,I.jsx)(`div`,{className:`absolute left-0 -top-3 h-3 w-px bg-border`}),(0,I.jsx)(DV,{routeType:t,modelMap:e.routes[t],providers:e.providers,onChange:e=>l(t,e)})]})]},t)})}),a.length>0&&(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsxs)(oM,{value:r,onValueChange:i,children:[(0,I.jsx)(lM,{className:`w-[240px]`,children:(0,I.jsx)(cM,{placeholder:`选择协议类型...`})}),(0,I.jsx)(uM,{children:a.map(e=>(0,I.jsx)(fM,{value:e,children:e},e))})]}),(0,I.jsxs)(q,{onClick:s,disabled:!r,children:[(0,I.jsx)(wa,{className:`h-4 w-4 mr-1`}),`添加协议入口`]})]})]})}var MV={window:`24h`,from:``,to:``,user:``,session:``,q:``};const NV=qx((e,t)=>({filters:{...MV},summary:null,users:[],meta:null,from:``,to:``,loading:!1,error:null,setFilter:(t,n)=>{e(e=>({filters:{...e.filters,[t]:n}}))},fetchData:async()=>{e({loading:!0,error:null});try{let n=t(),r=await dS({window:n.filters.window,from:n.filters.from||void 0,to:n.filters.to||void 0,user:n.filters.user||void 0,session:n.filters.session||void 0,q:n.filters.q||void 0});e({summary:r.summary,users:r.users,meta:r.meta,from:r.from,to:r.to,loading:!1,error:null})}catch(t){e({loading:!1,error:t instanceof Error?t.message:`用户会话查询失败`})}},resetFilters:async()=>{e({filters:{...MV}}),await t().fetchData()}}));function PV(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}T${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function FV(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toISOString()}function IV(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}function LV(e){return e.length===0?`-`:e.slice(0,3).map(e=>`${e.key}(${e.count})`).join(`, `)}function RV(e,t=6){return e.length<=t*2+3?e:`${e.slice(0,t)}...${e.slice(-t)}`}function zV(){let e=Sr(),t=NV(e=>e.filters),n=NV(e=>e.summary),r=NV(e=>e.users),i=NV(e=>e.meta),a=NV(e=>e.from),o=NV(e=>e.to),s=NV(e=>e.loading),c=NV(e=>e.error),l=NV(e=>e.setFilter),u=NV(e=>e.fetchData),d=NV(e=>e.resetFilters),[f,p]=(0,F.useState)({});(0,F.useEffect)(()=>{u()},[u]);let m=r.length>0,h=(0,F.useMemo)(()=>({users:n?.uniqueUsers??0,sessions:n?.uniqueSessions??0,requests:n?.totalRequests??0,metadataRequests:n?.metadataRequests??0}),[n]);return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h2`,{className:`text-2xl font-bold tracking-tight`,children:`用户会话`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`解析日志 metadata 中的 user ↔ session 映射,查看活跃度并跳转日志检索`})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`检索条件`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`支持时间窗、范围、用户/会话精确筛选与关键词检索`})]}),(0,I.jsxs)(`div`,{className:`space-y-3 px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{children:`时间窗口`}),(0,I.jsxs)(oM,{value:t.window,onValueChange:e=>l(`window`,e),children:[(0,I.jsx)(lM,{className:`h-8 w-full`,children:(0,I.jsx)(cM,{})}),(0,I.jsxs)(uM,{children:[(0,I.jsx)(fM,{value:`1h`,children:`最近 1 小时`}),(0,I.jsx)(fM,{value:`6h`,children:`最近 6 小时`}),(0,I.jsx)(fM,{value:`24h`,children:`最近 24 小时`})]})]})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`sessions-from`,children:`起始时间`}),(0,I.jsx)(RR,{id:`sessions-from`,type:`datetime-local`,className:`h-8`,value:PV(t.from),onChange:e=>l(`from`,FV(e.target.value))})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`sessions-to`,children:`结束时间`}),(0,I.jsx)(RR,{id:`sessions-to`,type:`datetime-local`,className:`h-8`,value:PV(t.to),onChange:e=>l(`to`,FV(e.target.value))})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`sessions-q`,children:`关键词`}),(0,I.jsx)(RR,{id:`sessions-q`,className:`h-8`,value:t.q,onChange:e=>l(`q`,e.target.value),placeholder:`user/session/model/provider`})]})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`sessions-user`,children:`用户标识`}),(0,I.jsx)(RR,{id:`sessions-user`,className:`h-8`,value:t.user,onChange:e=>l(`user`,e.target.value),placeholder:`userKey 或 raw user_id`})]}),(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsx)(zR,{htmlFor:`sessions-session`,children:`会话 ID`}),(0,I.jsx)(RR,{id:`sessions-session`,className:`h-8`,value:t.session,onChange:e=>l(`session`,e.target.value),placeholder:`sessionId`})]})]}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,I.jsxs)(q,{size:`sm`,onClick:()=>void u(),disabled:s,children:[(0,I.jsx)(Aa,{className:`h-3.5 w-3.5`}),`查询`]}),(0,I.jsx)(q,{size:`sm`,variant:`outline`,onClick:()=>void d(),disabled:s,children:`重置`}),a&&o?(0,I.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`生效范围:`,IV(a),` - `,IV(o)]}):null]})]})]}),(0,I.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,I.jsx)(BV,{title:`用户数`,value:h.users}),(0,I.jsx)(BV,{title:`会话数`,value:h.sessions}),(0,I.jsx)(BV,{title:`请求数`,value:h.requests}),(0,I.jsx)(BV,{title:`含 metadata 请求`,value:h.metadataRequests})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background`,children:[(0,I.jsxs)(`div`,{className:`border-b px-3 py-3`,children:[(0,I.jsx)(`h3`,{className:`text-base font-semibold`,children:`用户与会话`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:i?`文件 ${i.scannedFiles} · 行 ${i.scannedLines} · 解析异常 ${i.parseErrors}${i.truncated?` · 已截断`:``}`:`等待查询`})]}),(0,I.jsx)(`div`,{className:`px-3 py-3`,children:c?(0,I.jsx)(SM,{className:`min-h-[160px] p-6 md:p-6`,children:(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`用户会话查询失败`}),(0,I.jsx)(DM,{children:c})]})}):s?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(OM,{className:`h-10 w-full`}),(0,I.jsx)(OM,{className:`h-10 w-full`}),(0,I.jsx)(OM,{className:`h-10 w-full`})]}):m?(0,I.jsx)(`div`,{className:`rounded-md border`,children:(0,I.jsxs)(IM,{children:[(0,I.jsx)(LM,{children:(0,I.jsxs)(BM,{children:[(0,I.jsx)(VM,{className:`w-[46px]`}),(0,I.jsx)(VM,{children:`用户`}),(0,I.jsx)(VM,{children:`请求数`}),(0,I.jsx)(VM,{children:`会话数`}),(0,I.jsx)(VM,{children:`首次活跃`}),(0,I.jsx)(VM,{children:`最近活跃`}),(0,I.jsx)(VM,{children:`模型摘要`}),(0,I.jsx)(VM,{children:`Provider`}),(0,I.jsx)(VM,{children:`RouteType`}),(0,I.jsx)(VM,{className:`sticky right-0 z-10 bg-background text-right`,children:`操作`})]})}),(0,I.jsx)(RM,{children:r.map(t=>{let n=f[t.userKey]??!0;return(0,I.jsxs)(F.Fragment,{children:[(0,I.jsxs)(BM,{children:[(0,I.jsx)(HM,{children:(0,I.jsx)(q,{size:`icon-xs`,variant:`ghost`,onClick:()=>p(e=>({...e,[t.userKey]:!n})),children:n?(0,I.jsx)(ea,{className:`h-3.5 w-3.5`}):(0,I.jsx)(ta,{className:`h-3.5 w-3.5`})})}),(0,I.jsx)(HM,{className:`font-mono text-xs`,title:t.userKey,children:RV(t.userKey,10)}),(0,I.jsx)(HM,{children:t.requestCount}),(0,I.jsx)(HM,{children:t.sessionCount}),(0,I.jsx)(HM,{className:`text-xs`,children:IV(t.firstSeenAt)}),(0,I.jsx)(HM,{className:`text-xs`,children:IV(t.lastSeenAt)}),(0,I.jsx)(HM,{className:`max-w-[260px] truncate text-xs`,title:LV(t.models),children:LV(t.models)}),(0,I.jsx)(HM,{children:(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:t.providers.length})}),(0,I.jsx)(HM,{children:(0,I.jsx)(Y,{variant:`outline`,className:`text-xs`,children:t.routeTypes.length})}),(0,I.jsx)(HM,{className:`sticky right-0 z-10 bg-background text-right`,children:(0,I.jsx)(q,{size:`sm`,variant:`outline`,onClick:()=>void e({to:`/logs`,search:{user:t.userKey,session:void 0}}),children:`查看日志`})})]},t.userKey),n?t.sessions.map(n=>(0,I.jsxs)(BM,{className:`bg-muted/20`,children:[(0,I.jsx)(HM,{}),(0,I.jsx)(HM,{className:`text-muted-foreground text-xs`,children:`↳ 会话`}),(0,I.jsx)(HM,{children:n.requestCount}),(0,I.jsx)(HM,{className:`text-xs text-muted-foreground`,children:n.sessionId}),(0,I.jsx)(HM,{className:`text-xs`,children:IV(n.firstSeenAt)}),(0,I.jsx)(HM,{className:`text-xs`,children:IV(n.lastSeenAt)}),(0,I.jsx)(HM,{className:`max-w-[260px] truncate text-xs`,title:LV(n.models),children:LV(n.models)}),(0,I.jsxs)(HM,{className:`text-xs text-muted-foreground`,colSpan:2,children:[`最近 requestId: `,RV(n.latestRequestId,8)]}),(0,I.jsx)(HM,{className:`sticky right-0 z-10 bg-background text-right`,children:(0,I.jsx)(q,{size:`sm`,variant:`outline`,onClick:()=>void e({to:`/logs`,search:{user:t.userKey,session:n.sessionId}}),children:`查看日志`})})]},`${t.userKey}-${n.sessionId}`)):null]},t.userKey)})})]})}):(0,I.jsx)(SM,{className:`min-h-[220px] p-6 md:p-6`,children:(0,I.jsxs)(CM,{children:[(0,I.jsx)(EM,{children:`暂无可用用户会话`}),(0,I.jsx)(DM,{children:`请确认 bodyPolicy 不为 off,并调整筛选条件后重试`})]})})})]})]})}function BV({title:e,value:t}){return(0,I.jsxs)(`div`,{className:`rounded-lg border bg-background px-3 py-3`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium`,children:e}),(0,I.jsx)(`div`,{className:`mt-1 text-lg font-semibold`,children:t})]})}var VV=Vr({component:aM}),HV=zr({getParentRoute:()=>VV,path:`/`,component:()=>(0,I.jsx)(Cr,{to:`/dashboard`,replace:!0})}),UV=zr({getParentRoute:()=>VV,path:`/dashboard`,component:XM}),WV=zr({getParentRoute:()=>VV,path:`/chat`,component:_M}),GV=zr({getParentRoute:()=>VV,path:`/providers`,component:TV}),KV=zr({getParentRoute:()=>VV,path:`/routes`,component:jV}),qV=zr({getParentRoute:()=>VV,path:`/logs`,validateSearch:e=>({user:typeof e.user==`string`?e.user:void 0,session:typeof e.session==`string`?e.session:void 0}),component:XR}),JV=zr({getParentRoute:()=>VV,path:`/sessions`,component:zV}),YV=zr({getParentRoute:()=>VV,path:`/logs/$id`,component:fL}),XV=zr({getParentRoute:()=>VV,path:`/logs-settings`,component:$R});const ZV=ai({routeTree:VV.addChildren([HV,UV,WV,GV,KV,qV,JV,YV,XV]),basepath:`/admin`,defaultPreload:`intent`});function QV({children:e,...t}){return(0,I.jsx)(jk,{...t,children:e})}(0,li.createRoot)(document.getElementById(`root`)).render((0,I.jsx)(F.StrictMode,{children:(0,I.jsx)(QV,{attribute:`class`,defaultTheme:`system`,enableSystem:!0,children:(0,I.jsx)(ci,{router:ZV})})}));
|