@kimiclaw/cli 1.0.42 → 1.0.45

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 (95) hide show
  1. package/README.md +17 -21
  2. package/bin/dscode.exe +4 -0
  3. package/install.cjs +15 -0
  4. package/package.json +9 -9
  5. package/web/dist/assets/AssistantsView-Y3nFezhd.js +1 -0
  6. package/web/dist/assets/AutomationView-bf7_zU_p.js +4 -0
  7. package/web/dist/assets/Button-B43HsIQ3.js +1 -0
  8. package/web/dist/assets/ChannelConfigView---Dwl3Fk.js +12 -0
  9. package/web/dist/assets/ChartsView-Dw6G-jf3.js +1 -0
  10. package/web/dist/assets/ConnectorsView-BWvdrpyK.js +2 -0
  11. package/web/dist/assets/{MessageBubble-CVGXupVH.js → DiffPreview-WQihq3bK.js} +65 -67
  12. package/web/dist/assets/FileContextMenu-CyjXlSHp.js +1 -0
  13. package/web/dist/assets/FileTreeView-Cafy33nT.js +1 -0
  14. package/web/dist/assets/HookConfigView-D-lASVju.js +2 -0
  15. package/web/dist/assets/InboxView-BWajw-Yx.js +1 -0
  16. package/web/dist/assets/InputArea-CSqaA55j.js +31 -0
  17. package/web/dist/assets/Install-ClEm4oGX.js +2 -0
  18. package/web/dist/assets/MemoryView-DLri75dm.js +1 -0
  19. package/web/dist/assets/ModelsView-BBLUMzR5.js +1 -0
  20. package/web/dist/assets/PluginsView-C-fnbDGZ.js +1 -0
  21. package/web/dist/assets/ProjectsView-BruI2W_l.js +1 -0
  22. package/web/dist/assets/SessionGrid-7GLpwn6d.js +4 -0
  23. package/web/dist/assets/SettingsModal-cc9Qu2QU.js +4 -0
  24. package/web/dist/assets/SkillsView-Bf-2-U_q.js +1 -0
  25. package/web/dist/assets/TemplatesTab-CKul8nbL.js +2 -0
  26. package/web/dist/assets/ToolsView-D_aluOsK.js +1 -0
  27. package/web/dist/assets/WorkspaceDirPicker-Z42YqE4a.js +5 -0
  28. package/web/dist/assets/{agentIconSet-B5GUQwel.js → agentIconSet-Cqhm4UOl.js} +1 -1
  29. package/web/dist/assets/api-BW4-5gtM.js +1 -0
  30. package/web/dist/assets/channelMeta-BO645sjD.js +1 -0
  31. package/web/dist/assets/chatStore-D8Zzr1hE.js +242 -0
  32. package/web/dist/assets/cn-CoHJgTJ5.js +1 -0
  33. package/web/dist/assets/common-CP2UB8TN.js +304 -0
  34. package/web/dist/assets/icons-CittejKL.js +1 -0
  35. package/web/dist/assets/imageUrl-BVgcEm7e.js +2 -0
  36. package/web/dist/assets/index-CEUbTcNL.css +1 -0
  37. package/web/dist/assets/index-CxrzleFg.js +122 -0
  38. package/web/dist/assets/installDiagnosis-ZYUVgJIJ.js +3 -0
  39. package/web/dist/assets/{markdown-N5__3T-w.js → markdown-DZQBOzWk.js} +1 -1
  40. package/web/dist/assets/{panels-CIPgN61N.js → panels-CuDz4aqU.js} +1 -1
  41. package/web/dist/assets/projectsStore-B7fdKRzl.js +1 -0
  42. package/web/dist/assets/{react-vendor-CB4cLN-6.js → react-vendor-BEA-EtI-.js} +1 -1
  43. package/web/dist/assets/sessionKind-CZ1kQQII.js +1 -0
  44. package/web/dist/assets/{settingsStore-Xqln0d91.js → settingsStore-DYqiXodu.js} +1 -1
  45. package/web/dist/assets/src-55YckF5W.js +2 -0
  46. package/web/dist/assets/{state-CSZ50keL.js → state-A4wJ8QgR.js} +1 -1
  47. package/web/dist/assets/statusAxesRefresh-BBqszCp-.js +1 -0
  48. package/web/dist/assets/sttLanguages-jnSk4aqg.js +6 -0
  49. package/web/dist/assets/threadStore-CQi4OzSe.js +1 -0
  50. package/web/dist/assets/{types-JssxRFJn.js → threads-lr33dwqg.js} +1 -1
  51. package/web/dist/assets/useConfirm-kTv3x0H6.js +1 -0
  52. package/web/dist/assets/{useTranslation-B-mfApCn.js → useTranslation-2BGEBvJE.js} +1 -1
  53. package/web/dist/assets/websocket-DCs7f54y.js +1 -0
  54. package/web/dist/assets/whatsNewStore-DoCQvcMq.js +1 -0
  55. package/web/dist/favicon.svg +31 -14
  56. package/web/dist/icons/icon-1024.png +0 -0
  57. package/web/dist/icons/icon-180.png +0 -0
  58. package/web/dist/icons/icon-192.png +0 -0
  59. package/web/dist/icons/icon-512.png +0 -0
  60. package/web/dist/icons/icon-maskable-512.png +0 -0
  61. package/web/dist/index.html +42 -35
  62. package/web/dist/logo.svg +42 -20
  63. package/web/dist/manifest.webmanifest +2 -2
  64. package/web/dist/assets/AssistantsView-Ct3BBpYf.js +0 -1
  65. package/web/dist/assets/AutomationView-CO-jVhee.js +0 -3
  66. package/web/dist/assets/ChannelConfigView-Ct1W584x.js +0 -8
  67. package/web/dist/assets/ChartsView-CAc37Sam.js +0 -1
  68. package/web/dist/assets/ConnectorsView-DP4bbh58.js +0 -1
  69. package/web/dist/assets/FileTreeView-DwsYfssO.js +0 -1
  70. package/web/dist/assets/HookConfigView-uFsqieii.js +0 -2
  71. package/web/dist/assets/InputArea-BY8quOiH.js +0 -14
  72. package/web/dist/assets/MemoryView-Bgd_lcTf.js +0 -1
  73. package/web/dist/assets/ModelsView-B271UV9L.js +0 -1
  74. package/web/dist/assets/PluginsView-Dz4fqQR1.js +0 -2
  75. package/web/dist/assets/ProjectsView-DF-YCV8y.js +0 -1
  76. package/web/dist/assets/SessionGrid-BIREstN2.js +0 -4
  77. package/web/dist/assets/SettingsModal-ZJeoZcCd.js +0 -4
  78. package/web/dist/assets/SkillsView-CH2ghYL2.js +0 -1
  79. package/web/dist/assets/TemplatesTab-BGe7_67s.js +0 -1
  80. package/web/dist/assets/ThreadsView-XditIHZ4.js +0 -2
  81. package/web/dist/assets/ToolsView-BBzsFdVZ.js +0 -1
  82. package/web/dist/assets/api-plEYhRn0.js +0 -1
  83. package/web/dist/assets/channelMeta-BGQXQxgj.js +0 -1
  84. package/web/dist/assets/common-Bbatsa0-.js +0 -192
  85. package/web/dist/assets/icons-CYDRRPKW.js +0 -1
  86. package/web/dist/assets/index-CTbLW314.js +0 -133
  87. package/web/dist/assets/index-DdzVrZye.css +0 -1
  88. package/web/dist/assets/src-49LUQhkG.js +0 -1
  89. package/web/dist/assets/sttLanguages-CSNMgUTz.js +0 -2
  90. package/web/dist/assets/ttsSettings-BwXYpDnk.js +0 -2
  91. package/web/dist/assets/useConfirm-Da8iQ_DZ.js +0 -1
  92. package/web/dist/assets/websocket-BnDwh01e.js +0 -1
  93. package/web/dist/assets/whatsNewStore-LpdLRLGl.js +0 -1
  94. package/web/dist/assets/workspaceSemantics-RaIRer76.js +0 -3
  95. /package/web/dist/assets/{MessageBubble-CCTRbIMZ.css → DiffPreview-CCTRbIMZ.css} +0 -0
@@ -1,8 +0,0 @@
1
- import{i as e,t}from"./rolldown-runtime-COiEfhsA.js";import{Gr as n,Kr as r,Z as i,_ as a,a as o,at as s,h as c,lt as l,nt as u,o as d,ut as f,wn as p}from"./icons-CYDRRPKW.js";import{t as m}from"./useTranslation-B-mfApCn.js";import{a as h,c as g,r as _,t as v}from"./useConfirm-Da8iQ_DZ.js";import{t as y}from"./api-plEYhRn0.js";import{I as b}from"./markdown-N5__3T-w.js";import"./common-Bbatsa0-.js";import{n as x,r as S,t as C}from"./channelMeta-BGQXQxgj.js";import{m as w}from"./index-CTbLW314.js";var T=e(r(),1),E=b(),D=[{labelKey:`im`,types:[`wechat`,`feishu`,`dingtalk`]},{labelKey:`international`,types:[`telegram`,`discord`,`slack`,`signal`,`whatsapp`]},{labelKey:`eastAsia`,types:[`line`,`qqbot`]},{labelKey:`collaboration`,types:[`matrix`,`mattermost`,`msteams`,`googlechat`]},{labelKey:`classic`,types:[`irc`,`imessage`,`sms`]},{labelKey:`other`,types:[`nextcloud-talk`,`nostr`,`synology-chat`,`tlon`,`twitch`,`zalo`,`zalouser`]},{labelKey:`builtin`,types:[`clickclack`,`raft`,`qa-channel`]}];function O(){let{t:e}=m(),{channels:t,availableTypes:n,typesLoaded:r,selectedType:i,selectType:a,loadTypes:o}=w();(0,T.useEffect)(()=>{o()},[o]);let s=(0,T.useMemo)(()=>{if(n.length===0)return[];let e=new Set(n),t=D.map(t=>({...t,types:t.types.filter(t=>e.has(t))})).filter(e=>e.types.length>0),r=new Set(D.flatMap(e=>e.types)),i=n.filter(e=>!r.has(e));return i.length>0?[...t,{labelKey:`plugins`,types:i}]:t},[n]),c=(0,T.useMemo)(()=>{let e=new Map;for(let n of t){let t=e.get(n.type)??{count:0,connected:0};e.set(n.type,{count:t.count+1,connected:t.connected+ +!!n.connected})}return e},[t]),l=n.length>0,u=(0,T.useMemo)(()=>l?t.filter(e=>n.includes(e.type)):[],[l,t,n]);return(0,E.jsxs)(`div`,{className:`flex flex-col h-full min-h-0 border-e border-dark-border bg-dark-surface`,children:[(0,E.jsxs)(`div`,{className:`shrink-0 px-4 py-3 border-b border-dark-border`,children:[(0,E.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-dark-muted`,children:e(`channels.sidebar.title`)}),(0,E.jsx)(`p`,{className:`text-meta text-dark-muted mt-0.5`,children:u.length>0?e(`channels.sidebar.configuredCount`,{n:u.length}):e(l?`channels.sidebar.clickToConfigure`:`channels.sidebar.emptyHint`)})]}),(0,E.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar`,children:[r&&!l&&(0,E.jsxs)(`div`,{className:`px-4 py-10 text-center`,children:[(0,E.jsx)(`p`,{className:`text-xs text-dark-muted`,children:e(`channels.sidebar.empty`)}),(0,E.jsx)(`p`,{className:`text-meta text-dark-muted/70 mt-1.5 leading-relaxed`,children:e(`channels.sidebar.emptyHint`)})]}),s.map(t=>{let n=t.types.filter(e=>c.has(e));return n.length===0?null:(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`sticky top-0 bg-dark-surface/95 backdrop-blur px-4 py-1.5 text-badge font-semibold uppercase tracking-wider text-dark-muted/60`,children:e(`channels.categories.${t.labelKey}`)}),n.map(e=>{let t=c.get(e);return(0,E.jsx)(k,{label:x(e),icon:C(e),isSelected:i===e,experimental:S(e),info:t,onClick:()=>a(e)},e)})]},t.labelKey)}),(()=>{let t=s.flatMap(e=>e.types).filter(e=>!c.has(e));return t.length===0?null:(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`sticky top-0 bg-dark-surface/95 backdrop-blur px-4 py-1.5 text-badge font-semibold uppercase tracking-wider text-dark-muted/60`,children:e(`channels.sidebar.unconfigured`)}),t.map(e=>(0,E.jsx)(k,{label:x(e),icon:C(e),isSelected:i===e,experimental:S(e),onClick:()=>a(e)},e))]})})()]})]})}function k({label:e,icon:t,isSelected:n,experimental:r,info:i,onClick:a}){let{t:s}=m();return(0,E.jsxs)(`button`,{onClick:a,className:`w-full flex items-center gap-2.5 px-4 py-2.5 text-start transition-colors hover:bg-dark-hover ${n?`bg-accent-blue/10 border-s-2 border-accent-blue`:`border-s-2 border-transparent`}`,children:[(0,E.jsx)(`span`,{className:`text-lg shrink-0 w-7 h-7 flex items-center justify-center rounded-md bg-dark-bg`,children:t}),(0,E.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,E.jsx)(`span`,{className:`text-sm font-medium text-dark-text truncate`,children:e}),r&&(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 text-avatar text-accent-yellow bg-accent-yellow/15 px-1 py-0.5 rounded shrink-0`,title:s(`channels.experimentalTip`),children:[(0,E.jsx)(p,{className:`w-2.5 h-2.5`}),` `,s(`channels.experimentalShort`)]}),i&&(0,E.jsx)(`span`,{className:`text-badge text-dark-muted bg-dark-hover px-1.5 py-0.5 rounded shrink-0`,children:i.count})]}),(0,E.jsx)(`div`,{className:`flex items-center gap-1 mt-0.5`,children:i?i.connected>0?(0,E.jsxs)(`span`,{className:`flex items-center gap-1 text-meta text-accent-green`,children:[(0,E.jsx)(o,{className:`w-3 h-3`}),i.connected===i.count?s(`channels.status.connected`):s(`channels.sidebar.partialConnected`,{connected:i.connected,count:i.count})]}):(0,E.jsxs)(`span`,{className:`flex items-center gap-1 text-meta text-dark-muted`,children:[(0,E.jsx)(d,{className:`w-3 h-3`}),s(`channels.status.disconnected`)]}):(0,E.jsx)(`span`,{className:`text-meta text-dark-muted`,children:s(`channels.sidebar.unconfigured`)})})]})]})}var A={name:``,type:`wechat`,appId:``,appSecret:``,token:``,encodingAESKey:``,enabled:!0};function j(){let{t:e}=m(),[t,n]=v(),{channels:r,selectedType:i,availableTypes:a,create:o,update:u,remove:d,toggle:g,error:_,clearError:y,openQr:b,load:D,test:O,testResult:k,testing:j}=w(),P=(0,T.useMemo)(()=>a.length>0&&!!i&&!a.includes(i),[a,i]),F=(0,T.useMemo)(()=>i?r.filter(e=>e.type===i):[],[r,i]),[I,L]=(0,T.useState)(``),[R,z]=(0,T.useState)(A),[B,V]=(0,T.useState)(!1),H=I===`__new__`,U=(0,T.useMemo)(()=>H?null:F.find(e=>e.id===I)??null,[F,I,H]);(0,T.useEffect)(()=>{L(``),z(A),V(!1),y()},[i]),(0,T.useEffect)(()=>{i===`wechat`&&F.length===0&&!P&&b(null)},[i,F.length,P,b]),(0,T.useEffect)(()=>{U?z({name:U.name,type:U.type,appId:U.appId||``,appSecret:``,token:``,encodingAESKey:U.encodingAESKey||``,enabled:U.enabled}):H&&z(e=>({...e,type:i}))},[I]);let W=(e,t)=>{y(),z(n=>({...n,[e]:t}))},G=e=>{L(e),y()},K=()=>{L(`__new__`),z({...A,type:i}),y()},q=()=>{L(``),z(A),y()},J=async()=>{if(!R.name.trim())return;V(!0);let e=U?await u(U.id,R):await o(R);V(!1),e&&(L(``),z(A))},Y=async t=>{await n({message:e(`channels.actions.deleteConfirmShort`),variant:`danger`})&&await d(t)&&I===t&&(L(``),z(A))},X=(e,t)=>{g(e,t)};return i?(0,E.jsxs)(`div`,{className:`flex-1 flex flex-col min-h-0 overflow-hidden`,children:[t,(0,E.jsx)(`div`,{className:`shrink-0 px-6 py-4 border-b border-dark-border`,children:(0,E.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,E.jsx)(`span`,{className:`text-2xl`,children:C(i)}),(0,E.jsxs)(`div`,{children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`h2`,{className:`font-semibold text-base text-dark-text`,children:x(i)}),S(i)&&(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 text-badge text-accent-yellow bg-accent-yellow/15 px-1.5 py-0.5 rounded`,title:e(`channels.experimentalTip`),children:[(0,E.jsx)(p,{className:`w-3 h-3`}),` `,e(`channels.experimentalLabel`)]})]}),(0,E.jsx)(`p`,{className:`text-xs text-dark-muted mt-0.5`,children:F.length>0?e(`channels.instancesCount`,{n:F.length}):e(`channels.notConfiguredYet`)}),S(i)&&(0,E.jsx)(`p`,{className:`text-badge text-accent-yellow mt-1`,children:e(`channels.experimentalDesc`)})]})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`button`,{onClick:()=>D(),className:`text-xs px-3 py-1.5 rounded-lg border border-dark-border text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,children:e(`channels.actions.refresh`)}),(0,E.jsx)(h,{size:`sm`,variant:`accent`,onClick:K,leftIcon:(0,E.jsx)(l,{className:`w-3.5 h-3.5`}),children:e(`channels.createInstance`)})]})]})}),_&&(0,E.jsxs)(`div`,{className:`shrink-0 mx-6 mt-3 bg-accent-red/15 border border-accent-red text-accent-red px-3 py-2 rounded-lg text-sm flex justify-between items-center`,children:[(0,E.jsx)(`span`,{children:_}),(0,E.jsx)(`button`,{onClick:y,className:`text-accent-red hover:text-accent-red`,children:(0,E.jsx)(`span`,{className:`w-4 h-4 inline-flex items-center justify-center`,children:`×`})})]}),P&&(0,E.jsxs)(`div`,{className:`shrink-0 mx-6 mt-3 flex items-start gap-2 bg-accent-yellow/15 border border-accent-yellow text-accent-yellow px-3 py-2 rounded-lg text-xs`,children:[(0,E.jsx)(c,{className:`w-3.5 h-3.5 mt-0.5 shrink-0`}),(0,E.jsx)(`span`,{children:e(`channels.pluginMissingWarning`,{name:i===`wechat`?` WeChat Channel`:` ${x(i)}`})})]}),(0,E.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar p-6`,children:[F.length>1&&!H&&(0,E.jsxs)(`div`,{className:`mb-4`,children:[(0,E.jsx)(`label`,{className:`block text-xs text-dark-muted mb-1.5`,children:e(`channels.selectInstance`)}),(0,E.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[F.map(e=>(0,E.jsxs)(`button`,{onClick:()=>G(e.id),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs border transition-colors ${I===e.id?`bg-accent-blue/10 border-accent-blue/40 text-accent-blue`:`border-dark-border text-dark-muted hover:text-dark-text hover:bg-dark-hover`}`,children:[(0,E.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full ${e.connected?`bg-accent-green`:`bg-dark-muted`}`}),e.name]},e.id)),(0,E.jsxs)(`button`,{onClick:K,className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs border border-dashed border-dark-border text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,children:[(0,E.jsx)(l,{className:`w-3 h-3`}),` `,e(`channels.createShort`)]})]})]}),F.length===0&&I===``&&(0,E.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-12 text-center`,children:[(0,E.jsx)(`div`,{className:`text-4xl mb-3`,children:C(i)}),(0,E.jsx)(`p`,{className:`text-dark-text font-medium`,children:e(`channels.emptyWithType`,{type:x(i)})}),(0,E.jsx)(`p`,{className:`text-sm text-dark-muted mt-1 mb-4`,children:e(i===`wechat`?`channels.wechatBindHint`:`channels.startWithCreate`)}),i===`wechat`&&(0,E.jsxs)(`button`,{onClick:()=>b(null),className:`flex items-center gap-1.5 text-sm px-4 py-2 rounded-lg bg-accent-green/15 hover:bg-accent-green/15 text-accent-green border border-accent-green transition-colors mb-3`,children:[(0,E.jsx)(s,{className:`w-4 h-4`}),` `,e(`channels.scanToBind`)]}),(0,E.jsx)(h,{variant:`accent`,onClick:K,leftIcon:(0,E.jsx)(l,{className:`w-4 h-4`}),children:e(`channels.createInstance`)})]}),F.length===1&&I===``&&F[0]&&(0,E.jsx)(M,{channel:F[0],onEdit:()=>G(F[0].id),onDelete:()=>Y(F[0].id),onToggle:e=>X(F[0].id,e),onQr:()=>b(F[0]),onTest:()=>O(F[0].id),testResult:k[F[0].id],testing:j===F[0].id}),F.length>1&&I===``&&(0,E.jsx)(`div`,{className:`space-y-3`,children:F.map(e=>(0,E.jsx)(M,{channel:e,onEdit:()=>G(e.id),onDelete:()=>Y(e.id),onToggle:t=>X(e.id,t),onQr:()=>b(e),onTest:()=>O(e.id),testResult:k[e.id],testing:j===e.id},e.id))}),I!==``&&(H||U)&&(0,E.jsx)(N,{form:R,upd:W,saving:B,editing:!!U,channel:U??void 0,onSave:J,onCancel:q,onDelete:U?()=>Y(U.id):void 0,onQr:U?()=>b(U):void 0})]})]}):(0,E.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,E.jsxs)(`div`,{className:`text-center`,children:[(0,E.jsx)(f,{className:`w-12 h-12 mx-auto mb-3 text-dark-muted/40`}),(0,E.jsx)(`p`,{className:`text-dark-muted text-sm`,children:e(`channels.selectTypeHint`)})]})})}function M({channel:e,onEdit:t,onDelete:r,onToggle:i,onQr:l,onTest:u,testResult:f,testing:p}){let{t:h}=m();return(0,E.jsxs)(`div`,{className:`border border-dark-border rounded-lg bg-dark-surface overflow-hidden`,children:[(0,E.jsx)(`div`,{className:`p-5`,children:(0,E.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`h3`,{className:`font-medium text-dark-text`,children:e.name}),(0,E.jsxs)(`div`,{className:`flex items-center gap-3 mt-2`,children:[(0,E.jsx)(`span`,{className:`flex items-center gap-1 text-xs ${e.connected?`text-accent-green`:`text-dark-muted`}`,children:e.connected?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(o,{className:`w-3 h-3`}),` `,h(`channels.status.connected`)]}):(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(d,{className:`w-3 h-3`}),` `,h(`channels.status.disconnected`)]})}),(0,E.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[`AppID: `,e.appId||`—`]}),e.implementationStatus===`OUTBOUND_ONLY`&&(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 text-badge text-accent-yellow bg-accent-yellow/15 px-1.5 py-0.5 rounded`,title:h(`channels.outboundOnlyTip`),children:[(0,E.jsx)(c,{className:`w-3 h-3`}),` `,h(`channels.outboundOnlyLabel`)]})]}),f&&(0,E.jsxs)(`p`,{className:`mt-1.5 text-xs ${f.ok?`text-accent-green`:`text-accent-red`}`,children:[f.detail??(f.ok?h(`channels.actions.testPassed`):h(`channels.actions.testFailed`)),typeof f.latencyMs==`number`&&f.ok?` · ${f.latencyMs}ms`:``]})]}),(0,E.jsx)(`button`,{onClick:()=>i(!e.enabled),className:`w-9 h-5 rounded-full relative transition-colors shrink-0 ${e.enabled?`bg-accent-green`:`bg-dark-muted`}`,children:(0,E.jsx)(`span`,{className:`absolute top-0.5 w-4 h-4 bg-white rounded-full transition-all ${e.enabled?`start-[18px]`:`start-0.5`}`})})]})}),(0,E.jsxs)(`div`,{className:`flex items-center gap-1 px-5 py-2.5 bg-dark-bg/50 border-t border-dark-border`,children:[e.type===`wechat`&&(0,E.jsxs)(`button`,{onClick:l,className:`flex items-center gap-1.5 text-xs px-3 py-1.5 rounded-md text-accent-green hover:bg-accent-green/15 transition-colors`,children:[(0,E.jsx)(s,{className:`w-3.5 h-3.5`}),` `,h(`channels.actions.qrLogin`)]}),(0,E.jsxs)(`button`,{onClick:t,className:`flex items-center gap-1.5 text-xs px-3 py-1.5 rounded-md text-accent-blue hover:bg-accent-blue/10 transition-colors`,children:[(0,E.jsx)(`span`,{className:`w-3.5 h-3.5 inline-flex items-center justify-center`,children:`✎`}),` `,h(`channels.actions.edit`)]}),e.enabled&&u&&(0,E.jsxs)(`button`,{onClick:u,disabled:p,className:`flex items-center gap-1.5 text-xs px-3 py-1.5 rounded-md text-accent-blue hover:bg-accent-blue/10 transition-colors disabled:opacity-50`,children:[(0,E.jsx)(n,{className:`w-3.5 h-3.5`}),` `,h(`channels.actions.test`)]}),(0,E.jsxs)(`button`,{onClick:r,className:`flex items-center gap-1.5 text-xs px-3 py-1.5 rounded-md text-accent-red hover:bg-accent-red/15 transition-colors ms-auto`,children:[(0,E.jsx)(a,{className:`w-3.5 h-3.5`}),` `,h(`channels.actions.delete`)]})]})]})}function N({form:e,upd:t,saving:n,editing:r,channel:o,onSave:c,onCancel:l,onDelete:u,onQr:d}){let{t:f}=m();return(0,E.jsxs)(`div`,{className:`border border-dark-border rounded-lg bg-dark-surface overflow-hidden`,children:[(0,E.jsx)(`div`,{className:`px-5 py-4 border-b border-dark-border`,children:(0,E.jsx)(`h3`,{className:`font-medium text-dark-text`,children:f(r?`channels.editConfig`:`channels.createConfig`)})}),(0,E.jsxs)(`div`,{className:`p-5 space-y-4`,children:[(0,E.jsx)(P,{label:f(`channels.form.name`),required:!0,children:(0,E.jsx)(`input`,{value:e.name,onChange:e=>t(`name`,e.target.value),placeholder:f(`channels.form.namePlaceholderDev`),className:F})}),(0,E.jsxs)(P,{label:f(`channels.form.credentials`),children:[(0,E.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-badge text-dark-muted mb-1`,children:f(`channels.form.appId`)}),(0,E.jsx)(`input`,{value:e.appId,onChange:e=>t(`appId`,e.target.value),placeholder:`AppID`,className:F})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-badge text-dark-muted mb-1`,children:`AppSecret`}),(0,E.jsx)(`input`,{type:`password`,value:e.appSecret,onChange:e=>t(`appSecret`,e.target.value),placeholder:f(r?`channels.form.leaveBlankUnchanged`:`channels.form.appSecretValue`),className:F})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-badge text-dark-muted mb-1`,children:`Token`}),(0,E.jsx)(`input`,{value:e.token,onChange:e=>t(`token`,e.target.value),placeholder:f(r?`channels.form.leaveBlankUnchanged`:`channels.form.tokenCallback`),className:F})]}),e.type===`wechat`&&(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-badge text-dark-muted mb-1`,children:`EncodingAESKey`}),(0,E.jsx)(`input`,{value:e.encodingAESKey,onChange:e=>t(`encodingAESKey`,e.target.value),placeholder:f(`channels.form.optionalShort`),className:F})]})]}),e.type===`wechat`&&(0,E.jsx)(`p`,{className:`text-xs text-dark-muted mt-2`,children:f(`channels.form.wechatIlinkHint`)})]}),(0,E.jsxs)(`div`,{className:`flex items-center justify-between rounded-lg border border-dark-border px-3 py-2.5`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`p`,{className:`text-sm text-dark-text`,children:f(`channels.form.enabled`)}),(0,E.jsx)(`p`,{className:`text-xs text-dark-muted`,children:f(`channels.form.enabledOffHint`)})]}),(0,E.jsx)(`button`,{onClick:()=>t(`enabled`,!e.enabled),className:`w-9 h-5 rounded-full relative transition-colors shrink-0 ${e.enabled?`bg-accent-green`:`bg-dark-muted`}`,children:(0,E.jsx)(`span`,{className:`absolute top-0.5 w-4 h-4 bg-white rounded-full transition-all ${e.enabled?`start-[18px]`:`start-0.5`}`})})]}),r&&o?.type===`wechat`&&d&&(0,E.jsxs)(`button`,{onClick:d,className:`w-full flex items-center justify-center gap-2 text-sm bg-accent-green/15 hover:bg-accent-green/15 text-accent-green border border-accent-green px-3 py-2.5 rounded-lg transition-colors`,children:[(0,E.jsx)(s,{className:`w-4 h-4`}),` `,f(`channels.qrLoginReauth`)]})]}),(0,E.jsxs)(`div`,{className:`flex items-center justify-between px-5 py-3 bg-dark-bg/50 border-t border-dark-border`,children:[(0,E.jsx)(`div`,{children:r&&u&&(0,E.jsxs)(`button`,{onClick:u,className:`flex items-center gap-1.5 text-xs px-3 py-1.5 rounded-md text-accent-red hover:bg-accent-red/15 transition-colors`,children:[(0,E.jsx)(a,{className:`w-3.5 h-3.5`}),` `,f(`channels.actions.delete`)]})}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`button`,{onClick:l,className:`px-4 py-2 text-sm text-dark-muted hover:text-dark-text transition-colors`,children:f(`channels.actions.cancel`)}),(0,E.jsx)(h,{variant:`accent`,onClick:c,loading:n,disabled:!e.name.trim(),leftIcon:(0,E.jsx)(i,{className:`w-3.5 h-3.5`}),children:f(`channels.save`)})]})]})]})}function P({label:e,required:t,children:n}){return(0,E.jsxs)(`div`,{children:[(0,E.jsxs)(`label`,{className:`block text-xs text-dark-muted mb-1.5`,children:[e,t&&(0,E.jsx)(`span`,{className:`text-accent-red ms-0.5`,children:`*`})]}),n]})}var F=`w-full bg-dark-bg border border-dark-border rounded-lg px-3 py-2 text-sm text-dark-text placeholder-dark-muted/60 focus:outline-none focus:border-accent-blue transition-colors`,I=t(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),L=t((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),R=t((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),z=t(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),B=t(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),V=t((e=>{var t=L().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e<n-1;e++)a[e]=a[e-1]-i;return a.push(6),a.reverse()},e.getPositions=function(t){let n=[],r=e.getRowColCoords(t),i=r.length;for(let e=0;e<i;e++)for(let t=0;t<i;t++)e===0&&t===0||e===0&&t===i-1||e===i-1&&t===0||n.push([r[e],r[t]]);return n}})),H=t((e=>{var t=L().getSymbolSize,n=7;e.getPositions=function(e){let r=t(e);return[[0,0],[r-n,0],[0,r-n]]}})),U=t((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c<n;c++){i=a=0,o=s=null;for(let l=0;l<n;l++){let n=e.get(c,l);n===o?i++:(i>=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t<n-1;t++)for(let i=0;i<n-1;i++){let n=e.get(t,i)+e.get(t,i+1)+e.get(t+1,i)+e.get(t+1,i+1);(n===4||n===0)&&r++}return r*t.N2},e.getPenaltyN3=function(e){let n=e.size,r=0,i=0,a=0;for(let t=0;t<n;t++){i=a=0;for(let o=0;o<n;o++)i=i<<1&2047|e.get(t,o),o>=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t<r;t++)n+=e.data[t];return Math.abs(Math.ceil(n*100/r/5)-10)*t.N4};function n(t,n,r){switch(t){case e.Patterns.PATTERN000:return(n+r)%2==0;case e.Patterns.PATTERN001:return n%2==0;case e.Patterns.PATTERN010:return r%3==0;case e.Patterns.PATTERN011:return(n+r)%3==0;case e.Patterns.PATTERN100:return(Math.floor(n/2)+Math.floor(r/3))%2==0;case e.Patterns.PATTERN101:return n*r%2+n*r%3==0;case e.Patterns.PATTERN110:return(n*r%2+n*r%3)%2==0;case e.Patterns.PATTERN111:return(n*r%3+(n+r)%2)%2==0;default:throw Error(`bad maskPattern:`+t)}}e.applyMask=function(e,t){let r=t.size;for(let i=0;i<r;i++)for(let a=0;a<r;a++)t.isReserved(a,i)||t.xor(a,i,n(e,a,i))},e.getBestMask=function(t,n){let r=Object.keys(e.Patterns).length,i=0,a=1/0;for(let o=0;o<r;o++){n(o),e.applyMask(o,t);let r=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(o,t),r<a&&(a=r,i=o)}return i}})),W=t((e=>{var t=R(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),G=t((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),K=t((e=>{var t=G();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i<e.length;i++)for(let a=0;a<n.length;a++)r[i+a]^=t.mul(e[i],n[a]);return r},e.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let e=r[0];for(let i=0;i<n.length;i++)r[i]^=t.mul(n[i],e);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r},e.generateECPolynomial=function(n){let r=new Uint8Array([1]);for(let i=0;i<n;i++)r=e.mul(r,new Uint8Array([1,t.exp(i)]));return r}})),q=t(((e,t)=>{var n=K();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),J=t((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),Y=t((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r
2
- ]))+`;e.KANJI=new RegExp(r,`g`),e.BYTE_KANJI=RegExp(`[^A-Z0-9 $%*+\\-./:]+`,`g`),e.BYTE=new RegExp(i,`g`),e.NUMERIC=new RegExp(t,`g`),e.ALPHANUMERIC=new RegExp(n,`g`);var a=RegExp(`^`+r+`$`),o=RegExp(`^[0-9]+$`),s=RegExp(`^[A-Z0-9 $%*+\\-./:]+$`);e.testKanji=function(e){return a.test(e)},e.testNumeric=function(e){return o.test(e)},e.testAlphanumeric=function(e){return s.test(e)}})),X=t((e=>{var t=J(),n=Y();e.NUMERIC={id:`Numeric`,bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:`Alphanumeric`,bit:2,ccBits:[9,11,13]},e.BYTE={id:`Byte`,bit:4,ccBits:[8,16,16]},e.KANJI={id:`Kanji`,bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(e,n){if(!e.ccBits)throw Error(`Invalid mode: `+e);if(!t.isValid(n))throw Error(`Invalid version: `+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]},e.getBestModeForData=function(t){return n.testNumeric(t)?e.NUMERIC:n.testAlphanumeric(t)?e.ALPHANUMERIC:n.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(e){if(e&&e.id)return e.id;throw Error(`Invalid mode`)},e.isValid=function(e){return e&&e.bit&&e.ccBits};function r(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`numeric`:return e.NUMERIC;case`alphanumeric`:return e.ALPHANUMERIC;case`kanji`:return e.KANJI;case`byte`:return e.BYTE;default:throw Error(`Unknown mode: `+t)}}e.from=function(t,n){if(e.isValid(t))return t;try{return r(t)}catch{return n}}})),Z=t((e=>{var t=L(),n=W(),r=R(),i=X(),a=J(),o=7973,s=t.getBCHDigit(o);function c(t,n,r){for(let i=1;i<=40;i++)if(n<=e.getCapacity(i,r,t))return i}function l(e,t){return i.getCharCountIndicator(e,t)+4}function u(e,t){let n=0;return e.forEach(function(e){let r=l(e.mode,t);n+=r+e.getBitsLength()}),n}function d(t,n){for(let r=1;r<=40;r++)if(u(t,r)<=e.getCapacity(r,n,i.MIXED))return r}e.from=function(e,t){return a.isValid(e)?parseInt(e,10):t},e.getCapacity=function(e,r,o){if(!a.isValid(e))throw Error(`Invalid QR Code version`);o===void 0&&(o=i.BYTE);let s=(t.getSymbolTotalCodewords(e)-n.getTotalCodewordsCount(e,r))*8;if(o===i.MIXED)return s;let c=s-l(o,e);switch(o){case i.NUMERIC:return Math.floor(c/10*3);case i.ALPHANUMERIC:return Math.floor(c/11*2);case i.KANJI:return Math.floor(c/13);case i.BYTE:default:return Math.floor(c/8)}},e.getBestVersionForData=function(e,t){let n,i=r.from(t,r.M);if(Array.isArray(e)){if(e.length>1)return d(e,i);if(e.length===0)return 1;n=e[0]}else n=e;return c(n.mode,n.getLength(),i)},e.getEncodedBits=function(e){if(!a.isValid(e)||e<7)throw Error(`Invalid QR Code version`);let n=e<<12;for(;t.getBCHDigit(n)-s>=0;)n^=o<<t.getBCHDigit(n)-s;return e<<12|n}})),Q=t((e=>{var t=L(),n=1335,r=21522,i=t.getBCHDigit(n);e.getEncodedBits=function(e,a){let o=e.bit<<3|a,s=o<<10;for(;t.getBCHDigit(s)-i>=0;)s^=n<<t.getBCHDigit(s)-i;return(o<<10|s)^r}})),ee=t(((e,t)=>{var n=X();function r(e){this.mode=n.NUMERIC,this.data=e.toString()}r.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){let t,n,r;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),r=parseInt(n,10),e.put(r,10);let i=this.data.length-t;i>0&&(n=this.data.substr(t),r=parseInt(n,10),e.put(r,i*3+1))},t.exports=r})),te=t(((e,t)=>{var n=X(),r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`.split(``);function i(e){this.mode=n.ALPHANUMERIC,this.data=e}i.getBitsLength=function(e){return 11*Math.floor(e/2)+e%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t=0;for(;t+2<=this.data.length;t+=2){let n=r.indexOf(this.data[t])*45;n+=r.indexOf(this.data[t+1]),e.put(n,11)}this.data.length%2&&e.put(r.indexOf(this.data[t]),6)},t.exports=i})),ne=t(((e,t)=>{var n=X();function r(e){this.mode=n.BYTE,this.data=typeof e==`string`?new TextEncoder().encode(e):new Uint8Array(e)}r.getBitsLength=function(e){return e*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){for(let t=0,n=this.data.length;t<n;t++)e.put(this.data[t],8)},t.exports=r})),re=t(((e,t)=>{var n=X(),r=L();function i(e){this.mode=n.KANJI,this.data=e}i.getBitsLength=function(e){return e*13},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t=0;for(;t<this.data.length;t++){let n=r.toSJIS(this.data[t]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error(`Invalid SJIS character: `+this.data[t]+`
3
- Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},t.exports=i})),ie=t(((e,t)=>{var n={single_source_shortest_paths:function(e,t,r){var i={},a={};a[t]=0;var o=n.PriorityQueue.make();o.push(t,0);for(var s,c,l,u,d,f,p,m,h;!o.empty();)for(l in s=o.pop(),c=s.value,u=s.cost,d=e[c]||{},d)d.hasOwnProperty(l)&&(f=d[l],p=u+f,m=a[l],h=a[l]===void 0,(h||m>p)&&(a[l]=p,o.push(l,p),i[l]=c));if(r!==void 0&&a[r]===void 0){var g=[`Could not find a path from `,t,` to `,r,`.`].join(``);throw Error(g)}return i},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],r=t;r;)n.push(r),e[r],r=e[r];return n.reverse(),n},find_path:function(e,t,r){var i=n.single_source_shortest_paths(e,t,r);return n.extract_shortest_path_from_predecessor_list(i,r)},PriorityQueue:{make:function(e){var t=n.PriorityQueue,r={},i;for(i in e||={},t)t.hasOwnProperty(i)&&(r[i]=t[i]);return r.queue=[],r.sorter=e.sorter||t.default_sorter,r},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){var n={value:e,cost:t};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t!==void 0&&(t.exports=n)})),ae=t((e=>{var t=X(),n=ee(),r=te(),i=ne(),a=re(),o=Y(),s=L(),c=ie();function l(e){return unescape(encodeURIComponent(e)).length}function u(e,t,n){let r=[],i;for(;(i=e.exec(n))!==null;)r.push({data:i[0],index:i.index,mode:t,length:i[0].length});return r}function d(e){let n=u(o.NUMERIC,t.NUMERIC,e),r=u(o.ALPHANUMERIC,t.ALPHANUMERIC,e),i,a;return s.isKanjiModeEnabled()?(i=u(o.BYTE,t.BYTE,e),a=u(o.KANJI,t.KANJI,e)):(i=u(o.BYTE_KANJI,t.BYTE,e),a=[]),n.concat(r,i,a).sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function f(e,o){switch(o){case t.NUMERIC:return n.getBitsLength(e);case t.ALPHANUMERIC:return r.getBitsLength(e);case t.KANJI:return a.getBitsLength(e);case t.BYTE:return i.getBitsLength(e)}}function p(e){return e.reduce(function(e,t){let n=e.length-1>=0?e[e.length-1]:null;return n&&n.mode===t.mode?(e[e.length-1].data+=t.data,e):(e.push(t),e)},[])}function m(e){let n=[];for(let r=0;r<e.length;r++){let i=e[r];switch(i.mode){case t.NUMERIC:n.push([i,{data:i.data,mode:t.ALPHANUMERIC,length:i.length},{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.ALPHANUMERIC:n.push([i,{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.KANJI:n.push([i,{data:i.data,mode:t.BYTE,length:l(i.data)}]);break;case t.BYTE:n.push([{data:i.data,mode:t.BYTE,length:l(i.data)}])}}return n}function h(e,n){let r={},i={start:{}},a=[`start`];for(let o=0;o<e.length;o++){let s=e[o],c=[];for(let e=0;e<s.length;e++){let l=s[e],u=``+o+e;c.push(u),r[u]={node:l,lastCount:0},i[u]={};for(let e=0;e<a.length;e++){let o=a[e];r[o]&&r[o].node.mode===l.mode?(i[o][u]=f(r[o].lastCount+l.length,l.mode)-f(r[o].lastCount,l.mode),r[o].lastCount+=l.length):(r[o]&&(r[o].lastCount=l.length),i[o][u]=f(l.length,l.mode)+4+t.getCharCountIndicator(l.mode,n))}}a=c}for(let e=0;e<a.length;e++)i[a[e]].end=0;return{map:i,table:r}}function g(e,o){let c,l=t.getBestModeForData(e);if(c=t.from(o,l),c!==t.BYTE&&c.bit<l.bit)throw Error(`"`+e+`" cannot be encoded with mode `+t.toString(c)+`.
4
- Suggested mode is: `+t.toString(l));switch(c===t.KANJI&&!s.isKanjiModeEnabled()&&(c=t.BYTE),c){case t.NUMERIC:return new n(e);case t.ALPHANUMERIC:return new r(e);case t.KANJI:return new a(e);case t.BYTE:return new i(e)}}e.fromArray=function(e){return e.reduce(function(e,t){return typeof t==`string`?e.push(g(t,null)):t.data&&e.push(g(t.data,t.mode)),e},[])},e.fromString=function(t,n){let r=h(m(d(t,s.isKanjiModeEnabled())),n),i=c.find_path(r.map,`start`,`end`),a=[];for(let e=1;e<i.length-1;e++)a.push(r.table[i[e]].node);return e.fromArray(p(a))},e.rawSplit=function(t){return e.fromArray(d(t,s.isKanjiModeEnabled()))}})),oe=t((e=>{var t=L(),n=R(),r=z(),i=B(),a=V(),o=H(),s=U(),c=W(),l=q(),u=Z(),d=Q(),f=X(),p=ae();function m(e,t){let n=e.size,r=o.getPositions(t);for(let t=0;t<r.length;t++){let i=r[t][0],a=r[t][1];for(let t=-1;t<=7;t++)if(!(i+t<=-1||n<=i+t))for(let r=-1;r<=7;r++)a+r<=-1||n<=a+r||(t>=0&&t<=6&&(r===0||r===6)||r>=0&&r<=6&&(t===0||t===6)||t>=2&&t<=4&&r>=2&&r<=4?e.set(i+t,a+r,!0,!0):e.set(i+t,a+r,!1,!0))}}function h(e){let t=e.size;for(let n=8;n<t-8;n++){let t=n%2==0;e.set(n,6,t,!0),e.set(6,n,t,!0)}}function g(e,t){let n=a.getPositions(t);for(let t=0;t<n.length;t++){let r=n[t][0],i=n[t][1];for(let t=-2;t<=2;t++)for(let n=-2;n<=2;n++)t===-2||t===2||n===-2||n===2||t===0&&n===0?e.set(r+t,i+n,!0,!0):e.set(r+t,i+n,!1,!0)}}function _(e,t){let n=e.size,r=u.getEncodedBits(t),i,a,o;for(let t=0;t<18;t++)i=Math.floor(t/3),a=t%3+n-8-3,o=(r>>t&1)==1,e.set(i,a,o,!0),e.set(a,i,o,!0)}function v(e,t,n){let r=e.size,i=d.getEncodedBits(t,n),a,o;for(a=0;a<15;a++)o=(i>>a&1)==1,a<6?e.set(a,8,o,!0):a<8?e.set(a+1,8,o,!0):e.set(r-15+a,8,o,!0),a<8?e.set(8,r-a-1,o,!0):a<9?e.set(8,15-a-1+1,o,!0):e.set(8,15-a-1,o,!0);e.set(r-8,8,1,!0)}function y(e,t){let n=e.size,r=-1,i=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(s===6&&s--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,s-n)){let r=!1;o<t.length&&(r=(t[o]>>>a&1)==1),e.set(i,s-n,r),a--,a===-1&&(o++,a=7)}if(i+=r,i<0||n<=i){i-=r,r=-r;break}}}function b(e,n,i){let a=new r;i.forEach(function(t){a.put(t.mode.bit,4),a.put(t.getLength(),f.getCharCountIndicator(t.mode,e)),t.write(a)});let o=(t.getSymbolTotalCodewords(e)-c.getTotalCodewordsCount(e,n))*8;for(a.getLengthInBits()+4<=o&&a.put(0,4);a.getLengthInBits()%8!=0;)a.putBit(0);let s=(o-a.getLengthInBits())/8;for(let e=0;e<s;e++)a.put(e%2?17:236,8);return x(a,e,n)}function x(e,n,r){let i=t.getSymbolTotalCodewords(n),a=i-c.getTotalCodewordsCount(n,r),o=c.getBlocksCount(n,r),s=o-i%o,u=Math.floor(i/o),d=Math.floor(a/o),f=d+1,p=u-d,m=new l(p),h=0,g=Array(o),_=Array(o),v=0,y=new Uint8Array(e.buffer);for(let e=0;e<o;e++){let t=e<s?d:f;g[e]=y.slice(h,h+t),_[e]=m.encode(g[e]),h+=t,v=Math.max(v,t)}let b=new Uint8Array(i),x=0,S,C;for(S=0;S<v;S++)for(C=0;C<o;C++)S<g[C].length&&(b[x++]=g[C][S]);for(S=0;S<p;S++)for(C=0;C<o;C++)b[x++]=_[C][S];return b}function S(e,n,r,a){let o;if(Array.isArray(e))o=p.fromArray(e);else if(typeof e==`string`){let t=n;if(!t){let n=p.rawSplit(e);t=u.getBestVersionForData(n,r)}o=p.fromString(e,t||40)}else throw Error(`Invalid data`);let c=u.getBestVersionForData(o,r);if(!c)throw Error(`The amount of data is too big to be stored in a QR Code`);if(!n)n=c;else if(n<c)throw Error(`
5
- The chosen QR Code version cannot contain this amount of data.
6
- Minimum version required to store current data is: `+c+`.
7
- `);let l=b(n,r,o),d=new i(t.getSymbolSize(n));return m(d,n),h(d),g(d,n),v(d,r,0),n>=7&&_(d,n),y(d,l),isNaN(a)&&(a=s.getBestMask(d,v.bind(null,d,r))),s.applyMask(a,d),v(d,r,a),{modules:d,version:n,errorCorrectionLevel:r,maskPattern:a,segments:o}}e.create=function(e,r){if(e===void 0||e===``)throw Error(`No input text`);let i=n.M,a,o;return r!==void 0&&(i=n.from(r.errorCorrectionLevel,n.M),a=u.from(r.version),o=s.from(r.maskPattern),r.toSJISFunc&&t.setToSJISFunction(r.toSJISFunc)),S(e,a,i,o)}})),$=t((e=>{function t(e){if(typeof e==`number`&&(e=e.toString()),typeof e!=`string`)throw Error(`Color should be defined as hex string`);let t=e.slice().replace(`#`,``).split(``);if(t.length<3||t.length===5||t.length>8)throw Error(`Invalid hex color: `+e);(t.length===3||t.length===4)&&(t=Array.prototype.concat.apply([],t.map(function(e){return[e,e]}))),t.length===6&&t.push(`F`,`F`);let n=parseInt(t.join(``),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:`#`+t.slice(0,6).join(``)}}e.getOptions=function(e){e||={},e.color||(e.color={});let n=e.margin===void 0||e.margin===null||e.margin<0?4:e.margin,r=e.width&&e.width>=21?e.width:void 0,i=e.scale||4;return{width:r,scale:r?4:i,margin:n,color:{dark:t(e.color.dark||`#000000ff`),light:t(e.color.light||`#ffffffff`)},type:e.type,rendererOpts:e.rendererOpts||{}}},e.getScale=function(e,t){return t.width&&t.width>=e+t.margin*2?t.width/(e+t.margin*2):t.scale},e.getImageWidth=function(t,n){let r=e.getScale(t,n);return Math.floor((t+n.margin*2)*r)},e.qrToImageData=function(t,n,r){let i=n.modules.size,a=n.modules.data,o=e.getScale(i,r),s=Math.floor((i+r.margin*2)*o),c=r.margin*o,l=[r.color.light,r.color.dark];for(let e=0;e<s;e++)for(let n=0;n<s;n++){let u=(e*s+n)*4,d=r.color.light;if(e>=c&&n>=c&&e<s-c&&n<s-c){let t=Math.floor((e-c)/o),r=Math.floor((n-c)/o);d=l[+!!a[t*i+r]]}t[u++]=d.r,t[u++]=d.g,t[u++]=d.b,t[u]=d.a}}})),se=t((e=>{var t=$();function n(e,t,n){e.clearRect(0,0,t.width,t.height),t.style||={},t.height=n,t.width=n,t.style.height=n+`px`,t.style.width=n+`px`}function r(){try{return document.createElement(`canvas`)}catch{throw Error(`You need to specify a canvas element`)}}e.render=function(e,i,a){let o=a,s=i;o!==void 0||i&&i.getContext||(o=i,i=void 0),i||(s=r()),o=t.getOptions(o);let c=t.getImageWidth(e.modules.size,o),l=s.getContext(`2d`),u=l.createImageData(c,c);return t.qrToImageData(u.data,e,o),n(l,s,c),l.putImageData(u,0,0),s},e.renderToDataURL=function(t,n,r){let i=r;i!==void 0||n&&n.getContext||(i=n,n=void 0),i||={};let a=e.render(t,n,i),o=i.type||`image/png`,s=i.rendererOpts||{};return a.toDataURL(o,s.quality)}})),ce=t((e=>{var t=$();function n(e,t){let n=e.a/255,r=t+`="`+e.hex+`"`;return n<1?r+` `+t+`-opacity="`+n.toFixed(2).slice(1)+`"`:r}function r(e,t,n){let r=e+t;return n!==void 0&&(r+=` `+n),r}function i(e,t,n){let i=``,a=0,o=!1,s=0;for(let c=0;c<e.length;c++){let l=Math.floor(c%t),u=Math.floor(c/t);!l&&!o&&(o=!0),e[c]?(s++,c>0&&l>0&&e[c-1]||(i+=o?r(`M`,l+n,.5+u+n):r(`m`,a,0),a=0,o=!1),l+1<t&&e[c+1]||(i+=r(`h`,s),s=0)):a++}return i}e.render=function(e,r,a){let o=t.getOptions(r),s=e.modules.size,c=e.modules.data,l=s+o.margin*2,u=o.color.light.a?`<path `+n(o.color.light,`fill`)+` d="M0 0h`+l+`v`+l+`H0z"/>`:``,d=`<path `+n(o.color.dark,`stroke`)+` d="`+i(c,s,o.margin)+`"/>`,f=`viewBox="0 0 `+l+` `+l+`"`,p=`<svg xmlns="http://www.w3.org/2000/svg" `+(o.width?`width="`+o.width+`" height="`+o.width+`" `:``)+f+` shape-rendering="crispEdges">`+u+d+`</svg>
8
- `;return typeof a==`function`&&a(null,p),p}})),le=e(t((e=>{var t=I(),n=oe(),r=se(),i=ce();function a(e,r,i,a,o){let s=[].slice.call(arguments,1),c=s.length,l=typeof s[c-1]==`function`;if(!l&&!t())throw Error(`Callback required as last argument`);if(l){if(c<2)throw Error(`Too few arguments provided`);c===2?(o=i,i=r,r=a=void 0):c===3&&(r.getContext&&o===void 0?(o=a,a=void 0):(o=a,a=i,i=r,r=void 0))}else{if(c<1)throw Error(`Too few arguments provided`);return c===1?(i=r,r=a=void 0):c===2&&!r.getContext&&(a=i,i=r,r=void 0),new Promise(function(t,o){try{t(e(n.create(i,a),r,a))}catch(e){o(e)}})}try{let t=n.create(i,a);o(null,e(t,r,a))}catch(e){o(e)}}e.create=n.create,e.toCanvas=a.bind(null,r.render),e.toDataURL=a.bind(null,r.renderToDataURL),e.toString=a.bind(null,function(e,t,n){return i.render(e,n)})}))(),1),ue=2e3,de=5;function fe({channel:e,onClose:t}){let{t:n}=m(),[r,i]=(0,T.useState)(`loading`),[a,o]=(0,T.useState)(null),[s,c]=(0,T.useState)(null),[l,u]=(0,T.useState)(``),d=(0,T.useRef)(null),f=(0,T.useRef)(0),p=(0,T.useRef)(null),h=(0,T.useRef)(!1),v=()=>{p.current&&=(clearTimeout(p.current),null),h.current=!0},b=async e=>{if(d.current)try{await le.toCanvas(d.current,e,{width:240,margin:2,color:{dark:`#000000ff`,light:`#ffffffff`}})}catch(e){console.warn(`[WechatQr] Canvas QR generation failed, falling back to URL:`,e)}},x=async()=>{if(!h.current&&s)try{let r=await y.channels.weixin.bindStatus(s),a=r?.data??r,o=a?.status??``;if(f.current=0,o===`confirmed`){if(!a?.channel_id){i(`error`),u(n(`channels.bindNoInstance`)),g.error(n(`channels.bindNoInstance`));return}i(`confirmed`),g.success(e?n(`channels.toastReauthSuccess`,{name:e.name}):n(`channels.toastBindSuccess`)),setTimeout(t,2400);return}if(o===`scaned`)i(`scanned`);else if(o===`expired`){i(`expired`);return}h.current||(p.current=setTimeout(x,ue))}catch(e){if(f.current++,console.warn(`[WechatQr] poll error (`+f.current+`/5)`,e),f.current>=de)i(`error`),u(n(`channels.pollFailedRefresh`)),g.error(n(`channels.pollFailedToast`));else if(!h.current){let e=Math.min(1e3*2**f.current,1e4);p.current=setTimeout(x,e)}}},S=()=>{v(),h.current=!1,f.current=0,p.current=setTimeout(x,1e3)},C=async()=>{i(`loading`),o(null),c(null),u(``),f.current=0;try{let e=await y.channels.weixin.bind(),t=e?.data??e,r=t?.qrcode_img_content??``,a=t?.qrcode??``;if(!r||!a){i(`error`),u(n(`channels.qrDataMissing`,{data:JSON.stringify(t)}));return}o(r),c(a),await b(r),i(`waiting`)}catch(e){i(`error`);let t=String(e?.message??e);u(t),g.error(n(`channels.fetchWechatQrFailed`,{error:t}))}},w=()=>{C()};return(0,T.useEffect)(()=>(C(),v),[]),(0,T.useEffect)(()=>(s&&S(),v),[s]),(0,E.jsx)(_,{isOpen:!0,onClose:t,title:n(`channels.bindTitle`,{name:e?.name??n(`channels.typeLabels.wechat`)}),size:`sm`,children:(0,E.jsxs)(`div`,{className:`flex flex-col items-center gap-4 py-2`,children:[(0,E.jsxs)(`div`,{className:`relative w-60 h-60 rounded-lg bg-white flex items-center justify-center overflow-hidden`,children:[r===`loading`&&(0,E.jsx)(`span`,{className:`text-dark-muted text-sm`,children:n(`channels.qr.generating`)}),r!==`error`&&r!==`expired`&&(0,E.jsx)(`canvas`,{ref:d,width:240,height:240,className:`w-full h-full object-contain ${r===`waiting`?``:`opacity-30`}`}),r===`scanned`&&(0,E.jsxs)(`div`,{className:`absolute inset-0 bg-black/70 flex flex-col items-center justify-center text-overlay-fg gap-1`,children:[(0,E.jsx)(`span`,{className:`text-2xl`,children:`✓`}),(0,E.jsx)(`span`,{className:`text-sm`,children:n(`channels.qr.scanned`)})]}),r===`confirmed`&&(0,E.jsxs)(`div`,{className:`absolute inset-0 bg-accent-green/15 flex flex-col items-center justify-center text-accent-fg gap-2 px-4 text-center`,children:[(0,E.jsx)(`span`,{className:`text-2xl`,children:`🎉`}),(0,E.jsx)(`span`,{className:`text-sm font-medium`,children:n(`channels.bindSuccess`)}),(0,E.jsx)(`span`,{className:`text-xs opacity-90`,children:e?n(`channels.connectedReady`,{name:e.name}):n(`channels.createdConnectedReady`)}),(0,E.jsx)(`button`,{onClick:t,className:`mt-1 text-xs bg-white/20 hover:bg-white/30 px-3 py-1.5 rounded-md transition-colors`,children:n(`channels.startUsing`)})]}),r===`expired`&&(0,E.jsxs)(`div`,{className:`absolute inset-0 bg-black/80 flex flex-col items-center justify-center text-overlay-fg gap-2`,children:[(0,E.jsx)(`span`,{className:`text-sm`,children:n(`channels.qr.expired`)}),(0,E.jsx)(`button`,{onClick:w,className:`text-xs bg-accent-green hover:bg-accent-green px-3 py-1 rounded`,children:n(`channels.clickToRefresh`)})]}),r===`error`&&(0,E.jsxs)(`div`,{className:`absolute inset-0 bg-black/80 flex flex-col items-center justify-center text-accent-red gap-2 px-4 text-center`,children:[(0,E.jsx)(`span`,{className:`text-xs`,children:l||n(`channels.unknownError`)}),(0,E.jsx)(`button`,{onClick:w,className:`text-xs bg-accent-blue hover:bg-accent-blue px-3 py-1 rounded text-accent-fg`,children:n(`channels.retry`)})]})]}),(0,E.jsxs)(`p`,{className:`text-sm text-dark-muted text-center`,children:[r===`waiting`&&n(`channels.waitingAuthorize`),r===`scanned`&&n(`channels.scannedConfirming`),r===`confirmed`&&n(`channels.confirmedClosing`),r===`loading`&&n(`channels.connectingIlink`),(r===`expired`||r===`error`)&&(r===`expired`?n(`channels.qr.expired`):``)]}),a&&r===`waiting`&&(0,E.jsxs)(`button`,{onClick:()=>window.open(a,`_blank`,`width=480,height=600,noopener`),className:`w-full flex items-center justify-center gap-2 text-sm bg-accent-green/15 hover:bg-accent-green/15 text-accent-green border border-accent-green px-3 py-2.5 rounded-lg transition-colors`,children:[(0,E.jsx)(`span`,{children:`🔔`}),` `,n(`channels.openInNewTabFallback`)]})]})})}function pe(){let{t:e}=m(),{load:t,loading:n,qrOpen:r,qrChannel:i,closeQr:a}=w();return(0,T.useEffect)(()=>{t()},[]),(0,E.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col bg-dark-bg text-dark-text`,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between px-6 py-4 border-b border-dark-border shrink-0`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`h2`,{className:`font-semibold text-base`,children:e(`channels.title`)}),(0,E.jsx)(`p`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`channels.viewSubtitle`)})]}),(0,E.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,E.jsx)(`button`,{onClick:()=>t(),title:e(`channels.actions.refresh`),className:`p-2 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,children:(0,E.jsx)(u,{className:`w-4 h-4 ${n?`animate-spin`:``}`})})})]}),(0,E.jsxs)(`div`,{className:`flex-1 flex min-h-0 overflow-hidden`,children:[(0,E.jsx)(`div`,{className:`w-[260px] shrink-0`,children:(0,E.jsx)(O,{})}),(0,E.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,E.jsx)(j,{})})]}),r&&(0,E.jsx)(fe,{channel:i,onClose:a})]})}export{pe as ChannelConfigView};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{At as t,Cr as n,Kr as r,Rt as i,Tr as a,Ut as o,_ as s,h as c,n as l,nt as u,pn as d,wr as f,xr as p}from"./icons-CYDRRPKW.js";import{t as m}from"./useTranslation-B-mfApCn.js";import{s as h}from"./useConfirm-Da8iQ_DZ.js";import{C as g}from"./MessageBubble-CVGXupVH.js";import{t as _}from"./api-plEYhRn0.js";import{I as v}from"./markdown-N5__3T-w.js";import{B as y,F as b,H as x,I as S,L as C,M as w,N as T,P as E,R as ee,j as D,z as te}from"./index-CTbLW314.js";var O=e(r(),1),k=v(),A=[];function j(e){let t=[];return e.query?t.push(e.query):e.connector&&t.push(e.connector),e.detail&&t.push(e.detail),t.join(` — `)}function ne({onApproved:e,refreshToken:t=0}){let{t:r}=m(),[i,a]=(0,O.useState)(A),[s,u]=(0,O.useState)(!0),[d,v]=(0,O.useState)(!0),[y,b]=(0,O.useState)(null),[x,S]=(0,O.useState)(null),C=(0,O.useCallback)(async()=>{u(!0);try{let e=await _.pendingArtifacts.list(`pending`);if(!e?.success)throw Error(e?.error||r(`charts.pending.loadFailed`));a(e.data?.items??A),S(null)}catch(e){S(e instanceof Error?e.message:String(e))}finally{u(!1)}},[r]);(0,O.useEffect)(()=>{C()},[C,t]);let w=(0,O.useCallback)(async(t,n)=>{b(t),S(null);try{let i=n===`approve`?await _.pendingArtifacts.approve(t):await _.pendingArtifacts.reject(t);if(!i?.success)throw Error(i?.error||r(`charts.pending.decideFailed`));a(e=>e.filter(e=>e.id!==t)),n===`approve`&&e?.(),C()}catch(e){S(e instanceof Error?e.message:String(e))}finally{b(null)}},[e,C,r]);return s&&i.length===0||i.length===0&&!x?null:(0,k.jsxs)(`div`,{"data-testid":`pending-artifacts`,className:`mx-4 mt-3 shrink-0 rounded-lg border border-accent-yellow/40 bg-accent-yellow/5`,children:[(0,k.jsxs)(`button`,{type:`button`,"data-testid":`pending-artifacts-toggle`,onClick:()=>v(e=>!e),"aria-expanded":d,className:`flex w-full items-center gap-2 px-3 py-2 text-start`,children:[(0,k.jsx)(d?n:p,{size:13,className:`shrink-0 text-accent-yellow`}),(0,k.jsx)(`span`,{className:`shrink-0 text-xs font-medium text-accent-yellow`,children:r(`charts.pending.title`,{n:i.length})}),(0,k.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-badge text-dark-muted`,children:r(`charts.pending.subtitle`)}),s&&(0,k.jsx)(o,{size:12,className:`animate-spin text-dark-muted`})]}),d&&(0,k.jsxs)(`div`,{className:`border-t border-accent-yellow/20`,children:[x&&(0,k.jsxs)(`div`,{className:`flex items-start gap-2 px-3 py-2 text-xs text-accent-red`,children:[(0,k.jsx)(c,{size:13,className:`mt-0.5 shrink-0`}),(0,k.jsx)(`span`,{className:`min-w-0 break-words`,children:x})]}),i.map(e=>{let t=y===e.id;return(0,k.jsxs)(`div`,{"data-testid":`pending-artifact-item`,className:`flex items-start gap-2.5 border-b border-accent-yellow/15 px-3 py-2 last:border-b-0`,children:[(0,k.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,k.jsx)(`p`,{className:`text-xs leading-relaxed text-dark-text`,children:e.summary}),(0,k.jsxs)(`div`,{className:`mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-0.5 text-badge text-dark-muted/80`,children:[(0,k.jsx)(`span`,{className:`truncate font-mono`,children:e.targetPath}),(0,k.jsx)(`span`,{className:`shrink-0 rounded bg-dark-hover px-1 py-px`,children:e.artifactType}),(0,k.jsx)(`span`,{className:`shrink-0`,children:g(e.createdAt,Date.now(),r)})]}),e.sources.length>0?(0,k.jsx)(`ul`,{className:`mt-1 space-y-0.5`,"data-testid":`pending-artifact-sources`,children:e.sources.map((t,n)=>(0,k.jsx)(`li`,{className:`truncate font-mono text-badge text-dark-muted/70`,title:j(t),children:j(t)},`${e.id}-src-${n}`))}):(0,k.jsx)(`p`,{className:`mt-1 text-badge text-accent-yellow/80`,children:r(`charts.pending.noSources`)})]}),(0,k.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,k.jsxs)(`button`,{type:`button`,"data-testid":`pending-artifact-approve`,disabled:t,onClick:()=>void w(e.id,`approve`),title:r(`charts.pending.approveHint`),className:h(`flex items-center gap-1 rounded-md border border-accent-green/40 bg-accent-green/10 px-2 py-1 text-badge text-accent-green transition-colors hover:bg-accent-green/20`,t&&`opacity-60`),children:[t?(0,k.jsx)(o,{size:11,className:`animate-spin`}):(0,k.jsx)(f,{size:11}),r(`charts.pending.approve`)]}),(0,k.jsxs)(`button`,{type:`button`,"data-testid":`pending-artifact-reject`,disabled:t,onClick:()=>void w(e.id,`reject`),title:r(`charts.pending.rejectHint`),className:h(`flex items-center gap-1 rounded-md border border-dark-border px-2 py-1 text-badge text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,t&&`opacity-60`),children:[(0,k.jsx)(l,{size:11}),r(`charts.pending.reject`)]})]})]},e.id)})]})]})}var M=`dsc.charts.artifactOrder`,N=1;function re(){try{let e=localStorage.getItem(M);if(!e)return[];let t=JSON.parse(e);if(typeof t!=`object`||!t)return[];let n=t;return n.v!==N||!Array.isArray(n.order)?[]:n.order.filter(e=>typeof e==`string`&&e!==``)}catch{return[]}}function ie(e){try{localStorage.setItem(M,JSON.stringify({v:N,order:e}))}catch{}}function ae(e,t,n){if(t.length===0)return[...e];let r=new Map(e.map(e=>[n(e),e])),i=[];for(let e of t){let t=r.get(e);t!==void 0&&(i.push(t),r.delete(e))}for(let t of e)r.has(n(t))&&i.push(t);return i}function P(e,t,n,r){return C(e,t,n,r)}var oe=[`list`,`tabs`],F=`dsc.charts.displayMode`;function se(){try{return localStorage.getItem(F)===`tabs`?`tabs`:`list`}catch{return`list`}}function ce(e){try{localStorage.setItem(F,e)}catch{}}var le=[],ue=[{command:`dashboard`,hintKey:`chat.visualArtifactsEmptyHint_dashboard`},{command:`analysis`,hintKey:`chat.visualArtifactsEmptyHint_analysis`},{command:`motion`,hintKey:`chat.visualArtifactsEmptyHint_motion`}];function de(e){let t=new Map;for(let n of e){if(!n.locator?.path)continue;let e=t.get(n.logicalId);(!e||n.version>e.version)&&t.set(n.logicalId,n)}return[...t.values()].sort((e,t)=>e.createdAt===t.createdAt?0:e.createdAt<t.createdAt?1:-1)}function I({text:e}){return(0,k.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-accent-red/30 bg-accent-red/5 px-3 py-2.5 text-xs text-accent-red`,children:[(0,k.jsx)(c,{size:14,className:`mt-0.5 shrink-0`}),(0,k.jsx)(`span`,{className:`min-w-0 break-words`,children:e})]})}function L({path:e,content:t,readError:n,freshness:r}){let{t:i}=m();if(n)return(0,k.jsx)(I,{text:n});let a=T(e);return a===`motion`?(0,k.jsx)(w,{path:e,content:t}):a===`dashboard`?(0,k.jsx)(b,{path:e,content:t,freshness:r}):a===`analysis`?(0,k.jsx)(E,{path:e,content:t}):(0,k.jsxs)(`div`,{"data-testid":`charts-no-renderer`,className:`px-1 py-2 text-xs leading-relaxed text-dark-muted`,children:[i(`charts.noRenderer`),(0,k.jsx)(`span`,{className:`mt-1 block truncate font-mono text-badge text-dark-muted/70`,children:e})]})}function fe({records:e,activePath:t,onSelect:n,nameOf:r}){return(0,k.jsx)(`div`,{"data-testid":`charts-tabs`,role:`tablist`,className:`flex shrink-0 items-center gap-1 overflow-x-auto rounded-lg border border-dark-border bg-dark-surface p-1`,children:e.map(e=>{let i=e.locator.path,a=i===t;return(0,k.jsxs)(`button`,{type:`button`,role:`tab`,"data-testid":`charts-tab`,"aria-selected":a,"aria-current":a,title:`${i}\n${e.producer.sessionId}`,onClick:()=>n(i),className:h(`flex max-w-[14rem] shrink-0 items-center gap-1.5 rounded-md px-2 py-1 text-xs transition-colors`,a?`bg-accent-blue/15 text-accent-blue`:`text-dark-muted hover:bg-dark-hover hover:text-dark-text`),children:[(0,k.jsx)(D,{kind:T(i),size:13}),(0,k.jsx)(`span`,{className:`min-w-0 truncate`,children:r(e)}),(0,k.jsxs)(`span`,{className:`shrink-0 text-badge opacity-60`,children:[`v`,e.version]})]},e.logicalId)})})}function R(){let{t:e}=m(),[n,r]=(0,O.useState)(le),[c,l]=(0,O.useState)(!0),[f,p]=(0,O.useState)(null),[v,b]=(0,O.useState)(0),[C,w]=(0,O.useState)(null),[E,A]=(0,O.useState)(!1),[j,M]=(0,O.useState)(null),[N,F]=(0,O.useState)(null),[R,z]=(0,O.useState)(()=>re()),[pe,B]=(0,O.useState)(null),[V,me]=(0,O.useState)(()=>se()),he=(0,O.useCallback)(e=>{e!==V&&(me(e),ce(e),B(null),U(null))},[V]),[H,U]=(0,O.useState)(null),[ge,W]=(0,O.useState)(!1),G=x(e=>e.publishedSeq),K=(0,O.useCallback)(async t=>{t?.silent||l(!0),p(null);try{let t=await _.visualArtifacts.list();if(!t?.success)throw Error(t?.error||e(`charts.loadFailed`));r(de(t.data?.items??le))}catch(e){p(e instanceof Error?e.message:String(e))}finally{l(!1)}},[e]);(0,O.useEffect)(()=>{K()},[K]),(0,O.useEffect)(()=>{G!==0&&K({silent:!0})},[G,K]);let q=(0,O.useMemo)(()=>ae(n,R,e=>e.logicalId),[n,R]),J=(0,O.useCallback)(e=>{z(e),ie(e)},[]),_e=(0,O.useCallback)(async t=>{W(!0),U(null);try{let n=await _.visualArtifacts.remove(t);if(!n?.success)throw Error(n?.error||e(`charts.removeFailed`));r(e=>e.filter(e=>e.logicalId!==t)),J(R.filter(e=>e!==t)),B(null)}catch(e){U(e instanceof Error?e.message:String(e))}finally{W(!1)}},[J,R,e]),ve=(0,O.useCallback)((e,t)=>{let n=q.map(e=>e.logicalId),r=P(n,e,t.id,t.side);r.join()!==n.join()&&J(r)},[J,q]),Y=S(ve,{vertical:!0}),ye=(0,O.useCallback)((e,t)=>{let n=q.map(e=>e.logicalId),r=n.indexOf(e);if(r<0)return;let i=n[r+t];i&&J(P(n,e,i,t<0?`before`:`after`))},[J,q]),X=(0,O.useMemo)(()=>C&&n.some(e=>e.locator.path===C)?C:q[0]?.locator.path??null,[q,n,C]);(0,O.useEffect)(()=>{if(!X){M(null),F(null);return}let t=!1;return M(null),F(null),(async()=>{try{let n=await _.files.read(X);if(t)return;n.success&&n.data!==void 0&&n.data!==null?M(String(n.data)):F(n.error||e(`charts.readFailed`))}catch(e){t||F(e instanceof Error?e.message:String(e))}})(),()=>{t=!0}},[X,e]),(0,O.useEffect)(()=>{if(!E)return;let e=e=>{e.key===`Escape`&&A(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[E]);let Z=(0,O.useMemo)(()=>n.find(e=>e.locator.path===X)??null,[n,X]),be=(0,O.useMemo)(()=>n.map(e=>({path:e.locator.path??``,metadata:e.metadata,version:e.version})),[n]),xe=ee(be),Q=e=>e.locator.path?xe(e.locator.path):``,Se=Z?Q(Z):null,$=Y.draggingId?n.find(e=>e.logicalId===Y.draggingId)??null:null,Ce=Z?.locator.path===void 0?null:(0,k.jsx)(L,{path:Z.locator.path,content:j,readError:N,freshness:Z.freshness});return(0,k.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,k.jsxs)(`div`,{className:`flex shrink-0 items-start gap-3 px-4 pt-3`,children:[(0,k.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,k.jsxs)(`h1`,{className:`flex items-center gap-1.5 text-lg font-semibold text-dark-text`,children:[(0,k.jsx)(a,{size:16,className:`shrink-0 text-accent-blue`}),e(`charts.title`)]}),(0,k.jsx)(`p`,{className:`mt-0.5 text-xs leading-relaxed text-dark-muted`,children:e(`charts.subtitle`)})]}),(0,k.jsxs)(`div`,{className:`mt-0.5 flex shrink-0 items-center gap-2`,children:[n.length>0&&(0,k.jsx)(`div`,{"data-testid":`charts-display-switch`,role:`group`,"aria-label":e(`charts.displayMode`),className:`flex items-center gap-0.5 rounded-md border border-dark-border p-0.5`,children:oe.map(t=>(0,k.jsx)(`button`,{type:`button`,"data-testid":`charts-display-${t}`,"aria-pressed":V===t,onClick:()=>he(t),className:h(`rounded px-2 py-0.5 text-badge transition-colors`,V===t?`bg-accent-blue/15 text-accent-blue`:`text-dark-muted hover:bg-dark-hover hover:text-dark-text`),children:e(t===`list`?`charts.viewList`:`charts.viewTabs`)},t))}),(0,k.jsxs)(`button`,{type:`button`,"data-testid":`charts-refresh`,onClick:()=>{K(),b(e=>e+1)},className:`flex shrink-0 items-center gap-1 rounded-md border border-dark-border px-2 py-1 text-xs text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:e(`charts.refresh`),children:[c?(0,k.jsx)(o,{size:12,className:`animate-spin`}):(0,k.jsx)(u,{size:12}),e(`charts.refresh`)]})]})]}),f&&(0,k.jsx)(`div`,{className:`shrink-0 px-4 pt-2`,children:(0,k.jsx)(I,{text:f})}),(0,k.jsx)(ne,{refreshToken:v,onApproved:()=>void K()}),(0,k.jsx)(`div`,{className:h(`flex min-h-0 flex-1 gap-3 p-4`,V===`tabs`?`flex-col`:``),children:n.length===0?(0,k.jsx)(`div`,{"data-testid":`charts-empty`,className:`flex min-h-0 flex-1 items-center justify-center rounded-lg border border-dashed border-dark-border px-6`,children:c?(0,k.jsx)(o,{size:18,className:`animate-spin text-accent-blue`}):(0,k.jsxs)(`div`,{className:`max-w-md space-y-2`,children:[(0,k.jsx)(`p`,{className:`text-xs leading-relaxed text-dark-muted`,children:e(`charts.empty`)}),(0,k.jsx)(`ul`,{className:`space-y-1`,children:ue.map(({command:t,hintKey:n})=>(0,k.jsxs)(`li`,{className:`flex items-baseline gap-1.5 text-badge text-dark-muted/80`,children:[(0,k.jsxs)(`code`,{className:`shrink-0 rounded bg-dark-hover px-1 py-px font-mono text-accent-blue`,children:[`/`,t]}),(0,k.jsx)(`span`,{className:`min-w-0`,children:e(n)})]},t))})]})}):(0,k.jsxs)(k.Fragment,{children:[V===`tabs`?(0,k.jsx)(fe,{records:q,activePath:X,onSelect:w,nameOf:Q}):(0,k.jsxs)(`aside`,{"data-testid":`charts-list`,className:`flex w-64 shrink-0 flex-col overflow-y-auto rounded-lg border border-dark-border bg-dark-surface`,children:[H&&(0,k.jsx)(`div`,{className:`border-b border-dark-border/60 p-1.5`,children:(0,k.jsx)(I,{text:`${e(`charts.removeFailed`)} — ${H}`})}),q.map(t=>{let n=t.locator.path,r=n===X,i=y(t.type),a=i?e(i):t.type,o=Y.draggingId===t.logicalId,c=Y.dropTarget?.id===t.logicalId?Y.dropTarget.side:null,l=pe===t.logicalId;return(0,k.jsxs)(`div`,{"data-panel-id":t.logicalId,"data-testid":`charts-item-row`,"data-dragging":o?`true`:`false`,"data-drop-side":c??void 0,onPointerDown:e=>Y.startFromCard(e,t.logicalId),onPointerMove:Y.onPointerMove,onPointerUp:Y.onPointerUp,onPointerCancel:Y.onPointerCancel,className:h(`flex items-stretch border-b border-dark-border/60 transition-colors`,r?`bg-accent-blue/10`:`hover:bg-dark-hover`,o&&`opacity-40`,c===`before`&&`shadow-[inset_0_2px_0_0_theme(colors.accent-blue)]`,c===`after`&&`shadow-[inset_0_-2px_0_0_theme(colors.accent-blue)]`),children:[(0,k.jsx)(`button`,{type:`button`,"data-testid":`charts-item-grab`,"aria-label":e(`charts.dragHandle`),title:e(`charts.dragHandle`),onPointerDown:e=>Y.startFromGrip(e,t.logicalId),onKeyDown:e=>{let n=e.key===`ArrowUp`,r=e.key===`ArrowDown`;(n||r)&&(e.preventDefault(),ye(t.logicalId,n?-1:1))},style:{touchAction:`none`},className:`flex shrink-0 cursor-grab items-center px-1 text-dark-tertiary transition-colors hover:text-dark-text active:cursor-grabbing`,children:(0,k.jsx)(d,{size:12})}),l?(0,k.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-1.5 py-2 pe-2`,children:[(0,k.jsx)(`span`,{className:`min-w-0 flex-1 text-badge leading-snug text-amber-300`,children:e(`charts.removeConfirm`)}),(0,k.jsx)(`button`,{type:`button`,"data-testid":`charts-item-remove-confirm`,disabled:ge,onClick:()=>void _e(t.logicalId),className:`shrink-0 rounded border border-accent-red/40 px-1.5 py-0.5 text-badge text-accent-red transition-colors hover:bg-accent-red/10 disabled:opacity-50`,children:e(`charts.remove`)}),(0,k.jsx)(`button`,{type:`button`,"data-testid":`charts-item-remove-cancel`,onClick:()=>B(null),className:`shrink-0 rounded border border-dark-border px-1.5 py-0.5 text-badge text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,children:e(`common.cancel`)})]}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`button`,{type:`button`,"data-testid":`charts-item`,"aria-current":r,onClick:()=>w(n),title:`${n}\n${t.producer.sessionId}`,className:`flex min-w-0 flex-1 items-center gap-2 py-2 pe-1 text-start`,children:[(0,k.jsx)(D,{kind:T(n),size:14}),(0,k.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,k.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,k.jsx)(`span`,{"data-testid":`charts-item-name`,className:h(`truncate text-xs`,r?`text-accent-blue`:`text-dark-text`),children:Q(t)}),(0,k.jsxs)(`span`,{className:`shrink-0 rounded bg-dark-hover px-1 py-px text-badge text-dark-muted`,children:[a,` v`,t.version]})]}),(0,k.jsxs)(`span`,{className:`mt-0.5 block truncate font-mono text-badge text-dark-muted/70`,children:[te(n),` · `,g(t.createdAt,Date.now(),e)]})]})]}),(0,k.jsx)(`button`,{type:`button`,"data-testid":`charts-item-remove`,onClick:()=>{U(null),B(t.logicalId)},title:e(`charts.removeHint`),"aria-label":e(`charts.removeHint`),className:`flex shrink-0 items-center px-1.5 text-dark-tertiary transition-colors hover:text-accent-red`,children:(0,k.jsx)(s,{size:12})})]})]},t.logicalId)})]}),(0,k.jsxs)(`section`,{"data-testid":`charts-canvas`,className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden rounded-lg border border-dark-border bg-dark-surface`,children:[(0,k.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-dark-border px-3 py-1.5`,children:[(0,k.jsx)(`span`,{"data-testid":`charts-canvas-name`,className:`min-w-0 flex-1 truncate text-xs text-dark-text`,title:X??``,children:Se??X??``}),(0,k.jsx)(`button`,{type:`button`,"data-testid":`charts-fullscreen-toggle`,onClick:()=>A(!0),className:`shrink-0 rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:e(`charts.fullscreen`),"aria-label":e(`charts.fullscreen`),children:(0,k.jsx)(i,{size:13})})]}),(0,k.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-3`,children:Ce})]})]})}),$&&(0,k.jsx)(`div`,{ref:Y.ghost.setElement,"data-testid":`charts-drag-ghost`,"aria-hidden":!0,className:`pointer-events-none fixed left-0 top-0 z-50 w-56 will-change-transform`,children:(0,k.jsxs)(`div`,{className:h(`flex w-full rotate-1 items-center gap-2 overflow-hidden rounded-lg border bg-dark-surface/95 px-2 py-1.5 shadow-pop`,Y.dropTarget?`border-accent-blue/70 ring-1 ring-accent-blue/30`:`border-dark-border`),children:[(0,k.jsx)(d,{size:12,className:`shrink-0 text-dark-muted`}),(0,k.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-xs text-dark-text`,children:Q($)})]})}),E&&Z?.locator.path!==void 0&&(0,k.jsxs)(`div`,{"data-testid":`charts-fullscreen`,className:`fixed inset-0 z-50 flex flex-col bg-dark-bg`,children:[(0,k.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-dark-border px-4 py-2`,children:[(0,k.jsx)(a,{size:14,className:`shrink-0 text-accent-blue`}),(0,k.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-xs text-dark-text`,title:Z.locator.path,children:Se??Z.locator.path}),(0,k.jsxs)(`button`,{type:`button`,onClick:()=>A(!1),className:`flex shrink-0 items-center gap-1 rounded-md border border-dark-border px-2 py-1 text-xs text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:e(`charts.exitFullscreen`),children:[(0,k.jsx)(t,{size:12}),e(`charts.exitFullscreen`)]})]}),(0,k.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-4`,children:(0,k.jsx)(L,{path:Z.locator.path,content:j,readError:N,freshness:Z.freshness})})]})]})}function z(){return(0,k.jsx)(`div`,{className:`flex h-full min-h-0 flex-col`,children:(0,k.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:(0,k.jsx)(R,{})})})}export{z as ChartsView};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{Bt as t,Et as n,G as r,Kr as i,T as a,Ut as o,Vn as s,Vr as c,Wn as l,_ as u,h as d,ht as f,j as p,lt as ee,mn as m,nn as h,nt as g,pr as _,q as v,r as y,t as te,ut as b}from"./icons-CYDRRPKW.js";import{t as ne}from"./useTranslation-B-mfApCn.js";import{a as x,t as re}from"./useConfirm-Da8iQ_DZ.js";import{t as S}from"./api-plEYhRn0.js";import{I as C}from"./markdown-N5__3T-w.js";import{f as w}from"./common-Bbatsa0-.js";import{V as ie}from"./index-CTbLW314.js";var T=e(i(),1),E=C();function D(e){return e.split(/[,,、]/).map(e=>e.trim()).filter(Boolean)}function O({connector:e,onRefresh:t}){let{t:n}=ne(),[r,i]=re(),[a,s]=(0,T.useState)(null),[c,l]=(0,T.useState)(null),[p,m]=(0,T.useState)(null),[g,v]=(0,T.useState)(null),y=e.accounts??[],te=(e.requiresEnv??[]).filter(e=>!e.optional),b=async(e,n)=>{s(e),l(null);let r=await n();r&&l(r),s(null),r||t()},C=()=>m({mode:`add`,label:``,tags:``,env:{}}),w=e=>m({mode:`creds`,accountId:e.id,label:e.label,tags:e.tags.join(`, `),env:{}}),ie=()=>{if(!p)return;let t=D(p.tags),n=Object.fromEntries(Object.entries(p.env).filter(([,e])=>e.trim().length>0)),r=p.accountId??`new`;b(r,async()=>{if(p.mode===`add`){let r=await S.connectors.addAccount(e.id,{...p.label.trim()?{label:p.label.trim()}:{},tags:t,...Object.keys(n).length?{env:n}:{}});if(!r.success)return r.error||`新增账号失败`}else{let r=y.find(e=>e.id===p.accountId);if(!r)return`账号已不存在,请刷新`;let i=await S.connectors.updateAccount(e.id,r.id,{label:p.label.trim()||r.label,tags:t});if(!i.success)return i.error||`保存账号失败`;if(Object.keys(n).length){let e=await S.connectors.connect(r.stateId,n);if(!e.success)return e.error||`连接账号失败`}}return m(null),null})},O=e=>{!e.enabled&&e.missingEnv?.length?w(e):b(e.id,async()=>{let t=await S.connectors.toggle(e.stateId,!e.enabled);return t.success?null:t.error||`切换 ${e.label} 失败`})},k=(t,n)=>{b(t.id,async()=>{let r=await S.connectors.updateAccount(e.id,t.id,{tags:D(n)});return r.success?null:r.error||`保存标签失败`}),v(null)},A=t=>{i({message:n(`connectors.accountsRemoveConfirm`,{label:t.label}),variant:`danger`}).then(n=>{n&&b(t.id,async()=>{let n=await S.connectors.removeAccount(e.id,t.id);return n.success?n.data?.removed===!1?`账号已不存在`:null:n.error||`删除账号失败`})})},ae=e=>e.enabled&&e.status===`ready`?(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-green`,children:[(0,E.jsx)(_,{size:10}),e.toolCount?n(`connectors.toolCount`,{count:e.toolCount}):`ready`]}):e.status===`error`?(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-red`,title:e.error,children:[(0,E.jsx)(d,{size:10}),e.error||n(`connectors.missing`)]}):e.missingEnv?.length?(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-yellow`,children:[(0,E.jsx)(d,{size:10}),e.missingEnv.join(`, `),` `,n(`connectors.missing`)]}):(0,E.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e.status});return(0,E.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-dark-border`,children:[r,(0,E.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-2`,children:[(0,E.jsxs)(`span`,{className:`text-xs text-dark-muted inline-flex items-center gap-1`,children:[(0,E.jsx)(h,{size:12}),n(`connectors.accountsTitle`),(0,E.jsxs)(`span`,{className:`text-badge`,children:[`(`,y.length,`)`]})]}),(0,E.jsxs)(`button`,{type:`button`,onClick:C,className:`inline-flex items-center gap-1 text-meta text-accent-blue hover:underline`,children:[(0,E.jsx)(ee,{size:11}),n(`connectors.accountsAdd`)]})]}),y.length===0?(0,E.jsx)(`p`,{className:`text-badge text-dark-muted`,children:n(`connectors.accountsEmpty`)}):(0,E.jsx)(`ul`,{className:`space-y-1.5`,children:y.map(e=>(0,E.jsxs)(`li`,{className:`flex items-center gap-2 flex-wrap bg-dark-bg/60 border border-dark-border rounded-lg px-2.5 py-1.5`,children:[(0,E.jsx)(`span`,{className:`text-sm`,children:e.label}),g?.id===e.id?(0,E.jsx)(`input`,{autoFocus:!0,value:g.value,onChange:t=>v({id:e.id,value:t.target.value}),onBlur:()=>k(e,g.value),onKeyDown:t=>{t.key===`Enter`&&k(e,g.value),t.key===`Escape`&&v(null)},placeholder:n(`connectors.accountsTagsHint`),className:`px-1.5 py-0.5 bg-dark-surface border border-dark-border rounded text-badge w-40`}):(0,E.jsxs)(E.Fragment,{children:[e.tags.length?e.tags.map(e=>(0,E.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-blue/15 text-accent-blue`,children:e},e)):(0,E.jsx)(`span`,{className:`text-badge text-dark-muted`,children:n(`connectors.accountsNoTags`)}),(0,E.jsx)(`button`,{type:`button`,title:n(`connectors.accountsEditTags`),onClick:()=>v({id:e.id,value:e.tags.join(`, `)}),className:`text-dark-muted hover:text-accent-blue`,children:(0,E.jsx)(f,{size:11})})]}),e.hint?(0,E.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e.hint}):null,a===e.id?(0,E.jsx)(o,{size:11,className:`animate-spin text-dark-muted`}):ae(e),(0,E.jsxs)(`span`,{className:`ms-auto flex items-center gap-1.5`,children:[(0,E.jsx)(`button`,{type:`button`,title:n(`connectors.accountsCreds`),onClick:()=>w(e),className:`p-1 rounded text-dark-muted hover:text-accent-blue hover:bg-dark-hover`,children:(0,E.jsx)(h,{size:12})}),(0,E.jsx)(`button`,{type:`button`,title:n(`connectors.accountsRemove`),onClick:()=>A(e),disabled:a!==null,className:`p-1 rounded text-dark-muted hover:text-accent-red hover:bg-accent-red/10 disabled:opacity-40`,children:(0,E.jsx)(u,{size:12})}),(0,E.jsx)(`button`,{role:`switch`,"aria-checked":e.enabled,disabled:a!==null,onClick:()=>O(e),className:`relative w-9 h-5 rounded-full transition-colors disabled:opacity-50 ${e.enabled?`bg-accent-green`:`bg-dark-border`}`,children:(0,E.jsx)(`span`,{className:`absolute top-0.5 w-4 h-4 bg-white rounded-full transition-transform ${e.enabled?`start-4`:`start-0.5`}`})})]})]},e.id))}),c?(0,E.jsx)(`p`,{className:`text-badge text-accent-red mt-2`,children:c}):null,p?(0,E.jsxs)(`div`,{className:`mt-2 border border-dark-border rounded-lg p-2.5 bg-dark-bg/60 space-y-2`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:n(`connectors.accountsLabel`)}),(0,E.jsx)(`input`,{autoFocus:!0,value:p.label,onChange:e=>m({...p,label:e.target.value}),placeholder:n(`connectors.accountsLabelHint`),className:`w-full px-2 py-1 bg-dark-surface border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:n(`connectors.accountsTags`)}),(0,E.jsx)(`input`,{value:p.tags,onChange:e=>m({...p,tags:e.target.value}),placeholder:n(`connectors.accountsTagsHint`),className:`w-full px-2 py-1 bg-dark-surface border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),te.map(e=>(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e.label}),(0,E.jsx)(`input`,{type:e.secret?`password`:`text`,value:p.env[e.key]??``,onChange:t=>m({...p,env:{...p.env,[e.key]:t.target.value}}),placeholder:e.key,className:`w-full px-2 py-1 bg-dark-surface border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`}),e.hint?(0,E.jsx)(`p`,{className:`text-badge text-dark-muted mt-0.5`,children:e.hint}):null]},e.key)),(0,E.jsxs)(`div`,{className:`flex gap-2`,children:[(0,E.jsx)(x,{variant:`accent`,disabled:a!==null,onClick:ie,children:p.mode===`add`?n(`connectors.accountsAdd`):n(`common.save`)}),(0,E.jsx)(`button`,{type:`button`,onClick:()=>m(null),className:`px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm`,children:n(`common.cancel`)})]})]}):null]})}var k={"code-intelligence":`🧠 代码智能`,filesystem:`📂 文件系统`,databases:`🗄️ 数据库`,"browser-automation":`🌐 浏览器自动化`,"knowledge-memory":`🧠 知识/记忆`,"search-web":`🔎 搜索/网页`,"cloud-platforms":`☁️ 云平台`,communication:`💬 通讯`,"developer-tools":`🛠️ 开发者工具`,security:`🔒 安全`,"test-demo":`🧪 测试/Demo`,other:`📦 其他`},A=`email-imap`;function ae(e){return(e.missingEnv?.length??0)>0||!!e.supportsOAuth&&!e.authorized}var oe=[`phone_use`,`phone_inspect`];function j(){let{t:e}=ne(),[i,f]=(0,T.useState)([]),[re,C]=(0,T.useState)(!0),[D,j]=(0,T.useState)(null),[M,N]=(0,T.useState)({}),[se,P]=(0,T.useState)(null),[F,ce]=(0,T.useState)(``),[I,le]=(0,T.useState)(null),[L,ue]=(0,T.useState)(`all`),[de,R]=(0,T.useState)(null),[fe,pe]=(0,T.useState)({}),[me,he]=(0,T.useState)(!1),[z,B]=(0,T.useState)({name:``,command:``,args:``,env:``,transport:`stdio`,url:``,headers:``}),[V,ge]=(0,T.useState)(null),[_e,H]=(0,T.useState)(!1),[ve,U]=(0,T.useState)(null),[W,ye]=(0,T.useState)(null),[be,G]=(0,T.useState)(!1),[xe,K]=(0,T.useState)(null),[q,Se]=(0,T.useState)(null),[Ce,we]=(0,T.useState)(!1),[Te,Ee]=(0,T.useState)(null),De=async()=>{H(!0),U(null);try{let e=await S.tools.get(`computer_use`);ge(e.success&&e.data?!!e.data.enabled:!1)}catch(e){U(e instanceof Error?e.message:String(e))}H(!1)},Oe=async()=>{if(V===null)return;let e=!V;H(!0),U(null);try{let t=await S.tools.toggle(`computer_use`,e);t.success?ge(e):U(t.error||`切换 Computer Use 失败`)}catch(e){U(e instanceof Error?e.message:String(e))}H(!1)},ke=async()=>{G(!0),K(null);try{let e=await S.tools.get(`phone_use`);ye(e.success&&e.data?!!e.data.enabled:!1)}catch(e){K(e instanceof Error?e.message:String(e))}G(!1)},Ae=async()=>{if(W===null)return;let t=!W;G(!0),K(null);try{let n=(await Promise.all(oe.map(e=>S.tools.toggle(e,t)))).find(e=>!e.success);n?K(n.error||e(`connectors.phoneToggleFailed`)):(ye(t),t&&je())}catch(e){K(e instanceof Error?e.message:String(e))}G(!1)},je=async()=>{we(!0),K(null);try{let t=await S.device.androidStatus();t.success&&t.data?Se(t.data):K(t.error||e(`connectors.phoneCheckFailed`))}catch(e){K(e instanceof Error?e.message:String(e))}we(!1)},Me=()=>{window.dispatchEvent(new CustomEvent(`switch-tab`,{detail:`tools`}))},Ne=()=>B({name:``,command:``,args:``,env:``,transport:`stdio`,url:``,headers:``}),Pe=e=>Object.fromEntries(e.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.indexOf(`=`);return t>0?[e.slice(0,t).trim(),e.slice(t+1).trim()]:[e,``]})),Fe=async()=>{let t=z.transport!==`stdio`;if(!z.name.trim()||!t&&!z.command.trim()||t&&!z.url.trim())P(e(`connectors.customFormRequired`));else{N(e=>({...e,__add:!0})),P(null);try{let e=await S.connectors.addCustom({name:z.name.trim(),command:t?void 0:z.command.trim(),args:t?void 0:z.args.split(/\s+/).filter(Boolean),env:Pe(z.env),url:t?z.url.trim():void 0,transport:t?z.transport:void 0,headers:t?Pe(z.headers):void 0});e.success&&e.data?(f(t=>[...t,e.data]),he(!1),Ne()):P(e.error||`添加失败`)}catch(e){P(e instanceof Error?e.message:String(e))}finally{N(e=>({...e,__add:!1}))}}},Ie=async e=>{N(t=>({...t,[e.id]:!0}));try{let t=await S.connectors.removeCustom(e.id);t.success?f(t=>t.filter(t=>t.id!==e.id)):P(t.error||`删除失败`)}finally{N(t=>({...t,[e.id]:!1}))}},J=async()=>{C(!0),j(null);let e=await S.connectors.list();e.success&&Array.isArray(e.data?.connectors)?f(e.data.connectors):j(e.error||`加载连接器失败`),C(!1)};(0,T.useEffect)(()=>{J(),De(),ke()},[]),ie(()=>void J(),{filterServer:e=>/^(managed|custom)-connector-/.test(e)});let Y=(e,t,n,r)=>{P(n||null),f(n=>n.map(n=>n.id===e?t??{...n,enabled:!!r,status:`error`}:n))},Le=async(e,t,n)=>{P(null),N(t=>({...t,[e.id]:!0})),f(n=>n.map(n=>n.id===e.id?{...n,enabled:t,status:t?`connecting`:`installed`}:n));try{let r=await S.connectors.toggle(e.id,t,n);r.success&&r.data?f(t=>t.map(t=>t.id===e.id?r.data:t)):Y(e.id,void 0,r.error||`切换 ${e.name} 失败`,!t)}catch(n){Y(e.id,void 0,n instanceof Error?n.message:String(n),!t)}finally{N(t=>({...t,[e.id]:!1}))}},Re=e=>{!e.enabled&&e.requiresEnv?.length&&e.missingEnv?.length?R(e.id):(R(null),Le(e,!e.enabled))},ze=async(e,t)=>{R(null),P(null),N(t=>({...t,[e.id]:!0})),f(t=>t.map(t=>t.id===e.id?{...t,enabled:!0,status:`connecting`}:t));try{let n=await S.connectors.connect(e.id,t);n.success&&n.data?(f(t=>t.map(t=>t.id===e.id?n.data:t)),pe(t=>({...t,[e.id]:{}}))):Y(e.id,void 0,n.error||`连接 ${e.name} 失败`,!1)}catch(t){Y(e.id,void 0,t instanceof Error?t.message:String(t),!1)}finally{N(t=>({...t,[e.id]:!1}))}},Be=async t=>{P(null),Ee(t.id);try{let n=await S.connectors.authorize(t.id);if(!n.success||!n.data?.authUrl){P(n.error||e(`connectors.authorizeFailed`));return}window.open(n.data.authUrl,`_blank`,`noopener,noreferrer`);let r=Date.now()+12e4;for(;Date.now()<r;){await new Promise(e=>setTimeout(e,2e3));let e=(await S.connectors.list()).data?.connectors?.find(e=>e.id===t.id);if(e){if(f(n=>n.map(n=>n.id===t.id?e:n)),e.error){P(e.error);break}if(e.authorized&&e.status===`ready`)break}}}catch(e){P(e instanceof Error?e.message:String(e))}finally{Ee(null)}},Ve=t=>{let n=`inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-badge`;return t.stage===`ready`?(0,E.jsxs)(`span`,{className:`${n} bg-accent-green/15 text-accent-green`,children:[(0,E.jsx)(_,{size:9}),e(`connectors.phoneBadgeReady`)]}):t.stage===`adb-missing`||t.stage===`adb-error`?(0,E.jsxs)(`span`,{className:`${n} bg-accent-red/15 text-accent-red`,children:[(0,E.jsx)(d,{size:9}),t.stage===`adb-error`?e(`connectors.phoneBadgeAdbError`):e(`connectors.phoneBadgeNoAdb`)]}):(0,E.jsxs)(`span`,{className:`${n} bg-accent-yellow/15 text-accent-yellow`,children:[(0,E.jsx)(d,{size:9}),e(`connectors.phoneBadgeWaiting`)]})},He=e=>e===`adb-error`?0:e===`adb-missing`?1:e===`no-device`?2:e===`unauthorized`||e===`device-offline`?3:e===`multiple`?4:0,Ue=t=>{switch(t.stage){case`ready`:return e(`connectors.phoneReady`,{device:t.selected?`${t.selected.serial}${t.selected.model?` · ${t.selected.model}`:``}`:`—`});case`adb-missing`:return e(`connectors.phoneAdbMissing`,{env:t.envKeys.binary});case`adb-error`:return e(`connectors.phoneAdbError`,{env:t.envKeys.binary});case`no-device`:return e(`connectors.phoneNoDevice`);case`unauthorized`:return e(`connectors.phoneUnauthorized`);case`device-offline`:return e(`connectors.phoneOffline`);case`multiple`:return e(`connectors.phoneMultiple`,{count:t.devices.filter(e=>e.state===`device`).length,serials:t.devices.filter(e=>e.state===`device`).map(e=>e.serial).join(`, `),env:t.envKeys.serial});default:return e(`connectors.phoneNoDevice`)}},We=t=>{let n=`inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs font-medium`;if(!t.installed)return(0,E.jsxs)(`span`,{className:`${n} bg-dark-hover text-dark-muted`,children:[(0,E.jsx)(l,{size:12}),e(`connectors.notInstalled`)]});switch(t.status){case`ready`:return(0,E.jsxs)(`span`,{className:`${n} bg-accent-green/15 text-accent-green`,children:[(0,E.jsx)(_,{size:12}),e(`connectors.ready`)]});case`connecting`:return(0,E.jsxs)(`span`,{className:`${n} bg-accent-blue/15 text-accent-blue`,children:[(0,E.jsx)(o,{size:12,className:`animate-spin`}),e(`connectors.connecting`)]});case`error`:return(0,E.jsxs)(`span`,{className:`${n} bg-accent-red/15 text-accent-red`,children:[(0,E.jsx)(d,{size:12}),e(`connectors.error`)]});case`disabled`:return(0,E.jsx)(`span`,{className:`${n} bg-dark-hover text-dark-muted`,children:e(`connectors.disabled`)});default:return(0,E.jsx)(`span`,{className:`${n} bg-dark-hover text-dark-muted`,children:e(`connectors.installed`)})}},X=i.find(e=>e.id===A)??null,Ge=i.filter(e=>e.featured&&e.id!==A&&ae(e)),Ke=new Set(Ge.map(e=>e.id)),Z=i.filter(e=>e.id!==A&&!Ke.has(e.id)),qe=X?.missingEnv??[],Q=qe.length>0,Je=!!(X&&de===X.id),$=Z.filter(e=>L===`all`||e.kind===L),Ye=$.filter(e=>{if(F){let t=F.toLowerCase();if(![e.name,e.id,e.description,e.category??``,e.kind,...e.languages??[]].join(` `).toLowerCase().includes(t))return!1}return!(I&&e.category!==I)}).sort((e,t)=>e.enabled===t.enabled?e.name.localeCompare(t.name):e.enabled?-1:1),Xe=[...new Set($.map(e=>e.category).filter(Boolean))];if(re)return(0,E.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,role:`status`,"aria-label":e(`common.loading`),children:(0,E.jsx)(w,{count:5})});if(D)return(0,E.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,E.jsxs)(`div`,{className:`text-center`,children:[(0,E.jsx)(d,{size:32,className:`mx-auto mb-2 text-accent-red`}),(0,E.jsx)(`p`,{className:`text-accent-red mb-4`,children:D}),(0,E.jsx)(x,{variant:`accent`,onClick:()=>void J(),children:e(`common.retry`)})]})});let Ze=t=>{let n=fe[t.id]??{},r=(e,n)=>pe(r=>({...r,[t.id]:{...r[t.id]??{},[e]:n}})),i=t.requiresEnv??[],a=i.filter(e=>!e.optional),o=i.filter(e=>e.optional),s=new Set(t.configuredEnv??[]),c=Object.fromEntries(Object.entries(n).filter(([,e])=>e.trim().length>0)),l=a.filter(e=>!c[e.key]&&!s.has(e.key)),u=t=>(0,E.jsxs)(`div`,{children:[(0,E.jsxs)(`label`,{className:`flex items-center gap-1.5 text-meta text-dark-muted mb-1`,children:[(0,E.jsx)(`span`,{children:t.label}),t.optional?(0,E.jsx)(`span`,{className:`text-badge px-1 py-0.5 rounded bg-dark-hover text-dark-muted`,children:e(`connectors.envOptional`)}):null,s.has(t.key)?(0,E.jsx)(`span`,{className:`text-badge px-1 py-0.5 rounded bg-accent-green/15 text-accent-green`,children:e(`connectors.envAlreadySet`)}):null]}),(0,E.jsx)(`input`,{type:t.secret?`password`:`text`,value:n[t.key]??``,onChange:e=>r(t.key,e.target.value),placeholder:s.has(t.key)?e(`connectors.envKeepPlaceholder`):t.key,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`}),t.hint?(0,E.jsx)(`p`,{className:`text-badge text-dark-muted mt-1`,children:t.hint}):null]},t.key);return(0,E.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-dark-border`,children:[(0,E.jsxs)(`div`,{className:`text-xs text-dark-muted mb-2 flex items-center gap-1`,children:[(0,E.jsx)(h,{size:12}),a.length?e(`connectors.needCredentials`):e(`connectors.envOptionalOnly`)]}),(0,E.jsx)(`div`,{className:`space-y-2`,children:a.map(u)}),o.length?(0,E.jsxs)(`details`,{className:`mt-2`,open:l.length===0&&a.length===0,children:[(0,E.jsx)(`summary`,{className:`text-meta text-dark-muted cursor-pointer select-none`,children:e(`connectors.envOptionalSection`,{count:o.length})}),(0,E.jsx)(`div`,{className:`space-y-2 mt-2`,children:o.map(u)})]}):null,l.length?(0,E.jsx)(`p`,{className:`text-badge text-accent-yellow mt-2`,children:e(`connectors.envMissingRequired`,{keys:l.map(e=>e.key).join(`, `)})}):null,(0,E.jsxs)(`div`,{className:`flex gap-2 mt-2`,children:[(0,E.jsx)(x,{variant:`accent`,disabled:l.length>0,onClick:()=>void ze(t,c),children:e(`connectors.connect`)}),(0,E.jsx)(`button`,{onClick:()=>R(null),className:`px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm`,children:e(`common.cancel`)})]})]})},Qe=(t,n=!1)=>{let i=!!M[t.id],a=de===t.id,o=new Set(t.configuredEnv??[]),c=(t.requiresEnv??[]).filter(e=>e.optional&&!o.has(e.key)).length;return(0,E.jsxs)(`div`,{className:n?``:`bg-dark-surface border border-dark-border rounded-lg p-4 transition-opacity ${t.enabled?``:`opacity-80`}`,children:[(0,E.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,E.jsxs)(`div`,{className:`flex items-start gap-3 flex-1 min-w-0`,children:[(0,E.jsx)(`span`,{className:`mt-0.5 shrink-0 px-2 py-1 rounded-md text-meta font-semibold uppercase ${t.kind===`lsp`?`bg-accent-purple/15 text-accent-purple`:`bg-accent-green/15 text-accent-green`}`,children:t.kind===`lsp`?`LSP`:`MCP`}),(0,E.jsxs)(`div`,{className:`min-w-0`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,E.jsx)(`span`,{className:`font-medium text-sm truncate`,children:t.name}),t.custom?(0,E.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-purple/15 text-accent-purple`,children:e(`connectors.custom`)}):null,t.official?(0,E.jsxs)(`span`,{title:`Official`,className:`text-badge px-1.5 py-0.5 rounded bg-accent-yellow/15 text-accent-yellow`,children:[`🎖️ `,e(`connectors.official`)]}):null,t.scope===`cloud`?(0,E.jsxs)(`span`,{title:`Cloud`,className:`inline-flex items-center gap-0.5 text-badge px-1.5 py-0.5 rounded bg-accent-blue/15 text-accent-blue`,children:[(0,E.jsx)(m,{size:9}),e(`connectors.cloud`)]}):(0,E.jsxs)(`span`,{title:`Local`,className:`inline-flex items-center gap-0.5 text-badge px-1.5 py-0.5 rounded bg-dark-hover text-dark-muted`,children:[(0,E.jsx)(r,{size:9}),e(`connectors.local`)]}),t.language?(0,E.jsx)(`span`,{className:`text-badge`,children:t.language}):null,We(t)]}),(0,E.jsx)(`p`,{className:`text-xs text-dark-muted mt-1 line-clamp-2`,children:t.description}),(0,E.jsxs)(`div`,{className:`flex items-center gap-3 mt-2 text-meta text-dark-muted flex-wrap`,children:[(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,E.jsx)(r,{size:11}),(0,E.jsx)(`code`,{className:`text-badge`,children:t.installHint})]}),t.transport&&t.transport!==`stdio`?(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-accent-blue`,children:[(0,E.jsx)(m,{size:11}),t.transport===`sse`?`SSE`:`Streamable HTTP`]}):null,t.languages?.length?(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,E.jsx)(te,{size:11}),t.languages.join(`, `)]}):null,t.kind===`mcp`&&t.toolCount!==void 0?(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,E.jsx)(b,{size:11}),e(`connectors.toolCount`,{count:t.toolCount})]}):null,t.requiresEnv?.length?(0,E.jsxs)(`button`,{type:`button`,onClick:()=>R(a?null:t.id),className:`inline-flex items-center gap-1 hover:text-accent-blue ${t.missingEnv?.length?`text-accent-yellow`:`text-dark-muted`}`,children:[(0,E.jsx)(h,{size:11}),t.missingEnv?.length?`${t.missingEnv.join(`, `)} ${e(`connectors.missing`)}`:e(`connectors.envConfigured`),c?` · ${e(`connectors.envOptionalUnset`,{count:c})}`:null]}):null,t.docsUrl?(0,E.jsxs)(`a`,{href:t.docsUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 hover:text-accent-blue`,onClick:e=>e.stopPropagation(),children:[(0,E.jsx)(s,{size:11}),e(`connectors.docs`)]}):null]}),t.error?(0,E.jsx)(`p`,{className:`text-meta text-accent-red mt-1`,children:t.error}):null,t.supportsOAuth&&!t.authorized&&!t.error?(0,E.jsx)(`p`,{className:`text-meta text-accent-yellow mt-1`,children:e(`connectors.oauthNotAuthorized`)}):null]})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[t.supportsOAuth?(0,E.jsx)(x,{variant:t.authorized?`ghost`:`accent`,size:`sm`,disabled:i||Te===t.id,onClick:()=>void Be(t),children:Te===t.id?e(`connectors.authorizing`):t.authorized?e(`connectors.reauthorize`):e(`connectors.authorize`)}):null,t.custom?(0,E.jsx)(`button`,{onClick:()=>void Ie(t),disabled:i,title:e(`connectors.removeCustom`),className:`p-1.5 rounded-lg text-dark-muted hover:text-accent-red hover:bg-accent-red/10 transition-colors disabled:opacity-40`,children:(0,E.jsx)(u,{size:14})}):null,!t.installed&&t.enabled?(0,E.jsxs)(`span`,{className:`text-meta text-accent-blue flex items-center gap-1`,children:[(0,E.jsx)(l,{size:11,className:`animate-pulse`}),e(`connectors.installing`)]}):null,(0,E.jsx)(`button`,{role:`switch`,"aria-checked":t.enabled,disabled:i,onClick:()=>Re(t),className:`relative w-12 h-6 rounded-full transition-colors disabled:opacity-50 ${t.enabled?`bg-accent-green`:`bg-dark-border`}`,children:(0,E.jsx)(`span`,{className:`absolute top-1 w-4 h-4 bg-white rounded-full transition-transform ${t.enabled?`start-7`:`start-1`}`})})]})]}),a?Ze(t):null,t.supportsAccounts?(0,E.jsx)(O,{connector:t,onRefresh:()=>void J()}):null]},t.id)};return(0,E.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar p-4`,children:[(0,E.jsxs)(`div`,{className:`sticky top-0 z-20 -mx-4 -mt-4 flex items-center justify-between bg-dark-bg/90 px-4 pb-3 pt-4 backdrop-blur`,children:[(0,E.jsxs)(`h2`,{className:`text-lg font-semibold flex items-center gap-2`,children:[(0,E.jsx)(b,{size:20}),e(`nav.connectors`),(0,E.jsxs)(`span`,{className:`text-sm font-normal text-dark-muted`,children:[`· `,Z.filter(e=>e.enabled).length,`/`,Z.length]})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(x,{variant:`accent`,leftIcon:(0,E.jsx)(ee,{size:14}),onClick:()=>he(e=>!e),children:e(`connectors.addCustom`)}),(0,E.jsxs)(`button`,{onClick:()=>void J(),className:`flex items-center gap-2 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,E.jsx)(g,{size:14}),e(`common.refresh`)]})]})]}),(0,E.jsxs)(`div`,{className:`mb-4 px-3 py-2 rounded-lg bg-accent-blue/10 border border-accent-blue/20 text-xs text-dark-muted space-y-1`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-x-2 gap-y-1 flex-wrap`,children:[(0,E.jsx)(`span`,{children:e(`connectors.scopeHint`)}),(0,E.jsxs)(`button`,{type:`button`,onClick:Me,className:`inline-flex items-center gap-1 text-accent-blue hover:underline`,children:[e(`connectors.scopeHintToolsLink`),(0,E.jsx)(c,{size:11})]})]}),(0,E.jsx)(`div`,{children:e(`connectors.builtinCardHint`)})]}),(0,E.jsxs)(`div`,{className:`mb-4 p-4 bg-dark-surface border border-dark-border rounded-lg space-y-3`,children:[X?(0,E.jsxs)(`div`,{children:[(0,E.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,E.jsxs)(`div`,{className:`min-w-0 flex items-start gap-2`,children:[(0,E.jsx)(t,{size:16,className:`mt-0.5 shrink-0 ${Q?`text-accent-yellow`:`text-accent-green`}`}),(0,E.jsxs)(`div`,{className:`min-w-0`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,E.jsx)(`span`,{className:`text-sm text-dark-text`,children:e(`connectors.emailTitle`)}),We(X),Q?(0,E.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge px-1.5 py-0.5 rounded bg-accent-yellow/15 text-accent-yellow`,children:[(0,E.jsx)(d,{size:9}),e(`connectors.emailNeedsSetup`)]}):null]}),(0,E.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`connectors.emailDesc`)})]})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,E.jsxs)(`button`,{type:`button`,onClick:()=>R(Je?null:X.id),className:`inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-meta border transition-colors ${Q?`bg-accent-yellow/15 border-accent-yellow/40 text-accent-yellow hover:bg-accent-yellow/25`:`bg-dark-bg border-dark-border text-dark-muted hover:bg-dark-hover`}`,children:[(0,E.jsx)(h,{size:11}),e(Q?`connectors.emailConfigure`:`connectors.emailEditCredentials`)]}),(0,E.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":X.enabled,disabled:!!M[X.id],onClick:()=>Re(X),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:opacity-50 ${X.enabled?`bg-accent-green`:`bg-dark-border`}`,children:M[X.id]?(0,E.jsx)(o,{size:12,className:`absolute start-[7px] top-[3px] animate-spin text-accent-fg`}):(0,E.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${X.enabled?`translate-x-[18px]`:`translate-x-0.5`}`})})]})]}),Q?(0,E.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 rounded-lg bg-accent-yellow/10 border border-accent-yellow/30 px-3 py-2`,children:[(0,E.jsx)(d,{size:13,className:`text-accent-yellow mt-0.5 shrink-0`}),(0,E.jsxs)(`div`,{className:`text-xs text-accent-yellow space-y-0.5`,children:[(0,E.jsx)(`div`,{children:e(`connectors.emailNeedsSetupHint`,{keys:qe.join(`, `)})}),(0,E.jsx)(`div`,{className:`text-dark-muted`,children:e(`connectors.emailPriorityHint`)})]})]}):null,Je?Ze(X):null,X.supportsAccounts?(0,E.jsx)(O,{connector:X,onRefresh:()=>void J()}):null]}):null,Ge.length?(0,E.jsxs)(`div`,{className:`space-y-2 ${X?`pt-3 border-t border-dark-border`:``}`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-1.5 text-meta text-dark-muted`,children:[(0,E.jsx)(a,{size:11}),e(`connectors.featuredSetup`)]}),Ge.map(e=>(0,E.jsx)(`div`,{children:Qe(e,!0)},e.id))]}):null,(0,E.jsxs)(`div`,{className:`flex items-center justify-between gap-3 ${X?`pt-3 border-t border-dark-border`:``}`,children:[(0,E.jsxs)(`div`,{className:`min-w-0 flex items-start gap-2`,children:[(0,E.jsx)(n,{size:16,className:`text-accent-blue mt-0.5 shrink-0`}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`text-sm text-dark-text`,children:`Computer Use`}),(0,E.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:`GUI 截屏 + 鼠标键盘操控(Windows)。每次调用需审批;需要视觉模型读屏。`})]})]}),(0,E.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":!!V,disabled:_e,onClick:()=>void Oe(),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:opacity-50 ${V?`bg-accent-blue`:`bg-dark-border`}`,children:_e?(0,E.jsx)(o,{size:12,className:`absolute start-[7px] top-[3px] animate-spin text-accent-fg`}):(0,E.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${V?`translate-x-[18px]`:`translate-x-0.5`}`})})]}),ve?(0,E.jsx)(`div`,{className:`text-xs text-accent-red bg-accent-red/10 border border-accent-red/30 rounded-lg px-3 py-2`,children:ve}):null,(0,E.jsxs)(`div`,{className:`pt-3 border-t border-dark-border space-y-2`,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,E.jsxs)(`div`,{className:`min-w-0 flex items-start gap-2`,children:[(0,E.jsx)(p,{size:16,className:`text-accent-blue mt-0.5 shrink-0`}),(0,E.jsxs)(`div`,{className:`min-w-0`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,E.jsx)(`span`,{className:`text-sm text-dark-text`,children:e(`connectors.phoneTitle`)}),q?Ve(q):null]}),(0,E.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`connectors.phoneDesc`)})]})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,E.jsxs)(`button`,{type:`button`,onClick:()=>void je(),disabled:Ce,className:`inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-meta bg-dark-bg border border-dark-border text-dark-muted hover:bg-dark-hover transition-colors disabled:opacity-50`,children:[Ce?(0,E.jsx)(o,{size:11,className:`animate-spin`}):(0,E.jsx)(v,{size:11}),e(Ce?`connectors.phoneChecking`:q?`connectors.phoneRecheck`:`connectors.phoneCheck`)]}),(0,E.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":!!W,disabled:be,onClick:()=>void Ae(),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:opacity-50 ${W?`bg-accent-blue`:`bg-dark-border`}`,children:be?(0,E.jsx)(o,{size:12,className:`absolute start-[7px] top-[3px] animate-spin text-accent-fg`}):(0,E.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${W?`translate-x-[18px]`:`translate-x-0.5`}`})})]})]}),q?(0,E.jsx)(`div`,{className:`rounded-lg border px-3 py-2 text-xs ${q.stage===`ready`?`bg-accent-green/10 border-accent-green/30 text-accent-green`:q.stage===`adb-missing`||q.stage===`adb-error`?`bg-accent-red/10 border-accent-red/30 text-accent-red`:`bg-accent-yellow/10 border-accent-yellow/30 text-accent-yellow`}`,children:(0,E.jsxs)(`div`,{className:`flex items-start gap-2`,children:[q.stage===`ready`?(0,E.jsx)(_,{size:13,className:`mt-0.5 shrink-0`}):(0,E.jsx)(d,{size:13,className:`mt-0.5 shrink-0`}),(0,E.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,E.jsx)(`div`,{children:Ue(q)}),He(q.stage)>0?(0,E.jsx)(`ol`,{className:`space-y-0.5`,children:[1,2,3,4].map(t=>{let n=He(q.stage),r=t===1?{env:q.envKeys.binary}:t===4?{env:q.envKeys.serial}:{};return(0,E.jsxs)(`li`,{className:`flex items-start gap-1.5 ${t===n?`text-accent-yellow`:`text-dark-muted`}`,children:[(0,E.jsx)(`span`,{className:`shrink-0 tabular-nums`,children:t===n?`▶`:t+`.`}),(0,E.jsx)(`span`,{children:e(`connectors.phoneStep${t}`,r)})]},t)})}):null,q.devices.length>0?(0,E.jsx)(`div`,{className:`text-dark-muted`,children:e(`connectors.phoneDevices`,{list:q.devices.map(e=>`${e.serial} [${e.state}]${e.model?` · ${e.model}`:``}`).join(` | `)})}):null,q.stage!==`ready`&&q.reason?(0,E.jsx)(`div`,{className:`text-dark-muted break-words opacity-80`,children:q.reason}):null]})]})}):(0,E.jsx)(`div`,{className:`text-xs text-dark-muted ps-6`,children:e(`connectors.phoneConnectHint`)}),xe?(0,E.jsx)(`div`,{className:`text-xs text-accent-red bg-accent-red/10 border border-accent-red/30 rounded-lg px-3 py-2`,children:xe}):null]})]}),me?(0,E.jsxs)(`div`,{className:`mb-4 p-4 bg-dark-surface border border-dark-border rounded-lg`,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,E.jsx)(y,{size:15,className:`text-accent-purple`}),e(`connectors.customTitle`)]}),(0,E.jsx)(`div`,{className:`flex gap-1`,children:[[`stdio`,`🖥️ `+e(`connectors.customLocal`)],[`http`,`🌐 HTTP`],[`sse`,`📡 SSE`]].map(([e,t])=>(0,E.jsx)(`button`,{onClick:()=>B(t=>({...t,transport:e})),className:`px-3 py-1.5 rounded-lg text-xs transition-colors ${z.transport===e?`bg-accent-blue text-accent-fg`:`bg-dark-bg border border-dark-border hover:bg-dark-hover`}`,children:t},e))})]}),(0,E.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customName`)}),(0,E.jsx)(`input`,{value:z.name,onChange:e=>B(t=>({...t,name:e.target.value})),placeholder:`my-server`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),z.transport===`stdio`?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customCommand`)}),(0,E.jsx)(`input`,{value:z.command,onChange:e=>B(t=>({...t,command:e.target.value})),placeholder:`npx -y @some/mcp-server`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customArgs`)}),(0,E.jsx)(`input`,{value:z.args,onChange:e=>B(t=>({...t,args:e.target.value})),placeholder:`--arg value`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]})]}):(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customUrl`)}),(0,E.jsx)(`input`,{value:z.url,onChange:e=>B(t=>({...t,url:e.target.value})),placeholder:`https://mcp.example.com/mcp`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),z.transport===`stdio`?(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customEnv`)}),(0,E.jsx)(`input`,{value:z.env,onChange:e=>B(t=>({...t,env:e.target.value})),placeholder:`KEY=value, KEY2=value2`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}):(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customHeaders`)}),(0,E.jsx)(`input`,{value:z.headers,onChange:e=>B(t=>({...t,headers:e.target.value})),placeholder:`Authorization=Bearer xxx`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]})]}),(0,E.jsxs)(`div`,{className:`flex gap-2 mt-3`,children:[(0,E.jsx)(x,{variant:`accent`,onClick:()=>void Fe(),loading:!!M.__add,children:e(`connectors.add`)}),(0,E.jsx)(`button`,{onClick:()=>he(!1),className:`px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm`,children:e(`common.cancel`)})]})]}):null,(0,E.jsx)(`div`,{className:`flex gap-1 mb-3`,children:[[`all`,`${e(`connectors.all`)} (${Z.length})`],[`lsp`,`LSP (${Z.filter(e=>e.kind===`lsp`).length})`],[`mcp`,`MCP (${Z.filter(e=>e.kind===`mcp`).length})`]].map(([e,t])=>(0,E.jsx)(`button`,{onClick:()=>ue(e),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${L===e?`bg-accent-blue text-accent-fg`:`bg-dark-surface border border-dark-border hover:bg-dark-hover`}`,children:t},e))}),(0,E.jsx)(`div`,{className:`flex gap-3 mb-3`,children:(0,E.jsxs)(`div`,{className:`flex-1 relative`,children:[(0,E.jsx)(v,{size:16,className:`absolute start-3 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,E.jsx)(`input`,{type:`text`,value:F,onChange:e=>ce(e.target.value),placeholder:e(`connectors.searchPlaceholder`),className:`w-full ps-10 pe-4 py-2 bg-dark-surface border border-dark-border rounded-lg text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]})}),(0,E.jsxs)(`div`,{className:`flex gap-1 mb-4 flex-wrap`,children:[(0,E.jsxs)(`button`,{onClick:()=>le(null),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${I?`bg-dark-surface border border-dark-border hover:bg-dark-hover`:`bg-accent-blue text-accent-fg`}`,children:[e(`connectors.all`),` `,(0,E.jsxs)(`span`,{className:`opacity-70 text-xs`,children:[`(`,$.length,`)`]})]}),Xe.map(e=>{let t=$.filter(t=>t.category===e).length;return(0,E.jsxs)(`button`,{onClick:()=>le(I===e?null:e),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${I===e?`bg-accent-blue text-accent-fg`:`bg-dark-surface border border-dark-border hover:bg-dark-hover`}`,children:[k[e]??e,` `,(0,E.jsxs)(`span`,{className:`opacity-70 text-xs`,children:[`(`,t,`)`]})]},e)})]}),se?(0,E.jsx)(`div`,{className:`mb-4 px-3 py-2 bg-accent-red/10 border border-accent-red/30 rounded-lg text-accent-red text-sm`,children:se}):null,(0,E.jsx)(`div`,{children:Ye.length===0?(0,E.jsxs)(`div`,{className:`text-center text-dark-muted text-sm py-10`,children:[(0,E.jsx)(v,{size:24,className:`mx-auto mb-2 opacity-50`}),e(`connectors.noResults`)]}):(0,E.jsx)(`div`,{className:`space-y-2`,children:Ye.map(e=>Qe(e))})})]})}export{j as ConnectorsView};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{Cr as t,En as n,Kr as r,Sr as i,Wn as a,Z as o,cn as s,m as c,nt as l,q as u,vn as d,xr as f}from"./icons-CYDRRPKW.js";import{t as ee}from"./react-vendor-CB4cLN-6.js";import{t as p}from"./useTranslation-B-mfApCn.js";import{c as m,s as h,t as g}from"./useConfirm-Da8iQ_DZ.js";import{t as _}from"./api-plEYhRn0.js";import{I as v}from"./markdown-N5__3T-w.js";var y=e(r(),1),b=v();function te(e){return{ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,py:`python`,rs:`rust`,go:`go`,rb:`ruby`,json:`json`,xml:`xml`,html:`html`,css:`css`,scss:`scss`,md:`markdown`,yaml:`yaml`,yml:`yaml`,toml:`toml`,sql:`sql`,sh:`shell`,bat:`bat`,ps1:`powershell`,dockerfile:`dockerfile`,properties:`properties`,c:`c`,cpp:`cpp`,h:`c`,hpp:`cpp`,cs:`csharp`,vue:`html`,svelte:`html`,svg:`xml`}[e.split(`.`).pop()?.toLowerCase()||``]||`plaintext`}function x(){let{t:e}=p(),[r,v]=g(),[x,S]=(0,y.useState)([]),[C,w]=(0,y.useState)(null),[T,E]=(0,y.useState)(``),[ne,D]=(0,y.useState)(``),[O,k]=(0,y.useState)(!1),[A,j]=(0,y.useState)(``),[M,N]=(0,y.useState)(!1),[P,F]=(0,y.useState)(!1),[I,L]=(0,y.useState)(!1),[R,z]=(0,y.useState)(``),B=(0,y.useRef)(null);(0,y.useEffect)(()=>{C?(k(!0),_.files.read(C).then(t=>{if(t.success&&t.data){let e=typeof t.data==`string`?t.data:JSON.stringify(t.data);E(e),D(e)}else m.error(t.error||e(`fileTree.readFail`))}).catch(()=>m.error(e(`fileTree.readFail`))).finally(()=>k(!1))):(E(``),D(``))},[C]);let V=async e=>{N(!0);try{let t=await _.files.list(e);t.success&&Array.isArray(t.data)&&S(t.data.map(e=>({...e,expanded:!1})))}finally{N(!1)}},H=async e=>{if(e.type===`directory`)try{let t=await _.files.list(e.path);if(t.success&&Array.isArray(t.data)){let n=t.data.map(e=>({...e,expanded:!1}));S(t=>U(t,e.id,n))}}catch{}},U=(e,t,n)=>e.map(e=>e.id===t?{...e,children:n,expanded:!0}:e.children?{...e,children:U(e.children,t,n)}:e);(0,y.useEffect)(()=>{V()},[]);let W=e=>{let t=K(x,e);t&&t.type===`directory`&&!t.children?H(t):S(t=>G(t,e))},G=(e,t)=>e.map(e=>e.id===t&&e.type===`directory`?{...e,expanded:!e.expanded}:e.children?{...e,children:G(e.children,t)}:e),K=(e,t)=>{for(let n of e){if(n.id===t)return n;if(n.children){let e=K(n.children,t);if(e)return e}}return null},q=(e,t)=>t?e.reduce((e,n)=>{if(n.name.toLowerCase().includes(t.toLowerCase()))e.push(n);else if(n.children){let r=q(n.children,t);r.length>0&&e.push({...n,children:r,expanded:!0})}return e},[]):e,J=(0,y.useCallback)(async()=>{if(C){F(!0);try{let t=await _.files.update(C,T);t.success?(D(T),m.success(e(`fileTree.saved`))):m.error(t.error||e(`fileTree.saveFail`))}catch{m.error(e(`fileTree.saveFail`))}finally{F(!1)}}},[C,T,e]),Y=()=>{w(null),E(``),D(``)},X=(0,y.useCallback)(async t=>{let n=await _.files.download(t);n.success?m.success(e(`fileTree.downloadStarted`)):m.error(n.error||e(`fileTree.downloadFail`))},[e]),re=()=>B.current?.click(),ie=(0,y.useCallback)(async t=>{if(!t||t.length===0)return;let n=R||(C?C.replace(/[\\/][^\\/]+$/,``):``);L(!0);let r=0,i=0;for(let e of Array.from(t)){let t=n?`${n}/${e.name}`:e.name;(await _.files.upload(e,t)).success?r++:i++}L(!1),r>0&&m.success(e(`fileTree.uploadedCount`,{count:r})),i>0&&m.error(e(`fileTree.uploadFailedCount`,{count:i})),await V()},[R,C,e]),Z=T!==ne,Q=async()=>!Z||v({message:e(`fileTree.discardConfirm`,{file:C||``}),variant:`danger`}),ae=async()=>{await Q()&&Y()},$=(n,r=0)=>{let i=n.type===`directory`,o=C===n.path,s=R===n.path;return(0,b.jsxs)(`div`,{children:[(0,b.jsxs)(`div`,{className:`group flex items-center gap-1 px-2 py-0.5 cursor-pointer rounded text-xs transition-colors ${o?`bg-accent-blue/20 text-accent-blue`:s?`bg-accent-blue/10`:`hover:bg-dark-hover`}`,style:{paddingLeft:`${r*14+6}px`},onClick:()=>i?(z(n.path),W(n.id)):w(n.path),title:i?e(`fileTree.setUploadDirHint`):n.path,children:[i&&(0,b.jsx)(`span`,{className:`text-dark-muted shrink-0`,children:n.expanded?(0,b.jsx)(t,{size:12}):(0,b.jsx)(f,{size:12})}),i?(0,b.jsx)(d,{size:12,className:`text-accent-yellow shrink-0`}):(0,b.jsx)(`span`,{className:`w-3`}),(0,b.jsx)(`span`,{className:`truncate flex-1`,children:n.name}),!i&&(0,b.jsx)(`button`,{onClick:e=>{e.stopPropagation(),X(n.path)},className:`opacity-0 group-hover:opacity-100 p-0.5 rounded hover:bg-dark-border text-dark-muted hover:text-dark-text shrink-0`,title:e(`fileTree.download`),children:(0,b.jsx)(a,{size:11})})]}),i&&n.expanded&&n.children?.map(e=>$(e,r+1))]},n.id)},oe=A?q(x,A):x;return(0,b.jsxs)(`div`,{className:`flex-1 flex overflow-hidden`,children:[r,(0,b.jsxs)(`div`,{className:h(`flex flex-col overflow-hidden flex-1 min-h-0`,C&&`hidden`),children:[(0,b.jsx)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-dark-border`,children:(0,b.jsxs)(`div`,{className:`flex items-center gap-0.5 ms-auto`,children:[(0,b.jsx)(`button`,{onClick:re,disabled:I,className:`p-1 rounded hover:bg-dark-hover disabled:opacity-50`,title:R?e(`fileTree.uploadTo`,{dir:R}):e(`fileTree.uploadToRoot`),children:(0,b.jsx)(c,{size:12,className:I?`animate-pulse`:``})}),(0,b.jsx)(`button`,{onClick:()=>V(),disabled:M,className:`p-1 rounded hover:bg-dark-hover`,title:e(`fileTree.refresh`),children:(0,b.jsx)(l,{size:12,className:M?`animate-spin`:``})}),(0,b.jsx)(`button`,{onClick:()=>{(async()=>{await Q()&&(S(x.map(e=>({...e,expanded:!1}))),Y())})()},className:`p-1 rounded hover:bg-dark-hover`,title:e(`fileTree.collapse`),children:(0,b.jsx)(s,{size:12})})]})}),(0,b.jsx)(`div`,{className:`p-1.5 border-b border-dark-border`,children:(0,b.jsxs)(`div`,{className:`relative`,children:[(0,b.jsx)(u,{size:12,className:`absolute start-2 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,b.jsx)(`input`,{type:`text`,value:A,onChange:e=>j(e.target.value),placeholder:e(`fileTree.searchPlaceholder`),className:`w-full ps-6 pe-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:border-accent-blue focus:outline-none`})]})}),(0,b.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar py-1`,children:oe.map(e=>$(e))}),(0,b.jsx)(`input`,{ref:B,type:`file`,multiple:!0,className:`hidden`,onChange:e=>{ie(e.target.files),e.currentTarget.value=``}})]}),(0,b.jsx)(`div`,{className:h(`flex-1 flex flex-col min-w-0 bg-dark-bg`,!C&&`hidden`),children:C?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-1.5 border-b border-dark-border bg-dark-surface`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2 text-xs min-w-0`,children:[(0,b.jsx)(`button`,{onClick:()=>void ae(),className:`p-0.5 -ms-1 rounded hover:bg-dark-hover text-dark-muted hover:text-dark-text shrink-0`,title:e(`fileTree.backToList`),"aria-label":e(`fileTree.backToList`),"data-testid":`file-tree-back`,children:(0,b.jsx)(i,{size:13})}),(0,b.jsx)(n,{size:12,className:`text-dark-muted shrink-0`}),(0,b.jsx)(`span`,{className:`truncate`,children:C}),Z&&(0,b.jsxs)(`span`,{className:`text-accent-yellow text-badge shrink-0`,children:[`● `,e(`fileTree.modified`)]})]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,b.jsxs)(`button`,{onClick:J,disabled:!Z||P,className:`px-2 py-0.5 text-badge rounded flex items-center gap-1 transition-colors ${Z?`bg-accent-green text-accent-fg hover:opacity-90`:`bg-dark-border text-dark-muted cursor-not-allowed`}`,children:[(0,b.jsx)(o,{size:10}),e(P?`fileTree.saving`:`fileTree.save`)]}),(0,b.jsx)(`button`,{onClick:()=>void X(C),className:`p-1 rounded hover:bg-dark-hover`,title:e(`fileTree.download`),children:(0,b.jsx)(a,{size:12})})]})]}),(0,b.jsx)(`div`,{className:`flex-1 min-h-0`,children:O?(0,b.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,b.jsx)(`div`,{className:`w-4 h-4 border-2 border-accent-blue border-t-transparent rounded-full animate-spin`})}):(0,b.jsx)(ee,{language:te(C),value:T,onChange:e=>E(e||``),theme:`vs-dark`,options:{fontSize:13,fontFamily:`"Cascadia Code", "Fira Code", Consolas, monospace`,minimap:{enabled:!0,renderCharacters:!1,maxColumn:80,showSlider:`mouseover`},lineNumbers:`on`,scrollBeyondLastLine:!1,wordWrap:`on`,automaticLayout:!0,tabSize:2}})})]}):(0,b.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,b.jsxs)(`div`,{className:`text-center`,children:[(0,b.jsx)(n,{size:32,className:`text-dark-muted mx-auto mb-2`}),(0,b.jsx)(`p`,{className:`text-sm text-dark-muted`,children:e(`fileTree.selectFileHint`)})]})})})]})}export{x as FileTreeView};
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{B as t,Cr as n,E as r,Kr as i,O as a,Sr as o,Wn as s,Y as c,Yt as l,_ as u,dt as d,gt as f,k as p,lt as m,m as h,n as g,nt as _,v,xr as y,y as b}from"./icons-CYDRRPKW.js";import{t as x}from"./useTranslation-B-mfApCn.js";import{n as S}from"./state-CSZ50keL.js";import{a as C,o as w,r as T,t as E}from"./useConfirm-Da8iQ_DZ.js";import{t as D}from"./api-plEYhRn0.js";import{I as O}from"./markdown-N5__3T-w.js";import"./common-Bbatsa0-.js";var k=e(i(),1),A=S((e,t)=>({rules:[],templates:[],stats:null,events:[],agents:[],loading:!1,error:null,fieldErrors:null,formOpen:!1,editingRule:null,draftRule:null,dryRunResult:null,loadRules:async()=>{let t=await D.hooks.list();t.success&&Array.isArray(t.data)?e({rules:t.data}):t.success&&t.data&&!Array.isArray(t.data)?e({error:`服务端返回的规则数据格式异常`}):e({error:t.error||`Failed to load rules`})},loadTemplates:async()=>{let t=await D.hooks.templates();t.success&&Array.isArray(t.data)?e({templates:t.data}):t.success&&t.data&&!Array.isArray(t.data)&&e({error:`服务端返回的模板数据格式异常`})},loadStats:async()=>{let t=await D.hooks.stats();t.success&&t.data&&e({stats:t.data})},loadEvents:async()=>{let t=await D.hooks.events();t.success&&Array.isArray(t.data)?e({events:t.data}):t.success&&t.data&&!Array.isArray(t.data)&&e({error:`服务端返回的事件数据格式异常`})},loadAgents:async()=>{let t=await D.hooks.agents();t.success&&Array.isArray(t.data)?e({agents:t.data}):t.success&&t.data&&!Array.isArray(t.data)&&e({error:`服务端返回的Agent数据格式异常`})},loadAll:async()=>{e({loading:!0,error:null});try{await Promise.all([t().loadRules(),t().loadTemplates(),t().loadStats(),t().loadEvents(),t().loadAgents()])}catch(t){e({error:String(t)})}finally{e({loading:!1})}},createRule:async n=>{e({fieldErrors:null});let r=await D.hooks.create(n);if(r.success)return await t().loadRules(),await t().loadStats(),e({formOpen:!1,editingRule:null}),!0;if(r.error){e({error:r.error});try{let t=JSON.parse(r.error);t.fieldErrors&&e({fieldErrors:t.fieldErrors})}catch{}}return!1},updateRule:async(n,r)=>{e({fieldErrors:null});let i=await D.hooks.update(n,r);return i.success?(await t().loadRules(),await t().loadStats(),e({formOpen:!1,editingRule:null}),!0):(e({error:i.error||`Update failed`}),!1)},deleteRule:async n=>{let r=await D.hooks.delete(n);return r.success?(await t().loadRules(),await t().loadStats(),!0):(e({error:r.error||`Delete failed`}),!1)},batchDelete:async n=>{let r=await D.hooks.batchDelete(n);return r.success?(await t().loadRules(),await t().loadStats(),!0):(e({error:r.error||`Batch delete failed`}),!1)},toggleRule:async(n,r)=>(await D.hooks.toggle(n,r)).success?(e(e=>({rules:e.rules.map(e=>e.name===n?{...e,enabled:r}:e)})),await t().loadStats(),!0):(await t().loadRules(),!1),batchToggle:async(n,r)=>(await D.hooks.batchToggle(n,r)).success?(e(e=>({rules:e.rules.map(e=>n.includes(e.name)?{...e,enabled:r}:e)})),await t().loadStats(),!0):(await t().loadRules(),!1),dryRun:async t=>{let n=await D.hooks.dryRun(t);return n.success&&n.data?(e({dryRunResult:n.data}),n.data):(e({error:n.error||`Dry-run failed`}),null)},openForm:t=>e({formOpen:!0,editingRule:t||null,draftRule:null,dryRunResult:null,fieldErrors:null}),openFormFromTemplate:(t,n)=>e({formOpen:!0,editingRule:null,draftRule:{...t.rule,description:n||t.rule.description},dryRunResult:null,fieldErrors:null}),closeForm:()=>e({formOpen:!1,editingRule:null,draftRule:null,dryRunResult:null,fieldErrors:null}),setDryRunResult:t=>e({dryRunResult:t}),clearError:()=>e({error:null}),clearFieldErrors:()=>e({fieldErrors:null})})),j=O(),M={SYSTEM:`bg-accent-red/15 text-accent-red`,SECURITY:`bg-accent-orange/15 text-accent-orange`,PROJECT:`bg-accent-blue/15 text-accent-blue`,USER:`bg-accent-green/15 text-accent-green`,PLUGIN:`bg-accent-purple/15 text-accent-purple`},N={SHELL:`bg-accent-yellow/15 text-accent-yellow`,HTTP:`bg-accent-cyan/15 text-accent-cyan`,PROMPT:`bg-accent-purple/15 text-accent-purple`,AGENT:`bg-accent-blue/15 text-accent-blue`};function P({rules:e,onEdit:t}){let{t:n}=x(),[i,o]=E(),{toggleRule:s,deleteRule:c,batchDelete:l,batchToggle:d}=A(),[p,m]=(0,k.useState)(new Set),[h,g]=(0,k.useState)(!1),_=Array.isArray(e)?e:[];if(_.length===0)return(0,j.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3 py-16 text-dark-muted`,children:[(0,j.jsx)(`div`,{className:`text-4xl opacity-60`,children:`🪝`}),(0,j.jsx)(`p`,{className:`text-sm`,children:n(`hook.noRules`)}),(0,j.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:n(`hook.noRulesHint`)})]});let v=e=>{let t=new Set(p);t.has(e)?t.delete(e):t.add(e),m(t),g(t.size===_.length)},y=()=>{h?(m(new Set),g(!1)):(m(new Set(_.map(e=>e.name))),g(!0))},b=async()=>{p.size!==0&&await o({message:n(`hook.batchDeleteConfirm`,{n:p.size}),variant:`danger`})&&(l(Array.from(p)),m(new Set),g(!1))},S=e=>{p.size!==0&&(d(Array.from(p),e),m(new Set),g(!1))};return(0,j.jsxs)(`div`,{className:`flex flex-1 flex-col min-h-0`,children:[i,p.size>0&&(0,j.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 rounded-lg border border-accent-blue/30 bg-accent-blue/5 px-3 py-1.5 text-sm`,children:[(0,j.jsx)(`span`,{className:`text-dark-muted`,children:n(`hook.selectedItems`,{n:p.size})}),(0,j.jsx)(`button`,{onClick:()=>S(!0),className:`rounded bg-accent-green/15 px-2 py-0.5 text-accent-green transition-colors hover:bg-accent-green/25`,children:n(`hook.enableAll`)}),(0,j.jsx)(`button`,{onClick:()=>S(!1),className:`rounded bg-dark-hover px-2 py-0.5 text-dark-text transition-colors hover:bg-dark-border`,children:n(`hook.disableAll`)}),(0,j.jsx)(`button`,{onClick:()=>void b(),className:`rounded bg-accent-red/15 px-2 py-0.5 text-accent-red transition-colors hover:bg-accent-red/25`,children:n(`common.delete`)})]}),(0,j.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto custom-scrollbar rounded-xl border border-dark-border`,children:(0,j.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,j.jsx)(`thead`,{className:`sticky top-0 bg-dark-hover text-dark-muted`,children:(0,j.jsxs)(`tr`,{children:[(0,j.jsx)(`th`,{className:`w-8 p-2.5`,children:(0,j.jsx)(`button`,{onClick:y,children:h?(0,j.jsx)(a,{size:14}):(0,j.jsx)(r,{size:14})})}),(0,j.jsx)(`th`,{className:`p-2.5 text-start font-medium`,children:n(`hook.colName`)}),(0,j.jsx)(`th`,{className:`p-2.5 text-start font-medium`,children:n(`hook.colEvents`)}),(0,j.jsx)(`th`,{className:`p-2.5 text-start font-medium`,children:n(`hook.colType`)}),(0,j.jsx)(`th`,{className:`p-2.5 text-start font-medium`,children:n(`hook.fieldPriority`)}),(0,j.jsx)(`th`,{className:`p-2.5 text-start font-medium`,children:n(`hook.colStatus`)}),(0,j.jsx)(`th`,{className:`p-2.5 text-end font-medium`,children:n(`hook.colActions`)})]})}),(0,j.jsx)(`tbody`,{className:`divide-y divide-dark-border`,children:_.map(e=>(0,j.jsxs)(`tr`,{className:`transition-colors hover:bg-dark-hover/50`,children:[(0,j.jsx)(`td`,{className:`p-2.5`,children:(0,j.jsx)(`button`,{onClick:()=>v(e.name),children:p.has(e.name)?(0,j.jsx)(a,{size:14,className:`text-accent-blue`}):(0,j.jsx)(r,{size:14,className:`text-dark-muted`})})}),(0,j.jsxs)(`td`,{className:`p-2.5`,children:[(0,j.jsx)(`div`,{className:`font-medium text-dark-text`,children:e.name}),e.description&&(0,j.jsx)(`div`,{className:`mt-0.5 max-w-[220px] truncate text-xs text-dark-muted`,children:e.description})]}),(0,j.jsx)(`td`,{className:`p-2.5`,children:(0,j.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[Array.isArray(e.events)&&e.events.slice(0,3).map(e=>(0,j.jsx)(`span`,{className:`rounded bg-dark-hover px-1.5 py-0.5 text-xs text-dark-text`,children:e},e)),Array.isArray(e.events)&&e.events.length>3&&(0,j.jsxs)(`span`,{className:`px-1 py-0.5 text-xs text-dark-muted`,children:[`+`,e.events.length-3]})]})}),(0,j.jsx)(`td`,{className:`p-2.5`,children:(0,j.jsx)(`span`,{className:`rounded px-1.5 py-0.5 text-xs font-medium ${N[e.implementationType]||`bg-dark-hover text-dark-muted`}`,children:e.implementationType})}),(0,j.jsx)(`td`,{className:`p-2.5`,children:(0,j.jsx)(`span`,{className:`rounded px-1.5 py-0.5 text-xs font-medium ${M[e.priority]||`bg-dark-hover text-dark-muted`}`,children:e.priority})}),(0,j.jsx)(`td`,{className:`p-2.5`,children:(0,j.jsx)(`button`,{onClick:()=>s(e.name,!e.enabled),className:`relative h-5 w-9 rounded-full transition-colors ${e.enabled?`bg-accent-green`:`bg-dark-border`}`,title:e.enabled?n(`hook.clickToDisable`):n(`hook.clickToEnable`),children:(0,j.jsx)(`span`,{className:`absolute top-0.5 block h-3.5 w-3.5 rounded-full bg-white transition-all ${e.enabled?`start-[18px]`:`start-[2px]`}`})})}),(0,j.jsx)(`td`,{className:`p-2.5`,children:(0,j.jsxs)(`div`,{className:`flex items-center justify-end gap-1`,children:[(0,j.jsx)(`button`,{onClick:()=>t(e),className:`rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-blue`,title:n(`hook.actionEdit`),children:(0,j.jsx)(f,{size:14})}),(0,j.jsx)(`button`,{onClick:()=>{(async()=>{await o({message:n(`hook.deleteRuleConfirm`,{name:e.name}),variant:`danger`})&&c(e.name)})()},className:`rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-red`,title:n(`common.delete`),children:(0,j.jsx)(u,{size:14})})]})})]},e.name))})]})})]})}var F={name:``,description:``,events:[],implementationType:`SHELL`,command:``,url:``,promptTemplate:``,agentName:``,priority:`USER`,tools:[],matcherToolNamePattern:``,matcherFromState:``,matcherToState:``,timeoutMs:3e4,enabled:!0,failOpen:!0,onFailure:`fail-open`,scope:`project`},I=[{value:`SYSTEM`,label:`SYSTEM (100)`},{value:`SECURITY`,label:`SECURITY (80)`},{value:`PROJECT`,label:`PROJECT (60)`},{value:`USER`,label:`USER (40)`},{value:`PLUGIN`,label:`PLUGIN (20)`}],L=e=>`w-full rounded-lg border bg-dark-bg px-3 py-2 text-sm text-dark-text placeholder-dark-muted/60 transition-colors focus:outline-none focus:ring-2 ${e?`border-accent-red focus:border-accent-red focus:ring-accent-red/20`:`border-dark-border focus:border-accent-blue focus:ring-accent-blue/20`}`,R=`mb-1 block text-xs font-medium text-dark-muted`;function z({isOpen:e,events:t,agents:n}){let{t:r}=x(),{editingRule:i,draftRule:a,fieldErrors:s,dryRunResult:c,createRule:l,updateRule:u,closeForm:f,dryRun:p,setDryRunResult:m,clearFieldErrors:h}=A(),{visible:_,phase:v}=w(e),b=[{value:`SHELL`,label:r(`hook.implShell`),desc:r(`hook.implShellDesc`)},{value:`HTTP`,label:r(`hook.implHttp`),desc:r(`hook.implHttpDesc`)},{value:`PROMPT`,label:`LLM Prompt`,desc:r(`hook.implPromptDesc`)},{value:`AGENT`,label:`AI Agent`,desc:r(`hook.implAgentDesc`)}],S=Array.isArray(t)?t:[],T=Array.isArray(n)?n:[],[E,D]=(0,k.useState)(0),[O,M]=(0,k.useState)(F),[N,P]=(0,k.useState)(``),[z,B]=(0,k.useState)(``),[V,H]=(0,k.useState)(``),U=i??a;(0,k.useEffect)(()=>{if(!e)return;D(0),P(``),M(U?{name:U.name,description:U.description||``,events:U.events,implementationType:U.implementationType,command:U.command||``,url:U.url||``,promptTemplate:U.promptTemplate||``,agentName:U.agentName||``,priority:U.priority,tools:U.tools||[],matcherToolNamePattern:U.matchers?.toolNamePattern||``,matcherFromState:U.matchers?.fromState||``,matcherToState:U.matchers?.toState||``,timeoutMs:U.timeoutMs,enabled:U.enabled,failOpen:U.failOpen,onFailure:U.onFailure||(U.failOpen?`fail-open`:`block`),scope:U.scope||`project`}:F);let t=(U?.matchers?.toolNamePattern||``).trim().replace(/^\^|\$$/g,``);B(/^[A-Za-z0-9_]+$/.test(t)?t:``),H(``)},[e,U]);let W=(e,t)=>{M(n=>({...n,[e]:t})),h()},G=e=>{M(t=>({...t,events:t.events.includes(e)?t.events.filter(t=>t!==e):[...t.events,e]}))},K=e=>{e.every(e=>O.events.includes(e))?M(t=>({...t,events:t.events.filter(t=>!e.includes(t))})):M(t=>({...t,events:[...new Set([...t.events,...e])]}))},q=async()=>{let e={};O.matcherToolNamePattern&&(e.toolNamePattern=O.matcherToolNamePattern),O.matcherFromState&&(e.fromState=O.matcherFromState),O.matcherToState&&(e.toState=O.matcherToState);let t={...O,tools:O.tools.length>0?O.tools:[]};t.matchers=e,delete t.matcherToolNamePattern,delete t.matcherFromState,delete t.matcherToState,i?await u(i.name,t):await l(t)},J=async()=>{m(null);let e={};O.matcherToolNamePattern&&(e.toolNamePattern=O.matcherToolNamePattern),await p({hook:{name:O.name||`dry-run`,description:O.description,events:O.events,implementationType:O.implementationType,command:O.command,url:O.url,promptTemplate:O.promptTemplate,agentName:O.agentName,priority:O.priority,tools:O.tools,matchers:e,timeoutMs:O.timeoutMs,enabled:!0,failOpen:O.failOpen,onFailure:O.onFailure,scope:O.scope},eventType:O.events[0]||`PRE_TOOL_USE`,toolName:z.trim(),toolInput:V.trim()})},Y=N?S.map(e=>({...e,events:Array.isArray(e.events)?e.events.filter(e=>e.name.toLowerCase().includes(N.toLowerCase())||e.summary.includes(N)):[]})).filter(e=>e.events.length>0):S,X=[{title:r(`hook.stepBasicTitle`),desc:r(`hook.stepBasicDesc`)},{title:r(`hook.stepImplTitle`),desc:r(`hook.stepImplDesc`)},{title:r(`hook.stepAdvancedTitle`),desc:r(`hook.stepAdvancedDesc`)}];return _?(0,j.jsxs)(`div`,{className:`fixed inset-0 z-50 flex justify-end`,children:[(0,j.jsx)(`div`,{className:`absolute inset-0 ui-scrim ui-overlay-backdrop`,"data-phase":v,onClick:f}),(0,j.jsxs)(`div`,{className:`relative flex h-full w-[560px] flex-col border-s border-dark-border bg-dark-bg shadow-2xl ui-overlay-panel-edge`,"data-phase":v,children:[(0,j.jsxs)(`div`,{className:`flex flex-shrink-0 items-center justify-between border-b border-dark-border px-4 py-3.5`,children:[(0,j.jsx)(`h3`,{className:`text-base font-semibold text-dark-text`,children:i?r(`hook.editRule`,{name:i.name}):r(`hook.addRule`)}),(0,j.jsx)(`button`,{onClick:f,className:`rounded-lg p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,children:(0,j.jsx)(g,{size:18})})]}),(0,j.jsx)(`div`,{className:`flex flex-shrink-0 border-b border-dark-border`,children:X.map((e,t)=>{let n=t===E,r=t<E;return(0,j.jsxs)(`button`,{onClick:()=>D(t),className:`relative flex-1 border-b-2 px-2 py-2.5 text-center text-xs transition-colors ${n?`border-accent-blue bg-accent-blue/5 text-accent-blue`:r?`border-transparent text-dark-text`:`border-transparent text-dark-muted hover:text-dark-text`}`,children:[(0,j.jsx)(`span`,{className:`me-1 inline-flex h-4 w-4 items-center justify-center rounded-full text-badge ${n?`bg-accent-blue text-accent-fg`:r?`bg-accent-green text-accent-fg`:`bg-dark-hover text-dark-muted`}`,children:r?`✓`:t+1}),(0,j.jsx)(`span`,{className:`font-medium`,children:e.title})]},e.title)})}),(0,j.jsxs)(`div`,{className:`flex-1 min-h-0 space-y-4 overflow-auto custom-scrollbar p-4`,children:[s&&Object.keys(s).length>0&&(0,j.jsx)(`div`,{className:`rounded-lg border border-accent-red/40 bg-accent-red/10 p-2.5 text-xs text-accent-red`,children:Object.entries(s).map(([e,t])=>(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`strong`,{children:[e,`:`]}),` `,t]},e))}),E===0&&(0,j.jsxs)(`div`,{className:`space-y-4`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:r(`hook.fieldName`)}),(0,j.jsx)(`input`,{value:O.name,onChange:e=>W(`name`,e.target.value),placeholder:`my-custom-hook`,className:L(s?.name)})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:r(`hook.fieldDescription`)}),(0,j.jsx)(`textarea`,{value:O.description,onChange:e=>W(`description`,e.target.value),placeholder:r(`hook.descriptionPlaceholder`),rows:2,className:L()})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:`Scope`}),(0,j.jsxs)(`select`,{value:O.scope,onChange:e=>W(`scope`,e.target.value),className:L(),children:[(0,j.jsx)(`option`,{value:`project`,children:`project (.agent/hooks.json)`}),(0,j.jsx)(`option`,{value:`user`,children:`user (~/.agent/hooks.json)`}),(0,j.jsx)(`option`,{value:`local`,children:`local (.agent/hooks.local.json)`})]})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`mb-1 flex items-center justify-between`,children:[(0,j.jsx)(`label`,{className:`text-xs font-medium text-dark-muted`,children:r(`hook.fieldEvents`)}),(0,j.jsx)(`span`,{className:`text-xs text-accent-blue`,children:r(`hook.eventsSelected`,{n:O.events.length})})]}),(0,j.jsx)(`input`,{value:N,onChange:e=>P(e.target.value),placeholder:r(`hook.searchEventsPlaceholder`),className:L()+` mb-2`}),(0,j.jsx)(`div`,{className:`max-h-[280px] space-y-2 overflow-auto custom-scrollbar rounded-lg border border-dark-border bg-dark-surface p-2`,children:Y.map(e=>(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`button`,{onClick:()=>K(e.events.map(e=>e.name)),className:`mb-1 text-xs font-medium text-dark-muted transition-colors hover:text-dark-text`,children:[e.category,` — `,r(`hook.toggleAllEvents`)]}),e.events.map(e=>{let t=O.events.includes(e.name);return(0,j.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 rounded px-1 py-1 transition-colors hover:bg-dark-hover`,children:[(0,j.jsx)(`input`,{type:`checkbox`,checked:t,onChange:()=>G(e.name),className:`h-3.5 w-3.5 accent-accent-blue`}),(0,j.jsx)(`span`,{className:`text-xs text-dark-text`,children:e.name}),(0,j.jsxs)(`span`,{className:`truncate text-xs text-dark-muted`,children:[`— `,e.summary]})]},e.name)})]},e.category))})]})]}),E===1&&(0,j.jsxs)(`div`,{className:`space-y-4`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:r(`hook.fieldImplType`)}),(0,j.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:b.map(e=>{let t=O.implementationType===e.value;return(0,j.jsxs)(`button`,{onClick:()=>W(`implementationType`,e.value),className:`rounded-lg border p-3 text-start transition-colors ${t?`border-accent-blue bg-accent-blue/10 ring-1 ring-accent-blue/30`:`border-dark-border bg-dark-surface hover:bg-dark-hover`}`,children:[(0,j.jsx)(`div`,{className:`text-sm font-medium ${t?`text-accent-blue`:`text-dark-text`}`,children:e.label}),(0,j.jsx)(`div`,{className:`mt-1 text-xs text-dark-muted`,children:e.desc})]},e.value)})})]}),O.implementationType===`SHELL`&&(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:r(`hook.fieldCommand`)}),(0,j.jsx)(`textarea`,{value:O.command,onChange:e=>W(`command`,e.target.value),placeholder:`python3 .agent/hooks/audit.py
2
- 或 node -e "…"(WINDOWS 下命令内不要出现第二个双引号)`,rows:4,spellCheck:!1,className:`resize-y font-mono leading-relaxed ${L(s?.command)}`})]}),O.implementationType===`HTTP`&&(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:`URL *`}),(0,j.jsx)(`input`,{value:O.url,onChange:e=>W(`url`,e.target.value),placeholder:`https://example.com/hooks/audit`,className:L(s?.url)})]}),O.implementationType===`PROMPT`&&(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:r(`hook.fieldPromptTemplate`)}),(0,j.jsx)(`textarea`,{value:O.promptTemplate,onChange:e=>W(`promptTemplate`,e.target.value),placeholder:r(`hook.promptTemplatePlaceholder`),rows:5,className:`font-mono ${L(s?.promptTemplate)}`})]}),O.implementationType===`AGENT`&&(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:`Agent *`}),(0,j.jsxs)(`select`,{value:O.agentName,onChange:e=>W(`agentName`,e.target.value),className:L(s?.agentName),children:[(0,j.jsx)(`option`,{value:``,children:r(`hook.selectAgentPlaceholder`)}),T.map(e=>(0,j.jsxs)(`option`,{value:e.id,children:[e.name,` (`,e.description,`)`]},e.id))]}),(0,j.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:r(`hook.agentReadOnlyHint`)})]})]}),E===2&&(0,j.jsxs)(`div`,{className:`space-y-4`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:r(`hook.fieldPriority`)}),(0,j.jsx)(`select`,{value:O.priority,onChange:e=>W(`priority`,e.target.value),className:L(),children:I.map(e=>(0,j.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,j.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:r(`hook.fieldTimeout`)}),(0,j.jsx)(`input`,{type:`number`,value:O.timeoutMs,onChange:e=>W(`timeoutMs`,parseInt(e.target.value)||3e4),min:100,max:3e5,step:1e3,className:L()})]}),(0,j.jsxs)(`div`,{className:`flex flex-col gap-2.5`,children:[(0,j.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-text`,children:[(0,j.jsx)(`input`,{type:`checkbox`,checked:O.enabled,onChange:e=>W(`enabled`,e.target.checked),className:`h-3.5 w-3.5 accent-accent-blue`}),r(`hook.labelEnabled`)]}),(0,j.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-text`,children:[(0,j.jsx)(`input`,{type:`checkbox`,checked:O.failOpen,onChange:e=>W(`failOpen`,e.target.checked),className:`h-3.5 w-3.5 accent-accent-blue`}),r(`hook.failOpenLabel`)]}),(0,j.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-text`,title:r(`hook.onFailureHint`),children:[(0,j.jsx)(`input`,{type:`checkbox`,checked:O.onFailure===`block`,onChange:e=>{let t=e.target.checked;M(e=>({...e,onFailure:t?`block`:`fail-open`,failOpen:!t&&e.failOpen})),h()},className:`h-3.5 w-3.5 accent-accent-blue`}),r(`hook.onFailureLabel`)]})]})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:r(`hook.fieldToolFilter`)}),(0,j.jsx)(`input`,{value:O.matcherToolNamePattern,onChange:e=>W(`matcherToolNamePattern`,e.target.value),placeholder:`Bash.*|FileWrite.*`,className:`font-mono ${L()}`})]}),O.events.some(e=>e.includes(`STATE`))&&(0,j.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:`From State`}),(0,j.jsx)(`input`,{value:O.matcherFromState,onChange:e=>W(`matcherFromState`,e.target.value),className:L()})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:`To State`}),(0,j.jsx)(`input`,{value:O.matcherToState,onChange:e=>W(`matcherToState`,e.target.value),className:L()})]})]}),c&&(0,j.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,j.jsx)(`div`,{className:`mb-2 text-xs font-medium text-dark-text`,children:r(`hook.dryRunResultTitle`)}),(0,j.jsxs)(`div`,{className:`space-y-1 text-xs`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`text-dark-muted`,children:r(`hook.dryRunDecision`)}),(0,j.jsx)(`span`,{className:String(c.decision).toUpperCase()===`ALLOW`?`text-accent-green`:String(c.decision).toUpperCase()===`DENY`?`text-accent-red`:`text-accent-yellow`,children:c.decision}),typeof c.durationMs==`number`&&(0,j.jsxs)(`span`,{className:`ms-2 text-dark-muted`,children:[c.durationMs,`ms`]})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`text-dark-muted`,children:r(`hook.dryRunReason`)}),(0,j.jsx)(`span`,{className:`text-dark-text`,children:c.reason})]}),c.contextOutput&&(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`text-dark-muted`,children:r(`hook.dryRunOutput`)}),(0,j.jsx)(`pre`,{className:`mt-1 max-h-40 overflow-auto whitespace-pre-wrap break-all font-mono text-meta text-dark-text`,children:c.contextOutput})]})]})]}),(0,j.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 md:grid-cols-2`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:r(`hook.dryRunSampleTool`)}),(0,j.jsx)(`input`,{value:z,onChange:e=>B(e.target.value),placeholder:`bash / write_file / apply_patch`,className:`font-mono ${L()}`})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:R,children:r(`hook.dryRunSampleInput`)}),(0,j.jsx)(`input`,{value:V,onChange:e=>H(e.target.value),placeholder:`{"command":"rm -rf /tmp/x"}`,className:`font-mono ${L()}`})]})]}),(0,j.jsxs)(`button`,{onClick:J,className:`inline-flex items-center gap-1.5 rounded-lg border border-dark-border bg-dark-surface px-3 py-1.5 text-xs text-dark-text transition-colors hover:bg-dark-hover`,children:[(0,j.jsx)(d,{size:12}),` `,r(`hook.dryRunButton`)]})]})]}),(0,j.jsxs)(`div`,{className:`flex flex-shrink-0 items-center justify-between border-t border-dark-border px-4 py-3`,children:[(0,j.jsx)(`div`,{className:`flex gap-2`,children:E>0&&(0,j.jsx)(C,{size:`sm`,onClick:()=>D(E-1),leftIcon:(0,j.jsx)(o,{size:14}),children:r(`hook.prevStep`)})}),(0,j.jsxs)(`div`,{className:`flex gap-2`,children:[(0,j.jsx)(C,{size:`sm`,onClick:f,children:r(`common.cancel`)}),E<2?(0,j.jsx)(C,{size:`sm`,variant:`accent`,onClick:()=>D(E+1),rightIcon:(0,j.jsx)(y,{size:14}),children:r(`hook.nextStep`)}):(0,j.jsx)(C,{size:`sm`,variant:`accent`,onClick:q,children:r(i?`hook.saveChanges`:`hook.createRule`)})]})]})]})]}):null}function B({stats:e}){let{t}=x();if(!e)return null;let n=[{id:`total`,label:t(`hook.statTotal`),value:e.totalHooks,icon:l,iconWrap:`bg-accent-blue/15 text-accent-blue`},{id:`enabled`,label:t(`common.enabled`),value:e.enabledCount,icon:v,iconWrap:`bg-accent-green/15 text-accent-green`},{id:`disabled`,label:t(`common.disabled`),value:e.disabledCount,icon:b,iconWrap:`bg-dark-hover text-dark-muted`}];return(0,j.jsx)(`div`,{className:`grid grid-cols-3 gap-3`,children:n.map(e=>{let t=e.icon;return(0,j.jsxs)(`div`,{className:`flex items-center gap-3 rounded-xl border border-dark-border bg-dark-surface px-4 py-3`,children:[(0,j.jsx)(`span`,{className:`flex h-9 w-9 shrink-0 items-center justify-center rounded-lg ${e.iconWrap}`,children:(0,j.jsx)(t,{size:18})}),(0,j.jsxs)(`div`,{className:`min-w-0`,children:[(0,j.jsx)(`div`,{className:`text-xl font-bold text-dark-text`,children:e.value}),(0,j.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e.label})]})]},e.id)})})}var V={safety:{Icon:t,cls:`text-accent-red`},quality:{Icon:p,cls:`text-accent-blue`},audit:{Icon:c,cls:`text-accent-purple`}},H={Icon:c,cls:`text-dark-muted`},U=[`safety`,`quality`,`audit`];function W({templates:e,existingNames:t,onPick:r}){let{t:i}=x(),[a,o]=(0,k.useState)(!0),s=Array.isArray(e)?e:[],c=(0,k.useMemo)(()=>{let e=e=>{let t=U.indexOf(e);return t===-1?U.length:t};return[...s].sort((t,n)=>e(t.category)-e(n.category))},[s]);if(s.length===0)return null;let l=new Set(t);return(0,j.jsxs)(`section`,{className:`mt-4 min-w-0 rounded-xl border border-dark-border bg-dark-surface px-4 py-3`,children:[(0,j.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,j.jsxs)(`div`,{className:`min-w-0`,children:[(0,j.jsx)(`h3`,{className:`text-sm font-semibold text-dark-text`,children:i(`hook.templatesTitle`)}),(0,j.jsx)(`p`,{className:`mt-0.5 text-xs text-dark-muted`,children:i(`hook.templatesDesc`)})]}),(0,j.jsx)(`button`,{type:`button`,onClick:()=>o(e=>!e),"aria-expanded":a,className:`shrink-0 rounded-lg p-1.5 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:i(a?`common.collapse`:`common.expand`),children:a?(0,j.jsx)(n,{size:16}):(0,j.jsx)(y,{size:16})})]}),a&&(0,j.jsx)(`div`,{className:`mt-3 grid grid-cols-1 gap-2 md:grid-cols-2 xl:grid-cols-3`,children:c.map(e=>{let{Icon:t,cls:n}=V[e.category]??H,a=i(`hook.template.${e.id}.title`),o=i(`hook.template.${e.id}.desc`),s=l.has(e.id);return(0,j.jsxs)(`button`,{type:`button`,onClick:()=>r(e),className:`group flex flex-col rounded-lg border border-dark-border bg-dark-bg p-2.5 text-start transition-colors hover:border-accent-blue/40 hover:bg-dark-hover`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,j.jsx)(t,{size:13,className:n}),(0,j.jsx)(`span`,{className:`text-meta uppercase tracking-wider text-dark-muted`,children:i(`hook.templateCategory.${e.category}`)}),s&&(0,j.jsx)(`span`,{className:`ms-auto rounded bg-dark-raised px-1.5 text-badge text-dark-muted`,children:i(`hook.templateExists`)})]}),(0,j.jsx)(`div`,{className:`mt-1 text-sm font-medium text-dark-text`,children:a}),(0,j.jsx)(`p`,{className:`mt-1 line-clamp-2 text-xs leading-relaxed text-dark-muted`,children:o}),(0,j.jsx)(`div`,{className:`mt-2 text-xs text-accent-blue/80 transition-colors group-hover:text-accent-blue`,children:i(`hook.templateUse`)})]},e.id)})})]})}function G(){let{t:e}=x(),[t,n]=(0,k.useState)(null),[r,i]=(0,k.useState)(!1),{rules:a,templates:o,stats:c,events:l,agents:u,loading:d,error:f,formOpen:p,loadAll:v,openForm:y,openFormFromTemplate:b,clearError:S}=A();(0,k.useEffect)(()=>{v()},[]);let w=(0,k.useCallback)(async()=>{let e=await D.hooks.export();if(e.success&&e.data){let t=new Blob([JSON.stringify(e.data,null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`hooks-export.json`,r.click(),URL.revokeObjectURL(n)}},[]),E=(0,k.useCallback)(()=>{let e=document.createElement(`input`);e.type=`file`,e.accept=`.json`,e.onchange=async e=>{let t=e.target.files?.[0];if(!t)return;let r=await t.text();try{let e=JSON.parse(r);n({fileName:t.name,data:e})}catch(e){console.error(`Import failed:`,e)}},e.click()},[]),O=(0,k.useCallback)(async e=>{if(t){i(!0);try{(await D.hooks.import({...t.data,mergeMode:e})).success&&(n(null),v())}catch(e){console.error(`Import failed:`,e)}finally{i(!1)}}},[t,v]);return(0,j.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col bg-dark-bg text-dark-text`,children:[(0,j.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-between gap-3 border-b border-dark-border px-6 py-4`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{className:`text-base font-semibold text-dark-text`,children:e(`hook.configTitle`)}),(0,j.jsx)(`p`,{className:`mt-0.5 text-xs text-dark-muted`,children:e(`hook.configDesc`)})]}),(0,j.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,j.jsx)(`button`,{onClick:v,title:e(`common.refresh`),className:`rounded-lg p-2 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,children:(0,j.jsx)(_,{size:16,className:d?`animate-spin`:``})}),(0,j.jsx)(C,{onClick:E,leftIcon:(0,j.jsx)(h,{size:14}),children:e(`hook.import`)}),(0,j.jsx)(C,{onClick:w,leftIcon:(0,j.jsx)(s,{size:14}),children:e(`hook.export`)}),(0,j.jsx)(C,{variant:`accent`,onClick:()=>y(),leftIcon:(0,j.jsx)(m,{size:14}),children:e(`hook.newRule`)})]})]}),(0,j.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-auto custom-scrollbar px-6 py-4`,children:[f&&(0,j.jsxs)(`div`,{className:`mb-3 flex items-center justify-between rounded-lg border border-accent-red/40 bg-accent-red/10 px-4 py-2 text-sm text-accent-red`,children:[(0,j.jsx)(`span`,{children:f}),(0,j.jsx)(`button`,{onClick:S,className:`text-accent-red/70 transition-colors hover:text-accent-red`,children:(0,j.jsx)(g,{size:16})})]}),(0,j.jsx)(B,{stats:c}),(0,j.jsx)(W,{templates:o,existingNames:a.map(e=>e.name),onPick:t=>b(t,e(`hook.template.${t.id}.desc`))}),(0,j.jsxs)(`section`,{className:`mt-4 min-w-0 rounded-xl border border-dark-border bg-dark-surface p-4`,children:[(0,j.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,j.jsx)(`h3`,{className:`text-sm font-semibold text-dark-text`,children:e(`hook.ruleList`)}),(0,j.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`hook.ruleCount`,{n:a.length})})]}),d&&a.length===0?(0,j.jsx)(`div`,{className:`flex h-[520px] items-center justify-center text-dark-muted`,children:e(`common.loading`)}):(0,j.jsx)(`div`,{className:`min-h-[520px]`,children:(0,j.jsx)(P,{rules:a,onEdit:e=>y(e)})})]})]}),(0,j.jsx)(z,{isOpen:p,events:l,agents:u}),(0,j.jsx)(T,{isOpen:t!==null,onClose:()=>{r||n(null)},title:e(`hook.importTitle`),size:`sm`,children:(0,j.jsxs)(`div`,{className:`space-y-4`,children:[t&&(0,j.jsxs)(`p`,{className:`text-sm leading-relaxed text-dark-muted`,children:[(0,j.jsx)(`span`,{className:`text-dark-text`,children:t.fileName}),(0,j.jsx)(`br`,{}),e(`hook.importDesc`)]}),(0,j.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[(0,j.jsx)(C,{variant:`ghost`,disabled:r,onClick:()=>n(null),"data-autofocus":!0,children:e(`common.cancel`)}),(0,j.jsx)(C,{variant:`danger`,disabled:r,onClick:()=>void O(`replace`),children:e(`hook.importReplace`)}),(0,j.jsx)(C,{variant:`accent`,loading:r,onClick:()=>void O(`merge`),children:e(`hook.importMerge`)})]})]})})]})}export{G as HookConfigView};