agim-cli 1.2.36 → 1.2.37

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 (153) hide show
  1. package/dist/cli-ui/config-wizard.js +46 -1
  2. package/dist/cli-ui/config-wizard.js.map +1 -1
  3. package/dist/cli-ui/i18n.d.ts +10 -0
  4. package/dist/cli-ui/i18n.d.ts.map +1 -1
  5. package/dist/cli-ui/i18n.js +20 -0
  6. package/dist/cli-ui/i18n.js.map +1 -1
  7. package/dist/core/onboarding.d.ts +5 -0
  8. package/dist/core/onboarding.d.ts.map +1 -1
  9. package/dist/core/onboarding.js.map +1 -1
  10. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.d.ts +41 -0
  11. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.d.ts.map +1 -1
  12. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js +113 -0
  13. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js.map +1 -1
  14. package/dist/plugins/messengers/dingtalk/types.d.ts +19 -0
  15. package/dist/plugins/messengers/dingtalk/types.d.ts.map +1 -1
  16. package/dist/plugins/messengers/telegram/media-download.d.ts +12 -1
  17. package/dist/plugins/messengers/telegram/media-download.d.ts.map +1 -1
  18. package/dist/plugins/messengers/telegram/media-download.js +19 -5
  19. package/dist/plugins/messengers/telegram/media-download.js.map +1 -1
  20. package/dist/web/public/assets/{a2a-BFM2Ojvs.js → a2a-C7lYvkA4.js} +2 -2
  21. package/dist/web/public/assets/{a2a-BFM2Ojvs.js.map → a2a-C7lYvkA4.js.map} +1 -1
  22. package/dist/web/public/assets/{activity-DNe1vn9s.js → activity-DFB1UVF1.js} +2 -2
  23. package/dist/web/public/assets/{activity-DNe1vn9s.js.map → activity-DFB1UVF1.js.map} +1 -1
  24. package/dist/web/public/assets/{admins-DtIF8yji.js → admins-BgmlFiRu.js} +2 -2
  25. package/dist/web/public/assets/{admins-DtIF8yji.js.map → admins-BgmlFiRu.js.map} +1 -1
  26. package/dist/web/public/assets/{agents-BJ3jyH1u.js → agents-D9GBT8Zl.js} +2 -2
  27. package/dist/web/public/assets/{agents-BJ3jyH1u.js.map → agents-D9GBT8Zl.js.map} +1 -1
  28. package/dist/web/public/assets/{approvals-8ifx3_0b.js → approvals-Be45xKtz.js} +2 -2
  29. package/dist/web/public/assets/{approvals-8ifx3_0b.js.map → approvals-Be45xKtz.js.map} +1 -1
  30. package/dist/web/public/assets/{audit-BiFOljMy.js → audit-BNx_EkjC.js} +2 -2
  31. package/dist/web/public/assets/{audit-BiFOljMy.js.map → audit-BNx_EkjC.js.map} +1 -1
  32. package/dist/web/public/assets/{bgjobs-Dve01ab0.js → bgjobs-uQw6SA4h.js} +2 -2
  33. package/dist/web/public/assets/{bgjobs-Dve01ab0.js.map → bgjobs-uQw6SA4h.js.map} +1 -1
  34. package/dist/web/public/assets/{brain-BI78EY6_.js → brain-CY9GRk9W.js} +2 -2
  35. package/dist/web/public/assets/{brain-BI78EY6_.js.map → brain-CY9GRk9W.js.map} +1 -1
  36. package/dist/web/public/assets/{briefcase-CuwoOW31.js → briefcase-6msjfYUU.js} +2 -2
  37. package/dist/web/public/assets/{briefcase-CuwoOW31.js.map → briefcase-6msjfYUU.js.map} +1 -1
  38. package/dist/web/public/assets/{chevron-right-D5JanEQ3.js → chevron-right-DECkw7Jd.js} +2 -2
  39. package/dist/web/public/assets/{chevron-right-D5JanEQ3.js.map → chevron-right-DECkw7Jd.js.map} +1 -1
  40. package/dist/web/public/assets/{circle-check-DXMzdFtD.js → circle-check-BL5BCLn_.js} +2 -2
  41. package/dist/web/public/assets/{circle-check-DXMzdFtD.js.map → circle-check-BL5BCLn_.js.map} +1 -1
  42. package/dist/web/public/assets/{circle-check-big-CyJIIhiq.js → circle-check-big-DtKj0bvZ.js} +2 -2
  43. package/dist/web/public/assets/{circle-check-big-CyJIIhiq.js.map → circle-check-big-DtKj0bvZ.js.map} +1 -1
  44. package/dist/web/public/assets/{circle-x-DTwfNpvp.js → circle-x-Dv0fneWH.js} +2 -2
  45. package/dist/web/public/assets/{circle-x-DTwfNpvp.js.map → circle-x-Dv0fneWH.js.map} +1 -1
  46. package/dist/web/public/assets/{confirm-dialog-F0sdcLGN.js → confirm-dialog-QaqXnzLc.js} +2 -2
  47. package/dist/web/public/assets/{confirm-dialog-F0sdcLGN.js.map → confirm-dialog-QaqXnzLc.js.map} +1 -1
  48. package/dist/web/public/assets/{data-table-DN_-VLbp.js → data-table-BRHemHNS.js} +2 -2
  49. package/dist/web/public/assets/{data-table-DN_-VLbp.js.map → data-table-BRHemHNS.js.map} +1 -1
  50. package/dist/web/public/assets/{dialog-CM16nfWK.js → dialog-DzCAOdn8.js} +2 -2
  51. package/dist/web/public/assets/{dialog-CM16nfWK.js.map → dialog-DzCAOdn8.js.map} +1 -1
  52. package/dist/web/public/assets/{download-tFqY3Zj6.js → download-DGggXcuj.js} +2 -2
  53. package/dist/web/public/assets/{download-tFqY3Zj6.js.map → download-DGggXcuj.js.map} +1 -1
  54. package/dist/web/public/assets/{email-By2-ARPV.js → email-DZXu4PeQ.js} +2 -2
  55. package/dist/web/public/assets/{email-By2-ARPV.js.map → email-DZXu4PeQ.js.map} +1 -1
  56. package/dist/web/public/assets/{empty-state-Dq9_8t-M.js → empty-state--qSLu4iL.js} +2 -2
  57. package/dist/web/public/assets/{empty-state-Dq9_8t-M.js.map → empty-state--qSLu4iL.js.map} +1 -1
  58. package/dist/web/public/assets/{external-link-amfAWSUX.js → external-link-SkbgGADx.js} +2 -2
  59. package/dist/web/public/assets/{external-link-amfAWSUX.js.map → external-link-SkbgGADx.js.map} +1 -1
  60. package/dist/web/public/assets/{eye-BfgN09Lx.js → eye-Du4m0dYr.js} +2 -2
  61. package/dist/web/public/assets/{eye-BfgN09Lx.js.map → eye-Du4m0dYr.js.map} +1 -1
  62. package/dist/web/public/assets/{facts-uvL__ilQ.js → facts-cmX647ty.js} +2 -2
  63. package/dist/web/public/assets/{facts-uvL__ilQ.js.map → facts-cmX647ty.js.map} +1 -1
  64. package/dist/web/public/assets/{health-fiU-ueEw.js → health-Co_2jH5V.js} +2 -2
  65. package/dist/web/public/assets/{health-fiU-ueEw.js.map → health-Co_2jH5V.js.map} +1 -1
  66. package/dist/web/public/assets/{hot-Dt4V3jM_.js → hot-BAX3WV0p.js} +2 -2
  67. package/dist/web/public/assets/{hot-Dt4V3jM_.js.map → hot-BAX3WV0p.js.map} +1 -1
  68. package/dist/web/public/assets/{index-6GMwymev.js → index-BAK3HT1o.js} +23 -23
  69. package/dist/web/public/assets/{index-6GMwymev.js.map → index-BAK3HT1o.js.map} +1 -1
  70. package/dist/web/public/assets/{installed-B_x6no76.js → installed-vEt64SE3.js} +2 -2
  71. package/dist/web/public/assets/{installed-B_x6no76.js.map → installed-vEt64SE3.js.map} +1 -1
  72. package/dist/web/public/assets/{jobs-LqWH3CIe.js → jobs-CmSWAbse.js} +2 -2
  73. package/dist/web/public/assets/{jobs-LqWH3CIe.js.map → jobs-CmSWAbse.js.map} +1 -1
  74. package/dist/web/public/assets/{layout-DHUzlXrd.js → layout-BgbibVU6.js} +2 -2
  75. package/dist/web/public/assets/{layout-DHUzlXrd.js.map → layout-BgbibVU6.js.map} +1 -1
  76. package/dist/web/public/assets/{layout-CvxcdPD9.js → layout-Bl6t0Q6D.js} +2 -2
  77. package/dist/web/public/assets/{layout-CvxcdPD9.js.map → layout-Bl6t0Q6D.js.map} +1 -1
  78. package/dist/web/public/assets/{layout-WcrkE0es.js → layout-Cbf_CCBN.js} +2 -2
  79. package/dist/web/public/assets/{layout-WcrkE0es.js.map → layout-Cbf_CCBN.js.map} +1 -1
  80. package/dist/web/public/assets/{layout-apvyE2JN.js → layout-DF92UGuZ.js} +2 -2
  81. package/dist/web/public/assets/{layout-apvyE2JN.js.map → layout-DF92UGuZ.js.map} +1 -1
  82. package/dist/web/public/assets/{layout-MNk0bLGe.js → layout-DKUTeV-p.js} +2 -2
  83. package/dist/web/public/assets/{layout-MNk0bLGe.js.map → layout-DKUTeV-p.js.map} +1 -1
  84. package/dist/web/public/assets/{loader-circle-hxNy7hSm.js → loader-circle-CXl24wsB.js} +2 -2
  85. package/dist/web/public/assets/{loader-circle-hxNy7hSm.js.map → loader-circle-CXl24wsB.js.map} +1 -1
  86. package/dist/web/public/assets/{map-pin-CCmA7ke2.js → map-pin-CVRwkuru.js} +2 -2
  87. package/dist/web/public/assets/{map-pin-CCmA7ke2.js.map → map-pin-CVRwkuru.js.map} +1 -1
  88. package/dist/web/public/assets/{memos-pEjDfEj3.js → memos-k6FW9dd4.js} +2 -2
  89. package/dist/web/public/assets/{memos-pEjDfEj3.js.map → memos-k6FW9dd4.js.map} +1 -1
  90. package/dist/web/public/assets/messengers-iXrlzy93.js +7 -0
  91. package/dist/web/public/assets/messengers-iXrlzy93.js.map +1 -0
  92. package/dist/web/public/assets/{network-DJw-ei_k.js → network-BLcJyt3y.js} +2 -2
  93. package/dist/web/public/assets/{network-DJw-ei_k.js.map → network-BLcJyt3y.js.map} +1 -1
  94. package/dist/web/public/assets/{outbox-Ckq-VT5C.js → outbox-X2aiMbdq.js} +2 -2
  95. package/dist/web/public/assets/{outbox-Ckq-VT5C.js.map → outbox-X2aiMbdq.js.map} +1 -1
  96. package/dist/web/public/assets/{pagination-DGS-TnI5.js → pagination-BD7XfwcX.js} +2 -2
  97. package/dist/web/public/assets/{pagination-DGS-TnI5.js.map → pagination-BD7XfwcX.js.map} +1 -1
  98. package/dist/web/public/assets/{persona--LsrhCVU.js → persona-CiMN6Pne.js} +2 -2
  99. package/dist/web/public/assets/{persona--LsrhCVU.js.map → persona-CiMN6Pne.js.map} +1 -1
  100. package/dist/web/public/assets/{play-Cb7co2DX.js → play-DTK7F9m6.js} +2 -2
  101. package/dist/web/public/assets/{play-Cb7co2DX.js.map → play-DTK7F9m6.js.map} +1 -1
  102. package/dist/web/public/assets/{policy-CbCotzr6.js → policy-awgRqM5Z.js} +2 -2
  103. package/dist/web/public/assets/{policy-CbCotzr6.js.map → policy-awgRqM5Z.js.map} +1 -1
  104. package/dist/web/public/assets/{refresh-ccw-CINxCmwV.js → refresh-ccw-ChTs-DiT.js} +2 -2
  105. package/dist/web/public/assets/{refresh-ccw-CINxCmwV.js.map → refresh-ccw-ChTs-DiT.js.map} +1 -1
  106. package/dist/web/public/assets/{reminders-CSKrWre3.js → reminders-DZDyIu_n.js} +2 -2
  107. package/dist/web/public/assets/{reminders-CSKrWre3.js.map → reminders-DZDyIu_n.js.map} +1 -1
  108. package/dist/web/public/assets/{save-Bib9iAA-.js → save-Bd0yyWyF.js} +2 -2
  109. package/dist/web/public/assets/{save-Bib9iAA-.js.map → save-Bd0yyWyF.js.map} +1 -1
  110. package/dist/web/public/assets/{schedules-DUD_FfEX.js → schedules-Bbq9N-Sz.js} +2 -2
  111. package/dist/web/public/assets/{schedules-DUD_FfEX.js.map → schedules-Bbq9N-Sz.js.map} +1 -1
  112. package/dist/web/public/assets/{search-DZOHNA81.js → search-CUZFSMD0.js} +2 -2
  113. package/dist/web/public/assets/{search-DZOHNA81.js.map → search-CUZFSMD0.js.map} +1 -1
  114. package/dist/web/public/assets/{service-Cf7EQ4Sj.js → service-CPV-yW7V.js} +2 -2
  115. package/dist/web/public/assets/{service-Cf7EQ4Sj.js.map → service-CPV-yW7V.js.map} +1 -1
  116. package/dist/web/public/assets/{status-badge-RpKtiHgj.js → status-badge-DHLuTCYi.js} +2 -2
  117. package/dist/web/public/assets/{status-badge-RpKtiHgj.js.map → status-badge-DHLuTCYi.js.map} +1 -1
  118. package/dist/web/public/assets/{subtasks-xCHP5uI6.js → subtasks-dR1OyViz.js} +2 -2
  119. package/dist/web/public/assets/{subtasks-xCHP5uI6.js.map → subtasks-dR1OyViz.js.map} +1 -1
  120. package/dist/web/public/assets/{table-S43AHY-3.js → table-CTNMqGvo.js} +2 -2
  121. package/dist/web/public/assets/{table-S43AHY-3.js.map → table-CTNMqGvo.js.map} +1 -1
  122. package/dist/web/public/assets/{topn-C2tcvmnB.js → topn-Dk9JxsaD.js} +2 -2
  123. package/dist/web/public/assets/{topn-C2tcvmnB.js.map → topn-Dk9JxsaD.js.map} +1 -1
  124. package/dist/web/public/assets/{trash-2-Ct7YJmZO.js → trash-2-CSId-EFx.js} +2 -2
  125. package/dist/web/public/assets/{trash-2-Ct7YJmZO.js.map → trash-2-CSId-EFx.js.map} +1 -1
  126. package/dist/web/public/assets/{use-memory-CCn0h8EP.js → use-memory-B5fLcSLE.js} +2 -2
  127. package/dist/web/public/assets/{use-memory-CCn0h8EP.js.map → use-memory-B5fLcSLE.js.map} +1 -1
  128. package/dist/web/public/assets/{use-observability-Dbal-WXR.js → use-observability-CUbSm1kG.js} +2 -2
  129. package/dist/web/public/assets/{use-observability-Dbal-WXR.js.map → use-observability-CUbSm1kG.js.map} +1 -1
  130. package/dist/web/public/assets/{use-settings-erlkhPqn.js → use-settings-CtTPlLXz.js} +2 -2
  131. package/dist/web/public/assets/{use-settings-erlkhPqn.js.map → use-settings-CtTPlLXz.js.map} +1 -1
  132. package/dist/web/public/assets/{use-skills-C8Ukv8B4.js → use-skills-DdmwXWK7.js} +2 -2
  133. package/dist/web/public/assets/{use-skills-C8Ukv8B4.js.map → use-skills-DdmwXWK7.js.map} +1 -1
  134. package/dist/web/public/assets/{use-workspace-8VZDPppc.js → use-workspace-C_zPgOcX.js} +2 -2
  135. package/dist/web/public/assets/{use-workspace-8VZDPppc.js.map → use-workspace-C_zPgOcX.js.map} +1 -1
  136. package/dist/web/public/assets/{useQuery-BnCHQlxq.js → useQuery-CBD2h35Q.js} +2 -2
  137. package/dist/web/public/assets/{useQuery-BnCHQlxq.js.map → useQuery-CBD2h35Q.js.map} +1 -1
  138. package/dist/web/public/assets/{vector-DDnIidyp.js → vector-vwq7t-U5.js} +2 -2
  139. package/dist/web/public/assets/{vector-DDnIidyp.js.map → vector-vwq7t-U5.js.map} +1 -1
  140. package/dist/web/public/assets/{viewer-BV0Cux3V.js → viewer-SR8OwQK3.js} +2 -2
  141. package/dist/web/public/assets/{viewer-BV0Cux3V.js.map → viewer-SR8OwQK3.js.map} +1 -1
  142. package/dist/web/public/assets/{workspace-DbLMyUTn.js → workspace-VRwymXux.js} +2 -2
  143. package/dist/web/public/assets/{workspace-DbLMyUTn.js.map → workspace-VRwymXux.js.map} +1 -1
  144. package/dist/web/public/assets/{workspaces-BhF0IAJg.js → workspaces-5N_hYIVk.js} +2 -2
  145. package/dist/web/public/assets/{workspaces-BhF0IAJg.js.map → workspaces-5N_hYIVk.js.map} +1 -1
  146. package/dist/web/public/assets/{x-BmgfwQRl.js → x-De56D6Eb.js} +2 -2
  147. package/dist/web/public/assets/{x-BmgfwQRl.js.map → x-De56D6Eb.js.map} +1 -1
  148. package/dist/web/public/index.html +1 -1
  149. package/dist/web/server.js +11 -1
  150. package/dist/web/server.js.map +1 -1
  151. package/package.json +1 -1
  152. package/dist/web/public/assets/messengers-Ba7opEc1.js +0 -7
  153. package/dist/web/public/assets/messengers-Ba7opEc1.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agim-cli",
3
- "version": "1.2.36",
3
+ "version": "1.2.37",
4
4
  "description": "Agim (阿吉姆) — universal messenger-to-agent bridge. Connect WeChat / Feishu / DingTalk / Email to Claude Code / Codex / OpenCode, or any custom agent via ACP. Installs the `agim` command.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +0,0 @@
1
- import{x as S,ac as N,Q as e,c as j,B as C,a2 as v,z as T,L as q,I as D}from"./index-6GMwymev.js";import{e as o}from"./react-C9F3QeMB.js";import{D as Q,a as M,d as E,e as F,b as z}from"./dialog-CM16nfWK.js";import{b as O,m as P,i as L,q as R}from"./use-settings-erlkhPqn.js";import{L as y}from"./loader-circle-hxNy7hSm.js";import{R as A}from"./refresh-ccw-CINxCmwV.js";import{X as B}from"./x-BmgfwQRl.js";import{S as H}from"./save-Bib9iAA-.js";import"./useQuery-BnCHQlxq.js";/**
2
- * @license lucide-react v0.469.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const W=S("QrCode",[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]]);function k(s){const n=new Set(s?.messengers??[]);return{"wechat-ilink":{enabled:n.has("wechat-ilink")},telegram:{enabled:n.has("telegram"),telegram:{...s?.telegram??{}}},feishu:{enabled:n.has("feishu"),feishu:{...s?.feishu??{}}},dingtalk:{enabled:n.has("dingtalk"),dingtalk:{...s?.dingtalk??{}}},discord:{enabled:n.has("discord"),discord:{...s?.discord??{}}}}}function J(s,n){const l=[];for(const t of Object.keys(s))s[t].enabled&&l.push(t);return{messengers:l,telegram:s.telegram.telegram,feishu:s.feishu.feishu,dingtalk:s.dingtalk.dingtalk,discord:s.discord.discord,...Object.fromEntries(Object.entries(n).filter(([t])=>!["messengers","telegram","feishu","dingtalk","discord"].includes(t)))}}function se(){const{t:s}=N(["settings","common"]),n=O(),l=P(),[t,d]=o.useState(()=>k(n.data)),[m,g]=o.useState(!1);o.useEffect(()=>{m||n.data&&(d(k(n.data)),g(!0))},[n.data,m]);const r=n.data,p=o.useMemo(()=>r?JSON.stringify(k(r))!==JSON.stringify(t):!1,[r,t]),[b,u]=o.useState(!1);function i(a,I){d(w=>({...w,[a]:{...w[a],...I}}))}async function h(){if(r)try{await l.mutateAsync(J(t,r)),v.success(s("messengers.savedToast")),g(!1)}catch(a){v.error(T(a,s).message)}}function x(){r&&d(k(r))}return e.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-4",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("messengers.title")}),e.jsxs(j,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>n.refetch(),disabled:n.isFetching,"aria-label":s("actions.refresh",{ns:"common"}),children:[n.isFetching?e.jsx(y,{className:"h-4 w-4 animate-spin"}):e.jsx(A,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("actions.refresh",{ns:"common"})})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:s("messengers.subtitle")})]}),e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:p?e.jsxs(e.Fragment,{children:[e.jsx(C,{variant:"info",children:s("messengers.dirtyHint")}),e.jsxs(j,{type:"button",variant:"secondary",size:"sm",onClick:x,disabled:l.isPending,children:[e.jsx(B,{className:"h-4 w-4"}),s("messengers.discardAll")]}),e.jsxs(j,{type:"button",size:"sm",onClick:()=>void h(),disabled:l.isPending,children:[l.isPending?e.jsx(y,{className:"h-4 w-4 animate-spin"}):e.jsx(H,{className:"h-4 w-4"}),l.isPending?s("messengers.saving"):s("messengers.saveAll")]})]}):e.jsx("span",{className:"text-xs text-text-muted",children:s("env.noChanges")})}),n.isLoading?e.jsx("div",{className:"h-96 rounded-md bg-surface-2 animate-pulse"}):r?e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(f,{slot:"wechat-ilink",label:s("messengers.platform.wechat"),hint:s("messengers.hint.wechat"),enabled:t["wechat-ilink"].enabled,onToggle:a=>i("wechat-ilink",{enabled:a}),children:e.jsxs(j,{type:"button",variant:"secondary",size:"sm",onClick:()=>u(!0),children:[e.jsx(W,{className:"h-4 w-4"}),s("messengers.scanQr")]})}),r.features?.globalIm?e.jsxs(f,{slot:"telegram",label:s("messengers.platform.telegram"),hint:s("messengers.hint.telegram"),enabled:t.telegram.enabled,onToggle:a=>i("telegram",{enabled:a}),children:[e.jsx(c,{id:"tg-token",label:s("messengers.fields.botToken"),value:t.telegram.telegram?.botToken??"",type:"password",onChange:a=>i("telegram",{telegram:{...t.telegram.telegram,botToken:a}})}),e.jsx(c,{id:"tg-channel",label:s("messengers.fields.channelId"),value:t.telegram.telegram?.channelId??"",onChange:a=>i("telegram",{telegram:{...t.telegram.telegram,channelId:a}})})]}):null,e.jsxs(f,{slot:"feishu",label:s("messengers.platform.feishu"),hint:s("messengers.hint.feishu"),enabled:t.feishu.enabled,onToggle:a=>i("feishu",{enabled:a}),children:[e.jsx(c,{id:"fs-appid",label:s("messengers.fields.appId"),value:t.feishu.feishu?.appId??"",onChange:a=>i("feishu",{feishu:{...t.feishu.feishu,appId:a}})}),e.jsx(c,{id:"fs-secret",label:s("messengers.fields.appSecret"),value:t.feishu.feishu?.appSecret??"",type:"password",onChange:a=>i("feishu",{feishu:{...t.feishu.feishu,appSecret:a}})}),e.jsx(c,{id:"fs-channel",label:s("messengers.fields.channelId"),value:t.feishu.feishu?.channelId??"",onChange:a=>i("feishu",{feishu:{...t.feishu.feishu,channelId:a}})})]}),e.jsxs(f,{slot:"dingtalk",label:s("messengers.platform.dingtalk"),hint:s("messengers.hint.dingtalk"),enabled:t.dingtalk.enabled,onToggle:a=>i("dingtalk",{enabled:a}),children:[e.jsx(c,{id:"dt-cid",label:s("messengers.fields.clientId"),value:t.dingtalk.dingtalk?.clientId??"",onChange:a=>i("dingtalk",{dingtalk:{...t.dingtalk.dingtalk,clientId:a}})}),e.jsx(c,{id:"dt-secret",label:s("messengers.fields.clientSecret"),value:t.dingtalk.dingtalk?.clientSecret??"",type:"password",onChange:a=>i("dingtalk",{dingtalk:{...t.dingtalk.dingtalk,clientSecret:a}})}),e.jsx(c,{id:"dt-channel",label:s("messengers.fields.channelId"),value:t.dingtalk.dingtalk?.channelId??"",onChange:a=>i("dingtalk",{dingtalk:{...t.dingtalk.dingtalk,channelId:a}})})]}),r.features?.globalIm?e.jsxs(f,{slot:"discord",label:s("messengers.platform.discord"),hint:s("messengers.hint.discord"),enabled:t.discord.enabled,onToggle:a=>i("discord",{enabled:a}),children:[e.jsx(c,{id:"dc-token",label:s("messengers.fields.botToken"),value:t.discord.discord?.botToken??"",type:"password",onChange:a=>i("discord",{discord:{...t.discord.discord,botToken:a}})}),e.jsx(c,{id:"dc-channel",label:s("messengers.fields.channelId"),value:t.discord.discord?.channelId??"",onChange:a=>i("discord",{discord:{...t.discord.discord,channelId:a}})})]}):null]}):null,e.jsx(U,{open:b,onOpenChange:u,onConfirmed:()=>{n.refetch(),g(!1)}})]})}function f({label:s,hint:n,enabled:l,onToggle:t,children:d}){const{t:m}=N("settings");return e.jsxs("div",{className:"rounded-md border border-border bg-surface p-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:s}),e.jsx(C,{variant:l?"success":"outline",children:m(l?"messengers.enabled":"messengers.disabled")})]}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:n})]}),e.jsx("label",{className:"inline-flex items-center gap-2 text-sm",children:e.jsx("input",{type:"checkbox",checked:l,onChange:g=>t(g.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"})})]}),l&&d&&e.jsx("div",{className:"mt-3 flex flex-col gap-2",children:d})]})}function c({id:s,label:n,value:l,onChange:t,type:d="text"}){return e.jsxs("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-[180px_1fr] sm:items-center sm:gap-2",children:[e.jsx(q,{htmlFor:s,className:"text-xs text-text-dim",children:n}),e.jsx(D,{id:s,type:d,value:l,onChange:m=>t(m.target.value),autoComplete:"off",className:"font-mono text-xs"})]})}function U({open:s,onOpenChange:n,onConfirmed:l}){const{t}=N(["settings","common"]),d=L(),[m,g]=o.useState(null),[r,p]=o.useState(null),[b,u]=o.useState(null);o.useEffect(()=>{if(!s){g(null),p(null),u(null);return}let x=!0;return d.mutateAsync().then(a=>{x&&(p(a.qrImage),g(a.qrToken))}).catch(a=>{x&&u(a instanceof Error?a.message:String(a))}),()=>{x=!1}},[s]);const h=R(s?m:null).data?.status;return o.useEffect(()=>{h==="confirmed"&&(v.success(t("messengers.qr.confirmed")),l(),n(!1)),h==="expired"&&v.error(t("messengers.qr.expired"))},[h]),e.jsx(Q,{open:s,onOpenChange:n,children:e.jsxs(M,{children:[e.jsxs(E,{children:[e.jsx(F,{children:t("messengers.qr.title")}),e.jsx(z,{children:t("messengers.qr.description")})]}),e.jsx("div",{className:"flex flex-col items-center gap-3",children:d.isPending&&!r?e.jsxs(e.Fragment,{children:[e.jsx(y,{className:"h-8 w-8 animate-spin text-text-dim"}),e.jsx("p",{className:"text-sm text-text-dim",children:t("messengers.qr.starting")})]}):b?e.jsxs("p",{className:"text-sm text-danger",children:[t("messengers.qr.loadFailed"),": ",b]}):r?e.jsxs(e.Fragment,{children:[e.jsx("img",{src:r,alt:t("messengers.qr.title"),className:"rounded-md border border-border"}),h==="expired"?e.jsx("p",{className:"text-xs text-danger",children:t("messengers.qr.expired")}):e.jsx("p",{className:"text-xs text-text-dim",children:h?`· ${h} ·`:""})]}):null})]})})}export{se as default};
7
- //# sourceMappingURL=messengers-Ba7opEc1.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messengers-Ba7opEc1.js","sources":["../../node_modules/lucide-react/dist/esm/icons/qr-code.js","../../src/routes/settings/messengers.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst QrCode = createLucideIcon(\"QrCode\", [\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"3\", rx: \"1\", key: \"1tu5fj\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"16\", y: \"3\", rx: \"1\", key: \"1v8r4q\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"16\", rx: \"1\", key: \"1x03jg\" }],\n [\"path\", { d: \"M21 16h-3a2 2 0 0 0-2 2v3\", key: \"177gqh\" }],\n [\"path\", { d: \"M21 21v.01\", key: \"ents32\" }],\n [\"path\", { d: \"M12 7v3a2 2 0 0 1-2 2H7\", key: \"8crl2c\" }],\n [\"path\", { d: \"M3 12h.01\", key: \"nlz23k\" }],\n [\"path\", { d: \"M12 3h.01\", key: \"n36tog\" }],\n [\"path\", { d: \"M12 16v.01\", key: \"133mhm\" }],\n [\"path\", { d: \"M16 12h1\", key: \"1slzba\" }],\n [\"path\", { d: \"M21 12v.01\", key: \"1lwtk9\" }],\n [\"path\", { d: \"M12 21v-1\", key: \"1880an\" }]\n]);\n\nexport { QrCode as default };\n//# sourceMappingURL=qr-code.js.map\n","/**\n * /settings/messengers — per-IM-platform connection config.\n *\n * Layout: one card per platform (WeChat / Telegram / Feishu /\n * DingTalk / Discord). Each card has:\n * * Title + hint\n * * Enable / disable toggle (reads / writes config.messengers[])\n * * When enabled, the platform's config fields (texted)\n * * For WeChat: a \"Scan QR\" button → modal with QR + 2s polling\n *\n * Save All button at the top batches every dirty platform into one\n * PUT /api/config. The discard button reverts the local draft to\n * server-side values.\n *\n * The WeChat QR flow is special: enabling WeChat requires scanning\n * a QR code (the slot in config.messengers gets added by the\n * backend on `confirmed`, so we just open the modal and re-fetch\n * config after a successful scan).\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { Loader2, QrCode, RefreshCcw, Save, X } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport {\n useConfig,\n useUpdateConfig,\n useStartWechatQr,\n useWechatQrStatus,\n} from '@/hooks/use-settings'\nimport { describeError } from '@/lib/api/errors'\nimport type { AppConfig } from '@/types/api'\n\n/** Slot names match what `config.messengers[]` contains.\n * WeChat uses 'wechat-ilink' (the iLink adapter ID). */\ntype Slot = 'wechat-ilink' | 'telegram' | 'feishu' | 'dingtalk' | 'discord'\n\ninterface PlatformDraft {\n enabled: boolean\n telegram?: { botToken?: string; channelId?: string }\n feishu?: { appId?: string; appSecret?: string; channelId?: string }\n dingtalk?: { clientId?: string; clientSecret?: string; channelId?: string }\n discord?: { botToken?: string; channelId?: string }\n}\n\ntype Draft = Record<Slot, PlatformDraft>\n\nfunction buildDraft(cfg: AppConfig | undefined): Draft {\n const m = new Set(cfg?.messengers ?? [])\n return {\n 'wechat-ilink': { enabled: m.has('wechat-ilink') },\n telegram: { enabled: m.has('telegram'), telegram: { ...(cfg?.telegram ?? {}) } },\n feishu: { enabled: m.has('feishu'), feishu: { ...(cfg?.feishu ?? {}) } },\n dingtalk: { enabled: m.has('dingtalk'), dingtalk: { ...(cfg?.dingtalk ?? {}) } },\n discord: { enabled: m.has('discord'), discord: { ...(cfg?.discord ?? {}) } },\n }\n}\n\nfunction buildPatch(draft: Draft, cfg: AppConfig): Partial<AppConfig> {\n const messengers: string[] = []\n for (const k of Object.keys(draft) as Slot[]) if (draft[k].enabled) messengers.push(k)\n return {\n messengers,\n telegram: draft.telegram.telegram,\n feishu: draft.feishu.feishu,\n dingtalk: draft.dingtalk.dingtalk,\n discord: draft.discord.discord,\n // Preserve unknown extra fields the AppConfig type permits.\n ...Object.fromEntries(\n Object.entries(cfg).filter(([k]) => ![\n 'messengers', 'telegram', 'feishu', 'dingtalk', 'discord',\n ].includes(k)),\n ),\n }\n}\n\nexport default function SettingsMessengersRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const cfgQuery = useConfig()\n const updateCfg = useUpdateConfig()\n\n const [draft, setDraft] = useState<Draft>(() => buildDraft(cfgQuery.data))\n // Sync the draft once cfg lands. We don't re-sync on every cfg\n // refetch — that would discard unsaved edits.\n const [synced, setSynced] = useState(false)\n useEffect(() => {\n if (synced) return\n if (!cfgQuery.data) return\n setDraft(buildDraft(cfgQuery.data))\n setSynced(true)\n }, [cfgQuery.data, synced])\n\n const cfg = cfgQuery.data\n const isDirty = useMemo(() => {\n if (!cfg) return false\n return JSON.stringify(buildDraft(cfg)) !== JSON.stringify(draft)\n }, [cfg, draft])\n\n // WeChat QR modal state\n const [qrOpen, setQrOpen] = useState(false)\n\n function patchSlot(slot: Slot, partial: Partial<PlatformDraft>): void {\n setDraft((prev) => ({ ...prev, [slot]: { ...prev[slot], ...partial } }))\n }\n\n async function onSave(): Promise<void> {\n if (!cfg) return\n try {\n await updateCfg.mutateAsync(buildPatch(draft, cfg))\n toast.success(t('messengers.savedToast'))\n setSynced(false) // rebuild draft from refreshed cfg on next paint\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n function onDiscard(): void {\n if (cfg) setDraft(buildDraft(cfg))\n }\n\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('messengers.title')}</h1>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => cfgQuery.refetch()}\n disabled={cfgQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {cfgQuery.isFetching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('messengers.subtitle')}</p>\n </header>\n\n {/* Save bar */}\n <div className=\"flex flex-wrap items-center gap-2\">\n {isDirty ? (\n <>\n <Badge variant=\"info\">{t('messengers.dirtyHint')}</Badge>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={onDiscard}\n disabled={updateCfg.isPending}\n >\n <X className=\"h-4 w-4\" />\n {t('messengers.discardAll')}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => void onSave()}\n disabled={updateCfg.isPending}\n >\n {updateCfg.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Save className=\"h-4 w-4\" />}\n {updateCfg.isPending ? t('messengers.saving') : t('messengers.saveAll')}\n </Button>\n </>\n ) : (\n <span className=\"text-xs text-text-muted\">{t('env.noChanges')}</span>\n )}\n </div>\n\n {cfgQuery.isLoading ? (\n <div className=\"h-96 rounded-md bg-surface-2 animate-pulse\" />\n ) : !cfg ? null : (\n <div className=\"flex flex-col gap-3\">\n <PlatformCard\n slot=\"wechat-ilink\"\n label={t('messengers.platform.wechat')}\n hint={t('messengers.hint.wechat')}\n enabled={draft['wechat-ilink'].enabled}\n onToggle={(v) => patchSlot('wechat-ilink', { enabled: v })}\n >\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => setQrOpen(true)}\n >\n <QrCode className=\"h-4 w-4\" />\n {t('messengers.scanQr')}\n </Button>\n </PlatformCard>\n\n {cfg.features?.globalIm ? (\n <PlatformCard\n slot=\"telegram\"\n label={t('messengers.platform.telegram')}\n hint={t('messengers.hint.telegram')}\n enabled={draft.telegram.enabled}\n onToggle={(v) => patchSlot('telegram', { enabled: v })}\n >\n <FieldRow\n id=\"tg-token\" label={t('messengers.fields.botToken')}\n value={draft.telegram.telegram?.botToken ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('telegram', { telegram: { ...draft.telegram.telegram, botToken: v } })}\n />\n <FieldRow\n id=\"tg-channel\" label={t('messengers.fields.channelId')}\n value={draft.telegram.telegram?.channelId ?? ''}\n onChange={(v) => patchSlot('telegram', { telegram: { ...draft.telegram.telegram, channelId: v } })}\n />\n </PlatformCard>\n ) : null}\n\n <PlatformCard\n slot=\"feishu\"\n label={t('messengers.platform.feishu')}\n hint={t('messengers.hint.feishu')}\n enabled={draft.feishu.enabled}\n onToggle={(v) => patchSlot('feishu', { enabled: v })}\n >\n <FieldRow\n id=\"fs-appid\" label={t('messengers.fields.appId')}\n value={draft.feishu.feishu?.appId ?? ''}\n onChange={(v) => patchSlot('feishu', { feishu: { ...draft.feishu.feishu, appId: v } })}\n />\n <FieldRow\n id=\"fs-secret\" label={t('messengers.fields.appSecret')}\n value={draft.feishu.feishu?.appSecret ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('feishu', { feishu: { ...draft.feishu.feishu, appSecret: v } })}\n />\n <FieldRow\n id=\"fs-channel\" label={t('messengers.fields.channelId')}\n value={draft.feishu.feishu?.channelId ?? ''}\n onChange={(v) => patchSlot('feishu', { feishu: { ...draft.feishu.feishu, channelId: v } })}\n />\n </PlatformCard>\n\n <PlatformCard\n slot=\"dingtalk\"\n label={t('messengers.platform.dingtalk')}\n hint={t('messengers.hint.dingtalk')}\n enabled={draft.dingtalk.enabled}\n onToggle={(v) => patchSlot('dingtalk', { enabled: v })}\n >\n <FieldRow\n id=\"dt-cid\" label={t('messengers.fields.clientId')}\n value={draft.dingtalk.dingtalk?.clientId ?? ''}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, clientId: v } })}\n />\n <FieldRow\n id=\"dt-secret\" label={t('messengers.fields.clientSecret')}\n value={draft.dingtalk.dingtalk?.clientSecret ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, clientSecret: v } })}\n />\n <FieldRow\n id=\"dt-channel\" label={t('messengers.fields.channelId')}\n value={draft.dingtalk.dingtalk?.channelId ?? ''}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, channelId: v } })}\n />\n </PlatformCard>\n\n {cfg.features?.globalIm ? (\n <PlatformCard\n slot=\"discord\"\n label={t('messengers.platform.discord')}\n hint={t('messengers.hint.discord')}\n enabled={draft.discord.enabled}\n onToggle={(v) => patchSlot('discord', { enabled: v })}\n >\n <FieldRow\n id=\"dc-token\" label={t('messengers.fields.botToken')}\n value={draft.discord.discord?.botToken ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('discord', { discord: { ...draft.discord.discord, botToken: v } })}\n />\n <FieldRow\n id=\"dc-channel\" label={t('messengers.fields.channelId')}\n value={draft.discord.discord?.channelId ?? ''}\n onChange={(v) => patchSlot('discord', { discord: { ...draft.discord.discord, channelId: v } })}\n />\n </PlatformCard>\n ) : null}\n </div>\n )}\n\n <WechatQrDialog\n open={qrOpen}\n onOpenChange={setQrOpen}\n onConfirmed={() => { void cfgQuery.refetch(); setSynced(false) }}\n />\n </div>\n )\n}\n\ninterface PlatformCardProps {\n slot: Slot\n label: string\n hint: string\n enabled: boolean\n onToggle: (v: boolean) => void\n children?: React.ReactNode\n}\n\nfunction PlatformCard({ label, hint, enabled, onToggle, children }: PlatformCardProps): JSX.Element {\n const { t } = useTranslation('settings')\n return (\n <div className=\"rounded-md border border-border bg-surface p-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-text\">{label}</span>\n <Badge variant={enabled ? 'success' : 'outline'}>\n {enabled ? t('messengers.enabled') : t('messengers.disabled')}\n </Badge>\n </div>\n <p className=\"mt-1 text-xs text-text-dim\">{hint}</p>\n </div>\n <label className=\"inline-flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={enabled}\n onChange={(e) => onToggle(e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n </label>\n </div>\n {enabled && children && (\n <div className=\"mt-3 flex flex-col gap-2\">\n {children}\n </div>\n )}\n </div>\n )\n}\n\ninterface FieldRowProps {\n id: string\n label: string\n value: string\n onChange: (v: string) => void\n type?: 'text' | 'password'\n}\n\nfunction FieldRow({ id, label, value, onChange, type = 'text' }: FieldRowProps): JSX.Element {\n return (\n <div className=\"grid grid-cols-1 gap-1 sm:grid-cols-[180px_1fr] sm:items-center sm:gap-2\">\n <Label htmlFor={id} className=\"text-xs text-text-dim\">{label}</Label>\n <Input\n id={id}\n type={type}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n autoComplete=\"off\"\n className=\"font-mono text-xs\"\n />\n </div>\n )\n}\n\ninterface WechatQrDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n onConfirmed: () => void\n}\n\nfunction WechatQrDialog({ open, onOpenChange, onConfirmed }: WechatQrDialogProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const start = useStartWechatQr()\n const [token, setToken] = useState<string | null>(null)\n const [qrImage, setQrImage] = useState<string | null>(null)\n const [startError, setStartError] = useState<string | null>(null)\n\n // Kick off the start mutation each time the dialog opens; reset on close.\n useEffect(() => {\n if (!open) {\n setToken(null)\n setQrImage(null)\n setStartError(null)\n return\n }\n let active = true\n start.mutateAsync().then((r) => {\n if (!active) return\n setQrImage(r.qrImage)\n setToken(r.qrToken)\n }).catch((err) => {\n if (!active) return\n setStartError(err instanceof Error ? err.message : String(err))\n })\n return () => { active = false }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const statusQuery = useWechatQrStatus(open ? token : null)\n const status = statusQuery.data?.status\n\n useEffect(() => {\n if (status === 'confirmed') {\n toast.success(t('messengers.qr.confirmed'))\n onConfirmed()\n onOpenChange(false)\n }\n if (status === 'expired') {\n toast.error(t('messengers.qr.expired'))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [status])\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t('messengers.qr.title')}</DialogTitle>\n <DialogDescription>{t('messengers.qr.description')}</DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col items-center gap-3\">\n {start.isPending && !qrImage ? (\n <>\n <Loader2 className=\"h-8 w-8 animate-spin text-text-dim\" />\n <p className=\"text-sm text-text-dim\">{t('messengers.qr.starting')}</p>\n </>\n ) : startError ? (\n <p className=\"text-sm text-danger\">{t('messengers.qr.loadFailed')}: {startError}</p>\n ) : qrImage ? (\n <>\n <img\n src={qrImage}\n alt={t('messengers.qr.title')}\n className=\"rounded-md border border-border\"\n />\n {status === 'expired'\n ? <p className=\"text-xs text-danger\">{t('messengers.qr.expired')}</p>\n : <p className=\"text-xs text-text-dim\">{status ? `· ${status} ·` : ''}</p>}\n </>\n ) : null}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n"],"names":["QrCode","createLucideIcon","buildDraft","cfg","m","buildPatch","draft","messengers","k","SettingsMessengersRoute","t","useTranslation","cfgQuery","useConfig","updateCfg","useUpdateConfig","setDraft","useState","synced","setSynced","useEffect","isDirty","useMemo","qrOpen","setQrOpen","patchSlot","slot","partial","prev","onSave","toast","err","describeError","onDiscard","jsxs","jsx","Button","Loader2","RefreshCcw","Fragment","Badge","X","Save","PlatformCard","v","FieldRow","WechatQrDialog","label","hint","enabled","onToggle","children","e","id","value","onChange","type","Label","Input","open","onOpenChange","onConfirmed","start","useStartWechatQr","token","setToken","qrImage","setQrImage","startError","setStartError","active","r","status","useWechatQrStatus","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription"],"mappings":"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","x_google_ignoreList":[0]}