@jonathanleelx/meddle 0.5.0-beta.18 → 0.5.0-beta.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/bin/lib/file-access.js +41 -24
  2. package/dist/core/custom-plugin-loader.d.ts.map +1 -1
  3. package/dist/core/custom-plugin-loader.js +2 -0
  4. package/dist/core/custom-plugin-loader.js.map +1 -1
  5. package/dist/core/mock-handler.d.ts +33 -0
  6. package/dist/core/mock-handler.d.ts.map +1 -1
  7. package/dist/core/mock-handler.js +284 -25
  8. package/dist/core/mock-handler.js.map +1 -1
  9. package/dist/core/mock-utils.d.ts +28 -0
  10. package/dist/core/mock-utils.d.ts.map +1 -1
  11. package/dist/core/mock-utils.js +50 -0
  12. package/dist/core/mock-utils.js.map +1 -1
  13. package/dist/core/plugin-bootstrap-runner.d.ts +1 -0
  14. package/dist/core/plugin-bootstrap-runner.d.ts.map +1 -1
  15. package/dist/core/plugin-bootstrap-runner.js +37 -1
  16. package/dist/core/plugin-bootstrap-runner.js.map +1 -1
  17. package/dist/core/plugin-source.d.ts +24 -0
  18. package/dist/core/plugin-source.d.ts.map +1 -0
  19. package/dist/core/plugin-source.js +47 -0
  20. package/dist/core/plugin-source.js.map +1 -0
  21. package/dist/core/types.d.ts +7 -0
  22. package/dist/core/types.d.ts.map +1 -1
  23. package/dist/server/app-info.d.ts +19 -0
  24. package/dist/server/app-info.d.ts.map +1 -0
  25. package/dist/server/app-info.js +84 -0
  26. package/dist/server/app-info.js.map +1 -0
  27. package/dist/server/config.d.ts +1 -0
  28. package/dist/server/config.d.ts.map +1 -1
  29. package/dist/server/config.js +23 -3
  30. package/dist/server/config.js.map +1 -1
  31. package/dist/server/health.d.ts.map +1 -1
  32. package/dist/server/health.js +8 -0
  33. package/dist/server/health.js.map +1 -1
  34. package/dist/server/index.d.ts +14 -0
  35. package/dist/server/index.d.ts.map +1 -1
  36. package/dist/server/index.js +2 -0
  37. package/dist/server/index.js.map +1 -1
  38. package/dist/server/mocks.d.ts +23 -0
  39. package/dist/server/mocks.d.ts.map +1 -1
  40. package/dist/server/mocks.js +107 -13
  41. package/dist/server/mocks.js.map +1 -1
  42. package/dist/server/plugins.d.ts.map +1 -1
  43. package/dist/server/plugins.js +56 -11
  44. package/dist/server/plugins.js.map +1 -1
  45. package/index.js +16 -3
  46. package/package.json +1 -1
  47. package/web/dist/assets/alert-BmsRCcSL.js +1 -0
  48. package/web/dist/assets/arrow-right-BNum_060.js +1 -0
  49. package/web/dist/assets/{body-diff-view-BsgpSjQv.js → body-diff-view-ByCHr9bv.js} +2 -2
  50. package/web/dist/assets/{button-yArHqw81.js → button-BFNlGZ5p.js} +1 -1
  51. package/web/dist/assets/check-BkfHQ6re.js +1 -0
  52. package/web/dist/assets/checkbox-v2kzp7K8.js +1 -0
  53. package/web/dist/assets/chevron-down-DHwUtL4O.js +1 -0
  54. package/web/dist/assets/{circle-alert-DAWy5HuM.js → circle-alert-zMagrFuI.js} +1 -1
  55. package/web/dist/assets/{circle-x-BjSs1hQK.js → circle-x-BEkinhez.js} +1 -1
  56. package/web/dist/assets/code-DD-AYxxu.js +1 -0
  57. package/web/dist/assets/{copy-qMUl4peN.js → copy-BRnscYy1.js} +1 -1
  58. package/web/dist/assets/{detail-panel-DSDekH6Z.js → detail-panel-DyvoHlCG.js} +3 -3
  59. package/web/dist/assets/dist-BCvvYbmI.js +1 -0
  60. package/web/dist/assets/dist-BNcjMpca.js +1 -0
  61. package/web/dist/assets/{dist-CjLkNKST.js → dist-C-E2R2jk.js} +1 -1
  62. package/web/dist/assets/{dist-CwP5Ad1_.js → dist-CFZ4xMSF.js} +1 -1
  63. package/web/dist/assets/{dist-DGuRBXW6.js → dist-CRmX_NvH.js} +1 -1
  64. package/web/dist/assets/dist-DD7AvbXP.js +1 -0
  65. package/web/dist/assets/dist-LiAcI8CK.js +1 -0
  66. package/web/dist/assets/dist-UcOFuoN0.js +5 -0
  67. package/web/dist/assets/{dist-D2vbXHYx.js → dist-YM3jbhT-.js} +1 -1
  68. package/web/dist/assets/{editor-pane-actions-BAh-C02t.js → editor-pane-actions-DN-pxFsl.js} +1 -1
  69. package/web/dist/assets/es2015-CRmLuA2o.js +41 -0
  70. package/web/dist/assets/{global-panel-shell-CadrLZYn.js → global-panel-shell-BJaQ_VLp.js} +4 -4
  71. package/web/dist/assets/health-panel-BnxNCGvw.js +1 -0
  72. package/web/dist/assets/index-Bu3zaxzE.js +18 -0
  73. package/web/dist/assets/index-D9jGD_NA.css +2 -0
  74. package/web/dist/assets/mobile-proxy-panel-BxJ8OmLu.js +8 -0
  75. package/web/dist/assets/mock-config-Dp2D5iiv.js +1 -0
  76. package/web/dist/assets/mock-editor-panel-zqouxTGb.js +20 -0
  77. package/web/dist/assets/mocks-file-missing-note-B8TTBWtG.js +1 -0
  78. package/web/dist/assets/{monaco-editor-CLApq_Ip.js → monaco-editor-DeJNlo9k.js} +2 -2
  79. package/web/dist/assets/pane-split-Db1aWKUO.js +1 -0
  80. package/web/dist/assets/panel-heading-BAI_lNmT.js +1 -0
  81. package/web/dist/assets/{pencil-line-jiAfwHPx.js → pencil-line-CEZ7D-de.js} +1 -1
  82. package/web/dist/assets/plugin-code-editor-CQqpaaCR.js +2 -0
  83. package/web/dist/assets/plugin-config-CjcRhSZm.js +2 -0
  84. package/web/dist/assets/plugin-generator-Cr_gk3Tp.js +2 -0
  85. package/web/dist/assets/plugin-test-dialog-B5mVM3XE.js +7 -0
  86. package/web/dist/assets/plus-ixZQRprm.js +1 -0
  87. package/web/dist/assets/{refresh-cw-DdzbeDXU.js → refresh-cw-BfLoHqg5.js} +1 -1
  88. package/web/dist/assets/rotate-ccw-CRguJya4.js +1 -0
  89. package/web/dist/assets/route-preview-BZ3vhvsc.js +1 -0
  90. package/web/dist/assets/{rule-ai-assistant-panel-BwcsnKPL.js → rule-ai-assistant-panel-DfivYxZH.js} +2 -2
  91. package/web/dist/assets/rule-config-DSX8bBHe.js +15 -0
  92. package/web/dist/assets/rule-overview-panel-D5gY3akK.js +1 -0
  93. package/web/dist/assets/{server-CktUTlNz.js → server-eYXq3PbE.js} +1 -1
  94. package/web/dist/assets/settings-panel-Bfzfsovk.js +1 -0
  95. package/web/dist/assets/{shield-check-UHsTa1Dy.js → shield-check-hQXjdfZ7.js} +1 -1
  96. package/web/dist/assets/smartphone-D4Q7cQfm.js +1 -0
  97. package/web/dist/assets/switch-DpLnRvOJ.js +1 -0
  98. package/web/dist/assets/{syntax-highlight-mzmpJVhp.js → syntax-highlight-EJCxGikd.js} +1 -1
  99. package/web/dist/assets/{table-2-BE3hfnr0.js → table-2-DvGHhMm4.js} +1 -1
  100. package/web/dist/assets/table-C3mgEjkP.js +1 -0
  101. package/web/dist/assets/{textarea-3G4iMpe_.js → textarea-BjWF0pk4.js} +1 -1
  102. package/web/dist/assets/{wand-sparkles-B9ZnNs8E.js → wand-sparkles-DDGjzjnX.js} +1 -1
  103. package/web/dist/assets/{wifi-fTyrNPN8.js → wifi-QkTcTrED.js} +1 -1
  104. package/web/dist/assets/{zap-h2l6wVxY.js → zap-CEVoVkAg.js} +1 -1
  105. package/web/dist/index.html +17 -14
  106. package/web/dist/assets/alert-VYHxU7hf.js +0 -1
  107. package/web/dist/assets/arrow-right-DGB2MxsX.js +0 -1
  108. package/web/dist/assets/check-ByTjANaY.js +0 -1
  109. package/web/dist/assets/checkbox-Cz2-SWCV.js +0 -1
  110. package/web/dist/assets/chevron-down-vKjBY-BY.js +0 -1
  111. package/web/dist/assets/code-DAB_mRnu.js +0 -1
  112. package/web/dist/assets/dist-BW-gQyc_.js +0 -5
  113. package/web/dist/assets/dist-CymFeFOA.js +0 -1
  114. package/web/dist/assets/es2015-BiaNLfVn.js +0 -41
  115. package/web/dist/assets/health-panel-C1l1UYhP.js +0 -1
  116. package/web/dist/assets/index-BSIqySKG.css +0 -2
  117. package/web/dist/assets/index-F8M6NlaE.js +0 -18
  118. package/web/dist/assets/mobile-proxy-panel-DPvkiTMH.js +0 -8
  119. package/web/dist/assets/mock-config-nmYcctYW.js +0 -1
  120. package/web/dist/assets/mock-editor-panel-BlY81zhQ.js +0 -20
  121. package/web/dist/assets/pane-split-HuLbAVKX.js +0 -1
  122. package/web/dist/assets/panel-heading-0g2lYNqi.js +0 -1
  123. package/web/dist/assets/plugin-code-editor-CoXaIHMU.js +0 -2
  124. package/web/dist/assets/plugin-config-D3N-Ri5Z.js +0 -2
  125. package/web/dist/assets/plugin-generator-DyLJaca1.js +0 -2
  126. package/web/dist/assets/plugin-test-dialog-usuwZXfx.js +0 -7
  127. package/web/dist/assets/plus-BdrJey8J.js +0 -1
  128. package/web/dist/assets/rotate-ccw-_UaUgje4.js +0 -1
  129. package/web/dist/assets/route-preview-BFGlyZUy.js +0 -1
  130. package/web/dist/assets/rule-config-BTW8N6k2.js +0 -15
  131. package/web/dist/assets/rule-overview-panel-BB40JxzX.js +0 -1
  132. package/web/dist/assets/settings-panel-T2H_IWdm.js +0 -1
  133. package/web/dist/assets/smartphone-D5HBDIeh.js +0 -1
  134. package/web/dist/assets/switch-IUacG_eP.js +0 -1
  135. package/web/dist/assets/table-C5seB8Am.js +0 -1
  136. /package/web/dist/assets/{ai-config-store-pCWI7jgN.js → ai-config-store-B_VpGvwx.js} +0 -0
  137. /package/web/dist/assets/{babel-CvZe7MdW.js → babel-D1quDdNt.js} +0 -0
  138. /package/web/dist/assets/{clipboard-B46WvJwc.js → clipboard-DUgC_tNv.js} +0 -0
  139. /package/web/dist/assets/{dist-DQDFV3o1.js → dist-Bq2klZ3g.js} +0 -0
  140. /package/web/dist/assets/{estree-B2B6FyMe.js → estree--Vq99DGn.js} +0 -0
  141. /package/web/dist/assets/{html-Br6k1zjS.js → html-D2PZBPnP.js} +0 -0
  142. /package/web/dist/assets/{postcss-C5G0ZFoV.js → postcss-DfIslWug.js} +0 -0
  143. /package/web/dist/assets/{standalone-D2u92lem.js → standalone-D-fjaAIs.js} +0 -0
@@ -0,0 +1 @@
1
+ import{c as e,d as t,p as n,t as r}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as i}from"./refresh-cw-BfLoHqg5.js";import{t as a}from"./table-2-DvGHhMm4.js";import{$ as o,B as s,Et as c,G as l,H as u,Q as d,U as f,V as p,W as m,_t as h,et as g,f as _,lt as v,nt as y,tt as ee,xt as te,z as b}from"./index-Bu3zaxzE.js";import{a as x,i as S,n as C,o as w,r as T,t as E}from"./table-C3mgEjkP.js";var D=n(t(),1),O=e(),k=`border-l-2 border-l-transparent`,A=`text-muted-foreground opacity-75`;function j(e){return e.length>0?e.map(e=>`!${e}`).join(` `):`—`}function M({rules:e,activeFileName:t,onLocateRule:n,onSelectFile:M}){let[N,ne]=(0,D.useState)(null),[P,F]=(0,D.useState)(!0),[I,L]=(0,D.useState)(null),[R,z]=(0,D.useState)(`merged`),[B,V]=(0,D.useState)(``),H=(0,D.useDeferredValue)(B),U=(0,D.useCallback)(async()=>{F(!0),L(null);try{let e=await fetch(`/api/rule-files/overview`);if(!e.ok)throw Error(`加载失败(${e.status})`);ne(await e.json())}catch(e){L(e instanceof Error?e.message:`加载失败`)}finally{F(!1)}},[]);(0,D.useEffect)(()=>{U()},[U]);let W=(0,D.useMemo)(()=>N?.perFileRules.find(e=>e.name===t)??null,[N,t]),G=(0,D.useMemo)(()=>{if(!W||W.error)return!1;let t=W.rules.map(e=>({rule:e.rawRule,target:e.rawTarget,enabled:e.enabled,exclusions:e.exclusions}));return _(e)!==_(t)},[W,e]),K=(0,D.useMemo)(()=>{let e=new Map;for(let t of N?.conflicts??[])e.set(t.pattern,t);return e},[N]),q=(0,D.useCallback)(e=>{let t=H.trim().toLowerCase();return t?e.some(e=>e&&e.toLowerCase().includes(t)):!0},[H]),J=(0,D.useMemo)(()=>(N?.mergedRules??[]).map(e=>({winner:e,shadowed:K.get(e.pattern)?.shadowed??[]})).filter(({winner:e,shadowed:t})=>q([e.rawRule,e.rawTarget,e.file])||t.some(e=>q([e.rawRule,e.rawTarget,e.file]))),[N,K,q]),Y=N?.mergedRules.length??0,X=N?.conflicts.reduce((e,t)=>e+t.shadowed.length,0)??0,Z=(0,D.useMemo)(()=>(N?.perFileRules??[]).map(e=>({...e,matched:e.rules.filter(t=>q([t.rawRule,t.rawTarget,e.name]))})).filter(e=>e.error!=null||q([e.name])||e.matched.length>0),[N,q]),re=N?.perFileRules.reduce((e,t)=>e+t.rules.length,0)??0,ie=Z.reduce((e,t)=>e+t.matched.length,0),Q=(0,D.useCallback)((e,t,r)=>{n(e,t,r)},[n]),ae=(0,D.useCallback)((e,t)=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),M(t))},[M]),oe=()=>{if(P)return(0,O.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-2 p-2`,children:[(0,O.jsx)(y,{className:`h-8 w-full`}),(0,O.jsx)(y,{className:`h-8 w-full`}),(0,O.jsx)(y,{className:`h-8 w-3/4`})]});if(I)return(0,O.jsxs)(s,{className:`min-h-0 flex-1`,children:[(0,O.jsxs)(f,{children:[(0,O.jsx)(m,{variant:`icon`,children:(0,O.jsx)(v,{})}),(0,O.jsx)(l,{children:`加载失败`}),(0,O.jsx)(u,{children:I})]}),(0,O.jsx)(p,{children:(0,O.jsxs)(r,{variant:`outline`,onClick:()=>void U(),children:[(0,O.jsx)(i,{"data-icon":`inline-start`}),`重试`]})})]});let e=(N?.files.length??0)>0,t=N?.perFileRules.some(e=>e.rules.length>0||e.error!=null)??!1,n=H.trim().length>0;return e?t?R===`merged`&&!n&&(N?.mergedRules.length??0)===0?(0,O.jsx)(s,{className:`min-h-0 flex-1`,children:(0,O.jsxs)(f,{children:[(0,O.jsx)(m,{variant:`icon`,children:(0,O.jsx)(te,{})}),(0,O.jsx)(l,{children:`没有生效中的规则`}),(0,O.jsx)(u,{children:`规则全部被禁用,或没有启用任何规则文件;切换到「按文件」查看全部规则`})]})}):n&&R===`merged`&&J.length===0||n&&R===`files`&&Z.every(e=>e.matched.length===0&&e.error==null)?$():R===`merged`?se():ce():(0,O.jsx)(s,{className:`min-h-0 flex-1`,children:(0,O.jsxs)(f,{children:[(0,O.jsx)(m,{variant:`icon`,children:(0,O.jsx)(c,{})}),(0,O.jsx)(l,{children:`所有规则文件都是空的`}),(0,O.jsx)(u,{children:`还没有任何路由规则,先去路由规则页添加一条吧`})]})}):(0,O.jsx)(s,{className:`min-h-0 flex-1`,children:(0,O.jsxs)(f,{children:[(0,O.jsx)(m,{variant:`icon`,children:(0,O.jsx)(a,{})}),(0,O.jsx)(l,{children:`还没有规则文件`}),(0,O.jsx)(u,{children:`在路由规则页点击「+」创建第一个规则文件`})]})})},$=()=>(0,O.jsxs)(s,{className:`min-h-0 flex-1`,children:[(0,O.jsxs)(f,{children:[(0,O.jsx)(m,{variant:`icon`,children:(0,O.jsx)(h,{})}),(0,O.jsx)(l,{children:`无匹配结果`}),(0,O.jsxs)(u,{children:[`没有找到符合「`,H.trim(),`」的规则`]})]}),(0,O.jsx)(p,{children:(0,O.jsx)(r,{variant:`outline`,onClick:()=>V(``),children:`清空筛选`})})]}),se=()=>(0,O.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,children:[(0,O.jsx)(`div`,{className:`meddle-thin-scroll shrink-0 overflow-x-auto bg-card`,children:(0,O.jsxs)(E,{className:`table-fixed`,children:[(0,O.jsxs)(`colgroup`,{children:[(0,O.jsx)(`col`,{style:{width:`6rem`}}),(0,O.jsx)(`col`,{}),(0,O.jsx)(`col`,{style:{width:`8rem`}}),(0,O.jsx)(`col`,{})]}),(0,O.jsx)(x,{children:(0,O.jsxs)(w,{children:[(0,O.jsx)(S,{children:`来源`}),(0,O.jsx)(S,{children:`规则`}),(0,O.jsx)(S,{className:`hidden md:table-cell`,children:`排除`}),(0,O.jsx)(S,{children:`目标`})]})})]})}),(0,O.jsx)(b,{className:`min-h-0 flex-1`,children:(0,O.jsxs)(E,{className:`table-fixed`,children:[(0,O.jsxs)(`colgroup`,{children:[(0,O.jsx)(`col`,{style:{width:`6rem`}}),(0,O.jsx)(`col`,{}),(0,O.jsx)(`col`,{style:{width:`8rem`}}),(0,O.jsx)(`col`,{})]}),(0,O.jsx)(C,{children:J.map(({winner:e,shadowed:t})=>(0,O.jsxs)(D.Fragment,{children:[(0,O.jsxs)(w,{className:`${k} cursor-pointer`,onClick:()=>Q(e.file,e.rawRule,e.rawTarget),title:`点击定位到该规则`,children:[(0,O.jsx)(T,{className:`truncate text-xs text-muted-foreground`,children:e.file}),(0,O.jsxs)(T,{className:`break-all font-mono text-xs`,children:[e.rawRule,t.length>0&&(0,O.jsx)(g,{variant:`default`,className:`ml-2 px-1 py-0 text-[10px]`,title:`同名规则最终生效的定义`,children:`生效`})]}),(0,O.jsx)(T,{className:`hidden break-all font-mono text-xs text-muted-foreground md:table-cell`,children:j(e.exclusions)}),(0,O.jsx)(T,{className:`break-all font-mono text-xs`,children:e.rawTarget})]}),t.map((t,n)=>(0,O.jsxs)(w,{className:`${k} cursor-pointer ${A}`,onClick:()=>Q(t.file,t.rawRule,t.rawTarget),title:`点击定位到该规则`,children:[(0,O.jsx)(T,{className:`truncate text-xs`,children:t.file}),(0,O.jsx)(T,{className:`break-all font-mono text-xs`,children:(0,O.jsxs)(`span`,{className:`inline-flex flex-wrap items-center gap-1.5`,children:[t.rawRule,(0,O.jsx)(g,{variant:`destructive`,className:`px-1 py-0 text-[10px]`,title:`已被 ${e.file} 中的同名规则覆盖,实际不生效`,children:`已被覆盖`})]})}),(0,O.jsx)(T,{className:`hidden break-all font-mono text-xs md:table-cell`,children:`—`}),(0,O.jsx)(T,{className:`break-all font-mono text-xs`,children:t.rawTarget})]},`merged-shadowed-${n}`))]},`merged-group-${e.pattern}`))})]})})]}),ce=()=>(0,O.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,children:[(0,O.jsx)(`div`,{className:`meddle-thin-scroll shrink-0 overflow-x-auto bg-card`,children:(0,O.jsxs)(E,{className:`table-fixed`,children:[(0,O.jsxs)(`colgroup`,{children:[(0,O.jsx)(`col`,{style:{width:`3.5rem`}}),(0,O.jsx)(`col`,{}),(0,O.jsx)(`col`,{style:{width:`8rem`}}),(0,O.jsx)(`col`,{})]}),(0,O.jsx)(x,{children:(0,O.jsxs)(w,{children:[(0,O.jsx)(S,{children:`状态`}),(0,O.jsx)(S,{children:`规则`}),(0,O.jsx)(S,{className:`hidden md:table-cell`,children:`排除`}),(0,O.jsx)(S,{children:`目标`})]})})]})}),(0,O.jsx)(b,{className:`min-h-0 flex-1`,children:(0,O.jsxs)(E,{className:`table-fixed`,children:[(0,O.jsxs)(`colgroup`,{children:[(0,O.jsx)(`col`,{style:{width:`3.5rem`}}),(0,O.jsx)(`col`,{}),(0,O.jsx)(`col`,{style:{width:`8rem`}}),(0,O.jsx)(`col`,{})]}),(0,O.jsx)(C,{children:Z.map(e=>(0,O.jsxs)(D.Fragment,{children:[(0,O.jsx)(w,{className:`hover:bg-accent/60`,children:(0,O.jsx)(T,{colSpan:4,className:`cursor-pointer bg-muted/50 p-2 align-middle`,role:`button`,tabIndex:0,onClick:()=>M(e.name),onKeyDown:t=>ae(t,e.name),title:`点击切换到该规则文件`,children:(0,O.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2 font-medium`,children:[e.name,(0,O.jsx)(g,{variant:e.enabled?`default`:`secondary`,className:`px-1 py-0 text-[10px]`,children:e.enabled?`启用`:`禁用`}),(0,O.jsx)(g,{variant:`secondary`,className:`px-1 py-0 text-[10px]`,children:e.rules.length})]})})}),e.error&&(0,O.jsx)(w,{className:`text-destructive`,children:(0,O.jsx)(T,{colSpan:4,className:`p-2 text-xs`,children:(0,O.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,O.jsx)(v,{className:`h-3.5 w-3.5 shrink-0`}),`读取失败:`,e.error]})})}),e.matched.map((t,n)=>(0,O.jsxs)(w,{className:`cursor-pointer ${t.enabled?``:`opacity-60`}`,onClick:()=>Q(e.name,t.rawRule,t.rawTarget),title:`点击定位到该规则`,children:[(0,O.jsx)(T,{children:(0,O.jsx)(g,{variant:t.enabled?`default`:`secondary`,className:`px-1 py-0 text-[10px]`,children:t.enabled?`启用`:`禁用`})}),(0,O.jsx)(T,{className:`break-all font-mono text-xs`,children:t.rawRule}),(0,O.jsx)(T,{className:`hidden break-all font-mono text-xs text-muted-foreground md:table-cell`,children:j(t.exclusions)}),(0,O.jsx)(T,{className:`break-all font-mono text-xs ${t.enabled?``:`line-through`}`,children:t.rawTarget})]},`file-rule-${n}`))]},`file-group-${e.name}`))})]})})]}),le=R===`merged`?Y+X:re,ue=R===`merged`?J.reduce((e,t)=>e+1+t.shadowed.length,0):ie;return(0,O.jsxs)(`div`,{className:`app-panel-content flex h-full flex-col gap-3`,children:[(0,O.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,O.jsxs)(d,{type:`single`,value:R,onValueChange:e=>{e&&z(e)},variant:`outline`,size:`sm`,className:`bg-background`,"aria-label":`总览视图`,children:[(0,O.jsx)(o,{value:`merged`,children:`生效规则`}),(0,O.jsx)(o,{value:`files`,children:`按文件`})]}),(0,O.jsxs)(`div`,{className:`relative min-w-40 flex-1`,children:[(0,O.jsx)(h,{className:`pointer-events-none absolute top-1/2 left-2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,O.jsx)(ee,{value:B,onChange:e=>V(e.target.value),placeholder:`搜索规则 / 目标 / 文件名`,className:`h-8 pl-8`,"aria-label":`搜索规则`})]}),(0,O.jsx)(r,{type:`button`,variant:`ghost`,size:`icon-sm`,onClick:()=>void U(),disabled:P,"aria-label":`刷新总览`,title:`刷新`,children:(0,O.jsx)(i,{})})]}),G&&(0,O.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800`,children:[(0,O.jsx)(v,{className:`h-3.5 w-3.5 shrink-0`}),(0,O.jsxs)(`span`,{children:[`「`,t,`」有未保存修改,此处展示的是代理当前使用的`,(0,O.jsx)(`b`,{children:`已保存内容`})]})]}),!P&&!I&&(N?.files.length??0)>0&&(0,O.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2 text-xs text-muted-foreground`,children:[(0,O.jsxs)(`span`,{children:[ue,` / `,le,` 条`,R===`merged`&&H.trim()===``&&X>0?`,其中 ${X} 条被同名规则覆盖`:``]}),R===`merged`&&(0,O.jsx)(`span`,{children:`按代理实际生效顺序排列(后定义覆盖先定义)`}),R===`files`&&(0,O.jsx)(`span`,{children:`点击文件名切换到该文件`})]}),oe()]})}export{M as RuleOverviewPanel};
@@ -1 +1 @@
1
- import{l as e}from"./button-yArHqw81.js";var t=e(`clock`,[[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),n=e(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]);export{t as n,n as t};
1
+ import{u as e}from"./button-BFNlGZ5p.js";var t=e(`clock`,[[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),n=e(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]);export{t as n,n as t};
@@ -0,0 +1 @@
1
+ import{c as e,d as t,p as n,t as r,u as i}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as ee}from"./check-BkfHQ6re.js";import{t as a}from"./circle-alert-zMagrFuI.js";import{t as o}from"./circle-x-BEkinhez.js";import{t as s}from"./plus-ixZQRprm.js";import{t as te}from"./refresh-cw-BfLoHqg5.js";import{t as ne}from"./rotate-ccw-CRguJya4.js";import{t as re}from"./smartphone-D4Q7cQfm.js";import"./es2015-CRmLuA2o.js";import{t as ie}from"./switch-DpLnRvOJ.js";import{a as c,c as ae,l as oe,n as se,o as ce,r as l,s as le,t as ue}from"./ai-config-store-B_VpGvwx.js";import{$ as u,At as d,C as de,Ct as fe,D as pe,E as me,F as f,J as he,K as ge,M as _e,N as p,Nt as m,O as h,P as ve,Q as g,S as _,T as ye,X as be,Y as v,Z as xe,_ as y,a as Se,b,c as Ce,et as we,g as x,gt as Te,h as Ee,ht as De,m as Oe,o as ke,p as Ae,pt as je,q as S,s as Me,tt as C,ut as Ne,v as Pe,vt as w,w as Fe,wt as Ie,y as Le}from"./index-Bu3zaxzE.js";import{n as Re,r as ze,t as Be}from"./alert-BmsRCcSL.js";import{i as Ve,n as He}from"./mocks-file-missing-note-B8TTBWtG.js";var Ue=i(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),We=i(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),Ge=i(`stethoscope`,[[`path`,{d:`M11 2v2`,key:`1539x4`}],[`path`,{d:`M5 2v2`,key:`1yf1q8`}],[`path`,{d:`M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1`,key:`rb5t3r`}],[`path`,{d:`M8 15a6 6 0 0 0 12 0v-3`,key:`x18d4x`}],[`circle`,{cx:`20`,cy:`10`,r:`2`,key:`ts1r5v`}]]),T=n(t(),1);async function Ke(){try{let e=await fetch(`/api/version`);if(!e.ok)return null;let t=await e.json();return t&&typeof t==`object`&&typeof t.version==`string`&&t.version.trim()||null}catch{return null}}var E=e(),qe=[{value:`75`,label:`75%`,scale:.75},{value:`90`,label:`90%`,scale:.9},{value:`100`,label:`100%`,scale:1},{value:`110`,label:`110%`,scale:1.1},{value:`125`,label:`125%`,scale:1.25},{value:`150`,label:`150%`,scale:1.5}],Je=[{value:`auto`,label:`自动`,color:`linear-gradient(135deg, oklch(0.623 0.214 259.815), oklch(0.606 0.25 292.717))`},{value:`neutral`,label:`中性`,color:`oklch(0.556 0 0)`},{value:`blue`,label:`蓝色`,color:`oklch(0.623 0.214 259.815)`},{value:`violet`,label:`紫色`,color:`oklch(0.606 0.25 292.717)`},{value:`green`,label:`绿色`,color:`oklch(0.627 0.194 149.214)`},{value:`orange`,label:`橙色`,color:`oklch(0.646 0.222 41.116)`},{value:`rose`,label:`玫红`,color:`oklch(0.645 0.246 16.439)`}],D=`app-panel-content mt-0`,O=`app-field-group`,k=`app-section`,A=e=>{if(!e)return`100`;let t={small:`90`,medium:`100`,large:`110`};return e in t?t[e]:qe.some(t=>t.value===e)?e:`100`};function Ye({open:e=!1,onOpenChange:t,embedded:n=!1}){let{theme:i,accentColor:Ye,setTheme:Xe,setAccentColor:Ze,setZoom:j}=Ae(),[M,Qe]=(0,T.useState)(`preferences`),[N,P]=(0,T.useState)(()=>l()),[F,$e]=(0,T.useState)(!1),[I,L]=(0,T.useState)(!1),[R,z]=(0,T.useState)(null),[et,B]=(0,T.useState)(``),[V,H]=(0,T.useState)(null),[U,tt]=(0,T.useState)(``),{status:W,refresh:G}=Ce(),[nt,rt]=(0,T.useState)([]),[K,q]=(0,T.useState)({}),[J,it]=(0,T.useState)(``),[Y,at]=(0,T.useState)(``),[X,ot]=(0,T.useState)(null),[Z,st]=(0,T.useState)(!1),[ct,lt]=(0,T.useState)(null);(0,T.useEffect)(()=>{let e=!1;return Ke().then(t=>{e||lt(t)}),()=>{e=!0}},[]);let[Q,ut]=(0,T.useState)(()=>A(Oe().fontSize)),[dt,ft]=(0,T.useState)(!1);(0,T.useEffect)(()=>{Ee().then(e=>{let t=A(e.fontSize);ut(t),j(parseInt(t,10)/100),ft(!0)}).catch(()=>{ft(!0)})},[j]),(0,T.useEffect)(()=>{if(!dt)return;let e=A(Q);j(parseInt(e,10)/100),x({fontSize:e}).catch(console.error)},[j,dt,Q]),(0,T.useEffect)(()=>{(e||n)&&(Ee().then(e=>{P(e.aiConfig),tt(e.mocksFilePath||``),q(e.clientAliases||{})}).catch(()=>{P(l())}),z(null),B(``),fetch(`/api/rule-files`).then(e=>e.json()).then(e=>{Array.isArray(e)&&rt(e)}).catch(()=>{}))},[e,n]);let pt=e=>{let t=c(e);P({...N,provider:e,baseUrl:t.baseUrl,model:t.model})},mt=async()=>{L(!0);try{await x({aiConfig:N}),ae(N),z(`success`),B(`AI 配置保存成功`),y.success(`AI 配置保存成功`)}catch(e){let t=e instanceof Error?e.message:`保存失败`;z(`error`),B(t),y.error(t)}finally{L(!1)}},ht=()=>{le(),P(l()),z(null),B(``)},gt=async()=>{if(!ce(N)){z(`error`),B(`请填写完整的配置信息`);return}L(!0),z(null),B(`测试中...`);try{let e=N.baseUrl,t={"Content-Type":`application/json`},n;N.provider===`anthropic`?(t[`x-api-key`]=N.apiKey,t[`anthropic-version`]=`2023-06-01`,n={model:N.model,max_tokens:100,system:`You are a helpful assistant.`,messages:[{role:`user`,content:`Say "test successful"`}],temperature:.3}):(t.Authorization=`Bearer ${N.apiKey}`,n={model:N.model,messages:[{role:`system`,content:`You are a helpful assistant.`},{role:`user`,content:`Say "test successful"`}],temperature:.3,max_tokens:100});let r=await fetch(e,{method:`POST`,headers:t,body:JSON.stringify(n)});if(!r.ok){let e=await r.text();throw Error(`API错误 (${r.status}): ${e}`)}let i=await r.json();if(N.provider===`anthropic`){if(!i.content?.[0]?.text)throw Error(`API响应格式不正确`)}else if(!i.choices?.[0]?.message?.content)throw Error(`API响应格式不正确`);z(`success`),B(`连接测试成功! API配置正常`)}catch(e){z(`error`),B(e instanceof Error?e.message:`测试失败`)}finally{L(!1)}},_t=(0,T.useCallback)(async()=>{try{let e=await fetch(`/api/refresh-config`,{method:`POST`});if(e.ok){let t=await e.json();G(),z(`success`),B(t.message||`配置已刷新`),setTimeout(()=>{z(null),B(``)},2e3)}else{let t=await e.json();z(`error`),B(t.error||`刷新配置失败`),setTimeout(()=>{z(null),B(``)},2e3)}}catch(e){console.error(`刷新配置失败:`,e),z(`error`),B(`刷新配置失败`),setTimeout(()=>{z(null),B(``)},2e3)}},[G]),vt=(0,T.useCallback)(async()=>{st(!0),ot(null);try{let e=await fetch(`/api/config-doctor`);e.ok?ot(await e.json()):(z(`error`),B(`诊断失败`),setTimeout(()=>{z(null),B(``)},2e3))}catch(e){console.error(`诊断失败:`,e),z(`error`),B(`诊断失败`),setTimeout(()=>{z(null),B(``)},2e3)}finally{st(!1)}},[]),yt=()=>{let e=J.trim(),t=Y.trim();!e||!t||(q(n=>({...n,[e]:t})),it(``),at(``))},bt=async()=>{L(!0);try{await x({clientAliases:K}),z(`success`),B(`客户端名称已保存,新请求立即生效`),y.success(`客户端名称保存成功`)}catch(e){let t=e instanceof Error?e.message:`保存失败`;z(`error`),B(t),y.error(t)}finally{L(!1)}},xt=async()=>{L(!0);try{await x({mocksFilePath:U}),G(),z(`success`),B(`Mock 文件路径已更新,已切换到新文件`),y.success(`Mock 文件路径保存成功`),setTimeout(()=>{z(null),B(``)},3e3)}catch(e){let t=e instanceof Error?e.message:`保存失败`;z(`error`),B(t),y.error(t)}finally{L(!1)}};Pe({active:(e||n)&&M!==`preferences`,enabled:!I,priority:Le.panel,onSave:()=>{if(M===`config`)return xt();if(M===`clients`)return bt();if(M===`ai`)return mt()}});let $=(0,E.jsxs)(E.Fragment,{children:[!n&&(0,E.jsxs)(me,{className:`px-6 pt-6 pb-4`,children:[(0,E.jsxs)(pe,{className:`flex items-center gap-2`,children:[(0,E.jsx)(Te,{className:`h-5 w-5`}),`系统设置`]}),(0,E.jsx)(ye,{children:`管理系统偏好、配置和 AI 功能`})]}),(0,E.jsxs)(_e,{value:M,onValueChange:e=>Qe(e),orientation:`vertical`,className:`min-h-0 flex-1 gap-0`,children:[(0,E.jsxs)(ve,{"aria-label":`设置分类`,className:`h-full w-14 shrink-0 self-stretch justify-start gap-1 rounded-none border-r bg-muted/25 p-2 group-data-[orientation=vertical]/tabs:!h-full sm:w-44 sm:p-3`,children:[(0,E.jsxs)(f,{value:`preferences`,className:`h-9 w-full flex-none justify-start px-2.5 sm:px-3`,children:[(0,E.jsx)(Te,{}),(0,E.jsx)(`span`,{className:`hidden sm:inline`,children:`偏好设置`})]}),(0,E.jsxs)(f,{value:`config`,className:`h-9 w-full flex-none justify-start px-2.5 sm:px-3`,children:[(0,E.jsx)(d,{}),(0,E.jsx)(`span`,{className:`hidden sm:inline`,children:`配置文件`})]}),(0,E.jsxs)(f,{value:`clients`,className:`h-9 w-full flex-none justify-start px-2.5 sm:px-3`,children:[(0,E.jsx)(re,{}),(0,E.jsx)(`span`,{className:`hidden sm:inline`,children:`客户端`})]}),(0,E.jsxs)(f,{value:`ai`,className:`h-9 w-full flex-none justify-start px-2.5 sm:px-3`,children:[(0,E.jsx)(De,{}),(0,E.jsx)(`span`,{className:`hidden sm:inline`,children:`AI 配置`})]})]}),(0,E.jsxs)(p,{value:`preferences`,className:D,children:[(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{className:`text-sm`,children:`主题`}),(0,E.jsxs)(ge,{value:i,onValueChange:e=>Xe(e),children:[(0,E.jsx)(be,{children:(0,E.jsx)(xe,{placeholder:`选择主题`})}),(0,E.jsx)(S,{children:(0,E.jsxs)(he,{children:[(0,E.jsx)(v,{value:`system`,children:(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(Ie,{className:`size-4`}),`跟随系统`]})}),(0,E.jsx)(v,{value:`light`,children:(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(je,{className:`size-4`}),`浅色模式`]})}),(0,E.jsx)(v,{value:`dark`,children:(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(fe,{className:`size-4`}),`深色模式`]})})]})})]})]}),(0,E.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,E.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,E.jsx)(h,{className:`text-sm`,children:`强调色`}),(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`统一按钮、状态、选中项和焦点样式。自动模式会根据明暗主题选择合适的颜色。`})]}),(0,E.jsx)(g,{type:`single`,value:Ye,onValueChange:e=>{e&&Ze(e)},variant:`outline`,spacing:1,className:`flex-wrap justify-start`,"aria-label":`强调色`,children:Je.map(e=>(0,E.jsxs)(u,{value:e.value,"aria-label":e.label,children:[e.value===`auto`?(0,E.jsx)(De,{"data-icon":`inline-start`}):(0,E.jsx)(`span`,{className:`size-3 rounded-full border border-foreground/10`,style:{background:e.color}}),e.label]},e.value))})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{className:`text-sm`,children:`缩放比例`}),(0,E.jsxs)(ge,{value:Q,onValueChange:ut,children:[(0,E.jsx)(be,{children:(0,E.jsx)(xe,{placeholder:`选择缩放比例`})}),(0,E.jsx)(S,{children:(0,E.jsx)(he,{children:qe.map(e=>(0,E.jsx)(v,{value:e.value,children:e.label},e.value))})})]})]}),(0,E.jsx)(_,{}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(`h3`,{className:`text-sm font-medium`,children:`关于`}),(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Meddle - HTTP 调试代理工具`}),(0,E.jsxs)(`p`,{className:`text-xs text-muted-foreground`,"data-testid":`settings-app-version`,children:[`版本: `,ct??`—`]})]})]}),(0,E.jsxs)(p,{value:`config`,className:D,children:[(0,E.jsxs)(`div`,{className:k,children:[(0,E.jsx)(h,{className:`text-sm font-medium`,children:`路由规则文件`}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2 p-3 bg-muted rounded-md`,children:[(0,E.jsx)(d,{className:`h-4 w-4 text-muted-foreground shrink-0`}),(0,E.jsx)(`span`,{className:`text-xs font-mono truncate flex-1`,children:`~/.meddle/route-rules/`})]}),nt.length>0?(0,E.jsx)(`div`,{className:`space-y-2`,children:nt.map(e=>(0,E.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border px-3 py-2.5 text-sm`,children:[(0,E.jsx)(we,{variant:e.enabled?`default`:`secondary`,className:`text-[10px]`,children:e.enabled?`已启用`:`未启用`}),(0,E.jsxs)(`span`,{className:`flex-1 truncate text-xs`,children:[e.name,`.txt`]}),(0,E.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[e.ruleCount,` 条规则`]})]},e.name))}):(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`暂无规则文件`}),(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`规则文件存放于 ~/.meddle/route-rules/ 目录,纯文本格式。在"路由规则"页面管理。`})]})]}),(0,E.jsx)(_,{}),(0,E.jsxs)(`div`,{className:k,children:[(0,E.jsx)(h,{className:`text-sm font-medium`,children:`Mock 规则文件`}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2 p-3 bg-muted rounded-md`,children:[(0,E.jsx)(d,{className:`h-4 w-4 text-muted-foreground shrink-0`}),(0,E.jsx)(`span`,{className:`text-xs font-mono truncate flex-1`,children:U||`默认: ~/.meddle/mocks.json`})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{htmlFor:`mocksPath`,className:`text-xs text-muted-foreground`,children:`自定义 Mock 规则文件路径(留空使用默认)`}),(0,E.jsxs)(`div`,{className:`flex gap-2`,children:[(0,E.jsx)(C,{id:`mocksPath`,value:U,onChange:e=>tt(e.target.value),placeholder:`如: /path/to/my-mocks.json`,className:`flex-1 h-8 text-sm font-mono`}),(0,E.jsxs)(b,{variant:`outline`,size:`sm`,onClick:xt,disabled:I,className:`h-8`,children:[(0,E.jsx)(w,{"data-icon":`inline-start`,className:`h-3 w-3`}),`应用`]})]}),(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`必须是 JSON 格式的 Mock 规则文件`}),ke(W)?(0,E.jsx)(He,{testId:`settings-mocks-file-invalid`,location:Se(W.parseError)}):Me(W)?(0,E.jsx)(Ve,{testId:`settings-mocks-file-missing`}):null]})]})]}),(0,E.jsx)(_,{}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(`h3`,{className:`text-sm font-medium`,children:`操作`}),(0,E.jsxs)(`div`,{className:`flex gap-2`,children:[(0,E.jsxs)(r,{variant:`outline`,size:`sm`,onClick:_t,children:[(0,E.jsx)(te,{className:`h-4 w-4 mr-1`}),`重新加载配置`]}),(0,E.jsxs)(r,{variant:`outline`,size:`sm`,onClick:vt,disabled:Z,children:[(0,E.jsx)(Ge,{className:`h-4 w-4 mr-1`}),Z?`诊断中...`:`诊断配置`]})]}),(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`点击重新加载可应用修改后的配置文件,点击诊断配置可检查配置有效性`})]}),X&&(0,E.jsxs)(`div`,{className:k,children:[(0,E.jsx)(_,{}),(0,E.jsxs)(`div`,{children:[(0,E.jsxs)(`h3`,{className:`mb-4 flex items-center gap-2 text-sm font-medium`,children:[(0,E.jsx)(Ge,{className:`h-4 w-4`}),`诊断结果`]}),(0,E.jsxs)(`div`,{className:`mb-3 p-3 rounded-md border ${X.status===`ok`?`bg-green-50 dark:bg-green-950/20 border-green-200 dark:border-green-900`:X.status===`warning`?`bg-yellow-50 dark:bg-yellow-950/20 border-yellow-200 dark:border-yellow-900`:`bg-red-50 dark:bg-red-950/20 border-red-200 dark:border-red-900`}`,children:[X.status===`ok`&&(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(m,{className:`h-5 w-5 text-green-600 dark:text-green-400`}),(0,E.jsx)(`span`,{className:`text-sm font-medium text-green-700 dark:text-green-300`,children:`所有检查通过!配置正常。`})]}),X.status===`warning`&&(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(a,{className:`h-5 w-5 text-yellow-600 dark:text-yellow-400`}),(0,E.jsxs)(`span`,{className:`text-sm font-medium text-yellow-700 dark:text-yellow-300`,children:[`发现 `,X.warnings.length,` 个警告`]})]}),X.status===`error`&&(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(o,{className:`h-5 w-5 text-red-600 dark:text-red-400`}),(0,E.jsxs)(`span`,{className:`text-sm font-medium text-red-700 dark:text-red-300`,children:[`发现 `,X.errors.length,` 个错误`]})]})]}),(0,E.jsx)(`div`,{className:O,children:X.checks.map((e,t)=>(0,E.jsx)(`div`,{className:`p-2 rounded border bg-card`,children:(0,E.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,E.jsx)(m,{className:`h-4 w-4 text-green-600 dark:text-green-400 mt-0.5 shrink-0`}),(0,E.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,E.jsx)(`div`,{className:`text-sm font-medium`,children:e.name}),(0,E.jsx)(`div`,{className:`text-xs text-muted-foreground font-mono truncate`,children:e.path}),e.details&&(0,E.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1`,children:[e.details.totalFiles!==void 0&&`${e.details.enabledFiles}/${e.details.totalFiles} 个文件已启用`,e.details.totalRules!==void 0&&` · ${e.details.totalRules} 条规则`,e.details.rules!==void 0&&`${e.details.rules} 条规则`,e.details.total!==void 0&&`${e.details.total} 条规则 (${e.details.enabled} 已启用)`,e.details.size!==void 0&&` · ${e.details.size} bytes`]})]})]})},t))}),X.warnings&&X.warnings.length>0&&(0,E.jsxs)(`div`,{className:`mt-3 space-y-1`,children:[(0,E.jsx)(`div`,{className:`text-xs font-medium text-yellow-700 dark:text-yellow-300`,children:`警告:`}),X.warnings.map((e,t)=>(0,E.jsxs)(`div`,{className:`flex items-start gap-2 text-xs text-yellow-600 dark:text-yellow-400`,children:[(0,E.jsx)(a,{className:`h-3 w-3 mt-0.5 shrink-0`}),(0,E.jsx)(`span`,{children:e})]},t))]}),X.errors&&X.errors.length>0&&(0,E.jsxs)(`div`,{className:`mt-3 space-y-1`,children:[(0,E.jsx)(`div`,{className:`text-xs font-medium text-red-700 dark:text-red-300`,children:`错误:`}),X.errors.map((e,t)=>(0,E.jsxs)(`div`,{className:`flex items-start gap-2 text-xs text-red-600 dark:text-red-400`,children:[(0,E.jsx)(o,{className:`h-3 w-3 mt-0.5 shrink-0`}),(0,E.jsx)(`span`,{children:e})]},t))]})]})]})]}),(0,E.jsxs)(p,{value:`clients`,className:D,children:[(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsxs)(`h3`,{className:`text-sm font-medium flex items-center gap-2`,children:[(0,E.jsx)(re,{className:`h-4 w-4`}),`远程客户端名称`]}),(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`将日志中的客户端 IP 映射为设备名称。保存后新请求立即生效,无需重启代理。`})]}),(0,E.jsx)(`div`,{className:O,children:Object.entries(K).length===0?(0,E.jsx)(`div`,{className:`rounded-md border border-dashed p-4 text-center text-xs text-muted-foreground`,children:`尚未配置设备名称`}):Object.entries(K).map(([e,t])=>(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(C,{value:e,readOnly:!0,className:`h-8 flex-1 font-mono text-xs bg-muted/40`,"aria-label":`客户端 IP ${e}`}),(0,E.jsx)(C,{value:t,onChange:t=>{let n=t.target.value;q(t=>({...t,[e]:n}))},className:`h-8 flex-1 text-sm`,"aria-label":`${e} 的设备名称`}),(0,E.jsx)(r,{variant:`ghost`,size:`icon-sm`,className:`text-muted-foreground hover:text-destructive`,onClick:()=>{q(t=>{let n={...t};return delete n[e],n})},title:`删除设备名称`,"aria-label":`删除设备名称`,children:(0,E.jsx)(Ne,{className:`h-4 w-4`})})]},e))}),(0,E.jsx)(_,{}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{className:`text-sm`,children:`添加设备`}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(C,{value:J,onChange:e=>it(e.target.value),placeholder:`客户端 IP,例如 10.13.232.187`,className:`h-8 flex-1 font-mono text-xs`}),(0,E.jsx)(C,{value:Y,onChange:e=>at(e.target.value),onKeyDown:e=>{e.key===`Enter`&&yt()},placeholder:`设备名称,例如 iPhone`,className:`h-8 flex-1 text-sm`}),(0,E.jsxs)(r,{variant:`outline`,size:`sm`,className:`h-8`,onClick:yt,disabled:!J.trim()||!Y.trim(),children:[(0,E.jsx)(s,{className:`h-4 w-4 mr-1`}),`添加`]})]})]}),(0,E.jsxs)(b,{onClick:bt,disabled:I,children:[(0,E.jsx)(w,{"data-icon":`inline-start`,className:`h-4 w-4`}),I?`保存中...`:`保存客户端名称`]})]}),(0,E.jsxs)(p,{value:`ai`,className:D,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(h,{className:`text-sm`,children:`启用 AI 功能`}),(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`启用智能代码修复功能`})]}),(0,E.jsx)(ie,{checked:N.enabled,onCheckedChange:e=>P({...N,enabled:e}),"aria-label":`启用 AI 功能`})]}),(0,E.jsx)(_,{}),(0,E.jsxs)(`div`,{className:k,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,E.jsx)(h,{className:`text-sm`,children:`AI 模型配置`}),(0,E.jsxs)(r,{variant:`outline`,size:`sm`,onClick:()=>{H({name:``,provider:`openai`,apiKey:``,baseUrl:`https://api.openai.com/v1/chat/completions`,model:`gpt-4o-mini`})},children:[(0,E.jsx)(s,{className:`h-4 w-4 mr-1`}),`添加模型`]})]}),(0,E.jsx)(`div`,{className:O,children:N.models&&N.models.length>0?N.models.map(e=>(0,E.jsx)(`div`,{className:`p-3 rounded-md border ${N.activeModelId===e.id?`border-primary bg-primary/5`:`border-border`}`,children:(0,E.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,E.jsxs)(`div`,{className:`flex-1`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`span`,{className:`font-medium text-sm`,children:e.name}),N.activeModelId===e.id&&(0,E.jsx)(we,{variant:`default`,className:`text-xs`,children:`当前使用`})]}),(0,E.jsxs)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:[e.provider===`openai`?`OpenAI`:`Anthropic`,` - `,e.model]})]}),(0,E.jsxs)(`div`,{className:`flex gap-1`,children:[N.activeModelId!==e.id&&(0,E.jsxs)(r,{variant:`ghost`,size:`xs`,onClick:()=>P(oe(N,e.id)),children:[(0,E.jsx)(ee,{className:`h-3 w-3 mr-1`}),`使用`]}),(0,E.jsx)(r,{variant:`ghost`,size:`icon-sm`,onClick:()=>P(se(N,e.id)),className:`text-destructive`,"aria-label":`删除模型`,children:(0,E.jsx)(Ne,{className:`h-3 w-3`})})]})]})},e.id)):(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground italic py-4 text-center`,children:`暂无模型配置,点击"添加模型"创建`})}),V&&(0,E.jsxs)(`div`,{className:`space-y-5 rounded-md border border-primary bg-primary/5 p-4`,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,E.jsx)(h,{className:`text-sm font-medium`,children:`新增模型`}),(0,E.jsx)(r,{variant:`ghost`,size:`icon-xs`,onClick:()=>H(null),"aria-label":`关闭新增模型表单`,children:(0,E.jsx)(o,{className:`h-4 w-4`})})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{htmlFor:`newModelName`,className:`text-xs`,children:`模型名称`}),(0,E.jsx)(C,{id:`newModelName`,value:V.name||``,onChange:e=>H({...V,name:e.target.value}),placeholder:`如:GPT-4o Mini`,className:`h-8 text-sm`})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{className:`text-xs`,children:`服务商`}),(0,E.jsxs)(g,{type:`single`,value:V.provider,onValueChange:e=>{if(e===`openai`){let e=c(`openai`);H({...V,provider:`openai`,baseUrl:e.baseUrl,model:e.model})}else if(e===`anthropic`){let e=c(`anthropic`);H({...V,provider:`anthropic`,baseUrl:e.baseUrl,model:e.model})}},variant:`outline`,size:`sm`,spacing:0,children:[(0,E.jsx)(u,{value:`openai`,children:`OpenAI`}),(0,E.jsx)(u,{value:`anthropic`,children:`Anthropic`})]})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{htmlFor:`newModelApiKey`,className:`text-xs`,children:`API Key`}),(0,E.jsx)(C,{id:`newModelApiKey`,type:F?`text`:`password`,value:V.apiKey||``,onChange:e=>H({...V,apiKey:e.target.value}),placeholder:`输入 API Key`,className:`h-8 text-sm`})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{htmlFor:`newModelModel`,className:`text-xs`,children:`模型`}),(0,E.jsx)(C,{id:`newModelModel`,value:V.model||``,onChange:e=>H({...V,model:e.target.value}),placeholder:`模型名称`,className:`h-8 text-sm`})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{htmlFor:`newModelBaseUrl`,className:`text-xs`,children:`API 端点`}),(0,E.jsx)(C,{id:`newModelBaseUrl`,value:V.baseUrl||``,onChange:e=>H({...V,baseUrl:e.target.value}),placeholder:`API 端点`,className:`h-8 text-sm`})]}),(0,E.jsxs)(`div`,{className:`flex justify-end gap-2 pt-2`,children:[(0,E.jsx)(r,{variant:`outline`,size:`xs`,onClick:()=>H(null),children:`取消`}),(0,E.jsxs)(r,{size:`xs`,onClick:()=>{V.name&&V.apiKey&&V.model&&V.baseUrl&&(P(ue(N,V)),H(null))},disabled:!V.name||!V.apiKey||!V.model||!V.baseUrl,children:[(0,E.jsx)(s,{className:`h-3 w-3 mr-1`}),`添加`]})]})]})]}),(0,E.jsx)(_,{}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(h,{className:`text-sm`,children:`传统配置(向后兼容)`}),(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`如果未配置多模型,将使用此配置`})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{className:`text-xs`,children:`AI 服务商`}),(0,E.jsxs)(g,{type:`single`,value:N.provider,onValueChange:e=>{(e===`openai`||e===`anthropic`)&&pt(e)},variant:`outline`,size:`sm`,spacing:0,children:[(0,E.jsx)(u,{value:`openai`,children:`OpenAI`}),(0,E.jsx)(u,{value:`anthropic`,children:`Anthropic`})]})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{htmlFor:`apiKey`,className:`text-xs`,children:`API Key`}),(0,E.jsxs)(`div`,{className:`flex gap-2`,children:[(0,E.jsx)(C,{id:`apiKey`,type:F?`text`:`password`,value:N.apiKey,onChange:e=>P({...N,apiKey:e.target.value}),placeholder:`输入 API Key`,className:`flex-1 h-8 text-sm`}),(0,E.jsx)(r,{variant:`outline`,size:`icon-sm`,onClick:()=>$e(!F),"aria-label":F?`隐藏 API Key`:`显示 API Key`,children:F?(0,E.jsx)(Ue,{className:`h-4 w-4`}):(0,E.jsx)(We,{className:`h-4 w-4`})})]})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{htmlFor:`model`,className:`text-xs`,children:`模型`}),(0,E.jsx)(C,{id:`model`,value:N.model,onChange:e=>P({...N,model:e.target.value}),placeholder:`模型名称`,className:`h-8 text-sm`})]}),(0,E.jsxs)(`div`,{className:O,children:[(0,E.jsx)(h,{htmlFor:`baseUrl`,className:`text-xs`,children:`API 端点`}),(0,E.jsx)(C,{id:`baseUrl`,value:N.baseUrl,onChange:e=>P({...N,baseUrl:e.target.value}),placeholder:N.provider===`openai`?`https://api.openai.com/v1/chat/completions`:`https://api.anthropic.com/v1/messages`,className:`h-8 text-sm`})]}),et&&(0,E.jsxs)(Be,{variant:R===`error`?`destructive`:`default`,children:[R===`success`?(0,E.jsx)(m,{}):R===`error`?(0,E.jsx)(o,{}):(0,E.jsx)(a,{}),(0,E.jsx)(ze,{children:R===`success`?`操作成功`:R===`error`?`操作失败`:`处理中`}),(0,E.jsx)(Re,{children:et})]}),(0,E.jsx)(_,{}),(0,E.jsxs)(`div`,{className:`flex justify-between`,children:[(0,E.jsxs)(r,{variant:`outline`,size:`sm`,onClick:ht,children:[(0,E.jsx)(ne,{className:`h-4 w-4 mr-1`}),`重置`]}),(0,E.jsxs)(`div`,{className:`flex gap-2`,children:[(0,E.jsx)(r,{variant:`outline`,size:`sm`,onClick:gt,disabled:!ce(N)||I,children:`测试连接`}),(0,E.jsxs)(b,{size:`sm`,onClick:mt,disabled:I,children:[(0,E.jsx)(w,{"data-icon":`inline-start`,className:`h-4 w-4`}),I?`保存中...`:`保存`]})]})]})]})]})]});return n?(0,E.jsx)(`div`,{"data-testid":`settings-fullwidth`,className:`app-workspace-content flex h-full min-h-0 w-full flex-col overflow-hidden p-0`,children:(0,E.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border bg-card`,children:$})}):(0,E.jsx)(de,{open:e,onOpenChange:t,children:(0,E.jsx)(Fe,{className:`p-0 flex flex-col`,resizable:!0,defaultWidth:600,storageKey:`settings-panel`,children:$})})}export{Ye as SettingsPanel};
@@ -1 +1 @@
1
- import{l as e}from"./button-yArHqw81.js";var t=e(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]);export{t};
1
+ import{u as e}from"./button-BFNlGZ5p.js";var t=e(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{u as e}from"./button-BFNlGZ5p.js";var t=e(`smartphone`,[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{c as e,d as t,l as n,o as r,p as i}from"./button-BFNlGZ5p.js";import{a,o,r as s,t as c}from"./dist-CFZ4xMSF.js";import{n as l,t as u}from"./dist-BCvvYbmI.js";var d=i(t(),1),f=e(),p=`Switch`,[m,h]=a(p),[g,_]=m(p),v=d.forwardRef((e,t)=>{let{__scopeSwitch:n,name:i,checked:a,defaultChecked:l,required:u,disabled:m,value:h=`on`,onCheckedChange:_,form:v,...y}=e,[b,x]=d.useState(null),w=r(t,e=>x(e)),T=d.useRef(!1),E=b?v||!!b.closest(`form`):!0,[D,O]=c({prop:a,defaultProp:l??!1,onChange:_,caller:p});return(0,f.jsxs)(g,{scope:n,checked:D,disabled:m,children:[(0,f.jsx)(o.button,{type:`button`,role:`switch`,"aria-checked":D,"aria-required":u,"data-state":C(D),"data-disabled":m?``:void 0,disabled:m,value:h,...y,ref:w,onClick:s(e.onClick,e=>{O(e=>!e),E&&(T.current=e.isPropagationStopped(),T.current||e.stopPropagation())})}),E&&(0,f.jsx)(S,{control:b,bubbles:!T.current,name:i,value:h,checked:D,required:u,disabled:m,form:v,style:{transform:`translateX(-100%)`}})]})});v.displayName=p;var y=`SwitchThumb`,b=d.forwardRef((e,t)=>{let{__scopeSwitch:n,...r}=e,i=_(y,n);return(0,f.jsx)(o.span,{"data-state":C(i.checked),"data-disabled":i.disabled?``:void 0,...r,ref:t})});b.displayName=y;var x=`SwitchBubbleInput`,S=d.forwardRef(({__scopeSwitch:e,control:t,checked:n,bubbles:i=!0,...a},o)=>{let s=d.useRef(null),c=r(s,o),p=l(n),m=u(t);return d.useEffect(()=>{let e=s.current;if(!e)return;let t=window.HTMLInputElement.prototype,r=Object.getOwnPropertyDescriptor(t,`checked`).set;if(p!==n&&r){let t=new Event(`click`,{bubbles:i});r.call(e,n),e.dispatchEvent(t)}},[p,n,i]),(0,f.jsx)(`input`,{type:`checkbox`,"aria-hidden":!0,defaultChecked:n,...a,tabIndex:-1,ref:c,style:{...a.style,...m,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0}})});S.displayName=x;function C(e){return e?`checked`:`unchecked`}var w=v,T=b;function E({className:e,...t}){return(0,f.jsx)(w,{"data-slot":`switch`,className:n(`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 inline-flex h-5 w-9 shrink-0 items-center rounded-full border-2 border-transparent shadow-xs transition-colors outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50`,e),...t,children:(0,f.jsx)(T,{"data-slot":`switch-thumb`,className:n(`bg-background pointer-events-none block size-4 rounded-full ring-0 shadow-lg transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0`)})})}export{E as t};
@@ -1,4 +1,4 @@
1
- import{s as e}from"./button-yArHqw81.js";var t=e(),n=2097152,r=1e4,i=5e4,a=3e4,o=3e4;function s(e){return!(!e||e.length>n||e.split(`
1
+ import{c as e}from"./button-BFNlGZ5p.js";var t=e(),n=2097152,r=1e4,i=5e4,a=3e4,o=3e4;function s(e){return!(!e||e.length>n||e.split(`
2
2
  `).length>r)}function c(e){let t=e.trim();if(!t)return`text`;if(t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`))try{return JSON.parse(t),`json`}catch{}return/^<!DOCTYPE\s+html/i.test(t)||t.startsWith(`<html`)||t.startsWith(`<!DOCTYPE`)||/^<(!DOCTYPE|html|head|body|div|span|p|a|img|ul|ol|li|table|tr|td|th|form|input|button|h[1-6]|nav|header|footer|section|article|main|aside)\b/i.test(t)||/<[a-z][\w-]*(\s+[^>]*)?>\s*[\s\S]*<\/[a-z][\w-]*>/i.test(t)||/<[a-z][\w-]*(\s+[^>]*)?\/?>/i.test(t)&&!t.includes(`{`)?`html`:/^[.#]?[a-z][\w-]*\s*\{/i.test(t)||/^@(media|keyframes|import|font-face|charset|supports|page|namespace)/i.test(t)||/[a-z-]+\s*:\s*[^;]+;/i.test(t)&&t.includes(`{`)?`css`:t.startsWith(`"use strict"`)||t.startsWith(`'use strict'`)||/^(import|export)\s+/m.test(t)||/^(function\s+\w+|const\s+\w+\s*=\s*\(|let\s+\w+\s*=\s*\(|var\s+\w+\s*=\s*\()/m.test(t)||/=>\s*\{?/.test(t)||/(^|\s)(class|function|const|let|var|if|else|for|while|return|try|catch|finally|throw|new|async|await)\s+/i.test(t)?`javascript`:`text`}function l(e){let n=[],r=/("(?:[^"\\]|\\.)+")\s*:|("(?:[^"\\]|\\.)+")|(-?\d+\.?\d*(?:[eE][+-]?\d+)?)|true|false|null|[{}[\]:,]/g,a=0,o,s=0;for(;(o=r.exec(e))!==null&&s++<i;){o.index>a&&n.push(e.slice(a,o.index));let r=o[0];o[1]?(n.push((0,t.jsx)(`span`,{className:`text-purple-600 dark:text-purple-400`,children:o[1]},o.index)),n.push(`:`)):o[2]?n.push((0,t.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:o[2]},o.index)):o[3]?n.push((0,t.jsx)(`span`,{className:`text-blue-600 dark:text-blue-400`,children:o[3]},o.index)):r===`true`||r===`false`?n.push((0,t.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400`,children:r},o.index)):r===`null`?n.push((0,t.jsx)(`span`,{className:`text-red-400`,children:r},o.index)):n.push((0,t.jsx)(`span`,{className:`text-muted-foreground`,children:r},o.index)),a=o.index+o[0].length}return a<e.length&&n.push(e.slice(a)),n}function u(e){let n=[],r=/<!--[\s\S]{0,500}?-->|<\/?([a-z][\w-]*)\b([^>]{0,500})>/gi,i,o=0,s=0;for(;(i=r.exec(e))!==null&&s++<a;){if(i.index>o){let r=e.slice(o,i.index);r&&n.push((0,t.jsx)(`span`,{className:`text-foreground`,children:r},`text-${o}`))}let r=i[0];if(r.startsWith(`<!--`))n.push((0,t.jsx)(`span`,{className:`text-gray-500 dark:text-gray-400 italic`,children:r},i.index));else{let e=i[1],a=i[2];if(r.startsWith(`</`))n.push((0,t.jsx)(`span`,{className:`text-blue-600 dark:text-blue-400`,children:r},i.index));else{if(n.push((0,t.jsx)(`span`,{className:`text-blue-600 dark:text-blue-400`,children:`<`},i.index)),n.push((0,t.jsx)(`span`,{className:`text-blue-600 dark:text-blue-400 font-semibold`,children:e},`tag-${i.index}`)),a){let e=d(a,i.index);n.push(...e)}n.push((0,t.jsx)(`span`,{className:`text-blue-600 dark:text-blue-400`,children:`>`},`close-${i.index}`))}}o=i.index+r.length}if(o<e.length){let r=e.slice(o);r&&n.push((0,t.jsx)(`span`,{className:`text-foreground`,children:r},`text-${o}`))}return n}function d(e,n){let r=[],i=/([a-z-]+)(?:=(?:"([^"]*)"|'([^']*)'|([^\s>]+)))?/gi,a,o=0;for(;(a=i.exec(e))!==null;){a.index>o&&r.push(e.slice(o,a.index));let i=a[1],s=a[2]||a[3]||a[4];r.push((0,t.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400`,children:i},`attr-name-${n}-${a.index}`)),s!==void 0&&(r.push(`=`),a[2]===void 0?a[3]===void 0?r.push((0,t.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:a[4]},`attr-val-${n}-${a.index}`)):r.push((0,t.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:`'${a[3]}'`},`attr-val-${n}-${a.index}`)):r.push((0,t.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:`"${a[2]}"`},`attr-val-${n}-${a.index}`))),o=a.index+a[0].length}return o<e.length&&r.push(e.slice(o)),r}function f(e){let n=[];return e.split(`
3
3
  `).slice(0,r).forEach((e,r)=>{if(r>0&&n.push(`
4
4
  `),e.trim().startsWith(`/*`)){n.push((0,t.jsx)(`span`,{className:`text-gray-500 dark:text-gray-400 italic`,children:e},`comment-${r}`));return}if(!e.includes(`:`)||e.includes(`{`)){let i=e.split(`{`);i.length>1?(n.push((0,t.jsx)(`span`,{className:`text-purple-600 dark:text-purple-400 font-semibold`,children:i[0]},`selector-${r}`)),n.push((0,t.jsx)(`span`,{className:`text-foreground`,children:` {`},`brace-${r}`)),i[1]&&n.push(i[1])):n.push((0,t.jsx)(`span`,{className:`text-purple-600 dark:text-purple-400 font-semibold`,children:e},`selector-${r}`))}else if(e.includes(`:`)){let i=e.indexOf(`:`),a=e.slice(0,i),o=e.slice(i+1);n.push((0,t.jsx)(`span`,{className:`text-blue-600 dark:text-blue-400`,children:a},`prop-${r}`)),n.push((0,t.jsx)(`span`,{className:`text-foreground`,children:`:`},`colon-${r}`));let s=p(o,r);n.push(...s)}else n.push(e)}),n}function p(e,n){let r=[],i=/(#[0-9a-fA-F]{3,8})|(\d+(?:\.\d+)?(?:px|em|rem|%|vh|vw|deg|s|ms)?)|([a-z-]+)/gi,a=0,o;for(;(o=i.exec(e))!==null;)o.index>a&&r.push(e.slice(a,o.index)),o[1]?r.push((0,t.jsx)(`span`,{className:`text-pink-600 dark:text-pink-400`,children:o[1]},`color-${n}-${o.index}`)):o[2]?r.push((0,t.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400`,children:o[2]},`num-${n}-${o.index}`)):o[3]&&r.push((0,t.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:o[3]},`keyword-${n}-${o.index}`)),a=o.index+o[0].length;return a<e.length&&r.push(e.slice(a)),r}function m(e){let n=[],r=/(["'`])(?:[^"'`\\]|\\.){0,200}?\1|\/\/[^\n]{0,200}|\/\*[\s\S]{0,500}?\*\/|\b(function|const|let|var|if|else|for|while|return|class|import|export|from|default|async|await|try|catch|finally|throw|new|this|super|extends|static|get|set|typeof|instanceof|in|of|void|delete|yield|switch|case|break|continue|do)\b|(\d+\.?\d*(?:[eE][+-]?\d+)?)/gm,i=0,a,s=0;for(;(a=r.exec(e))!==null&&s++<o;){a.index>i&&n.push(e.slice(i,a.index));let r=a[0];r.startsWith(`"`)||r.startsWith(`'`)||r.startsWith("`")?n.push((0,t.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:r},a.index)):r.startsWith(`//`)||r.startsWith(`/*`)?n.push((0,t.jsx)(`span`,{className:`text-gray-500 dark:text-gray-400 italic`,children:r},a.index)):a[2]?n.push((0,t.jsx)(`span`,{className:`text-purple-600 dark:text-purple-400 font-semibold`,children:a[2]},a.index)):a[3]?n.push((0,t.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400`,children:a[3]},a.index)):n.push(r),i=a.index+r.length}return i<e.length&&n.push(e.slice(i)),n}function h(e,t){if(!s(e))return[e];let n=t||c(e);try{let t=performance.now(),r;switch(n){case`json`:r=l(e);break;case`html`:r=u(e);break;case`css`:r=f(e);break;case`javascript`:r=m(e);break;default:return[e]}let i=performance.now()-t;return i>100&&console.warn(`Syntax highlighting took ${i.toFixed(2)}ms for ${e.length} chars`),r}catch(t){return console.error(`Syntax highlighting error:`,t),[e]}}function g(e){try{return JSON.parse(e),!0}catch{return!1}}function _(e){let t=e.trim();if(!t)return{valid:!0};try{if(!t.includes(`<`))return{valid:!1,error:`内容不像是有效的HTML`};let e=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`param`,`source`,`track`,`wbr`]),n=[],r=/<!--[\s\S]*?-->|<!DOCTYPE[^>]*>|<\/?([a-z][\w-]*)\b[^>]*?>/gi,i;for(;(i=r.exec(t))!==null;){let t=i[0],r=i[1]?.toLowerCase();if(!(!r||t.startsWith(`<!--`)||/^<!doctype/i.test(t))){if(t.startsWith(`</`)){if(n.length===0)return{valid:!1,error:`HTML语法错误:未找到标签 <${r}> 的开始标签`};let e=n.pop();if(e!==r)return{valid:!1,error:`HTML语法错误:标签不匹配,期望 </${e}>,实际 </${r}>`};continue}t.endsWith(`/>`)||e.has(r)||n.push(r)}}return n.length>0?{valid:!1,error:`HTML语法错误:标签 <${n[n.length-1]}> 未闭合`}:{valid:!0}}catch(e){return{valid:!1,error:`HTML解析错误:${e instanceof Error?e.message:`未知错误`}`}}}function v(e){let t=e.trim();if(!t)return{valid:!0};try{let e=0,n=!1,r=``;for(let i=0;i<t.length;i++){let a=t[i],o=i>0?t[i-1]:``;if((a===`"`||a===`'`)&&o!==`\\`&&(n?a===r&&(n=!1):(n=!0,r=a)),!n){if(a===`{`)e++;else if(a===`}`&&(e--,e<0))return{valid:!1,error:`CSS语法错误:多余的闭合大括号 }`}}}return e===0?n?{valid:!1,error:`CSS语法错误:未闭合的字符串`}:{valid:!0}:{valid:!1,error:e>0?`CSS语法错误:缺少闭合大括号 }`:`CSS语法错误:多余的闭合大括号 }`}}catch(e){return{valid:!1,error:`CSS解析错误:${e instanceof Error?e.message:`未知错误`}`}}}function y(e){let t=e.trim();if(!t)return{valid:!0};try{let e=[],n=!1,r=``,i=!1,a=!1,o=!1;for(let s=0;s<t.length;s++){let c=t[s],l=s>0?t[s-1]:``,u=s+1<t.length?t[s+1]:``;if(!n&&!i&&!a&&c===`/`&&u===`*`){o=!0,s++;continue}if(o){c===`*`&&u===`/`&&(o=!1,s++);continue}if(!n&&!i&&!o&&c===`/`&&u===`/`){a=!0;continue}if(a){c===`
@@ -1 +1 @@
1
- import{l as e}from"./button-yArHqw81.js";var t=e(`table-2`,[[`path`,{d:`M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18`,key:`gugj83`}]]);export{t};
1
+ import{u as e}from"./button-BFNlGZ5p.js";var t=e(`table-2`,[[`path`,{d:`M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18`,key:`gugj83`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{c as e,d as t,l as n,p as r}from"./button-BFNlGZ5p.js";r(t(),1);var i=e();function a({className:e,...t}){return(0,i.jsx)(`div`,{"data-slot":`table-container`,className:`meddle-thin-scroll relative w-full overflow-x-auto`,children:(0,i.jsx)(`table`,{"data-slot":`table`,className:n(`w-full caption-bottom text-sm`,e),...t})})}function o({className:e,...t}){return(0,i.jsx)(`thead`,{"data-slot":`table-header`,className:n(`[&_tr]:border-b`,e),...t})}function s({className:e,...t}){return(0,i.jsx)(`tbody`,{"data-slot":`table-body`,className:n(`[&_tr:last-child]:border-0`,e),...t})}function c({className:e,...t}){return(0,i.jsx)(`tr`,{"data-slot":`table-row`,className:n(`hover:bg-accent/60 hover:text-accent-foreground data-[state=selected]:bg-accent data-[state=selected]:text-accent-foreground border-b transition-colors`,e),...t})}function l({className:e,...t}){return(0,i.jsx)(`th`,{"data-slot":`table-head`,className:n(`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 u({className:e,...t}){return(0,i.jsx)(`td`,{"data-slot":`table-cell`,className:n(`p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t})}export{o as a,l as i,s as n,c as o,u as r,a as t};
@@ -1 +1 @@
1
- import{c as e,f as t,s as n,u as r}from"./button-yArHqw81.js";t(r(),1);var i=n();function a({className:t,...n}){return(0,i.jsx)(`textarea`,{"data-slot":`textarea`,className:e(`placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input w-full min-w-0 rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none 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`,`min-h-[80px]`,t),...n})}export{a as t};
1
+ import{c as e,d as t,l as n,p as r}from"./button-BFNlGZ5p.js";r(t(),1);var i=e();function a({className:e,...t}){return(0,i.jsx)(`textarea`,{"data-slot":`textarea`,className:n(`placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input w-full min-w-0 rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none 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`,`min-h-[80px]`,e),...t})}export{a as t};
@@ -1 +1 @@
1
- import{l as e}from"./button-yArHqw81.js";var t=e(`wand-sparkles`,[[`path`,{d:`m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72`,key:`ul74o6`}],[`path`,{d:`m14 7 3 3`,key:`1r5n42`}],[`path`,{d:`M5 6v4`,key:`ilb8ba`}],[`path`,{d:`M19 14v4`,key:`blhpug`}],[`path`,{d:`M10 2v2`,key:`7u0qdc`}],[`path`,{d:`M7 8H3`,key:`zfb6yr`}],[`path`,{d:`M21 16h-4`,key:`1cnmox`}],[`path`,{d:`M11 3H9`,key:`1obp7u`}]]);export{t};
1
+ import{u as e}from"./button-BFNlGZ5p.js";var t=e(`wand-sparkles`,[[`path`,{d:`m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72`,key:`ul74o6`}],[`path`,{d:`m14 7 3 3`,key:`1r5n42`}],[`path`,{d:`M5 6v4`,key:`ilb8ba`}],[`path`,{d:`M19 14v4`,key:`blhpug`}],[`path`,{d:`M10 2v2`,key:`7u0qdc`}],[`path`,{d:`M7 8H3`,key:`zfb6yr`}],[`path`,{d:`M21 16h-4`,key:`1cnmox`}],[`path`,{d:`M11 3H9`,key:`1obp7u`}]]);export{t};
@@ -1 +1 @@
1
- import{l as e}from"./button-yArHqw81.js";var t=e(`wifi`,[[`path`,{d:`M12 20h.01`,key:`zekei9`}],[`path`,{d:`M2 8.82a15 15 0 0 1 20 0`,key:`dnpr2z`}],[`path`,{d:`M5 12.859a10 10 0 0 1 14 0`,key:`1x1e6c`}],[`path`,{d:`M8.5 16.429a5 5 0 0 1 7 0`,key:`1bycff`}]]);export{t};
1
+ import{u as e}from"./button-BFNlGZ5p.js";var t=e(`wifi`,[[`path`,{d:`M12 20h.01`,key:`zekei9`}],[`path`,{d:`M2 8.82a15 15 0 0 1 20 0`,key:`dnpr2z`}],[`path`,{d:`M5 12.859a10 10 0 0 1 14 0`,key:`1x1e6c`}],[`path`,{d:`M8.5 16.429a5 5 0 0 1 7 0`,key:`1bycff`}]]);export{t};
@@ -1 +1 @@
1
- import{l as e}from"./button-yArHqw81.js";var t=e(`zap`,[[`path`,{d:`M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z`,key:`1xq2db`}]]);export{t};
1
+ import{u as e}from"./button-BFNlGZ5p.js";var t=e(`zap`,[[`path`,{d:`M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z`,key:`1xq2db`}]]);export{t};
@@ -5,20 +5,23 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>web</title>
8
- <script type="module" crossorigin src="/assets/index-F8M6NlaE.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/button-yArHqw81.js">
10
- <link rel="modulepreload" crossorigin href="/assets/dist-DQDFV3o1.js">
11
- <link rel="modulepreload" crossorigin href="/assets/dist-CwP5Ad1_.js">
12
- <link rel="modulepreload" crossorigin href="/assets/dist-CymFeFOA.js">
13
- <link rel="modulepreload" crossorigin href="/assets/dist-CjLkNKST.js">
14
- <link rel="modulepreload" crossorigin href="/assets/es2015-BiaNLfVn.js">
15
- <link rel="modulepreload" crossorigin href="/assets/dist-DGuRBXW6.js">
16
- <link rel="modulepreload" crossorigin href="/assets/dist-BW-gQyc_.js">
17
- <link rel="modulepreload" crossorigin href="/assets/dist-D2vbXHYx.js">
18
- <link rel="modulepreload" crossorigin href="/assets/check-ByTjANaY.js">
19
- <link rel="modulepreload" crossorigin href="/assets/chevron-down-vKjBY-BY.js">
20
- <link rel="modulepreload" crossorigin href="/assets/ai-config-store-pCWI7jgN.js">
21
- <link rel="stylesheet" crossorigin href="/assets/index-BSIqySKG.css">
8
+ <script type="module" crossorigin src="/assets/index-Bu3zaxzE.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/button-BFNlGZ5p.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/dist-CFZ4xMSF.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/dist-C-E2R2jk.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/dist-BCvvYbmI.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/dist-DD7AvbXP.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/dist-Bq2klZ3g.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/dist-LiAcI8CK.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/dist-BNcjMpca.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/es2015-CRmLuA2o.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/dist-CRmX_NvH.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/dist-UcOFuoN0.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/dist-YM3jbhT-.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/check-BkfHQ6re.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/chevron-down-DHwUtL4O.js">
23
+ <link rel="modulepreload" crossorigin href="/assets/ai-config-store-B_VpGvwx.js">
24
+ <link rel="stylesheet" crossorigin href="/assets/index-D9jGD_NA.css">
22
25
  </head>
23
26
  <body>
24
27
  <div id="root"></div>
@@ -1 +0,0 @@
1
- import{c as e,f as t,o as n,s as r,u as i}from"./button-yArHqw81.js";t(i(),1);var a=r(),o=n(`relative w-full rounded-lg border px-4 py-3 text-sm grid gap-1`,{variants:{variant:{default:`bg-background text-foreground`,destructive:`border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive`}},defaultVariants:{variant:`default`}});function s({className:t,variant:n,...r}){return(0,a.jsx)(`div`,{role:`alert`,className:e(o({variant:n}),t),...r})}function c({className:t,...n}){return(0,a.jsx)(`h5`,{className:e(`mb-1 font-medium leading-none tracking-tight`,t),...n})}function l({className:t,...n}){return(0,a.jsx)(`div`,{className:e(`text-sm [&_p]:leading-relaxed`,t),...n})}export{l as n,c as r,s as t};
@@ -1 +0,0 @@
1
- import{l as e}from"./button-yArHqw81.js";var t=e(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]);export{t};
@@ -1 +0,0 @@
1
- import{l as e}from"./button-yArHqw81.js";var t=e(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]);export{t};
@@ -1 +0,0 @@
1
- import{a as e,c as t,f as n,l as r,s as i,u as a}from"./button-yArHqw81.js";import{a as o,o as s,r as c,t as l}from"./dist-CwP5Ad1_.js";import{t as u}from"./check-ByTjANaY.js";import{t as d}from"./dist-DGuRBXW6.js";import{K as f,q as p}from"./index-F8M6NlaE.js";var m=r(`grip-vertical`,[[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}],[`circle`,{cx:`9`,cy:`5`,r:`1`,key:`hp0tcf`}],[`circle`,{cx:`9`,cy:`19`,r:`1`,key:`fkjjf6`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`15`,cy:`5`,r:`1`,key:`19l28e`}],[`circle`,{cx:`15`,cy:`19`,r:`1`,key:`f4zoj3`}]]),h=n(a(),1),g=i(),_=`Checkbox`,[v,y]=o(_),[b,x]=v(_);function S(e){let{__scopeCheckbox:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:c,required:u,value:d=`on`,internal_do_not_use_render:f}=e,[p,m]=l({prop:n,defaultProp:i??!1,onChange:c,caller:_}),[v,y]=h.useState(null),[x,S]=h.useState(null),C=h.useRef(!1),w=v?!!o||!!v.closest(`form`):!0,T={checked:p,disabled:a,setChecked:m,control:v,setControl:y,name:s,form:o,value:d,hasConsumerStoppedPropagationRef:C,required:u,defaultChecked:j(i)?!1:i,isFormControl:w,bubbleInput:x,setBubbleInput:S};return(0,g.jsx)(b,{scope:t,...T,children:A(f)?f(T):r})}var C=`CheckboxTrigger`,w=h.forwardRef(({__scopeCheckbox:t,onKeyDown:n,onClick:r,...i},a)=>{let{control:o,value:l,disabled:u,checked:d,required:f,setControl:p,setChecked:m,hasConsumerStoppedPropagationRef:_,isFormControl:v,bubbleInput:y}=x(C,t),b=e(a,p),S=h.useRef(d);return h.useEffect(()=>{let e=o?.form;if(e){let t=()=>m(S.current);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[o,m]),(0,g.jsx)(s.button,{type:`button`,role:`checkbox`,"aria-checked":j(d)?`mixed`:d,"aria-required":f,"data-state":M(d),"data-disabled":u?``:void 0,disabled:u,value:l,...i,ref:b,onKeyDown:c(n,e=>{e.key===`Enter`&&e.preventDefault()}),onClick:c(r,e=>{m(e=>j(e)?!0:!e),y&&v&&(_.current=e.isPropagationStopped(),_.current||e.stopPropagation())})})});w.displayName=C;var T=h.forwardRef((e,t)=>{let{__scopeCheckbox:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,g.jsx)(S,{__scopeCheckbox:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(w,{...d,ref:t,__scopeCheckbox:n}),e&&(0,g.jsx)(k,{__scopeCheckbox:n})]})})});T.displayName=_;var E=`CheckboxIndicator`,D=h.forwardRef((e,t)=>{let{__scopeCheckbox:n,forceMount:r,...i}=e,a=x(E,n);return(0,g.jsx)(d,{present:r||j(a.checked)||a.checked===!0,children:(0,g.jsx)(s.span,{"data-state":M(a.checked),"data-disabled":a.disabled?``:void 0,...i,ref:t,style:{pointerEvents:`none`,...e.style}})})});D.displayName=E;var O=`CheckboxBubbleInput`,k=h.forwardRef(({__scopeCheckbox:t,...n},r)=>{let{control:i,hasConsumerStoppedPropagationRef:a,checked:o,defaultChecked:c,required:l,disabled:u,name:d,value:m,form:_,bubbleInput:v,setBubbleInput:y}=x(O,t),b=e(r,y),S=p(o),C=f(i);h.useEffect(()=>{let e=v;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!a.current;if(S!==o&&n){let t=new Event(`click`,{bubbles:r});e.indeterminate=j(o),n.call(e,j(o)?!1:o),e.dispatchEvent(t)}},[v,S,o,a]);let w=h.useRef(j(o)?!1:o);return(0,g.jsx)(s.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:c??w.current,required:l,disabled:u,name:d,value:m,form:_,...n,tabIndex:-1,ref:b,style:{...n.style,...C,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})});k.displayName=O;function A(e){return typeof e==`function`}function j(e){return e===`indeterminate`}function M(e){return j(e)?`indeterminate`:e?`checked`:`unchecked`}function N({className:e,...n}){return(0,g.jsx)(T,{"data-slot":`checkbox`,className:t(`peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50`,e),...n,children:(0,g.jsx)(D,{"data-slot":`checkbox-indicator`,className:`grid place-content-center text-current transition-none`,children:(0,g.jsx)(u,{className:`size-3.5`})})})}export{m as n,N as t};
@@ -1 +0,0 @@
1
- import{l as e}from"./button-yArHqw81.js";var t=e(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]);export{t};
@@ -1 +0,0 @@
1
- import{l as e}from"./button-yArHqw81.js";var t=e(`code`,[[`path`,{d:`m16 18 6-6-6-6`,key:`eg8j8`}],[`path`,{d:`m8 6-6 6 6 6`,key:`ppft3o`}]]);export{t};
@@ -1,5 +0,0 @@
1
- import{a as e,f as t,l as n,r,s as i,u as a}from"./button-yArHqw81.js";import{a as o,i as s,o as c,r as l,t as u}from"./dist-CwP5Ad1_.js";import{t as d}from"./dist-DGuRBXW6.js";import{n as f}from"./dist-CjLkNKST.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./es2015-BiaNLfVn.js";var y=n(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),b=t(a(),1),x=i(),S=`Dialog`,[C,ee]=o(S),[w,T]=C(S),E=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=b.useRef(null),c=b.useRef(null),[l,d]=u({prop:r,defaultProp:i??!1,onChange:a,caller:S});return(0,x.jsx)(w,{scope:t,triggerRef:s,contentRef:c,contentId:f(),titleId:f(),descriptionId:f(),open:l,onOpenChange:d,onOpenToggle:b.useCallback(()=>d(e=>!e),[d]),modal:o,children:n})};E.displayName=S;var D=`DialogTrigger`,O=b.forwardRef((t,n)=>{let{__scopeDialog:r,...i}=t,a=T(D,r),o=e(n,a.triggerRef);return(0,x.jsx)(c.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":a.open,"aria-controls":a.contentId,"data-state":J(a.open),...i,ref:o,onClick:l(t.onClick,a.onOpenToggle)})});O.displayName=D;var k=`DialogPortal`,[A,j]=C(k,{forceMount:void 0}),M=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=T(k,t);return(0,x.jsx)(A,{scope:t,forceMount:n,children:b.Children.map(r,e=>(0,x.jsx)(d,{present:n||a.open,children:(0,x.jsx)(m,{asChild:!0,container:i,children:e})}))})};M.displayName=k;var N=`DialogOverlay`,P=b.forwardRef((e,t)=>{let n=j(N,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=T(N,e.__scopeDialog);return a.modal?(0,x.jsx)(d,{present:r||a.open,children:(0,x.jsx)(I,{...i,ref:t})}):null});P.displayName=N;var F=r(`DialogOverlay.RemoveScroll`),I=b.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=T(N,n);return(0,x.jsx)(h,{as:F,allowPinchZoom:!0,shards:[i.contentRef],children:(0,x.jsx)(c.div,{"data-state":J(i.open),...r,ref:t,style:{pointerEvents:`auto`,...r.style}})})}),L=`DialogContent`,R=b.forwardRef((e,t)=>{let n=j(L,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=T(L,e.__scopeDialog);return(0,x.jsx)(d,{present:r||a.open,children:a.modal?(0,x.jsx)(z,{...i,ref:t}):(0,x.jsx)(B,{...i,ref:t})})});R.displayName=L;var z=b.forwardRef((t,n)=>{let r=T(L,t.__scopeDialog),i=b.useRef(null),a=e(n,r.contentRef,i);return b.useEffect(()=>{let e=i.current;if(e)return v(e)},[]),(0,x.jsx)(V,{...t,ref:a,trapFocus:r.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:l(t.onCloseAutoFocus,e=>{e.preventDefault(),r.triggerRef.current?.focus()}),onPointerDownOutside:l(t.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:l(t.onFocusOutside,e=>e.preventDefault())})}),B=b.forwardRef((e,t)=>{let n=T(L,e.__scopeDialog),r=b.useRef(!1),i=b.useRef(!1);return(0,x.jsx)(V,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),V=b.forwardRef((t,n)=>{let{__scopeDialog:r,trapFocus:i,onOpenAutoFocus:a,onCloseAutoFocus:o,...s}=t,c=T(L,r),l=b.useRef(null),u=e(n,l);return _(),(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(p,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:a,onUnmountAutoFocus:o,children:(0,x.jsx)(g,{role:`dialog`,id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":J(c.open),...s,ref:u,onDismiss:()=>c.onOpenChange(!1)})}),(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(Z,{titleId:c.titleId}),(0,x.jsx)($,{contentRef:l,descriptionId:c.descriptionId})]})]})}),H=`DialogTitle`,U=b.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=T(H,n);return(0,x.jsx)(c.h2,{id:i.titleId,...r,ref:t})});U.displayName=H;var W=`DialogDescription`,G=b.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=T(W,n);return(0,x.jsx)(c.p,{id:i.descriptionId,...r,ref:t})});G.displayName=W;var K=`DialogClose`,q=b.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=T(K,n);return(0,x.jsx)(c.button,{type:`button`,...r,ref:t,onClick:l(e.onClick,()=>i.onOpenChange(!1))})});q.displayName=K;function J(e){return e?`open`:`closed`}var Y=`DialogTitleWarning`,[te,X]=s(Y,{contentName:L,titleName:H,docsSlug:`dialog`}),Z=({titleId:e})=>{let t=X(Y),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
2
-
3
- If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
4
-
5
- For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return b.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},Q=`DialogDescriptionWarning`,$=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${X(Q).contentName}}.`;return b.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},ne=E,re=M,ie=P,ae=R,oe=U,se=G,ce=q;export{re as a,y as c,ie as i,ae as n,ne as o,se as r,oe as s,ce as t};
@@ -1 +0,0 @@
1
- import{a as e,f as t,r as n,s as r,u as i}from"./button-yArHqw81.js";import{a}from"./dist-CwP5Ad1_.js";var o=t(i(),1),s=r();function c(t){let r=t+`CollectionProvider`,[i,c]=a(r),[l,u]=i(r,{collectionRef:{current:null},itemMap:new Map}),d=e=>{let{scope:t,children:n}=e,r=o.useRef(null),i=o.useRef(new Map).current;return(0,s.jsx)(l,{scope:t,itemMap:i,collectionRef:r,children:n})};d.displayName=r;let f=t+`CollectionSlot`,p=n(f),m=o.forwardRef((t,n)=>{let{scope:r,children:i}=t;return(0,s.jsx)(p,{ref:e(n,u(f,r).collectionRef),children:i})});m.displayName=f;let h=t+`CollectionItemSlot`,g=`data-radix-collection-item`,_=n(h),v=o.forwardRef((t,n)=>{let{scope:r,children:i,...a}=t,c=o.useRef(null),l=e(n,c),d=u(h,r);return o.useEffect(()=>(d.itemMap.set(c,{ref:c,...a}),()=>void d.itemMap.delete(c))),(0,s.jsx)(_,{[g]:``,ref:l,children:i})});v.displayName=h;function y(e){let n=u(t+`CollectionConsumer`,e);return o.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${g}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:d,Slot:m,ItemSlot:v},y,c]}var l=o.createContext(void 0);function u(e){let t=o.useContext(l);return e||t||`ltr`}export{c as n,u as t};
@@ -1,41 +0,0 @@
1
- import{a as e,f as t,s as n,u as r}from"./button-yArHqw81.js";import{c as i,n as a,o,r as s,s as c}from"./dist-CwP5Ad1_.js";import{t as l}from"./dist-CjLkNKST.js";var u=t(r(),1);function d(e,t=globalThis?.document){let n=l(e);u.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var f=n(),p=`DismissableLayer`,m=`dismissableLayer.update`,h=`dismissableLayer.pointerDownOutside`,g=`dismissableLayer.focusOutside`,_,v=u.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),y=u.forwardRef((t,n)=>{let{disableOutsidePointerEvents:r=!1,onEscapeKeyDown:i,onPointerDownOutside:a,onFocusOutside:c,onInteractOutside:l,onDismiss:p,...h}=t,g=u.useContext(v),[y,b]=u.useState(null),x=y?.ownerDocument??globalThis?.document,[,T]=u.useState({}),E=e(n,e=>b(e)),D=Array.from(g.layers),[O]=[...g.layersWithOutsidePointerEventsDisabled].slice(-1),ee=D.indexOf(O),k=y?D.indexOf(y):-1,te=g.layersWithOutsidePointerEventsDisabled.size>0,A=k>=ee,j=S(e=>{let t=e.target,n=[...g.branches].some(e=>e.contains(t));!A||n||(a?.(e),l?.(e),e.defaultPrevented||p?.())},x),M=C(e=>{let t=e.target;[...g.branches].some(e=>e.contains(t))||(c?.(e),l?.(e),e.defaultPrevented||p?.())},x);return d(e=>{k===g.layers.size-1&&(i?.(e),!e.defaultPrevented&&p&&(e.preventDefault(),p()))},x),u.useEffect(()=>{if(y)return r&&(g.layersWithOutsidePointerEventsDisabled.size===0&&(_=x.body.style.pointerEvents,x.body.style.pointerEvents=`none`),g.layersWithOutsidePointerEventsDisabled.add(y)),g.layers.add(y),w(),()=>{r&&g.layersWithOutsidePointerEventsDisabled.size===1&&(x.body.style.pointerEvents=_)}},[y,x,r,g]),u.useEffect(()=>()=>{y&&(g.layers.delete(y),g.layersWithOutsidePointerEventsDisabled.delete(y),w())},[y,g]),u.useEffect(()=>{let e=()=>T({});return document.addEventListener(m,e),()=>document.removeEventListener(m,e)},[]),(0,f.jsx)(o.div,{...h,ref:E,style:{pointerEvents:te?A?`auto`:`none`:void 0,...t.style},onFocusCapture:s(t.onFocusCapture,M.onFocusCapture),onBlurCapture:s(t.onBlurCapture,M.onBlurCapture),onPointerDownCapture:s(t.onPointerDownCapture,j.onPointerDownCapture)})});y.displayName=p;var b=`DismissableLayerBranch`,x=u.forwardRef((t,n)=>{let r=u.useContext(v),i=u.useRef(null),a=e(n,i);return u.useEffect(()=>{let e=i.current;if(e)return r.branches.add(e),()=>{r.branches.delete(e)}},[r.branches]),(0,f.jsx)(o.div,{...t,ref:a})});x.displayName=b;function S(e,t=globalThis?.document){let n=l(e),r=u.useRef(!1),i=u.useRef(()=>{});return u.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){T(h,n,a,{discrete:!0})},a={originalEvent:e};e.pointerType===`touch`?(t.removeEventListener(`click`,i.current),i.current=r,t.addEventListener(`click`,i.current,{once:!0})):r()}else t.removeEventListener(`click`,i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener(`pointerdown`,e)},0);return()=>{window.clearTimeout(a),t.removeEventListener(`pointerdown`,e),t.removeEventListener(`click`,i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function C(e,t=globalThis?.document){let n=l(e),r=u.useRef(!1);return u.useEffect(()=>{let e=e=>{e.target&&!r.current&&T(g,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function w(){let e=new CustomEvent(m);document.dispatchEvent(e)}function T(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?c(i,a):i.dispatchEvent(a)}var E=`focusScope.autoFocusOnMount`,D=`focusScope.autoFocusOnUnmount`,O={bubbles:!1,cancelable:!0},ee=`FocusScope`,k=u.forwardRef((t,n)=>{let{loop:r=!1,trapped:i=!1,onMountAutoFocus:a,onUnmountAutoFocus:s,...c}=t,[d,p]=u.useState(null),m=l(a),h=l(s),g=u.useRef(null),_=e(n,e=>p(e)),v=u.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;u.useEffect(()=>{if(i){let e=function(e){if(v.paused||!d)return;let t=e.target;d.contains(t)?g.current=t:N(g.current,{select:!0})},t=function(e){if(v.paused||!d)return;let t=e.relatedTarget;t!==null&&(d.contains(t)||N(g.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&N(d)};document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return d&&r.observe(d,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[i,d,v.paused]),u.useEffect(()=>{if(d){ie.add(v);let e=document.activeElement;if(!d.contains(e)){let t=new CustomEvent(E,O);d.addEventListener(E,m),d.dispatchEvent(t),t.defaultPrevented||(te(se(j(d)),{select:!0}),document.activeElement===e&&N(d))}return()=>{d.removeEventListener(E,m),setTimeout(()=>{let t=new CustomEvent(D,O);d.addEventListener(D,h),d.dispatchEvent(t),t.defaultPrevented||N(e??document.body,{select:!0}),d.removeEventListener(D,h),ie.remove(v)},0)}}},[d,m,h,v]);let y=u.useCallback(e=>{if(!r&&!i||v.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,n=document.activeElement;if(t&&n){let t=e.currentTarget,[i,a]=A(t);i&&a?!e.shiftKey&&n===a?(e.preventDefault(),r&&N(i,{select:!0})):e.shiftKey&&n===i&&(e.preventDefault(),r&&N(a,{select:!0})):n===t&&e.preventDefault()}},[r,i,v.paused]);return(0,f.jsx)(o.div,{tabIndex:-1,...c,ref:_,onKeyDown:y})});k.displayName=ee;function te(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(N(r,{select:t}),document.activeElement!==n)return}function A(e){let t=j(e);return[M(t,e),M(t.reverse(),e)]}function j(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function M(e,t){for(let n of e)if(!ne(n,{upTo:t}))return n}function ne(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}function re(e){return e instanceof HTMLInputElement&&`select`in e}function N(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&re(e)&&t&&e.select()}}var ie=ae();function ae(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=oe(e,t),e.unshift(t)},remove(t){e=oe(e,t),e[0]?.resume()}}}function oe(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function se(e){return e.filter(e=>e.tagName!==`A`)}var ce=t(i(),1),le=`Portal`,ue=u.forwardRef((e,t)=>{let{container:n,...r}=e,[i,s]=u.useState(!1);a(()=>s(!0),[]);let c=n||i&&globalThis?.document?.body;return c?ce.createPortal((0,f.jsx)(o.div,{...r,ref:t}),c):null});ue.displayName=le;var P=0;function de(){u.useEffect(()=>{let e=document.querySelectorAll(`[data-radix-focus-guard]`);return document.body.insertAdjacentElement(`afterbegin`,e[0]??fe()),document.body.insertAdjacentElement(`beforeend`,e[1]??fe()),P++,()=>{P===1&&document.querySelectorAll(`[data-radix-focus-guard]`).forEach(e=>e.remove()),P--}},[])}function fe(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}var F=function(){return F=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},F.apply(this,arguments)};function I(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function pe(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var L=`right-scroll-bar-position`,R=`width-before-scroll-bar`,me=`with-scroll-bars-hidden`,he=`--removed-body-scroll-bar-size`;function z(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function ge(e,t){var n=(0,u.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var _e=typeof window<`u`?u.useLayoutEffect:u.useEffect,ve=new WeakMap;function ye(e,t){var n=ge(t||null,function(t){return e.forEach(function(e){return z(e,t)})});return _e(function(){var t=ve.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||z(e,null)}),i.forEach(function(e){r.has(e)||z(e,a)})}ve.set(n,e)},[e]),n}function be(e){return e}function xe(e,t){t===void 0&&(t=be);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function Se(e){e===void 0&&(e={});var t=xe(null);return t.options=F({async:!0,ssr:!1},e),t}var Ce=function(e){var t=e.sideCar,n=I(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error(`Sidecar medium not found`);return u.createElement(r,F({},n))};Ce.isSideCarExport=!0;function we(e,t){return e.useMedium(t),Ce}var Te=Se(),B=function(){},V=u.forwardRef(function(e,t){var n=u.useRef(null),r=u.useState({onScrollCapture:B,onWheelCapture:B,onTouchMoveCapture:B}),i=r[0],a=r[1],o=e.forwardProps,s=e.children,c=e.className,l=e.removeScrollBar,d=e.enabled,f=e.shards,p=e.sideCar,m=e.noRelative,h=e.noIsolation,g=e.inert,_=e.allowPinchZoom,v=e.as,y=v===void 0?`div`:v,b=e.gapMode,x=I(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),S=p,C=ye([n,t]),w=F(F({},x),i);return u.createElement(u.Fragment,null,d&&u.createElement(S,{sideCar:Te,removeScrollBar:l,shards:f,noRelative:m,noIsolation:h,inert:g,setCallbacks:a,allowPinchZoom:!!_,lockRef:n,gapMode:b}),o?u.cloneElement(u.Children.only(s),F(F({},w),{ref:C})):u.createElement(y,F({},w,{className:c,ref:C}),s))});V.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},V.classNames={fullWidth:R,zeroRight:L};var Ee,De=function(){if(Ee)return Ee;if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function Oe(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=De();return t&&e.setAttribute(`nonce`,t),e}function ke(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Ae(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var je=function(){var e=0,t=null;return{add:function(n){e==0&&(t=Oe())&&(ke(t,n),Ae(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Me=function(){var e=je();return function(t,n){u.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},Ne=function(){var e=Me();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},Pe={left:0,top:0,right:0,gap:0},H=function(e){return parseInt(e||``,10)||0},Fe=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[H(n),H(r),H(i)]},Ie=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return Pe;var t=Fe(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Le=Ne(),U=`data-scroll-locked`,Re=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
2
- .${me} {
3
- overflow: hidden ${r};
4
- padding-right: ${s}px ${r};
5
- }
6
- body[${U}] {
7
- overflow: hidden ${r};
8
- overscroll-behavior: contain;
9
- ${[t&&`position: relative ${r};`,n===`margin`&&`
10
- padding-left: ${i}px;
11
- padding-top: ${a}px;
12
- padding-right: ${o}px;
13
- margin-left:0;
14
- margin-top:0;
15
- margin-right: ${s}px ${r};
16
- `,n===`padding`&&`padding-right: ${s}px ${r};`].filter(Boolean).join(``)}
17
- }
18
-
19
- .${L} {
20
- right: ${s}px ${r};
21
- }
22
-
23
- .${R} {
24
- margin-right: ${s}px ${r};
25
- }
26
-
27
- .${L} .${L} {
28
- right: 0 ${r};
29
- }
30
-
31
- .${R} .${R} {
32
- margin-right: 0 ${r};
33
- }
34
-
35
- body[${U}] {
36
- ${he}: ${s}px;
37
- }
38
- `},ze=function(){var e=parseInt(document.body.getAttribute(`data-scroll-locked`)||`0`,10);return isFinite(e)?e:0},Be=function(){u.useEffect(function(){return document.body.setAttribute(U,(ze()+1).toString()),function(){var e=ze()-1;e<=0?document.body.removeAttribute(U):document.body.setAttribute(U,e.toString())}},[])},Ve=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?`margin`:r;Be();var a=u.useMemo(function(){return Ie(i)},[i]);return u.createElement(Le,{styles:Re(a,!t,i,n?``:`!important`)})},W=!1;if(typeof window<`u`)try{var G=Object.defineProperty({},`passive`,{get:function(){return W=!0,!0}});window.addEventListener(`test`,G,G),window.removeEventListener(`test`,G,G)}catch{W=!1}var K=W?{passive:!1}:!1,He=function(e){return e.tagName===`TEXTAREA`},Ue=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==`hidden`&&!(n.overflowY===n.overflowX&&!He(e)&&n[t]===`visible`)},We=function(e){return Ue(e,`overflowY`)},Ge=function(e){return Ue(e,`overflowX`)},Ke=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<`u`&&r instanceof ShadowRoot&&(r=r.host),Ye(e,r)){var i=Xe(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},qe=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},Je=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},Ye=function(e,t){return e===`v`?We(t):Ge(t)},Xe=function(e,t){return e===`v`?qe(t):Je(t)},Ze=function(e,t){return e===`h`&&t===`rtl`?-1:1},Qe=function(e,t,n,r,i){var a=Ze(e,window.getComputedStyle(t).direction),o=a*r,s=n.target,c=t.contains(s),l=!1,u=o>0,d=0,f=0;do{if(!s)break;var p=Xe(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&Ye(e,s)&&(d+=h,f+=m);var g=s.parentNode;s=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(u&&(i&&Math.abs(d)<1||!i&&o>d)||!u&&(i&&Math.abs(f)<1||!i&&-o>f))&&(l=!0),l},q=function(e){return`changedTouches`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},J=function(e){return[e.deltaX,e.deltaY]},$e=function(e){return e&&`current`in e?e.current:e},et=function(e,t){return e[0]===t[0]&&e[1]===t[1]},tt=function(e){return`
39
- .block-interactivity-${e} {pointer-events: none;}
40
- .allow-interactivity-${e} {pointer-events: all;}
41
- `},nt=0,Y=[];function rt(e){var t=u.useRef([]),n=u.useRef([0,0]),r=u.useRef(),i=u.useState(nt++)[0],a=u.useState(Ne)[0],o=u.useRef(e);u.useEffect(function(){o.current=e},[e]),u.useEffect(function(){if(e.inert){document.body.classList.add(`block-interactivity-${i}`);var t=pe([e.lockRef.current],(e.shards||[]).map($e),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(`allow-interactivity-${i}`)}),function(){document.body.classList.remove(`block-interactivity-${i}`),t.forEach(function(e){return e.classList.remove(`allow-interactivity-${i}`)})}}},[e.inert,e.lockRef.current,e.shards]);var s=u.useCallback(function(e,t){if(`touches`in e&&e.touches.length===2||e.type===`wheel`&&e.ctrlKey)return!o.current.allowPinchZoom;var i=q(e),a=n.current,s=`deltaX`in e?e.deltaX:a[0]-i[0],c=`deltaY`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(s)>Math.abs(c)?`h`:`v`;if(`touches`in e&&d===`h`&&u.type===`range`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=Ke(d,u);if(!m)return!0;if(m?l=d:(l=d===`v`?`h`:`v`,m=Ke(d,u)),!m)return!1;if(!r.current&&`changedTouches`in e&&(s||c)&&(r.current=l),!l)return!0;var h=r.current||l;return Qe(h,t,e,h===`h`?s:c,!0)},[]),c=u.useCallback(function(e){var n=e;if(!(!Y.length||Y[Y.length-1]!==a)){var r=`deltaY`in n?J(n):q(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&et(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var c=(o.current.shards||[]).map($e).filter(Boolean).filter(function(e){return e.contains(n.target)});(c.length>0?s(n,c[0]):!o.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),l=u.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:it(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),d=u.useCallback(function(e){n.current=q(e),r.current=void 0},[]),f=u.useCallback(function(t){l(t.type,J(t),t.target,s(t,e.lockRef.current))},[]),p=u.useCallback(function(t){l(t.type,q(t),t.target,s(t,e.lockRef.current))},[]);u.useEffect(function(){return Y.push(a),e.setCallbacks({onScrollCapture:f,onWheelCapture:f,onTouchMoveCapture:p}),document.addEventListener(`wheel`,c,K),document.addEventListener(`touchmove`,c,K),document.addEventListener(`touchstart`,d,K),function(){Y=Y.filter(function(e){return e!==a}),document.removeEventListener(`wheel`,c,K),document.removeEventListener(`touchmove`,c,K),document.removeEventListener(`touchstart`,d,K)}},[]);var m=e.removeScrollBar,h=e.inert;return u.createElement(u.Fragment,null,h?u.createElement(a,{styles:tt(i)}):null,m?u.createElement(Ve,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function it(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var at=we(Te,rt),ot=u.forwardRef(function(e,t){return u.createElement(V,F({},e,{ref:t,sideCar:at}))});ot.classNames=V.classNames;var st=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},X=new WeakMap,Z=new WeakMap,Q={},$=0,ct=function(e){return e&&(e.host||ct(e.parentNode))},lt=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=ct(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},ut=function(e,t,n,r){var i=lt(t,Array.isArray(e)?e:[e]);Q[n]||(Q[n]=new WeakMap);var a=Q[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(X.get(e)||0)+1,l=(a.get(e)||0)+1;X.set(e,c),a.set(e,l),o.push(e),c===1&&i&&Z.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return u(t),s.clear(),$++,function(){o.forEach(function(e){var t=X.get(e)-1,i=a.get(e)-1;X.set(e,t),a.set(e,i),t||(Z.has(e)||e.removeAttribute(r),Z.delete(e)),i||e.removeAttribute(n)}),$--,$||(X=new WeakMap,X=new WeakMap,Z=new WeakMap,Q={})}},dt=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||st(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),ut(r,i,n,`aria-hidden`)):function(){return null}};export{k as a,ue as i,ot as n,y as o,de as r,dt as t};
@@ -1 +0,0 @@
1
- import{c as e,f as t,l as n,s as r,t as i,u as a}from"./button-yArHqw81.js";import"./dist-CwP5Ad1_.js";import{t as o}from"./circle-x-BjSs1hQK.js";import{n as s,t as c}from"./server-CktUTlNz.js";import{t as l}from"./refresh-cw-DdzbeDXU.js";import{t as ee}from"./shield-check-UHsTa1Dy.js";import{t as u}from"./wifi-fTyrNPN8.js";import{t as d}from"./switch-IUacG_eP.js";import{$ as f,Et as p,F as m,G as h,I as g,N as _,P as v,Q as y,X as b,Y as x,Z as te,at as ne,bt as re,et as S,j as C,nt as w,tt as T}from"./index-F8M6NlaE.js";import{n as E,r as D,t as O}from"./alert-VYHxU7hf.js";import{a as k,i as A,n as j,o as M,r as N,t as P}from"./table-C5seB8Am.js";var F=n(`cpu`,[[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M17 20v2`,key:`1rnc9c`}],[`path`,{d:`M17 2v2`,key:`11trls`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M2 17h2`,key:`7oei6x`}],[`path`,{d:`M2 7h2`,key:`asdhe0`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`M20 17h2`,key:`1fpfkl`}],[`path`,{d:`M20 7h2`,key:`1o8tra`}],[`path`,{d:`M7 20v2`,key:`4gnj0m`}],[`path`,{d:`M7 2v2`,key:`1i4yhu`}],[`rect`,{x:`4`,y:`4`,width:`16`,height:`16`,rx:`2`,key:`1vbyd7`}],[`rect`,{x:`8`,y:`8`,width:`8`,height:`8`,rx:`1`,key:`z9xiuo`}]]),I=n(`gauge`,[[`path`,{d:`m12 14 4-4`,key:`9kzdfg`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`,key:`19p75a`}]]),L=n(`hard-drive`,[[`line`,{x1:`22`,x2:`2`,y1:`12`,y2:`12`,key:`1y58io`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}],[`line`,{x1:`6`,x2:`6.01`,y1:`16`,y2:`16`,key:`sgf278`}],[`line`,{x1:`10`,x2:`10.01`,y1:`16`,y2:`16`,key:`1l4acy`}]]),R=n(`network`,[[`rect`,{x:`16`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`4q2zg0`}],[`rect`,{x:`2`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`8cvhb9`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`6`,rx:`1`,key:`1egb70`}],[`path`,{d:`M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3`,key:`1jsf9p`}],[`path`,{d:`M12 12V8`,key:`2874zd`}]]),z=t(a(),1),B=r(),V={ok:`正常`,degraded:`降级`,critical:`严重`},ie={cpu:`CPU`,rss:`RSS 内存`,connections:`连接数`,mitmServers:`MITM 服务`,eventLoopDelay:`事件循环延迟`,fds:`文件描述符`};function H(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.generatedAt==`number`&&typeof t.status==`string`&&typeof t.pid==`number`&&typeof t.uptimeSec==`number`&&!!t.memory&&!!t.cpu&&!!t.connections&&!!t.mitmServers&&Array.isArray(t.checks)}async function U(){let e=await fetch(`/api/health`,{cache:`no-store`});if(!e.ok)throw Error(`健康接口返回 ${e.status}`);let t=await e.json();if(!H(t))throw Error(`健康接口返回格式不正确`);return t}function W(e){if(!Number.isFinite(e))return`-`;if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=t[0];for(let e=1;e<t.length&&n>=1024;e+=1)n/=1024,r=t[e];return`${n>=10?n.toFixed(0):n.toFixed(1)} ${r}`}function G(e){if(!Number.isFinite(e)||e<0)return`-`;let t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60),i=Math.floor(e%60);return t>0?`${t}天 ${n}小时`:n>0?`${n}小时 ${r}分钟`:r>0?`${r}分钟 ${i}秒`:`${i}秒`}function K(e){return e?new Intl.DateTimeFormat(`zh-CN`,{month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1}).format(new Date(e)):`-`}function q(e,t){return t===`bytes`?W(e):t===`%`?`${e.toFixed(1)}%`:t===`ms`?`${e.toFixed(1)} ms`:String(e)}function J(e,t){return t===`bytes`?W(e):t===`%`?`${e}%`:t===`ms`?`${e} ms`:String(e)}function ae(e){if(!e||typeof e!=`object`)return null;let t=e;return Array.isArray(t.keys)?{windowMs:Number(t.windowMs)||0,maxPerWindow:Number(t.maxPerWindow)||0,keys:t.keys,suppressedTotal:Number(t.suppressedTotal)||0}:null}function Y({status:e}){return(0,B.jsxs)(h,{variant:e===`critical`?`destructive`:e===`degraded`?`secondary`:`default`,children:[e===`ok`?(0,B.jsx)(p,{}):e===`degraded`?(0,B.jsx)(w,{}):(0,B.jsx)(o,{}),V[e]]})}function oe({icon:e,label:t,value:n,detail:r}){return(0,B.jsxs)(b,{className:`gap-0 py-0 shadow-none`,children:[(0,B.jsx)(S,{className:`border-b px-[var(--ui-section-gap)] py-[var(--ui-section-gap)] [.border-b]:pb-[var(--ui-section-gap)]`,children:(0,B.jsxs)(T,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,B.jsx)(e,{}),t]})}),(0,B.jsxs)(y,{className:`flex flex-col gap-1 p-[var(--ui-page-padding)]`,children:[(0,B.jsx)(`div`,{className:`text-2xl font-semibold tracking-tight`,children:n}),(0,B.jsx)(`div`,{className:`min-h-4 truncate text-xs text-muted-foreground`,title:r,children:r})]})]})}function X({label:e,value:t}){return(0,B.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 rounded-lg border bg-background p-[var(--ui-section-gap)]`,children:[(0,B.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e}),(0,B.jsx)(`span`,{className:`truncate text-sm font-medium`,title:t,children:t})]})}function se(){return(0,B.jsxs)(`div`,{className:`app-workspace-content`,"aria-label":`正在读取健康状态`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,B.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,B.jsx)(x,{className:`h-7 w-40`}),(0,B.jsx)(x,{className:`h-4 w-64`})]}),(0,B.jsx)(x,{className:`h-8 w-28`})]}),(0,B.jsx)(`div`,{className:`grid gap-[var(--ui-section-gap)] md:grid-cols-2 xl:grid-cols-6`,children:Array.from({length:6}).map((e,t)=>(0,B.jsx)(x,{className:`h-32 w-full`},t))}),(0,B.jsx)(x,{className:`h-80 w-full`})]})}function Z(){let[t,n]=(0,z.useState)(null),[r,a]=(0,z.useState)(!0),[o,p]=(0,z.useState)(!1),[x,V]=(0,z.useState)(``),[H,Z]=(0,z.useState)(!0),Q=(0,z.useCallback)(async(e=!1)=>{e?p(!0):a(!0),V(``);try{n(await U())}catch(e){V(e instanceof Error?e.message:`无法读取健康状态`)}finally{a(!1),p(!1)}},[]);(0,z.useEffect)(()=>{Q()},[Q]),(0,z.useEffect)(()=>{if(!H)return;let e=window.setInterval(()=>{Q(!0)},5e3);return()=>window.clearInterval(e)},[H,Q]);let $=(0,z.useMemo)(()=>ae(t?.logs),[t]);if(r&&!t)return(0,B.jsx)(se,{});if(!t)return(0,B.jsxs)(`div`,{className:`app-workspace-content`,children:[(0,B.jsxs)(O,{variant:`destructive`,children:[(0,B.jsx)(D,{children:`加载失败`}),(0,B.jsx)(E,{children:x||`无法读取健康状态`})]}),(0,B.jsxs)(i,{variant:`outline`,size:`sm`,onClick:()=>void Q(),children:[(0,B.jsx)(l,{"data-icon":`inline-start`}),`重新检测`]})]});let ce=[{icon:F,label:`CPU`,value:`${t.cpu.percent.toFixed(1)}%`,detail:`${t.cpu.cores} 核 · load ${t.cpu.loadAverage.map(e=>e.toFixed(2)).join(` / `)}`},{icon:L,label:`RSS 内存`,value:W(t.memory.rss),detail:`Heap ${W(t.memory.heapUsed)} / ${W(t.memory.heapTotal)}`},{icon:R,label:`TCP 连接`,value:String(t.connections.total),detail:`代理 ${t.connections.proxySockets} · TLS ${t.connections.mitmTlsSockets} · WS ${t.connections.webSockets}`},{icon:c,label:`MITM 服务`,value:String(t.mitmServers.count),detail:`${t.mitmServers.activeSockets} 个活跃 socket`},{icon:ne,label:`文件描述符`,value:t.process.fdCount==null?`-`:String(t.process.fdCount),detail:`handles ${t.process.activeHandles??`-`} · requests ${t.process.activeRequests??`-`}`},{icon:I,label:`事件循环`,value:`${t.eventLoop.maxMs.toFixed(1)} ms`,detail:`mean ${t.eventLoop.meanMs.toFixed(1)} ms`}];return(0,B.jsxs)(`div`,{className:`meddle-thin-scroll app-workspace-content overflow-y-auto`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,B.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-2`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,B.jsx)(`h2`,{className:`text-xl font-semibold tracking-tight`,children:`运行健康`}),(0,B.jsx)(Y,{status:t.status})]}),(0,B.jsxs)(`div`,{className:`flex flex-wrap gap-3 text-xs text-muted-foreground`,children:[(0,B.jsxs)(`span`,{children:[`PID `,t.pid]}),(0,B.jsxs)(`span`,{children:[`运行 `,G(t.uptimeSec)]}),(0,B.jsx)(`span`,{children:t.platform}),(0,B.jsxs)(`span`,{children:[`更新 `,K(t.generatedAt)]})]})]}),(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,B.jsxs)(`div`,{className:`flex h-8 items-center gap-2 rounded-md border bg-background px-3 text-sm`,children:[(0,B.jsx)(d,{checked:H,onCheckedChange:Z,"aria-label":`自动刷新健康信息`}),(0,B.jsx)(`span`,{children:`自动刷新`})]}),(0,B.jsxs)(i,{variant:`outline`,size:`sm`,onClick:()=>void Q(!0),disabled:o,children:[(0,B.jsx)(l,{"data-icon":`inline-start`,className:e(o&&`animate-spin`)}),`刷新`]})]})]}),x&&(0,B.jsxs)(O,{variant:`destructive`,children:[(0,B.jsx)(D,{children:`刷新失败`}),(0,B.jsx)(E,{children:x})]}),(0,B.jsx)(`div`,{className:`grid gap-[var(--ui-section-gap)] md:grid-cols-2 xl:grid-cols-6`,children:ce.map(e=>(0,B.jsx)(oe,{...e},e.label))}),(0,B.jsxs)(`div`,{className:`grid gap-[var(--ui-section-gap)] xl:grid-cols-[minmax(0,1.3fr)_minmax(360px,0.7fr)]`,children:[(0,B.jsxs)(b,{className:`gap-0 py-0 shadow-none`,children:[(0,B.jsxs)(S,{className:`border-b px-[var(--ui-section-gap)] py-[var(--ui-section-gap)] [.border-b]:pb-[var(--ui-section-gap)]`,children:[(0,B.jsxs)(T,{className:`flex items-center gap-2`,children:[(0,B.jsx)(re,{}),`健康检查`]}),(0,B.jsx)(f,{children:`阈值来自当前进程的 MEDDLE_WATCHDOG 配置。`})]}),(0,B.jsx)(y,{className:`p-0`,children:(0,B.jsxs)(P,{children:[(0,B.jsx)(k,{children:(0,B.jsxs)(M,{children:[(0,B.jsx)(A,{children:`项目`}),(0,B.jsx)(A,{children:`状态`}),(0,B.jsx)(A,{children:`当前值`}),(0,B.jsx)(A,{children:`阈值`})]})}),(0,B.jsx)(j,{children:t.checks.map(e=>(0,B.jsxs)(M,{children:[(0,B.jsx)(N,{className:`font-medium`,children:ie[e.name]||e.name}),(0,B.jsx)(N,{children:(0,B.jsx)(Y,{status:e.status})}),(0,B.jsx)(N,{children:q(e.value,e.unit)}),(0,B.jsx)(N,{className:`text-muted-foreground`,children:J(e.limit,e.unit)})]},e.name))})]})})]}),(0,B.jsxs)(b,{className:`gap-0 py-0 shadow-none`,children:[(0,B.jsxs)(S,{className:`border-b px-[var(--ui-section-gap)] py-[var(--ui-section-gap)] [.border-b]:pb-[var(--ui-section-gap)]`,children:[(0,B.jsxs)(T,{className:`flex items-center gap-2`,children:[(0,B.jsx)(ee,{}),`守护策略`]}),(0,B.jsx)(f,{children:`连续命中严重阈值后按策略处理。`}),(0,B.jsx)(te,{children:(0,B.jsx)(h,{variant:t.watchdog.config.enabled?`default`:`secondary`,children:t.watchdog.config.enabled?`已启用`:`已关闭`})})]}),(0,B.jsxs)(y,{className:`grid gap-[var(--ui-section-gap)] p-[var(--ui-page-padding)] sm:grid-cols-2`,children:[(0,B.jsx)(X,{label:`动作`,value:t.watchdog.config.action===`exit`?`退出重启`:`仅告警`}),(0,B.jsx)(X,{label:`检测间隔`,value:G(t.watchdog.config.intervalMs/1e3)}),(0,B.jsx)(X,{label:`最小运行时间`,value:G(t.watchdog.config.minUptimeMs/1e3)}),(0,B.jsx)(X,{label:`失败阈值`,value:`${t.watchdog.consecutiveFailures}/${t.watchdog.config.failureThreshold}`}),(0,B.jsx)(X,{label:`CPU 阈值`,value:`${t.watchdog.config.cpuPercent}%`}),(0,B.jsx)(X,{label:`RSS 阈值`,value:W(t.watchdog.config.rssBytes)}),(0,B.jsx)(X,{label:`连接阈值`,value:String(t.watchdog.config.connectionCount)}),(0,B.jsx)(X,{label:`FD 阈值`,value:String(t.watchdog.config.fdCount)}),t.watchdog.lastReason&&(0,B.jsx)(`div`,{className:`sm:col-span-2`,children:(0,B.jsxs)(O,{children:[(0,B.jsx)(w,{}),(0,B.jsx)(D,{children:`最近命中`}),(0,B.jsx)(E,{children:t.watchdog.lastReason})]})})]})]})]}),(0,B.jsxs)(`div`,{className:`grid gap-[var(--ui-section-gap)] xl:grid-cols-2`,children:[(0,B.jsxs)(b,{className:`gap-0 py-0 shadow-none`,children:[(0,B.jsxs)(S,{className:`border-b px-[var(--ui-section-gap)] py-[var(--ui-section-gap)] [.border-b]:pb-[var(--ui-section-gap)]`,children:[(0,B.jsxs)(T,{className:`flex items-center gap-2`,children:[(0,B.jsx)(u,{}),`MITM 服务池`]}),(0,B.jsxs)(f,{children:[t.mitmServers.count,` 个动态 HTTPS 服务。`]})]}),(0,B.jsx)(y,{className:`p-0`,children:t.mitmServers.items.length>0?(0,B.jsxs)(P,{children:[(0,B.jsx)(k,{children:(0,B.jsxs)(M,{children:[(0,B.jsx)(A,{children:`Host`}),(0,B.jsx)(A,{children:`端口`}),(0,B.jsx)(A,{children:`Socket`}),(0,B.jsx)(A,{children:`空闲`})]})}),(0,B.jsx)(j,{children:t.mitmServers.items.map(e=>(0,B.jsxs)(M,{children:[(0,B.jsx)(N,{className:`max-w-[260px] truncate font-medium`,title:e.host,children:e.host}),(0,B.jsx)(N,{children:e.port??`-`}),(0,B.jsxs)(N,{children:[e.activeSockets,` / `,e.webSockets,` WS`]}),(0,B.jsx)(N,{className:`text-muted-foreground`,children:e.idleForMs==null?`-`:G(e.idleForMs/1e3)})]},`${e.host}:${e.port??`dynamic`}`))})]}):(0,B.jsx)(C,{className:`border-0 py-10`,children:(0,B.jsxs)(v,{children:[(0,B.jsx)(m,{variant:`icon`,children:(0,B.jsx)(c,{})}),(0,B.jsx)(g,{children:`暂无动态 HTTPS 服务`}),(0,B.jsx)(_,{children:`当前没有活跃的 MITM 目标。`})]})})})]}),(0,B.jsxs)(b,{className:`gap-0 py-0 shadow-none`,children:[(0,B.jsxs)(S,{className:`border-b px-[var(--ui-section-gap)] py-[var(--ui-section-gap)] [.border-b]:pb-[var(--ui-section-gap)]`,children:[(0,B.jsxs)(T,{className:`flex items-center gap-2`,children:[(0,B.jsx)(s,{}),`日志限流`]}),(0,B.jsxs)(f,{children:[`已抑制 `,$?.suppressedTotal??0,` 条重复日志。`]})]}),(0,B.jsx)(y,{className:`p-0`,children:$&&$.keys.length>0?(0,B.jsxs)(P,{children:[(0,B.jsx)(k,{children:(0,B.jsxs)(M,{children:[(0,B.jsx)(A,{children:`Key`}),(0,B.jsx)(A,{children:`级别`}),(0,B.jsx)(A,{children:`输出 / 抑制`}),(0,B.jsx)(A,{children:`最近`})]})}),(0,B.jsx)(j,{children:$.keys.map(e=>(0,B.jsxs)(M,{children:[(0,B.jsx)(N,{className:`max-w-[260px] truncate font-medium`,title:e.key,children:e.key}),(0,B.jsx)(N,{children:(0,B.jsx)(h,{variant:e.level===`error`?`destructive`:e.level===`warn`?`secondary`:`outline`,children:e.level})}),(0,B.jsxs)(N,{children:[e.emitted,` / `,e.suppressed]}),(0,B.jsx)(N,{className:`text-muted-foreground`,children:K(e.lastSeenAt)})]},e.key))})]}):(0,B.jsx)(C,{className:`border-0 py-10`,children:(0,B.jsxs)(v,{children:[(0,B.jsx)(m,{variant:`icon`,children:(0,B.jsx)(s,{})}),(0,B.jsx)(g,{children:`暂无限流记录`}),(0,B.jsx)(_,{children:`当前没有被抑制的重复日志。`})]})})})]})]})]})}export{Z as HealthPanel};