@opencue/cli 0.0.0-stage → 1.0.40

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 (485) hide show
  1. package/LICENSE.md +12 -0
  2. package/README.md +625 -2
  3. package/bin/dscode.exe +12 -0
  4. package/bin/stt/requirements.txt +32 -0
  5. package/bin/stt/stt_server.py +619 -0
  6. package/bin/tts/requirements.txt +21 -0
  7. package/bin/tts/tts_server.py +404 -0
  8. package/cli-wrapper.cjs +109 -0
  9. package/install.cjs +177 -0
  10. package/llms.txt +88 -0
  11. package/package.json +56 -4
  12. package/scripts/figure/compose.py +363 -0
  13. package/scripts/figure/replay-shots.mjs +205 -0
  14. package/web/dist/assets/AssistantsView-BiUiWjhF.js +1 -0
  15. package/web/dist/assets/AutomationView-Dcf_yNaI.js +1 -0
  16. package/web/dist/assets/ChannelConfigView-BLnxsMGm.js +8 -0
  17. package/web/dist/assets/ConnectorsView-CX3E6X6c.js +1 -0
  18. package/web/dist/assets/DesignSystemView--x-P-lpD.js +1 -0
  19. package/web/dist/assets/Drawer-CjAgqH3B.js +1 -0
  20. package/web/dist/assets/FileTreeView-Chb_fzTK.js +11 -0
  21. package/web/dist/assets/HookConfigView-EafYlWdN.js +1 -0
  22. package/web/dist/assets/InputArea-BbHslX7b.js +50 -0
  23. package/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  24. package/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  25. package/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  26. package/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  27. package/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  28. package/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  29. package/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  30. package/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  31. package/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  32. package/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  33. package/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  34. package/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  35. package/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  36. package/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  37. package/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  38. package/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  39. package/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  40. package/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  41. package/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  42. package/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  43. package/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  44. package/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  45. package/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  46. package/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  47. package/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  48. package/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  49. package/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  50. package/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  51. package/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  52. package/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  53. package/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  54. package/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  55. package/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  56. package/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  57. package/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  58. package/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  59. package/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  60. package/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  61. package/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  62. package/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  63. package/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  64. package/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  65. package/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  66. package/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  67. package/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  68. package/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  69. package/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  70. package/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  71. package/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  72. package/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  73. package/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  74. package/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  75. package/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  76. package/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  77. package/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  78. package/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  79. package/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  80. package/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  81. package/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  82. package/web/dist/assets/ModelsView-CGN5Nljr.js +1 -0
  83. package/web/dist/assets/PluginsView-CDiJgvI8.js +2 -0
  84. package/web/dist/assets/ProjectsView-C5Usmwqy.js +1 -0
  85. package/web/dist/assets/SessionGrid-BGpz0-op.css +1 -0
  86. package/web/dist/assets/SessionGrid-Drxg0r_u.js +4 -0
  87. package/web/dist/assets/SettingsModal-Cmts6aBG.js +10 -0
  88. package/web/dist/assets/Skeleton-Dsk6B0U3.js +1 -0
  89. package/web/dist/assets/SkillsView-TEDR_3XX.js +1 -0
  90. package/web/dist/assets/TemplatesTab-DtN5Kdgh.js +1 -0
  91. package/web/dist/assets/ToolsView-VukZnIt1.js +1 -0
  92. package/web/dist/assets/VizCardsSkeleton-C_GaEfXd.js +1 -0
  93. package/web/dist/assets/abap-BdImnpbu.js +1 -0
  94. package/web/dist/assets/abnfDiagram-YUKMZFIV-BIFw6B_N.js +1 -0
  95. package/web/dist/assets/actionscript-3-B3316cI-.js +1 -0
  96. package/web/dist/assets/ada-bCR0ucgS.js +1 -0
  97. package/web/dist/assets/ahk-CsyLZFj1.js +1 -0
  98. package/web/dist/assets/ahk2-8Zs4aa1G.js +1 -0
  99. package/web/dist/assets/andromeeda-C4gqWexZ.js +1 -0
  100. package/web/dist/assets/angular-html-DA-rfuFy.js +1 -0
  101. package/web/dist/assets/angular-ts-BrjP3tb8.js +1 -0
  102. package/web/dist/assets/apache-Pmp26Uib.js +1 -0
  103. package/web/dist/assets/apex-DhZFqWV2.js +1 -0
  104. package/web/dist/assets/apl-CORt7UWP.js +1 -0
  105. package/web/dist/assets/applescript-Co6uUVPk.js +1 -0
  106. package/web/dist/assets/ara-BRHolxvo.js +1 -0
  107. package/web/dist/assets/arc-BZQ951h9.js +1 -0
  108. package/web/dist/assets/architectureDiagram-47P4ROYG-BP5qiXzf.js +36 -0
  109. package/web/dist/assets/asciidoc-CSVQ5wI8.js +1 -0
  110. package/web/dist/assets/asm-D_Q5rh1f.js +1 -0
  111. package/web/dist/assets/astro-HNnZUWAn.js +1 -0
  112. package/web/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  113. package/web/dist/assets/awk-DMzUqQB5.js +1 -0
  114. package/web/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
  115. package/web/dist/assets/ayu-light-BA47KaF1.js +1 -0
  116. package/web/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
  117. package/web/dist/assets/ballerina-BFfxhgS-.js +1 -0
  118. package/web/dist/assets/bat-CickPsom.js +1 -0
  119. package/web/dist/assets/beancount-k_qm7-4y.js +1 -0
  120. package/web/dist/assets/berry-uYugtg8r.js +1 -0
  121. package/web/dist/assets/bibtex-CHM0blh-.js +1 -0
  122. package/web/dist/assets/bicep-Bmn6On1c.js +1 -0
  123. package/web/dist/assets/bird2-Bx8U0n9b.js +1 -0
  124. package/web/dist/assets/blade-2xfisSek.js +1 -0
  125. package/web/dist/assets/blockDiagram-E7TT5TSB-DtRpcE7F.js +140 -0
  126. package/web/dist/assets/bsl-DlhNcFeZ.js +1 -0
  127. package/web/dist/assets/c-BIGW1oBm.js +1 -0
  128. package/web/dist/assets/c3-Dp5svz6Z.js +1 -0
  129. package/web/dist/assets/c4Diagram-CRA5TL53-Gdzn8UBh.js +38 -0
  130. package/web/dist/assets/cadence-Bv_4Rxtq.js +1 -0
  131. package/web/dist/assets/cairo-KRGpt6FW.js +1 -0
  132. package/web/dist/assets/catppuccin-frappe-CZL1YF0i.js +1 -0
  133. package/web/dist/assets/catppuccin-latte-DH-8KZSZ.js +1 -0
  134. package/web/dist/assets/catppuccin-macchiato-B7yYVSCf.js +1 -0
  135. package/web/dist/assets/catppuccin-mocha-Ct7hS0mc.js +1 -0
  136. package/web/dist/assets/channel-BND6_KSH.js +1 -0
  137. package/web/dist/assets/chapel-DTp_pixX.js +1 -0
  138. package/web/dist/assets/chunk-2Q5K7J3B-3U6HMlsm.js +1 -0
  139. package/web/dist/assets/chunk-5VM5RSS4-CYl9mwa-.js +15 -0
  140. package/web/dist/assets/chunk-7TKQ45FW-Dn6ktcY5.js +1 -0
  141. package/web/dist/assets/chunk-AW2ZBBNX-De0QX6p1.js +88 -0
  142. package/web/dist/assets/chunk-FVRAUYC3-CpXDfvz4.js +2 -0
  143. package/web/dist/assets/chunk-HTAEGDNF-D1KDvcDd.js +1 -0
  144. package/web/dist/assets/chunk-JWPE2WC7-umm4A-fq.js +1 -0
  145. package/web/dist/assets/chunk-KQW6MTUR-JYH94hpE.js +1 -0
  146. package/web/dist/assets/chunk-XXDRQBXY-CSlCFByc.js +1 -0
  147. package/web/dist/assets/clarity-Dn5IMItf.js +1 -0
  148. package/web/dist/assets/classDiagram-v2-K4WV4PDN-DnFwS0qN.js +217 -0
  149. package/web/dist/assets/clojure-P80f7IUj.js +1 -0
  150. package/web/dist/assets/cmake-D1j8_8rp.js +1 -0
  151. package/web/dist/assets/cobol-nBiQ_Alo.js +1 -0
  152. package/web/dist/assets/codeowners-Bp6g37R7.js +1 -0
  153. package/web/dist/assets/codeql-DsOJ9woJ.js +1 -0
  154. package/web/dist/assets/coffee-Ch7k5sss.js +1 -0
  155. package/web/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
  156. package/web/dist/assets/coq-C7JzOVbR.js +1 -0
  157. package/web/dist/assets/cose-bilkent-JH36ORCC-BxUTUyep.js +1 -0
  158. package/web/dist/assets/cpp-BMRokrvK.js +1 -0
  159. package/web/dist/assets/crystal-DGywbUpC.js +1 -0
  160. package/web/dist/assets/csharp-DSvCPggb.js +1 -0
  161. package/web/dist/assets/css-CLj8gQPS.js +1 -0
  162. package/web/dist/assets/csv-fuZLfV_i.js +1 -0
  163. package/web/dist/assets/cue-D82EKSYY.js +1 -0
  164. package/web/dist/assets/cynefin-EF2NZ3EQ-CiMvulJr.js +141 -0
  165. package/web/dist/assets/cynefinDiagram-3GCD6N5R-DuXFORdW.js +62 -0
  166. package/web/dist/assets/cypher-COkxafJQ.js +1 -0
  167. package/web/dist/assets/cytoscape.esm-Ix0LnXOy.js +331 -0
  168. package/web/dist/assets/d-85-TOEBH.js +1 -0
  169. package/web/dist/assets/dagre-W4DXFKR2-DzMZHXci.js +4 -0
  170. package/web/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  171. package/web/dist/assets/dart-bE4Kk8sk.js +1 -0
  172. package/web/dist/assets/dax-CEL-wOlO.js +1 -0
  173. package/web/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  174. package/web/dist/assets/desktop-BmXAJ9_W.js +1 -0
  175. package/web/dist/assets/diagram-2UJZ2QOL-B6tO5G1v.js +200 -0
  176. package/web/dist/assets/diagram-OVF4WLC6-DRZt8tGc.js +24 -0
  177. package/web/dist/assets/diagram-PFPMY2P6-DGh6IecR.js +30 -0
  178. package/web/dist/assets/diagram-UMYRVEAY-BLbnt0yT.js +24 -0
  179. package/web/dist/assets/diagram-YEKJPTXX-C-S5DVhj.js +41 -0
  180. package/web/dist/assets/diagram-ZIFT7M5P-JrGHTWbo.js +3 -0
  181. package/web/dist/assets/diff-D97Zzqfu.js +1 -0
  182. package/web/dist/assets/docker-BcOcwvcX.js +1 -0
  183. package/web/dist/assets/dotenv-Da5cRb03.js +1 -0
  184. package/web/dist/assets/dracula-BzJJZx-M.js +1 -0
  185. package/web/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  186. package/web/dist/assets/dream-maker-BtqSS_iP.js +1 -0
  187. package/web/dist/assets/ebnfDiagram-VR2GEFS7-DPXA-YOi.js +1 -0
  188. package/web/dist/assets/edge-FbVlp4U3.js +1 -0
  189. package/web/dist/assets/elixir-CkH2-t6x.js +1 -0
  190. package/web/dist/assets/elk-IJKZMXRS-CINeWt2W.js +27 -0
  191. package/web/dist/assets/elm-DbKCFpqz.js +1 -0
  192. package/web/dist/assets/emacs-lisp-C_m_b--Z.js +1 -0
  193. package/web/dist/assets/erDiagram-O2IAPWRE-PPaHmqA1.js +99 -0
  194. package/web/dist/assets/erb-DXfck5VN.js +1 -0
  195. package/web/dist/assets/erlang-DsQrWhSR.js +1 -0
  196. package/web/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  197. package/web/dist/assets/everforest-light-C8M2exoo.js +1 -0
  198. package/web/dist/assets/fennel-BYunw83y.js +1 -0
  199. package/web/dist/assets/fish-BvzEVeQv.js +1 -0
  200. package/web/dist/assets/flowDiagram-OXPTDLAJ-t-u0QXEA.js +213 -0
  201. package/web/dist/assets/fluent-C4IJs8-o.js +1 -0
  202. package/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  203. package/web/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
  204. package/web/dist/assets/fsharp-CXgrBDvD.js +1 -0
  205. package/web/dist/assets/ganttDiagram-R7TSEDQI-Bw49ZD_b.js +292 -0
  206. package/web/dist/assets/gdresource-TyuKm33G.js +1 -0
  207. package/web/dist/assets/gdscript-DqcFQ5yU.js +1 -0
  208. package/web/dist/assets/gdshader-DkwncUOv.js +1 -0
  209. package/web/dist/assets/genie-D0YGMca9.js +1 -0
  210. package/web/dist/assets/gherkin-DyxjwDmM.js +1 -0
  211. package/web/dist/assets/git-commit-F4YmCXRG.js +1 -0
  212. package/web/dist/assets/git-rebase-r7XF79zn.js +1 -0
  213. package/web/dist/assets/gitGraphDiagram-XJZIOB7I-BAfOqeeg.js +106 -0
  214. package/web/dist/assets/github-dark-DHJKELXO.js +1 -0
  215. package/web/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  216. package/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  217. package/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  218. package/web/dist/assets/github-light-DAi9KRSo.js +1 -0
  219. package/web/dist/assets/github-light-default-D7oLnXFd.js +1 -0
  220. package/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  221. package/web/dist/assets/gleam-BspZqrRM.js +1 -0
  222. package/web/dist/assets/glimmer-js-ByusRIyA.js +1 -0
  223. package/web/dist/assets/glimmer-ts-BfAWNZQY.js +1 -0
  224. package/web/dist/assets/glsl-DplSGwfg.js +1 -0
  225. package/web/dist/assets/gn-n2N0HUVH.js +1 -0
  226. package/web/dist/assets/gnuplot-DdkO51Og.js +1 -0
  227. package/web/dist/assets/go-C27-OAKa.js +1 -0
  228. package/web/dist/assets/graph-Bn3Yngep.js +1 -0
  229. package/web/dist/assets/graphql-ChdNCCLP.js +1 -0
  230. package/web/dist/assets/groovy-gcz8RCvz.js +1 -0
  231. package/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  232. package/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  233. package/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  234. package/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  235. package/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  236. package/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  237. package/web/dist/assets/hack-BWmVpMyf.js +1 -0
  238. package/web/dist/assets/haml-D5jkg6IW.js +1 -0
  239. package/web/dist/assets/handlebars-BpdQsYii.js +1 -0
  240. package/web/dist/assets/haskell-Df6bDoY_.js +1 -0
  241. package/web/dist/assets/haxe-CfZj7gIn.js +1 -0
  242. package/web/dist/assets/hcl-BWvSN4gD.js +1 -0
  243. package/web/dist/assets/hjson-D5-asLiD.js +1 -0
  244. package/web/dist/assets/hlsl-D3lLCCz7.js +1 -0
  245. package/web/dist/assets/horizon-BUw7H-hv.js +1 -0
  246. package/web/dist/assets/horizon-bright-CUuTKBJd.js +1 -0
  247. package/web/dist/assets/houston-DnULxvSX.js +1 -0
  248. package/web/dist/assets/html-derivative-DlHx6ybY.js +1 -0
  249. package/web/dist/assets/html-pp8916En.js +1 -0
  250. package/web/dist/assets/http-jrhK8wxY.js +1 -0
  251. package/web/dist/assets/hurl-irOxFIW8.js +1 -0
  252. package/web/dist/assets/hxml-2-FPmUDs.js +1 -0
  253. package/web/dist/assets/hy-DFXneXwc.js +1 -0
  254. package/web/dist/assets/icons-Bm_ZzSAy.js +964 -0
  255. package/web/dist/assets/imba-DGztddWO.js +1 -0
  256. package/web/dist/assets/index-CeeLdENM.js +677 -0
  257. package/web/dist/assets/index-Ceez9lYk.css +1 -0
  258. package/web/dist/assets/infoDiagram-5W2HQ5XZ-Bv4RBxYW.js +2 -0
  259. package/web/dist/assets/ini-BEwlwnbL.js +1 -0
  260. package/web/dist/assets/init-Gi6I4Gst.js +1 -0
  261. package/web/dist/assets/ishikawaDiagram-K3B6WC7H-DEpj0bRp.js +70 -0
  262. package/web/dist/assets/java-CylS5w8V.js +1 -0
  263. package/web/dist/assets/javascript-wDzz0qaB.js +1 -0
  264. package/web/dist/assets/jinja-f2NsQr07.js +1 -0
  265. package/web/dist/assets/jison-wvAkD_A8.js +1 -0
  266. package/web/dist/assets/journeyDiagram-COXZFDF6-MJu84Iiz.js +139 -0
  267. package/web/dist/assets/json-Cp-IABpG.js +1 -0
  268. package/web/dist/assets/json5-C9tS-k6U.js +1 -0
  269. package/web/dist/assets/jsonc-Des-eS-w.js +1 -0
  270. package/web/dist/assets/jsonl-DcaNXYhu.js +1 -0
  271. package/web/dist/assets/jsonnet-DFQXde-d.js +1 -0
  272. package/web/dist/assets/jssm-C2t-YnRu.js +1 -0
  273. package/web/dist/assets/jsx-g9-lgVsj.js +1 -0
  274. package/web/dist/assets/julia-5Bft2YPA.js +1 -0
  275. package/web/dist/assets/just-Cwhn7H3k.js +1 -0
  276. package/web/dist/assets/kanagawa-dragon-BuwD2xS4.js +1 -0
  277. package/web/dist/assets/kanagawa-lotus-C3DzagqV.js +1 -0
  278. package/web/dist/assets/kanagawa-wave-DFGoQZhC.js +1 -0
  279. package/web/dist/assets/kanban-definition-P3RFRI5V-mlYSRALK.js +89 -0
  280. package/web/dist/assets/kdl-DV7GczEv.js +1 -0
  281. package/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
  282. package/web/dist/assets/kusto-wEQ09or8.js +1 -0
  283. package/web/dist/assets/laserwave-DUszq2jm.js +1 -0
  284. package/web/dist/assets/latex-D5pSuvFb.js +1 -0
  285. package/web/dist/assets/lean-BZvkOJ9d.js +1 -0
  286. package/web/dist/assets/less-B1dDrJ26.js +1 -0
  287. package/web/dist/assets/light-plus-B7mTdjB0.js +1 -0
  288. package/web/dist/assets/linear-5j9gt8MV.js +1 -0
  289. package/web/dist/assets/liquid-C0sCDyMI.js +1 -0
  290. package/web/dist/assets/llvm-BZoOZj88.js +1 -0
  291. package/web/dist/assets/log-2UxHyX5q.js +1 -0
  292. package/web/dist/assets/logo-BtOb2qkB.js +1 -0
  293. package/web/dist/assets/lua-BaeVxFsk.js +1 -0
  294. package/web/dist/assets/luau-BnpPk5vE.js +1 -0
  295. package/web/dist/assets/make-CHLpvVh8.js +1 -0
  296. package/web/dist/assets/markdown-BWXjRrSw.js +30 -0
  297. package/web/dist/assets/markdown-Cvjx9yec.js +1 -0
  298. package/web/dist/assets/marko-DjSrsDqO.js +1 -0
  299. package/web/dist/assets/material-theme-D5KoaKCx.js +1 -0
  300. package/web/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  301. package/web/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  302. package/web/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  303. package/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  304. package/web/dist/assets/matlab-D7o27uSR.js +1 -0
  305. package/web/dist/assets/mdc-D1_yUvq7.js +1 -0
  306. package/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  307. package/web/dist/assets/mermaid-CQcHuHx7.js +1 -0
  308. package/web/dist/assets/mermaid.core-DLb6eAON.js +314 -0
  309. package/web/dist/assets/min-dark-CafNBF8u.js +1 -0
  310. package/web/dist/assets/min-light-CTRr51gU.js +1 -0
  311. package/web/dist/assets/mindmap-definition-LZFPQGKD-C9v_57Ex.js +96 -0
  312. package/web/dist/assets/mipsasm-CKIfxQSi.js +1 -0
  313. package/web/dist/assets/mojo-DJz3ZmWd.js +1 -0
  314. package/web/dist/assets/monokai-BRVnQi9A.js +1 -0
  315. package/web/dist/assets/moonbit-CHtswR0a.js +1 -0
  316. package/web/dist/assets/move-el3G9tDJ.js +1 -0
  317. package/web/dist/assets/narrat-DRg8JJMk.js +1 -0
  318. package/web/dist/assets/nextflow-C-mBbutL.js +1 -0
  319. package/web/dist/assets/nextflow-groovy-vE_lwT2v.js +1 -0
  320. package/web/dist/assets/nginx-BpAMiNFr.js +1 -0
  321. package/web/dist/assets/night-owl-C39BiMTA.js +1 -0
  322. package/web/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
  323. package/web/dist/assets/nim-BIad80T-.js +1 -0
  324. package/web/dist/assets/nix-CwoSXNpI.js +1 -0
  325. package/web/dist/assets/nord-Ddv68eIx.js +1 -0
  326. package/web/dist/assets/nsis-BlV79W_Q.js +1 -0
  327. package/web/dist/assets/nushell-D3jzshHO.js +1 -0
  328. package/web/dist/assets/objective-c-DXmwc3jG.js +1 -0
  329. package/web/dist/assets/objective-cpp-CLxacb5B.js +1 -0
  330. package/web/dist/assets/ocaml-C0hk2d4L.js +1 -0
  331. package/web/dist/assets/odin-BBf5iR-q.js +1 -0
  332. package/web/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  333. package/web/dist/assets/one-light-C3Wv6jpd.js +1 -0
  334. package/web/dist/assets/openscad-C4EeE6gA.js +1 -0
  335. package/web/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  336. package/web/dist/assets/org-DM6o9KBp.js +1 -0
  337. package/web/dist/assets/panels-BQOvnbWH.js +1 -0
  338. package/web/dist/assets/pascal-D93ZcfNL.js +1 -0
  339. package/web/dist/assets/pegDiagram-BGZESJAR-KQP26s3-.js +1 -0
  340. package/web/dist/assets/perl-B9cMNwum.js +1 -0
  341. package/web/dist/assets/php-Csjmro_R.js +1 -0
  342. package/web/dist/assets/pieDiagram-CAPJLFHJ-DN3RQ_ih.js +39 -0
  343. package/web/dist/assets/pkl-u5AG7uiY.js +1 -0
  344. package/web/dist/assets/plastic-3e1v2bzS.js +1 -0
  345. package/web/dist/assets/plsql-ChMvpjG-.js +1 -0
  346. package/web/dist/assets/po-BTJTHyun.js +1 -0
  347. package/web/dist/assets/poimandres-CS3Unz2-.js +1 -0
  348. package/web/dist/assets/polar-C0HS_06l.js +1 -0
  349. package/web/dist/assets/postcss-CXtECtnM.js +1 -0
  350. package/web/dist/assets/powerquery-CEu0bR-o.js +1 -0
  351. package/web/dist/assets/powershell-BmBUJMz7.js +1 -0
  352. package/web/dist/assets/prisma-Vru482bI.js +1 -0
  353. package/web/dist/assets/profileChange-B7TaQ18u.js +1 -0
  354. package/web/dist/assets/prolog-CbFg5uaA.js +1 -0
  355. package/web/dist/assets/proto-C7zT0LnQ.js +1 -0
  356. package/web/dist/assets/pug-DKIMFp6K.js +1 -0
  357. package/web/dist/assets/puppet-BMWR74SV.js +1 -0
  358. package/web/dist/assets/purescript-CklMAg4u.js +1 -0
  359. package/web/dist/assets/python-B6aJPvgy.js +1 -0
  360. package/web/dist/assets/qml-3beO22l8.js +1 -0
  361. package/web/dist/assets/qmldir-C8lEn-DE.js +1 -0
  362. package/web/dist/assets/qss-IeuSbFQv.js +1 -0
  363. package/web/dist/assets/quadrantDiagram-GDMTTRAM-BpL_ZL76.js +7 -0
  364. package/web/dist/assets/r-Cf5RLm7j.js +1 -0
  365. package/web/dist/assets/racket-BqYA7rlc.js +1 -0
  366. package/web/dist/assets/railroadDiagram-SM67HX2B-DZ-fPU85.js +1 -0
  367. package/web/dist/assets/raku-DXvB9xmW.js +1 -0
  368. package/web/dist/assets/razor-BjBPvh-w.js +1 -0
  369. package/web/dist/assets/rbs-CpoqiR4B.js +1 -0
  370. package/web/dist/assets/react-vendor-C0HIWSpf.js +9 -0
  371. package/web/dist/assets/red-hvxz__6c.js +1 -0
  372. package/web/dist/assets/reg-C-SQnVFl.js +1 -0
  373. package/web/dist/assets/regexp-CDVJQ6XC.js +1 -0
  374. package/web/dist/assets/rel-C3B-1QV4.js +1 -0
  375. package/web/dist/assets/requirementDiagram-X7JNWC4A-mKPGj64L.js +84 -0
  376. package/web/dist/assets/riscv-BM1_JUlF.js +1 -0
  377. package/web/dist/assets/ron-D8l8udqQ.js +1 -0
  378. package/web/dist/assets/rose-pine-5qJOZa0Y.js +1 -0
  379. package/web/dist/assets/rose-pine-dawn-zx0QlTCp.js +1 -0
  380. package/web/dist/assets/rose-pine-moon-C9pEdX9L.js +1 -0
  381. package/web/dist/assets/rosmsg-BJDFO7_C.js +1 -0
  382. package/web/dist/assets/rst-bs7f0vWN.js +1 -0
  383. package/web/dist/assets/ruby-C0TQ7zu5.js +1 -0
  384. package/web/dist/assets/rust-B1yitclQ.js +1 -0
  385. package/web/dist/assets/sankeyDiagram-UM26HJRW-Bs4xfjQP.js +40 -0
  386. package/web/dist/assets/sas-DEy46yEz.js +1 -0
  387. package/web/dist/assets/sass-Cj5Yp3dK.js +1 -0
  388. package/web/dist/assets/scala-CqE71os6.js +1 -0
  389. package/web/dist/assets/scheme-C98Dy4si.js +1 -0
  390. package/web/dist/assets/scss-D5BDwBP9.js +1 -0
  391. package/web/dist/assets/sdbl-DVxCFoDh.js +1 -0
  392. package/web/dist/assets/sequenceDiagram-ZO4K6R2Y-BjUmzZaO.js +169 -0
  393. package/web/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
  394. package/web/dist/assets/shellscript-Yzrsuije.js +1 -0
  395. package/web/dist/assets/shellsession-BADoaaVG.js +1 -0
  396. package/web/dist/assets/sizeCapture-INFHLROL-BXBM3j_Q.js +1 -0
  397. package/web/dist/assets/slack-dark-BthQWCQV.js +1 -0
  398. package/web/dist/assets/slack-ochin-DqwNpetd.js +1 -0
  399. package/web/dist/assets/smalltalk-BOQMe2GC.js +1 -0
  400. package/web/dist/assets/smithy-cds9vsN8.js +1 -0
  401. package/web/dist/assets/snazzy-light-Bw305WKR.js +1 -0
  402. package/web/dist/assets/solarized-dark-CpvCGNkr.js +1 -0
  403. package/web/dist/assets/solarized-light-Dlz6yCKv.js +1 -0
  404. package/web/dist/assets/solidity-DijEV5ha.js +1 -0
  405. package/web/dist/assets/soy-8wufbnw4.js +1 -0
  406. package/web/dist/assets/sparql-rVzFXLq3.js +1 -0
  407. package/web/dist/assets/splunk-BtCnVYZw.js +1 -0
  408. package/web/dist/assets/sql-CRqJ_cUM.js +1 -0
  409. package/web/dist/assets/ssh-config-_ykCGR6B.js +1 -0
  410. package/web/dist/assets/stata-DI20mbqo.js +1 -0
  411. package/web/dist/assets/state-Kfon1nTr.js +17 -0
  412. package/web/dist/assets/stateDiagram-v2-TBUQTH76-FGgFDGUU.js +291 -0
  413. package/web/dist/assets/sttLanguages-C7kVulzY.js +1 -0
  414. package/web/dist/assets/stylus-BEDo0Tqx.js +1 -0
  415. package/web/dist/assets/surrealql-Cjom0U5J.js +1 -0
  416. package/web/dist/assets/svelte-Cy7k_4gC.js +1 -0
  417. package/web/dist/assets/swift-C2oV4EkX.js +1 -0
  418. package/web/dist/assets/swimlanes-N4OXWK64-wkd_n4HU.js +1 -0
  419. package/web/dist/assets/swimlanesDiagram-K3J5GTZL-CKnwEuq_.js +8 -0
  420. package/web/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  421. package/web/dist/assets/system-verilog-0hqHdDBg.js +1 -0
  422. package/web/dist/assets/systemd-4A_iFExJ.js +1 -0
  423. package/web/dist/assets/talonscript-CkByrt1z.js +1 -0
  424. package/web/dist/assets/tasl-QIJgUcNo.js +1 -0
  425. package/web/dist/assets/tcl-dwOrl1Do.js +1 -0
  426. package/web/dist/assets/templ-DhtptRzy.js +1 -0
  427. package/web/dist/assets/terraform-BETggiCN.js +1 -0
  428. package/web/dist/assets/tex-D96PA37w.js +1 -0
  429. package/web/dist/assets/timeline-definition-YOQAKGHF-DyBln1jw.js +120 -0
  430. package/web/dist/assets/tokyo-night-hegEt444.js +1 -0
  431. package/web/dist/assets/toml-vGWfd6FD.js +1 -0
  432. package/web/dist/assets/ts-tags-D351s5mN.js +1 -0
  433. package/web/dist/assets/tsv-B_m7g4N7.js +1 -0
  434. package/web/dist/assets/tsx-COt5Ahok.js +1 -0
  435. package/web/dist/assets/turtle-BsS91CYL.js +1 -0
  436. package/web/dist/assets/twig-27uCiNez.js +1 -0
  437. package/web/dist/assets/typescript-BPQ3VLAy.js +1 -0
  438. package/web/dist/assets/typespec-CAFt9gP4.js +1 -0
  439. package/web/dist/assets/typst-BUadGCkm.js +1 -0
  440. package/web/dist/assets/usecaseDiagram-VIAY4XPW-Cqis3XHX.js +370 -0
  441. package/web/dist/assets/v-BGw2Nkan.js +1 -0
  442. package/web/dist/assets/vala-CsfeWuGM.js +1 -0
  443. package/web/dist/assets/vb-Cu-pLBUe.js +1 -0
  444. package/web/dist/assets/vennDiagram-BLWOH2XV-BaiFLOVS.js +34 -0
  445. package/web/dist/assets/verilog-nZwndyjY.js +1 -0
  446. package/web/dist/assets/vesper-DRje8inN.js +1 -0
  447. package/web/dist/assets/vhdl-CeAyd5Ju.js +1 -0
  448. package/web/dist/assets/viml-CJc9bBzg.js +1 -0
  449. package/web/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  450. package/web/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  451. package/web/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  452. package/web/dist/assets/vue-BqiEGhQt.js +1 -0
  453. package/web/dist/assets/vue-html-AaS7Mt5G.js +1 -0
  454. package/web/dist/assets/vue-vine-BoDAl6tE.js +1 -0
  455. package/web/dist/assets/vyper-CDx5xZoG.js +1 -0
  456. package/web/dist/assets/wardleyDiagram-YMQ3BMBF-C4CzpJto.js +78 -0
  457. package/web/dist/assets/wasm-CG6Dc4jp.js +1 -0
  458. package/web/dist/assets/wasm-MzD3tlZU.js +1 -0
  459. package/web/dist/assets/wenyan-BV7otONQ.js +1 -0
  460. package/web/dist/assets/wgsl-Dx-B1_4e.js +1 -0
  461. package/web/dist/assets/wikitext-BhOHFoWU.js +1 -0
  462. package/web/dist/assets/wit-5i3qLPDT.js +1 -0
  463. package/web/dist/assets/wolfram-lXgVvXCa.js +1 -0
  464. package/web/dist/assets/xml-sdJ4AIDG.js +1 -0
  465. package/web/dist/assets/xsl-CtQFsRM5.js +1 -0
  466. package/web/dist/assets/xychartDiagram-TAQBALBS-Dp1hfe3-.js +7 -0
  467. package/web/dist/assets/yaml-Buea-lGh.js +1 -0
  468. package/web/dist/assets/zenscript-DVFEvuxE.js +1 -0
  469. package/web/dist/assets/zig-VOosw3JB.js +1 -0
  470. package/web/dist/favicon.svg +40 -0
  471. package/web/dist/figma-demo/product-1.jpg +0 -0
  472. package/web/dist/figma-demo/product-2.jpg +0 -0
  473. package/web/dist/figma-demo/trail-1.jpg +0 -0
  474. package/web/dist/figma-demo/trail-2.jpg +0 -0
  475. package/web/dist/figma-demo/trail-3.jpg +0 -0
  476. package/web/dist/fonts/OFL-Inter.txt +93 -0
  477. package/web/dist/fonts/inter-latin-400-normal.woff2 +0 -0
  478. package/web/dist/fonts/inter-latin-600-normal.woff2 +0 -0
  479. package/web/dist/icons/icon-180.png +0 -0
  480. package/web/dist/icons/icon-192.png +0 -0
  481. package/web/dist/icons/icon-512.png +0 -0
  482. package/web/dist/icons/icon-maskable-512.png +0 -0
  483. package/web/dist/index.html +56 -0
  484. package/web/dist/logo.svg +40 -0
  485. package/web/dist/manifest.webmanifest +16 -0
@@ -0,0 +1,205 @@
1
+ /**
2
+ * 把 steps.json 里累计的 ANSI 字节流回放成 PNG 截图(终端判读图流水线第 ② 阶段)。
3
+ *
4
+ * - 用真实的 xterm.js 5.3.0(Chromium 内)回放「累计 ANSI 流」,
5
+ * terminal 固定 120x30,与采集时的 VirtualTerminal 尺寸一致 —— 因此截图
6
+ * 就是「终端里真实长什么样」的忠实还原。
7
+ * - 同时把每步的 scrollback(回滚缓冲)审计出来:横幅是否被重复夯进历史。
8
+ *
9
+ * SHOT_DIR=<采集产物目录> node --experimental-strip-types scripts/figure/replay-shots.mjs
10
+ *
11
+ * 环境变量:SHOT_DIR(必填)· SHOT_COLS · SHOT_ROWS · SHOT_FONT · SHOT_SCROLLTOP
12
+ * 上游采集器:packages/cli/scripts/slash-toggle-capture.tsx(产物含 steps.json)
13
+ */
14
+ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs'
15
+ import { resolve, dirname } from 'node:path'
16
+ import { fileURLToPath } from 'node:url'
17
+ import { createRequire } from 'node:module'
18
+
19
+ const require = createRequire(import.meta.url)
20
+ const HERE = dirname(fileURLToPath(import.meta.url))
21
+
22
+ const SHOT_DIR = process.env.SHOT_DIR
23
+ if (!SHOT_DIR) {
24
+ console.error(
25
+ '[shot] 需要 SHOT_DIR 指向采集产物目录(里面要有 steps.json)。\n' +
26
+ '[shot] 例:SHOT_DIR=.playwright-mcp/slash-toggle node --experimental-strip-types ' +
27
+ 'scripts/figure/replay-shots.mjs',
28
+ )
29
+ process.exit(1)
30
+ }
31
+
32
+ const DIR = resolve(SHOT_DIR)
33
+ const IN = resolve(DIR, 'steps.json')
34
+ const OUT = DIR
35
+
36
+ const COLS = Number(process.env.SHOT_COLS || 120)
37
+ const ROWS = Number(process.env.SHOT_ROWS || 30)
38
+ const FONT_SIZE = Number(process.env.SHOT_FONT || 14)
39
+
40
+ const steps = JSON.parse(readFileSync(IN, 'utf8'))
41
+
42
+ // ── 1. 回滚缓冲审计(纯文本,不依赖浏览器) ────────────────────────────────
43
+ const BANNER = 'DeepSeekCode'
44
+ const countOf = (hay, needle) => {
45
+ let n = 0
46
+ for (let i = hay.indexOf(needle); i !== -1; i = hay.indexOf(needle, i + needle.length)) n++
47
+ return n
48
+ }
49
+
50
+ console.log('================ 回滚缓冲审计 ================')
51
+ const audit = []
52
+ for (const s of steps) {
53
+ const screenRows = s.screen.split('\n').length
54
+ const histRows = s.history.split('\n').length
55
+ const scrollbackRows = histRows - screenRows
56
+ const bannerTotal = countOf(s.history, BANNER)
57
+ const bannerScrollback = countOf(s.history.split('\n').slice(0, scrollbackRows).join('\n'), BANNER)
58
+ audit.push({
59
+ name: s.name,
60
+ bytes: s.bytes,
61
+ bannerWrites: s.bannerWrites,
62
+ screenRows,
63
+ scrollbackRows,
64
+ bannerTotal,
65
+ bannerScrollback,
66
+ })
67
+ }
68
+ console.table(audit)
69
+
70
+ // 打印每步回滚区(viewport 之上的那几行),看是否有半截横幅残留
71
+ for (const s of steps) {
72
+ const screenRows = s.screen.split('\n').length
73
+ const hist = s.history.split('\n')
74
+ const sb = hist.slice(0, hist.length - screenRows)
75
+ if (sb.length) {
76
+ console.log(`\n--- ${s.name}: scrollback ${sb.length} 行 ---`)
77
+ sb.forEach((l, i) => console.log(String(i).padStart(3) + '|' + l))
78
+ }
79
+ }
80
+
81
+ // ── 2. 用 xterm.js 渲染 PNG ────────────────────────────────────────────────
82
+ const xtermJs = readFileSync(require.resolve('xterm/lib/xterm.js'), 'utf8')
83
+ const xtermCss = readFileSync(require.resolve('xterm/css/xterm.css'), 'utf8')
84
+
85
+ const { chromium } = require('playwright')
86
+
87
+ const THEME = {
88
+ background: '#0c0c0c',
89
+ foreground: '#d4d4d4',
90
+ cursor: '#d4d4d4',
91
+ black: '#000000',
92
+ red: '#cd3131',
93
+ green: '#0dbc79',
94
+ yellow: '#e5e510',
95
+ blue: '#2472c8',
96
+ magenta: '#bc3fbc',
97
+ cyan: '#11a8cd',
98
+ white: '#e5e5e5',
99
+ brightBlack: '#666666',
100
+ brightRed: '#f14c4c',
101
+ brightGreen: '#23d18b',
102
+ brightYellow: '#f5f543',
103
+ brightBlue: '#3b8eea',
104
+ brightMagenta: '#d670d6',
105
+ brightCyan: '#29b8db',
106
+ brightWhite: '#e5e5e5',
107
+ }
108
+
109
+ function pageHtml() {
110
+ return `<!doctype html><html><head><meta charset="utf-8">
111
+ <style>${xtermCss}</style>
112
+ <style>
113
+ html,body{margin:0;padding:0;background:#0c0c0c;}
114
+ #wrap{display:inline-block;padding:0;}
115
+ .xterm-viewport{overflow:hidden !important;}
116
+ </style></head>
117
+ <body><div id="wrap"></div></body></html>`
118
+ }
119
+
120
+ // 本仓库的 playwright 走 --remote-debugging-pipe 会抛 `Invalid URL: undefined`,
121
+ // 按 scripts/repro-browser.mjs 的做法改用 port 传输。
122
+ const browser = await chromium.launch({
123
+ headless: true,
124
+ args: ['--no-sandbox', '--remote-debugging-port=0'],
125
+ ignoreDefaultArgs: ['--remote-debugging-pipe'],
126
+ })
127
+ mkdirSync(OUT, { recursive: true })
128
+ const written = []
129
+
130
+ try {
131
+ for (const step of steps) {
132
+ const page = await browser.newPage({
133
+ viewport: { width: 1600, height: 900 },
134
+ deviceScaleFactor: 2,
135
+ })
136
+ await page.setContent(pageHtml(), { waitUntil: 'load' })
137
+ await page.addScriptTag({ content: xtermJs })
138
+
139
+ const info = await page.evaluate(
140
+ async ({ cols, rows, ansi, fontSize, theme, scrollTop }) => {
141
+ // eslint-disable-next-line no-undef
142
+ const term = new window.Terminal({
143
+ cols,
144
+ rows,
145
+ fontSize,
146
+ fontFamily: 'Consolas, "Cascadia Mono", "Microsoft YaHei", monospace',
147
+ theme,
148
+ allowProposedApi: true,
149
+ convertEol: false,
150
+ // 保留回滚区,好把「被推入原生 scrollback 的残带」也拍出来
151
+ scrollback: 5000,
152
+ })
153
+ const wrap = document.getElementById('wrap')
154
+ term.open(wrap)
155
+ await new Promise((res) => term.write(ansi, res))
156
+ if (scrollTop) {
157
+ term.scrollToTop()
158
+ await new Promise((r) => setTimeout(r, 80))
159
+ }
160
+ await new Promise((r) => setTimeout(r, 120))
161
+ const buf = term.buffer.active
162
+ const el = document.querySelector('#wrap .xterm')
163
+ return {
164
+ width: el.getBoundingClientRect().width,
165
+ height: el.getBoundingClientRect().height,
166
+ scrollbackRows: buf.baseY,
167
+ }
168
+ },
169
+ {
170
+ cols: COLS,
171
+ rows: ROWS,
172
+ ansi: step.ansi,
173
+ fontSize: FONT_SIZE,
174
+ theme: THEME,
175
+ scrollTop: Boolean(process.env.SHOT_SCROLLTOP),
176
+ },
177
+ )
178
+
179
+ // 视口裁到真实像素尺寸
180
+ await page.setViewportSize({
181
+ width: Math.ceil(info.width) + 2,
182
+ height: Math.ceil(info.height) + 2,
183
+ })
184
+ await page.evaluate(() => {
185
+ document.body.style.background = '#0c0c0c'
186
+ })
187
+ await new Promise((r) => setTimeout(r, 120))
188
+
189
+ const el = await page.$('#wrap .xterm')
190
+ const suffix = process.env.SHOT_SCROLLTOP ? '-scrolltop' : ''
191
+ const file = resolve(OUT, `shot-${step.name}${suffix}.png`)
192
+ await el.screenshot({ path: file })
193
+ written.push(file)
194
+ console.log(
195
+ `[shot] ${step.name}${suffix}: ${Math.round(info.width)}x${Math.round(info.height)}css ` +
196
+ `scrollbackRows=${info.scrollbackRows} -> ${file}`,
197
+ )
198
+ await page.close()
199
+ }
200
+ } finally {
201
+ await browser.close()
202
+ }
203
+
204
+ writeFileSync(resolve(OUT, 'audit.json'), JSON.stringify(audit, null, 2), 'utf8')
205
+ console.log('\n[shot] wrote:\n' + written.map((f) => ' ' + f).join('\n'))
@@ -0,0 +1 @@
1
+ import{j as e}from"./markdown-BWXjRrSw.js";import{a as n,B as v,d as C,l as S,m as I,n as z,o as y,h as E,M as A,p as R}from"./icons-Bm_ZzSAy.js";import{u as k,a as N,c as q,s as L,b as M,B as $}from"./index-CeeLdENM.js";import{S as B}from"./Skeleton-Dsk6B0U3.js";import"./react-vendor-C0HIWSpf.js";import"./state-Kfon1nTr.js";import"./panels-BQOvnbWH.js";const Q=n.memo(function({selectedSessionId:s,onSelectionChange:c,onOpenSession:l,onNavigate:m,onCollapse:u}){const{t:a}=k(),[d,i]=n.useState([]),[x,p]=n.useState(!0),[g,h]=n.useState(null),[b,j]=n.useState(null),r=n.useCallback(async()=>{try{const t=await N.assistants.list();t.success&&Array.isArray(t.data)?(i(t.data),h(null)):h(t.error||a("assistants.loadFailed"))}catch(t){h(t instanceof Error?t.message:String(t))}finally{p(!1)}},[a]);n.useEffect(()=>{r();const t=window.setInterval(()=>{r()},8e3);return()=>window.clearInterval(t)},[r]);const w=n.useCallback(async(t,f)=>{(await N.assistants.update(t,f)).success&&r()},[r]);return n.useEffect(()=>{if(!s)return;const t=d.find(f=>f.sessionId===s);t&&c(t)},[d,s,c]),e.jsxs("div",{className:"flex h-full flex-col overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-dark-border px-4 py-2.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(v,{size:16,className:"text-accent-blue","aria-hidden":"true"}),e.jsx("h2",{className:"text-sm font-semibold text-dark-text",children:a("assistants.title")}),!x&&e.jsx("span",{className:"rounded-full bg-dark-hover px-1.5 py-0.5 text-badge text-dark-muted",children:d.length})]}),e.jsxs("div",{className:"flex items-center gap-0.5",children:[e.jsxs("button",{type:"button",onClick:()=>void r(),className:"flex items-center gap-1 rounded px-2 py-1 text-xs text-dark-muted hover:bg-dark-hover hover:text-dark-text",title:a("common.refresh"),children:[e.jsx(C,{size:12,className:x?"animate-spin":"","aria-hidden":"true"}),a("common.refresh")]}),u&&e.jsx("button",{type:"button",onClick:u,className:"rounded p-1 text-dark-muted hover:bg-dark-hover hover:text-dark-text",title:a("assistants.collapseList"),"aria-label":a("assistants.collapseList"),"aria-expanded":!0,"data-testid":"assistants-list-collapse",children:e.jsx(S,{size:13,"aria-hidden":"true"})})]})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto p-2",children:x&&d.length===0?e.jsx("div",{className:"py-2",role:"status","aria-label":a("assistants.loading"),children:e.jsx(B,{count:4})}):g&&d.length===0?e.jsx("div",{className:"py-8 text-center text-xs text-accent-red",children:g}):d.length===0?e.jsxs("div",{className:"py-10 text-center text-xs text-dark-muted",children:[e.jsx(v,{size:24,className:"mx-auto mb-2 text-dark-muted","aria-hidden":"true"}),e.jsx("p",{children:a("assistants.empty")}),e.jsx("p",{className:"mt-1 text-meta",children:a("assistants.emptyHint")}),e.jsx("button",{type:"button",onClick:()=>m("channels"),className:"mt-3 rounded border border-dark-border px-2.5 py-1 text-meta text-dark-text hover:bg-dark-hover",children:a("assistants.goChannels")})]}):e.jsx("div",{className:"flex flex-col gap-2",children:d.map(t=>e.jsx(P,{assistant:t,selected:s===t.sessionId,onSelect:()=>c(t),expanded:b===t.sessionId,onToggleExpand:()=>j(b===t.sessionId?null:t.sessionId),onOpen:()=>l(t.sessionId,t.title),onUpdate:f=>void w(t.sessionId,f)},t.sessionId))})})]})}),P=n.memo(function({assistant:s,selected:c,onSelect:l,expanded:m,onToggleExpand:u,onOpen:a,onUpdate:d}){const{t:i}=k(),x=s.channel.peerKind==="group";return e.jsxs("div",{className:`rounded-lg border bg-dark-surface transition-colors ${c?"border-accent-blue/60 ring-1 ring-accent-blue/30":"border-dark-border"}`,children:[e.jsxs("button",{type:"button",onClick:l,"aria-current":c?"true":void 0,className:`flex w-full items-center gap-2 rounded-t-lg px-3 py-2 text-left focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-accent-blue/60 ${c?"bg-accent-blue/5":"hover:bg-dark-hover/40"}`,children:[e.jsx("span",{className:"text-base leading-none","aria-hidden":"true",children:q(s.channel.type)}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium text-dark-text",title:s.title,children:s.title}),e.jsx("span",{className:`h-1.5 w-1.5 shrink-0 rounded-full ${L(s.status)}`,title:i(`assistants.status.${s.status}`,{defaultValue:s.status})}),x?e.jsx(I,{size:11,className:"shrink-0 text-dark-muted","aria-label":i("assistants.group")}):e.jsx(z,{size:11,className:"shrink-0 text-dark-muted","aria-label":i("assistants.dm")})]}),e.jsxs("div",{className:"mt-0.5 flex items-center gap-1.5 text-badge text-dark-muted",children:[e.jsx("span",{className:"shrink-0",children:M(s.channel.type)}),e.jsx("span",{className:"min-w-0 flex-1 truncate",title:s.channel.peerId,children:s.channel.peerId}),s.stats.unread>0&&e.jsx("span",{className:"shrink-0 rounded-full bg-accent-red/15 px-1.5 text-avatar font-medium text-accent-fg",children:s.stats.unread})]}),s.preview&&e.jsx("p",{className:"mt-1 line-clamp-2 text-meta leading-snug text-dark-muted",title:s.preview,children:s.preview})]}),e.jsx(U,{mode:s.mode}),s.trust.level==="owner"?e.jsx(y,{size:12,className:"shrink-0 text-accent-green","aria-label":i("assistants.trust.owner")}):s.trust.level==="public"?e.jsx(E,{size:12,className:"shrink-0 text-accent-yellow","aria-label":i("assistants.trust.public")}):e.jsx(y,{size:12,className:"shrink-0 text-accent-blue","aria-label":i("assistants.trust.team")})]}),e.jsxs("div",{className:"flex items-center gap-1.5 border-t border-dark-border px-3 py-1.5",children:[e.jsxs("button",{type:"button",onClick:a,className:"flex items-center gap-1 rounded px-2 py-0.5 text-meta text-accent-blue hover:bg-dark-hover",children:[e.jsx(A,{size:11,"aria-hidden":"true"}),i("assistants.openSession")]}),e.jsx("button",{type:"button",onClick:u,className:"flex items-center gap-1 rounded px-2 py-0.5 text-meta text-dark-muted hover:bg-dark-hover hover:text-dark-text",children:i("assistants.policy")}),e.jsx("span",{className:"flex-1"}),e.jsx("span",{className:"text-badge text-dark-muted",children:i("assistants.groupPolicy",{mention:String(x?s.policy.mentionRequired:!1)})})]}),m&&e.jsx(T,{assistant:s,isGroup:x,onUpdate:d})]})});function U({mode:o}){const{t:s}=k();return e.jsx("span",{className:`shrink-0 rounded px-1.5 py-0.5 text-avatar font-medium ${o==="delegate"?"bg-accent-blue/15 text-accent-blue":"bg-dark-hover text-dark-muted"}`,children:s(`assistants.mode.${o}`)})}function T({assistant:o,isGroup:s,onUpdate:c}){const{t:l}=k(),[m,u]=n.useState(o.mode),[a,d]=n.useState(o.policy.mentionRequired),[i,x]=n.useState(String(o.policy.cooldownSeconds)),[p,g]=n.useState((o.policy.keywords??[]).join(", ")),[h,b]=n.useState(!1),j=()=>{b(!0),c({mode:m,policy:{mentionRequired:s?a:!1,cooldownSeconds:Math.max(0,Number(i)||0),...p.trim()?{keywords:p.split(/[,,]/).map(r=>r.trim()).filter(Boolean)}:{}}}),window.setTimeout(()=>b(!1),600)};return e.jsxs("div",{className:"border-t border-dark-border px-3 py-2.5 text-meta",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-2",children:[e.jsxs("label",{className:"flex items-center gap-1.5 text-dark-muted",children:[l("assistants.mode.label"),e.jsxs("select",{value:m,onChange:r=>u(r.target.value),className:"rounded border border-dark-border bg-dark-surface px-1.5 py-0.5 text-dark-text",children:[e.jsx("option",{value:"delegate",children:l("assistants.mode.delegate")}),e.jsx("option",{value:"direct",children:l("assistants.mode.direct")})]})]}),s&&e.jsxs("label",{className:"flex items-center gap-1.5 text-dark-muted",children:[e.jsx("input",{type:"checkbox",checked:a,onChange:r=>d(r.target.checked)}),l("assistants.mentionRequired")]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-dark-muted",children:[l("assistants.cooldown"),e.jsx("input",{type:"number",min:0,value:i,onChange:r=>x(r.target.value),className:"w-14 rounded border border-dark-border bg-dark-surface px-1.5 py-0.5 text-dark-text"}),"s"]})]}),e.jsxs("label",{className:"mt-2 flex items-center gap-1.5 text-dark-muted",children:[l("assistants.keywords"),e.jsx("input",{type:"text",value:p,placeholder:l("assistants.keywordsPlaceholder")??"",onChange:r=>g(r.target.value),className:"min-w-0 flex-1 rounded border border-dark-border bg-dark-surface px-1.5 py-0.5 text-dark-text"})]}),e.jsx("div",{className:"mt-2 flex justify-end",children:e.jsx($,{size:"sm",variant:"accent",onClick:j,loading:h,leftIcon:e.jsx(R,{size:11,"aria-hidden":"true"}),children:l("common.save")})})]})}export{Q as AssistantsView};
@@ -0,0 +1 @@
1
+ import{j as e}from"./markdown-BWXjRrSw.js";import{a as l,y as H,d as ye,A as ee,z as Ne,F as we,s as te,P as Ae,H as Ce,I as Ie,w as $e,J as ze,x as Se,X as q,N as ae,u as ie,O as De,q as se,Q as re,V as K,o as Pe,Y as Ee,_ as qe,$ as Re}from"./icons-Bm_ZzSAy.js";import{u as le,d as Te,B as ce,r as Le,a as R,t as ne}from"./index-CeeLdENM.js";import"./react-vendor-C0HIWSpf.js";import"./state-Kfon1nTr.js";import"./panels-BQOvnbWH.js";const v={name:"",instructions:"",freq:"daily",time:"09:00",dow:"1",onceAt:"",cron:"0 9 * * *",modelRef:"",connectorIds:[],channelIds:[],workspaceDir:"",readAutoAllow:!0},Oe=".agent/automation-attachments",j=a=>String(a).padStart(2,"0");function Me(a){const n=a.schedule,h={modelRef:a.modelRef??"",connectorIds:Array.isArray(a.connectorIds)?[...a.connectorIds]:[],channelIds:Array.isArray(a.notificationChannelIds)?[...a.notificationChannelIds]:[],workspaceDir:a.workspaceDir??"",readAutoAllow:a.readAutoAllow};if(n.kind==="once"&&n.fireAt){const x=new Date(n.fireAt);return{...v,name:a.name,instructions:a.instructions,freq:"once",time:`${j(x.getHours())}:${j(x.getMinutes())}`,onceAt:`${x.getFullYear()}-${j(x.getMonth()+1)}-${j(x.getDate())}T${j(x.getHours())}:${j(x.getMinutes())}`,...h}}const o=(n.cron||"").trim().split(/\s+/),i={...v,name:a.name,instructions:a.instructions,...h};if(o.length===5){const x=o[0]??"",g=o[1]??"",k=o[4]??"",y=`${j(parseInt(g,10)||0)}:${j(parseInt(x,10)||0)}`;if(k==="*")return{...i,freq:"daily",time:y};if(k==="1-5")return{...i,freq:"weekdays",time:y};if(/^\d+$/.test(k))return{...i,freq:"weekly",time:y,dow:k}}return{...i,freq:"custom",cron:n.cron||""}}function oe(a){const[n,h]=a.time.split(":"),o=parseInt(n??"",10),i=parseInt(h??"",10);switch(a.freq){case"daily":return Number.isInteger(o)&&Number.isInteger(i)?{kind:"cron",cron:`${i} ${o} * * *`}:null;case"weekdays":return Number.isInteger(o)&&Number.isInteger(i)?{kind:"cron",cron:`${i} ${o} * * 1-5`}:null;case"weekly":return Number.isInteger(o)&&Number.isInteger(i)?{kind:"cron",cron:`${i} ${o} * * ${a.dow}`}:null;case"once":return a.onceAt?{kind:"once",fireAt:new Date(a.onceAt).toISOString()}:null;case"custom":return a.cron.trim()?{kind:"cron",cron:a.cron.trim()}:null}}function de(a,n){if(a.kind==="once"&&a.fireAt){const k=new Date(a.fireAt);return`${n("automation.badgeOnce")} ${k.toLocaleString()}`}const h=(a.cron||"").trim().split(/\s+/);if(h.length!==5)return a.cron||"";const o=h[0]??"",i=h[1]??"",x=h[4]??"",g=`${j(parseInt(i,10)||0)}:${j(parseInt(o,10)||0)}`;return x==="*"?n("automation.badgeDaily",{time:g}):x==="1-5"?n("automation.badgeWeekdays",{time:g}):/^\d+$/.test(x)?n("automation.badgeWeekly",{day:n(`automation.dow.${["sunday","monday","tuesday","wednesday","thursday","friday","saturday"][parseInt(x,10)%7]}`),time:g}):a.cron||""}const He=[{value:"1",key:"automation.dow.monday"},{value:"2",key:"automation.dow.tuesday"},{value:"3",key:"automation.dow.wednesday"},{value:"4",key:"automation.dow.thursday"},{value:"5",key:"automation.dow.friday"},{value:"6",key:"automation.dow.saturday"},{value:"0",key:"automation.dow.sunday"}];function Ke(a){const n=a.replace(/[\\/]+$/,""),h=Math.max(n.lastIndexOf("\\"),n.lastIndexOf("/"));return h===-1?n:n.slice(h+1)}function Fe({initial:a,onClose:n,onConfirm:h}){const{t:o}=le(),[i,x]=l.useState(a),[g,k]=l.useState(null),[y,M]=l.useState([]),[C,D]=l.useState(!1),[S,I]=l.useState(""),[N,r]=l.useState(a),m=l.useRef(null),w=async b=>{D(!0),I("");try{const u=await R.dirs.list(b);if(!u.success||!u.data){I(u.error||"加载目录失败");return}x(u.data.path),k(u.data.parent),M(u.data.dirs||[]),r(u.data.path)}catch(u){I(u instanceof Error?u.message:"加载目录失败")}finally{D(!1)}};return l.useEffect(()=>{w(a)},[a]),l.useEffect(()=>{var b;(b=m.current)==null||b.focus()},[]),l.useEffect(()=>{const b=u=>{u.key==="Escape"&&(u.preventDefault(),u.stopPropagation(),n())};return document.addEventListener("keydown",b),document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",b),document.body.style.overflow=""}},[n]),e.jsxs("div",{className:"fixed inset-0 z-[60] flex items-center justify-center overflow-hidden p-4",role:"dialog","aria-modal":"true",children:[e.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:n}),e.jsxs("div",{className:"relative w-full max-w-lg mx-4 bg-dark-surface border border-dark-border rounded-xl shadow-2xl flex flex-col max-h-[70vh]",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-2.5 border-b border-dark-border shrink-0",children:[e.jsxs("span",{className:"flex items-center gap-2 text-compact font-semibold text-dark-text",children:[e.jsx(K,{size:15,className:"text-accent-blue"}),o("automation.workspacePick")]}),e.jsx("button",{type:"button",onClick:n,className:"rounded p-1 text-dark-muted hover:bg-dark-hover",children:e.jsx(q,{size:15})})]}),e.jsxs("div",{className:"p-4 flex flex-col gap-3 min-h-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(Ee,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-dark-muted/60"}),e.jsx("input",{ref:m,value:N,onChange:b=>r(b.target.value),onKeyDown:b=>{b.key==="Enter"&&w(N.trim())},spellCheck:!1,className:"w-full rounded-lg border border-dark-border bg-dark-bg pl-8 pr-2.5 py-1.5 text-xs font-mono focus:outline-none focus:border-accent-blue/50"})]}),e.jsx("button",{type:"button",onClick:()=>void w(N.trim()),disabled:C||!N.trim(),className:"shrink-0 rounded-lg border border-dark-border px-2.5 py-1.5 text-xs text-dark-muted hover:bg-dark-hover disabled:opacity-40",children:o("chat.dirPickerGo")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"flex-1 truncate font-mono text-meta text-dark-muted bg-dark-bg rounded-md px-2 py-1 border border-dark-border",title:i,children:i||"—"}),e.jsxs("button",{type:"button",onClick:()=>g&&void w(g),disabled:C||!g,className:"shrink-0 flex items-center gap-1 rounded-md border border-dark-border px-2 py-1 text-meta text-dark-muted hover:bg-dark-hover disabled:opacity-40",children:[e.jsx(qe,{size:12}),o("chat.dirPickerUp")]})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto rounded-lg border border-dark-border bg-dark-bg divide-y divide-dark-border/60",children:C?e.jsxs("div",{className:"flex items-center justify-center gap-2 py-6 text-xs text-dark-muted",children:[e.jsx(ie,{size:14,className:"animate-spin"}),o("chat.loading")]}):S?e.jsx("div",{className:"px-3 py-4 text-xs text-accent-red",children:S}):y.length===0?e.jsx("div",{className:"px-3 py-4 text-xs text-dark-muted/60 text-center",children:"—"}):y.map(b=>{const u=i.includes("\\")?"\\":"/",T=i.endsWith(u)?i+b:i+u+b;return e.jsxs("button",{type:"button",onClick:()=>void w(T),className:"w-full flex items-center gap-2 px-3 py-1.5 text-left text-xs text-dark-text hover:bg-dark-hover",children:[e.jsx(Re,{size:13,className:"shrink-0 text-accent-yellow/80"}),e.jsx("span",{className:"truncate",children:b})]},b)})}),e.jsx(ce,{variant:"accent",className:"w-full",onClick:()=>h(i),disabled:!i,loading:C,children:o("chat.dirPickerConfirm")})]})]})]})}function Ve(){const{t:a}=le(),{automations:n,runsByAutomation:h,fetchAutomations:o,createAutomation:i,updateAutomation:x,deleteAutomation:g,toggleAutomation:k,runAutomation:y,fetchRuns:M,error:C}=Te(),[D,S]=l.useState(!1),[I,N]=l.useState(null),[r,m]=l.useState(v),[w,b]=l.useState(null),[u,T]=l.useState(""),[me,F]=l.useState(!1),[ue,L]=l.useState(!1),[W,B]=l.useState([]),[G,U]=l.useState([]),[_,J]=l.useState([]),[V,Y]=l.useState(!1),[P,A]=l.useState([]),Q=l.useRef(null);l.useEffect(()=>{o()},[o]);const X=async t=>{N(null),m(t?{...t.form}:{...v}),A([]),S(!0),await Z()},xe=async t=>{N(t.id),m(Me(t)),A((t.attachments??[]).map((s,d)=>({id:`existing-${d}-${s}`,name:Ke(s),file:null,uploading:!1,path:s}))),S(!0),await Z()},O=()=>{S(!1),N(null),m(v),A([]),L(!1)},Z=async()=>{var t,s;Y(!0);try{const[d,c,p]=await Promise.all([R.models.list().catch(()=>({success:!1,data:void 0})),R.connectors.list().catch(()=>({success:!1,data:void 0})),R.channels.list().catch(()=>({success:!1,data:void 0}))]);d.success&&((t=d.data)!=null&&t.models)?B(d.data.models.filter(f=>f.enabled!==!1)):B([]),c.success&&((s=c.data)!=null&&s.connectors)?U(c.data.connectors.filter(f=>f.installed)):U([]),p.success&&Array.isArray(p.data)?J(p.data):J([])}finally{Y(!1)}},be=async()=>{const t=oe(r);if(!r.name.trim()||!r.instructions.trim()||!t)return;if(P.some(p=>p.uploading)){ne.warning("附件上传中,请稍候…");return}const s=P.filter(p=>p.error).map(p=>p.name);if(s.length>0){ne.warning(`附件上传失败:${s.join(", ")}`);return}F(!0);const d={name:r.name.trim(),instructions:r.instructions.trim(),schedule:t,workspaceDir:r.workspaceDir.trim(),readAutoAllow:r.readAutoAllow,modelRef:r.modelRef.trim()||null,attachments:P.map(p=>p.path).filter(p=>!!p),connectorIds:[...r.connectorIds],notificationChannelIds:[...r.channelIds]},c=I?await x(I,d):await i(d)!==null;F(!1),c&&O()},pe=async t=>{const s=u.trim();if(!s)return;const[d,...c]=s.split(/\s+/),p=c.join(" ");d&&p&&(await fetch(`/api/automations/${encodeURIComponent(t)}/permissions`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({tool:d,target:p})})).ok&&(T(""),await o())},he=async(t,s)=>{(await fetch(`/api/automations/${encodeURIComponent(t)}/permissions`,{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({entry:s})})).ok&&await o()},fe=async t=>{const s=w===t?null:t;b(s),s&&await M(t)},ge=async t=>{var d;if(!t||t.length===0)return;const s=Array.from(t).map(c=>({id:`f-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,name:c.name,file:c,uploading:!0}));A(c=>[...c,...s]);for(const c of s){const p=`${Oe}/${c.name}`;try{const f=await R.files.upload(c.file,p);if(f.success&&((d=f.data)!=null&&d.path)){const E=f.data.path.replace(/\\/g,"/");A($=>$.map(z=>z.id===c.id?{...z,uploading:!1,path:E}:z))}else A(E=>E.map($=>$.id===c.id?{...$,uploading:!1,error:f.error||"upload failed"}:$))}catch(f){const E=f instanceof Error?f.message:"upload failed";A($=>$.map(z=>z.id===c.id?{...z,uploading:!1,error:E}:z))}}},ke=t=>{A(s=>s.filter(d=>d.id!==t))},je=[{id:"movie",nameKey:"automation.tplMovieName",descKey:"automation.tplMovieDesc",form:{...v,name:a("automation.tplMovieName"),instructions:a("automation.tplMovieInstr"),freq:"daily",time:"20:00"}},{id:"health",nameKey:"automation.tplHealthName",descKey:"automation.tplHealthDesc",form:{...v,name:a("automation.tplHealthName"),instructions:a("automation.tplHealthInstr"),freq:"daily",time:"14:00"}},{id:"why",nameKey:"automation.tplWhyName",descKey:"automation.tplWhyDesc",form:{...v,name:a("automation.tplWhyName"),instructions:a("automation.tplWhyInstr"),freq:"daily",time:"16:00"}},{id:"git",nameKey:"automation.tplGitName",descKey:"automation.tplGitDesc",form:{...v,name:a("automation.tplGitName"),instructions:a("automation.tplGitInstr"),freq:"weekdays",time:"09:00"}}],ve=r.name.trim()&&r.instructions.trim()&&(r.freq==="custom"?!!r.cron.trim():r.freq==="once"?!!r.onceAt:!0);return e.jsxs("div",{className:"flex-1 min-h-0 flex flex-col overflow-y-auto p-6",children:[e.jsxs("div",{className:"max-w-4xl w-full mx-auto",children:[e.jsxs("div",{className:"flex items-start justify-between mb-1",children:[e.jsxs("h2",{className:"text-xl font-semibold flex items-center gap-2",children:[e.jsx(H,{size:20,className:"text-accent-blue"}),a("automation.title")]}),e.jsx("button",{onClick:()=>void o(),className:"p-2 rounded-lg hover:bg-dark-hover text-dark-muted",title:a("automation.refresh"),children:e.jsx(ye,{size:16})})]}),e.jsx("p",{className:"text-sm text-dark-muted mb-5",children:a("automation.subtitle")}),C&&e.jsxs("div",{className:"mb-4 p-3 rounded-lg bg-accent-red/10 text-accent-red text-sm flex items-center gap-2",children:[e.jsx(ee,{size:16})," ",C]}),e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(Ne,{size:16,className:"text-accent-yellow"}),e.jsx("h3",{className:"text-sm font-semibold",children:a("automation.recommendedTitle")})]}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 gap-3 mb-8",children:je.map(t=>e.jsxs("button",{onClick:()=>void X(t),className:"text-left rounded-xl border border-dark-border bg-dark-surface p-4 hover:border-accent-blue/60 hover:bg-dark-hover/50 transition-colors flex flex-col gap-2",children:[e.jsx("span",{className:"text-sm font-semibold",children:a(t.nameKey)}),e.jsx("span",{className:"text-xs text-dark-muted leading-relaxed line-clamp-3 flex-1",children:a(t.descKey)}),e.jsxs("span",{className:"inline-flex items-center gap-1 self-start px-2 py-0.5 rounded-md bg-dark-hover text-xs text-dark-muted",children:[e.jsx(H,{size:12})," ",de(oe(t.form),a)]})]},t.id))}),e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("h3",{className:"text-sm font-semibold",children:a("automation.mineTitle")}),e.jsx("span",{className:"text-xs text-dark-muted",children:n.length})]}),n.length===0?e.jsxs("div",{className:"rounded-xl border border-dashed border-dark-border py-12 flex flex-col items-center gap-2 text-center",children:[e.jsx(we,{size:32,className:"text-dark-muted"}),e.jsx("p",{className:"text-sm font-medium",children:a("automation.emptyTitle")}),e.jsx("p",{className:"text-xs text-dark-muted",children:a("automation.emptyDesc")}),e.jsxs("button",{onClick:()=>void X(),className:"mt-2 flex items-center gap-1 px-4 py-1.5 rounded-lg border border-dark-border bg-dark-surface hover:bg-dark-hover text-sm font-medium",children:[e.jsx(te,{size:15})," ",a("automation.new")]})]}):e.jsx("div",{className:"space-y-2",children:n.map(t=>e.jsxs("div",{className:"rounded-xl border border-dark-border bg-dark-surface",children:[e.jsxs("div",{className:"flex items-center justify-between p-3",children:[e.jsxs("button",{onClick:()=>void fe(t.id),className:"flex items-center gap-2 min-w-0 text-left",children:[e.jsx(H,{size:16,className:"text-accent-blue shrink-0"}),e.jsx("span",{className:"font-medium text-sm truncate",children:t.name}),e.jsx("span",{className:`text-xs px-1.5 py-0.5 rounded shrink-0 ${t.status==="enabled"?"bg-accent-green/20 text-accent-green":"bg-dark-hover text-dark-muted"}`,children:t.status==="enabled"?a("automation.enabled"):a("automation.disabled")}),e.jsx("span",{className:"text-xs text-dark-muted shrink-0 hidden md:inline",children:de(t.schedule,a)})]}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[t.nextRunAt&&e.jsxs("span",{className:"text-xs text-dark-muted hidden lg:inline mr-1",children:[a("automation.nextRun"),": ",new Date(t.nextRunAt).toLocaleString()]}),e.jsx("button",{onClick:()=>void xe(t),className:"p-1.5 rounded-lg hover:bg-dark-hover text-dark-muted",title:a("automation.edit"),children:e.jsx(Ae,{size:15})}),e.jsx("button",{onClick:()=>void k(t.id,t.status!=="enabled"),className:"p-1.5 rounded-lg hover:bg-dark-hover text-dark-muted",title:t.status==="enabled"?a("automation.disable"):a("automation.enable"),children:e.jsx(Ce,{size:15})}),e.jsx("button",{onClick:()=>void y(t.id),className:"p-1.5 rounded-lg hover:bg-dark-hover text-accent-green",title:a("automation.runNow"),children:e.jsx(Ie,{size:15})}),e.jsx("button",{onClick:()=>void g(t.id),className:"p-1.5 rounded-lg hover:bg-dark-hover text-accent-red",title:a("automation.delete"),children:e.jsx($e,{size:15})})]})]}),w===t.id&&e.jsxs("div",{className:"px-3 pb-3 space-y-3 border-t border-dark-border pt-3",children:[e.jsx("p",{className:"text-xs text-dark-muted whitespace-pre-wrap",children:t.instructions}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-xs font-semibold text-dark-muted mb-1 flex items-center gap-1",children:[e.jsx(ze,{size:12})," ",a("automation.historyTitle")]}),(h[t.id]||[]).length===0&&e.jsx("p",{className:"text-xs text-dark-muted",children:a("automation.noRuns")}),(h[t.id]||[]).slice(0,10).map(s=>e.jsxs("div",{className:"flex items-center gap-2 text-xs py-1",children:[e.jsxs("span",{className:`px-1.5 py-0.5 rounded flex items-center gap-1 ${s.status==="ok"?"bg-accent-green/20 text-accent-green":s.status==="error"?"bg-accent-red/20 text-accent-red":"bg-accent-yellow/20 text-accent-yellow"}`,children:[s.status==="ok"&&e.jsx(Se,{size:11}),s.status]}),e.jsx("span",{className:"text-dark-muted",children:new Date(s.startedAt).toLocaleString()}),e.jsxs("span",{className:"text-dark-muted truncate flex-1",children:["#",s.id.slice(0,8)," · ",s.trigger]})]},s.id))]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-dark-muted mb-1",children:a("automation.permissionsTitle")}),t.permissions.length===0&&e.jsx("p",{className:"text-xs text-dark-muted",children:a("automation.permissionsEmpty")}),e.jsx("div",{className:"flex flex-wrap gap-1 mb-1",children:t.permissions.map(s=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded bg-accent-blue/10 text-accent-blue text-xs",children:[s,e.jsx("button",{onClick:()=>void he(t.id,s),className:"hover:text-accent-red",children:e.jsx(q,{size:12})})]},s))}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:u,onChange:s=>T(s.target.value),placeholder:a("automation.permissionPlaceholder"),className:"flex-1 px-2 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-xs focus:outline-none focus:border-accent-blue"}),e.jsx("button",{onClick:()=>void pe(t.id),className:"px-3 py-1.5 rounded-lg bg-dark-hover text-dark-muted hover:text-dark-text text-xs",children:a("automation.add")})]})]})]})]},t.id))})]}),D&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",onClick:O,children:e.jsxs("div",{className:"w-full max-w-2xl rounded-xl border border-dark-border bg-dark-surface p-5 space-y-4 shadow-xl max-h-[90vh] overflow-y-auto custom-scrollbar",onClick:t=>t.stopPropagation(),children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold",children:a(I?"automation.editTitle":"automation.createTitle")}),e.jsx("p",{className:"text-xs text-dark-muted mt-0.5",children:a("automation.subtitle")})]}),e.jsx("button",{onClick:O,className:"p-1.5 rounded-lg hover:bg-dark-hover text-dark-muted",children:e.jsx(q,{size:16})})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-dark-muted mb-1.5",children:a("automation.nameLabel")}),e.jsx("input",{autoFocus:!0,value:r.name,onChange:t=>m(s=>({...s,name:t.target.value})),placeholder:a("automation.namePlaceholder"),className:"w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-sm focus:outline-none focus:border-accent-blue"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-dark-muted mb-1.5",children:a("automation.scheduleLabel")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("select",{value:r.freq,onChange:t=>m(s=>({...s,freq:t.target.value})),className:"px-2.5 py-2 rounded-lg bg-dark-bg border border-dark-border text-sm focus:outline-none focus:border-accent-blue",children:[e.jsx("option",{value:"daily",children:a("automation.freqDaily")}),e.jsx("option",{value:"weekly",children:a("automation.freqWeekly")}),e.jsx("option",{value:"weekdays",children:a("automation.freqWeekdays")}),e.jsx("option",{value:"once",children:a("automation.freqOnce")}),e.jsx("option",{value:"custom",children:a("automation.freqCustom")})]}),r.freq==="weekly"&&e.jsx("select",{value:r.dow,onChange:t=>m(s=>({...s,dow:t.target.value})),className:"px-2.5 py-2 rounded-lg bg-dark-bg border border-dark-border text-sm focus:outline-none focus:border-accent-blue",children:He.map(t=>e.jsx("option",{value:t.value,children:a(t.key)},t.value))}),(r.freq==="daily"||r.freq==="weekly"||r.freq==="weekdays")&&e.jsx("input",{type:"time",value:r.time,onChange:t=>m(s=>({...s,time:t.target.value})),className:"flex-1 px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-sm focus:outline-none focus:border-accent-blue"}),r.freq==="once"&&e.jsx("input",{type:"datetime-local",value:r.onceAt,onChange:t=>m(s=>({...s,onceAt:t.target.value})),className:"flex-1 px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-sm focus:outline-none focus:border-accent-blue"}),r.freq==="custom"&&e.jsx("input",{value:r.cron,onChange:t=>m(s=>({...s,cron:t.target.value})),placeholder:"*/30 * * * *",className:"flex-1 px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-sm font-mono focus:outline-none focus:border-accent-blue"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-dark-muted mb-1.5",children:a("automation.instructionLabel")}),e.jsx("textarea",{value:r.instructions,onChange:t=>m(s=>({...s,instructions:t.target.value})),placeholder:a("automation.instructionsPlaceholder"),rows:4,className:"w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-sm focus:outline-none focus:border-accent-blue resize-none"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"flex items-center gap-1.5 text-xs font-medium text-dark-muted mb-1.5",children:[e.jsx(ae,{size:12})," ",a("automation.attachmentsLabel")]}),e.jsx("p",{className:"text-badge text-dark-muted/70 mb-1.5",children:a("automation.attachmentsHint")}),P.length===0?e.jsx("div",{className:"text-xs text-dark-muted/60 italic",children:a("automation.attachmentsEmpty")}):e.jsx("div",{className:"flex flex-wrap gap-1.5 mb-2",children:P.map(t=>e.jsxs("span",{className:`inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs ${t.error?"bg-accent-red/10 text-accent-red":t.uploading?"bg-dark-hover text-dark-muted":"bg-accent-blue/10 text-accent-blue"}`,title:t.path??t.error,children:[e.jsx(ae,{size:11}),e.jsx("span",{className:"truncate max-w-[180px]",children:t.name}),t.uploading&&e.jsx(ie,{size:11,className:"animate-spin"}),t.error&&e.jsx(ee,{size:11}),e.jsx("button",{onClick:()=>ke(t.id),className:"hover:text-accent-red ml-0.5",children:e.jsx(q,{size:11})})]},t.id))}),e.jsx("input",{ref:Q,type:"file",multiple:!0,className:"hidden",onChange:t=>{ge(t.target.files),t.target.value=""}}),e.jsxs("button",{type:"button",onClick:()=>{var t;return(t=Q.current)==null?void 0:t.click()},className:"inline-flex items-center gap-1 px-2.5 py-1 rounded-lg border border-dashed border-dark-border text-xs text-dark-muted hover:border-accent-blue/60 hover:text-accent-blue",children:[e.jsx(te,{size:12})," ",a("automation.attachmentsAdd")]})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"flex items-center gap-1.5 text-xs font-medium text-dark-muted mb-1.5",children:[e.jsx(De,{size:12})," ",a("automation.modelLabel")]}),e.jsxs("select",{value:r.modelRef,onChange:t=>m(s=>({...s,modelRef:t.target.value})),className:"w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-sm focus:outline-none focus:border-accent-blue",disabled:V,children:[e.jsx("option",{value:"",children:a("automation.modelAuto")}),W.map(t=>e.jsxs("option",{value:`${t.provider}:${t.id}`,children:[t.name," · ",t.provider]},`${t.provider}:${t.id}`))]}),!V&&W.length===0&&e.jsx("p",{className:"text-badge text-dark-muted/70 mt-1",children:a("automation.modelNoModels")})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"flex items-center gap-1.5 text-xs font-medium text-dark-muted mb-1.5",children:[e.jsx(se,{size:12})," ",a("automation.connectorsLabel")]}),e.jsx("p",{className:"text-badge text-dark-muted/70 mb-1.5",children:a("automation.connectorsHint")}),G.length===0?e.jsx("div",{className:"text-xs text-dark-muted/60 italic",children:a("automation.connectorsEmpty")}):e.jsx("div",{className:"flex flex-wrap gap-1.5",children:G.map(t=>{const s=r.connectorIds.includes(t.id);return e.jsxs("button",{type:"button",onClick:()=>m(d=>({...d,connectorIds:s?d.connectorIds.filter(c=>c!==t.id):[...d.connectorIds,t.id]})),className:`inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs transition-colors ${s?"bg-accent-blue/15 text-accent-blue border border-accent-blue/40":"bg-dark-bg text-dark-muted border border-dark-border hover:border-accent-blue/40 hover:text-accent-blue"}`,children:[e.jsx(se,{size:11}),t.name]},t.id)})})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"flex items-center gap-1.5 text-xs font-medium text-dark-muted mb-1.5",children:[e.jsx(re,{size:12})," ",a("automation.channelsLabel")]}),e.jsx("p",{className:"text-badge text-dark-muted/70 mb-1.5",children:a("automation.channelsHint")}),_.length===0?e.jsx("div",{className:"text-xs text-dark-muted/60 italic",children:a("automation.channelsEmpty")}):e.jsx("div",{className:"flex flex-wrap gap-1.5",children:_.map(t=>{const s=r.channelIds.includes(t.id);return e.jsxs("button",{type:"button",disabled:!t.enabled,onClick:()=>m(d=>({...d,channelIds:s?d.channelIds.filter(c=>c!==t.id):[...d.channelIds,t.id]})),className:`inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs transition-colors ${s?"bg-accent-blue/15 text-accent-blue border border-accent-blue/40":t.enabled?"bg-dark-bg text-dark-muted border border-dark-border hover:border-accent-blue/40 hover:text-accent-blue":"bg-dark-bg text-dark-muted/50 border border-dark-border opacity-60 cursor-not-allowed"}`,children:[e.jsx(re,{size:11}),t.name,!t.enabled&&e.jsx("span",{className:"text-avatar",children:"·off"})]},t.id)})})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"flex items-center gap-1.5 text-xs font-medium text-dark-muted mb-1.5",children:[e.jsx(K,{size:12})," ",a("automation.workspaceLabel")]}),e.jsx("p",{className:"text-badge text-dark-muted/70 mb-1.5",children:a("automation.workspaceHint")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:r.workspaceDir,onChange:t=>m(s=>({...s,workspaceDir:t.target.value})),placeholder:"留空使用当前工作目录",className:"flex-1 px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-sm font-mono focus:outline-none focus:border-accent-blue"}),e.jsxs("button",{type:"button",onClick:()=>L(!0),className:"shrink-0 inline-flex items-center gap-1 px-3 py-2 rounded-lg border border-dark-border text-xs text-dark-muted hover:bg-dark-hover hover:text-dark-text",children:[e.jsx(K,{size:12})," ",a("automation.workspacePick")]}),r.workspaceDir&&e.jsx("button",{type:"button",onClick:()=>m(t=>({...t,workspaceDir:""})),className:"shrink-0 inline-flex items-center gap-1 px-2 py-2 rounded-lg border border-dark-border text-xs text-dark-muted hover:bg-dark-hover hover:text-accent-red",title:a("automation.workspaceClear"),children:e.jsx(q,{size:12})})]})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"flex items-center gap-1.5 text-xs font-medium text-dark-muted mb-1.5",children:[e.jsx(Pe,{size:12})," ",a("automation.permissionAccess")]}),e.jsxs("div",{className:"flex items-start gap-2 p-2.5 rounded-lg border border-dark-border bg-dark-bg",children:[e.jsx("button",{type:"button",role:"switch","aria-checked":r.readAutoAllow,onClick:()=>m(t=>({...t,readAutoAllow:!t.readAutoAllow})),className:`relative shrink-0 mt-0.5 inline-flex h-5 w-9 items-center rounded-full transition-colors ${r.readAutoAllow?"bg-accent-blue":"bg-dark-hover"}`,children:e.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${r.readAutoAllow?"translate-x-4":"translate-x-0.5"}`})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"text-xs font-medium text-dark-text",children:a("automation.fullAccessLabel")}),e.jsx("p",{className:"text-badge text-dark-muted/80 mt-0.5",children:a("automation.fullAccessHint")})]})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-1",children:[e.jsx("button",{onClick:O,className:"px-4 py-2 rounded-lg bg-dark-hover text-dark-muted hover:text-dark-text text-sm",children:a("automation.cancel")}),e.jsx(ce,{variant:"accent",onClick:()=>void be(),disabled:!ve,loading:me,children:a("automation.save")})]})]})}),ue&&D&&Le.createPortal(e.jsx(Fe,{initial:r.workspaceDir||"",onClose:()=>L(!1),onConfirm:t=>{m(s=>({...s,workspaceDir:t})),L(!1)}}),document.body)]})}export{Ve as AutomationView};
@@ -0,0 +1,8 @@
1
+ import{j as i}from"./markdown-BWXjRrSw.js";import{a as A,ba as gt,a7 as mt,a6 as xt,q as vt,s as re,A as Et,bb as Te,w as pt,p as Bt,g as Tt,d as St}from"./icons-Bm_ZzSAy.js";import{u as D,a$ as Se,b0 as W,c as X,b as J,B as Be,M as Rt,a as Pe,t as $}from"./index-CeeLdENM.js";import"./react-vendor-C0HIWSpf.js";import"./state-Kfon1nTr.js";import"./panels-BQOvnbWH.js";const Le=[{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 It(){const{t:n}=D(),{channels:a,availableTypes:s,typesLoaded:t,selectedType:e,selectType:r,loadTypes:o}=Se();A.useEffect(()=>{o()},[o]);const l=A.useMemo(()=>{if(s.length===0)return[];const x=new Set(s),f=Le.map(y=>({...y,types:y.types.filter(I=>x.has(I))})).filter(y=>y.types.length>0),d=new Set(Le.flatMap(y=>y.types)),p=s.filter(y=>!d.has(y));return p.length>0?[...f,{labelKey:"plugins",types:p}]:f},[s]),c=A.useMemo(()=>{const x=new Map;for(const f of a){const d=x.get(f.type)??{count:0,connected:0};x.set(f.type,{count:d.count+1,connected:d.connected+(f.connected?1:0)})}return x},[a]),u=s.length>0,g=A.useMemo(()=>u?a.filter(x=>s.includes(x.type)):[],[u,a,s]);return i.jsxs("div",{className:"flex flex-col h-full min-h-0 border-r border-dark-border bg-dark-surface",children:[i.jsxs("div",{className:"shrink-0 px-4 py-3 border-b border-dark-border",children:[i.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wide text-dark-muted",children:n("channels.sidebar.title")}),i.jsx("p",{className:"text-meta text-dark-muted mt-0.5",children:g.length>0?n("channels.sidebar.configuredCount",{n:g.length}):n(u?"channels.sidebar.clickToConfigure":"channels.sidebar.emptyHint")})]}),i.jsxs("div",{className:"flex-1 min-h-0 overflow-y-auto custom-scrollbar",children:[t&&!u&&i.jsxs("div",{className:"px-4 py-10 text-center",children:[i.jsx("p",{className:"text-xs text-dark-muted",children:n("channels.sidebar.empty")}),i.jsx("p",{className:"text-meta text-dark-muted/70 mt-1.5 leading-relaxed",children:n("channels.sidebar.emptyHint")})]}),l.map(x=>{const f=x.types.filter(d=>c.has(d));return f.length===0?null:i.jsxs("div",{children:[i.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:n(`channels.categories.${x.labelKey}`)}),f.map(d=>{const p=c.get(d);return i.jsx(qe,{label:J(d),icon:X(d),isSelected:e===d,experimental:W(d),info:p,onClick:()=>r(d)},d)})]},x.labelKey)}),(()=>{const x=l.flatMap(f=>f.types).filter(f=>!c.has(f));return x.length===0?null:i.jsxs("div",{children:[i.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:n("channels.sidebar.unconfigured")}),x.map(f=>i.jsx(qe,{label:J(f),icon:X(f),isSelected:e===f,experimental:W(f),onClick:()=>r(f)},f))]})})()]})]})}function qe({label:n,icon:a,isSelected:s,experimental:t,info:e,onClick:r}){const{t:o}=D();return i.jsxs("button",{onClick:r,className:`w-full flex items-center gap-2.5 px-4 py-2.5 text-left transition-colors hover:bg-dark-hover ${s?"bg-accent-blue/10 border-l-2 border-accent-blue":"border-l-2 border-transparent"}`,children:[i.jsx("span",{className:"text-lg shrink-0 w-7 h-7 flex items-center justify-center rounded-md bg-dark-bg",children:a}),i.jsxs("div",{className:"flex-1 min-w-0",children:[i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("span",{className:"text-sm font-medium text-dark-text truncate",children:n}),t&&i.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:o("channels.experimentalTip"),children:[i.jsx(gt,{className:"w-2.5 h-2.5"})," ",o("channels.experimentalShort")]}),e&&i.jsx("span",{className:"text-badge text-dark-muted bg-dark-hover px-1.5 py-0.5 rounded shrink-0",children:e.count})]}),i.jsx("div",{className:"flex items-center gap-1 mt-0.5",children:e?e.connected>0?i.jsxs("span",{className:"flex items-center gap-1 text-meta text-accent-green",children:[i.jsx(mt,{className:"w-3 h-3"}),e.connected===e.count?o("channels.status.connected"):o("channels.sidebar.partialConnected",{connected:e.connected,count:e.count})]}):i.jsxs("span",{className:"flex items-center gap-1 text-meta text-dark-muted",children:[i.jsx(xt,{className:"w-3 h-3"}),o("channels.status.disconnected")]}):i.jsx("span",{className:"text-meta text-dark-muted",children:o("channels.sidebar.unconfigured")})})]})]})}const z={name:"",type:"wechat",appId:"",appSecret:"",token:"",encodingAESKey:"",enabled:!0};function At(){const{t:n}=D(),{channels:a,selectedType:s,availableTypes:t,create:e,update:r,remove:o,toggle:l,error:c,clearError:u,openQr:g,load:x}=Se(),f=A.useMemo(()=>t.length>0&&!!s&&!t.includes(s),[t,s]),d=A.useMemo(()=>s?a.filter(h=>h.type===s):[],[a,s]),[p,y]=A.useState(""),[I,N]=A.useState(z),[R,B]=A.useState(!1),j=p==="__new__",k=A.useMemo(()=>j?null:d.find(h=>h.id===p)??null,[d,p,j]);A.useEffect(()=>{y(""),N(z),B(!1),u()},[s]),A.useEffect(()=>{s==="wechat"&&d.length===0&&!f&&g(null)},[s,d.length,f,g]),A.useEffect(()=>{k?N({name:k.name,type:k.type,appId:k.appId||"",appSecret:"",token:"",encodingAESKey:k.encodingAESKey||"",enabled:k.enabled}):j&&N(h=>({...h,type:s}))},[p]);const m=(h,T)=>{u(),N(M=>({...M,[h]:T}))},b=h=>{y(h),u()},C=()=>{y("__new__"),N({...z,type:s}),u()},w=()=>{y(""),N(z),u()},S=async()=>{if(!I.name.trim())return;B(!0);const h=k?await r(k.id,I):await e(I);B(!1),h&&(y(""),N(z))},v=async h=>{if(!confirm(n("channels.actions.deleteConfirmShort")))return;await o(h)&&p===h&&(y(""),N(z))},E=(h,T)=>{l(h,T)};return s?i.jsxs("div",{className:"flex-1 flex flex-col min-h-0 overflow-hidden",children:[i.jsx("div",{className:"shrink-0 px-6 py-4 border-b border-dark-border",children:i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("span",{className:"text-2xl",children:X(s)}),i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("h2",{className:"font-semibold text-base text-dark-text",children:J(s)}),W(s)&&i.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:n("channels.experimentalTip"),children:[i.jsx(gt,{className:"w-3 h-3"})," ",n("channels.experimentalLabel")]})]}),i.jsx("p",{className:"text-xs text-dark-muted mt-0.5",children:d.length>0?n("channels.instancesCount",{n:d.length}):n("channels.notConfiguredYet")}),W(s)&&i.jsx("p",{className:"text-badge text-accent-yellow mt-1",children:n("channels.experimentalDesc")})]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:()=>x(),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:n("channels.actions.refresh")}),i.jsx(Be,{size:"sm",variant:"accent",onClick:C,leftIcon:i.jsx(re,{className:"w-3.5 h-3.5"}),children:n("channels.createInstance")})]})]})}),c&&i.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:[i.jsx("span",{children:c}),i.jsx("button",{onClick:u,className:"text-accent-red hover:text-accent-red",children:i.jsx("span",{className:"w-4 h-4 inline-flex items-center justify-center",children:"×"})})]}),f&&i.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:[i.jsx(Et,{className:"w-3.5 h-3.5 mt-0.5 shrink-0"}),i.jsx("span",{children:n("channels.pluginMissingWarning",{name:s==="wechat"?" WeChat Channel":` ${J(s)}`})})]}),i.jsxs("div",{className:"flex-1 min-h-0 overflow-y-auto custom-scrollbar p-6",children:[d.length>1&&!j&&i.jsxs("div",{className:"mb-4",children:[i.jsx("label",{className:"block text-xs text-dark-muted mb-1.5",children:n("channels.selectInstance")}),i.jsxs("div",{className:"flex flex-wrap gap-2",children:[d.map(h=>i.jsxs("button",{onClick:()=>b(h.id),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs border transition-colors ${p===h.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:[i.jsx("span",{className:`w-1.5 h-1.5 rounded-full ${h.connected?"bg-accent-green":"bg-dark-muted"}`}),h.name]},h.id)),i.jsxs("button",{onClick:C,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:[i.jsx(re,{className:"w-3 h-3"})," ",n("channels.createShort")]})]})]}),d.length===0&&p===""&&i.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-center",children:[i.jsx("div",{className:"text-4xl mb-3",children:X(s)}),i.jsx("p",{className:"text-dark-text font-medium",children:n("channels.emptyWithType",{type:J(s)})}),i.jsx("p",{className:"text-sm text-dark-muted mt-1 mb-4",children:n(s==="wechat"?"channels.wechatBindHint":"channels.startWithCreate")}),s==="wechat"&&i.jsxs("button",{onClick:()=>g(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:[i.jsx(Te,{className:"w-4 h-4"})," ",n("channels.scanToBind")]}),i.jsx(Be,{variant:"accent",onClick:C,leftIcon:i.jsx(re,{className:"w-4 h-4"}),children:n("channels.createInstance")})]}),d.length===1&&p===""&&d[0]&&i.jsx(_e,{channel:d[0],onEdit:()=>b(d[0].id),onDelete:()=>v(d[0].id),onToggle:h=>E(d[0].id,h),onQr:()=>g(d[0])}),d.length>1&&p===""&&i.jsx("div",{className:"space-y-3",children:d.map(h=>i.jsx(_e,{channel:h,onEdit:()=>b(h.id),onDelete:()=>v(h.id),onToggle:T=>E(h.id,T),onQr:()=>g(h)},h.id))}),p!==""&&(j||k)&&i.jsx(Mt,{form:I,upd:m,saving:R,editing:!!k,channel:k??void 0,onSave:S,onCancel:w,onDelete:k?()=>v(k.id):void 0,onQr:k?()=>g(k):void 0})]})]}):i.jsx("div",{className:"flex-1 flex items-center justify-center",children:i.jsxs("div",{className:"text-center",children:[i.jsx(vt,{className:"w-12 h-12 mx-auto mb-3 text-dark-muted/40"}),i.jsx("p",{className:"text-dark-muted text-sm",children:n("channels.selectTypeHint")})]})})}function _e({channel:n,onEdit:a,onDelete:s,onToggle:t,onQr:e}){const{t:r}=D();return i.jsxs("div",{className:"border border-dark-border rounded-lg bg-dark-surface overflow-hidden",children:[i.jsx("div",{className:"p-5",children:i.jsxs("div",{className:"flex items-start justify-between",children:[i.jsxs("div",{children:[i.jsx("h3",{className:"font-medium text-dark-text",children:n.name}),i.jsxs("div",{className:"flex items-center gap-3 mt-2",children:[i.jsx("span",{className:`flex items-center gap-1 text-xs ${n.connected?"text-accent-green":"text-dark-muted"}`,children:n.connected?i.jsxs(i.Fragment,{children:[i.jsx(mt,{className:"w-3 h-3"})," ",r("channels.status.connected")]}):i.jsxs(i.Fragment,{children:[i.jsx(xt,{className:"w-3 h-3"})," ",r("channels.status.disconnected")]})}),i.jsxs("span",{className:"text-xs text-dark-muted",children:["AppID: ",n.appId||"—"]})]})]}),i.jsx("button",{onClick:()=>t(!n.enabled),className:`w-9 h-5 rounded-full relative transition-colors shrink-0 ${n.enabled?"bg-accent-green":"bg-dark-muted"}`,children:i.jsx("span",{className:`absolute top-0.5 w-4 h-4 bg-white rounded-full transition-all ${n.enabled?"left-[18px]":"left-0.5"}`})})]})}),i.jsxs("div",{className:"flex items-center gap-1 px-5 py-2.5 bg-dark-bg/50 border-t border-dark-border",children:[n.type==="wechat"&&i.jsxs("button",{onClick:e,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:[i.jsx(Te,{className:"w-3.5 h-3.5"})," ",r("channels.actions.qrLogin")]}),i.jsxs("button",{onClick:a,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:[i.jsx("span",{className:"w-3.5 h-3.5 inline-flex items-center justify-center",children:"✎"})," ",r("channels.actions.edit")]}),i.jsxs("button",{onClick:s,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 ml-auto",children:[i.jsx(pt,{className:"w-3.5 h-3.5"})," ",r("channels.actions.delete")]})]})]})}function Mt({form:n,upd:a,saving:s,editing:t,channel:e,onSave:r,onCancel:o,onDelete:l,onQr:c}){const{t:u}=D();return i.jsxs("div",{className:"border border-dark-border rounded-lg bg-dark-surface overflow-hidden",children:[i.jsx("div",{className:"px-5 py-4 border-b border-dark-border",children:i.jsx("h3",{className:"font-medium text-dark-text",children:u(t?"channels.editConfig":"channels.createConfig")})}),i.jsxs("div",{className:"p-5 space-y-4",children:[i.jsx(De,{label:u("channels.form.name"),required:!0,children:i.jsx("input",{value:n.name,onChange:g=>a("name",g.target.value),placeholder:u("channels.form.namePlaceholderDev"),className:O})}),i.jsxs(De,{label:u("channels.form.credentials"),children:[i.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-badge text-dark-muted mb-1",children:u("channels.form.appId")}),i.jsx("input",{value:n.appId,onChange:g=>a("appId",g.target.value),placeholder:"AppID",className:O})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-badge text-dark-muted mb-1",children:"AppSecret"}),i.jsx("input",{type:"password",value:n.appSecret,onChange:g=>a("appSecret",g.target.value),placeholder:u(t?"channels.form.leaveBlankUnchanged":"channels.form.appSecretValue"),className:O})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-badge text-dark-muted mb-1",children:"Token"}),i.jsx("input",{value:n.token,onChange:g=>a("token",g.target.value),placeholder:u(t?"channels.form.leaveBlankUnchanged":"channels.form.tokenCallback"),className:O})]}),n.type==="wechat"&&i.jsxs("div",{children:[i.jsx("label",{className:"block text-badge text-dark-muted mb-1",children:"EncodingAESKey"}),i.jsx("input",{value:n.encodingAESKey,onChange:g=>a("encodingAESKey",g.target.value),placeholder:u("channels.form.optionalShort"),className:O})]})]}),n.type==="wechat"&&i.jsx("p",{className:"text-xs text-dark-muted mt-2",children:u("channels.form.wechatIlinkHint")})]}),i.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-dark-border px-3 py-2.5",children:[i.jsxs("div",{children:[i.jsx("p",{className:"text-sm text-dark-text",children:u("channels.form.enabled")}),i.jsx("p",{className:"text-xs text-dark-muted",children:u("channels.form.enabledOffHint")})]}),i.jsx("button",{onClick:()=>a("enabled",!n.enabled),className:`w-9 h-5 rounded-full relative transition-colors shrink-0 ${n.enabled?"bg-accent-green":"bg-dark-muted"}`,children:i.jsx("span",{className:`absolute top-0.5 w-4 h-4 bg-white rounded-full transition-all ${n.enabled?"left-[18px]":"left-0.5"}`})})]}),t&&(e==null?void 0:e.type)==="wechat"&&c&&i.jsxs("button",{onClick:c,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:[i.jsx(Te,{className:"w-4 h-4"})," ",u("channels.qrLoginReauth")]})]}),i.jsxs("div",{className:"flex items-center justify-between px-5 py-3 bg-dark-bg/50 border-t border-dark-border",children:[i.jsx("div",{children:t&&l&&i.jsxs("button",{onClick:l,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:[i.jsx(pt,{className:"w-3.5 h-3.5"})," ",u("channels.actions.delete")]})}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:o,className:"px-4 py-2 text-sm text-dark-muted hover:text-dark-text transition-colors",children:u("channels.actions.cancel")}),i.jsx(Be,{variant:"accent",onClick:r,loading:s,disabled:!n.name.trim(),leftIcon:i.jsx(Bt,{className:"w-3.5 h-3.5"}),children:u("channels.save")})]})]})]})}function De({label:n,required:a,children:s}){return i.jsxs("div",{children:[i.jsxs("label",{className:"block text-xs text-dark-muted mb-1.5",children:[n,a&&i.jsx("span",{className:"text-accent-red ml-0.5",children:"*"})]}),s]})}const O="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";var V={},se,Ue;function Pt(){return Ue||(Ue=1,se=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),se}var ae={},_={},Fe;function U(){if(Fe)return _;Fe=1;let n;const a=[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];return _.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return t*4+17},_.getSymbolTotalCodewords=function(t){return a[t]},_.getBCHDigit=function(s){let t=0;for(;s!==0;)t++,s>>>=1;return t},_.setToSJISFunction=function(t){if(typeof t!="function")throw new Error('"toSJISFunc" is not a valid function.');n=t},_.isKanjiModeEnabled=function(){return typeof n<"u"},_.toSJIS=function(t){return n(t)},_}var ie={},Ke;function Re(){return Ke||(Ke=1,(function(n){n.L={bit:1},n.M={bit:0},n.Q={bit:3},n.H={bit:2};function a(s){if(typeof s!="string")throw new Error("Param is not a string");switch(s.toLowerCase()){case"l":case"low":return n.L;case"m":case"medium":return n.M;case"q":case"quartile":return n.Q;case"h":case"high":return n.H;default:throw new Error("Unknown EC Level: "+s)}}n.isValid=function(t){return t&&typeof t.bit<"u"&&t.bit>=0&&t.bit<4},n.from=function(t,e){if(n.isValid(t))return t;try{return a(t)}catch{return e}}})(ie)),ie}var oe,ze;function Lt(){if(ze)return oe;ze=1;function n(){this.buffer=[],this.length=0}return n.prototype={get:function(a){const s=Math.floor(a/8);return(this.buffer[s]>>>7-a%8&1)===1},put:function(a,s){for(let t=0;t<s;t++)this.putBit((a>>>s-t-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(a){const s=Math.floor(this.length/8);this.buffer.length<=s&&this.buffer.push(0),a&&(this.buffer[s]|=128>>>this.length%8),this.length++}},oe=n,oe}var ce,Ve;function qt(){if(Ve)return ce;Ve=1;function n(a){if(!a||a<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=a,this.data=new Uint8Array(a*a),this.reservedBit=new Uint8Array(a*a)}return n.prototype.set=function(a,s,t,e){const r=a*this.size+s;this.data[r]=t,e&&(this.reservedBit[r]=!0)},n.prototype.get=function(a,s){return this.data[a*this.size+s]},n.prototype.xor=function(a,s,t){this.data[a*this.size+s]^=t},n.prototype.isReserved=function(a,s){return this.reservedBit[a*this.size+s]},ce=n,ce}var le={},He;function _t(){return He||(He=1,(function(n){const a=U().getSymbolSize;n.getRowColCoords=function(t){if(t===1)return[];const e=Math.floor(t/7)+2,r=a(t),o=r===145?26:Math.ceil((r-13)/(2*e-2))*2,l=[r-7];for(let c=1;c<e-1;c++)l[c]=l[c-1]-o;return l.push(6),l.reverse()},n.getPositions=function(t){const e=[],r=n.getRowColCoords(t),o=r.length;for(let l=0;l<o;l++)for(let c=0;c<o;c++)l===0&&c===0||l===0&&c===o-1||l===o-1&&c===0||e.push([r[l],r[c]]);return e}})(le)),le}var de={},Oe;function Dt(){if(Oe)return de;Oe=1;const n=U().getSymbolSize,a=7;return de.getPositions=function(t){const e=n(t);return[[0,0],[e-a,0],[0,e-a]]},de}var ue={},Qe;function Ut(){return Qe||(Qe=1,(function(n){n.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const a={N1:3,N2:3,N3:40,N4:10};n.isValid=function(e){return e!=null&&e!==""&&!isNaN(e)&&e>=0&&e<=7},n.from=function(e){return n.isValid(e)?parseInt(e,10):void 0},n.getPenaltyN1=function(e){const r=e.size;let o=0,l=0,c=0,u=null,g=null;for(let x=0;x<r;x++){l=c=0,u=g=null;for(let f=0;f<r;f++){let d=e.get(x,f);d===u?l++:(l>=5&&(o+=a.N1+(l-5)),u=d,l=1),d=e.get(f,x),d===g?c++:(c>=5&&(o+=a.N1+(c-5)),g=d,c=1)}l>=5&&(o+=a.N1+(l-5)),c>=5&&(o+=a.N1+(c-5))}return o},n.getPenaltyN2=function(e){const r=e.size;let o=0;for(let l=0;l<r-1;l++)for(let c=0;c<r-1;c++){const u=e.get(l,c)+e.get(l,c+1)+e.get(l+1,c)+e.get(l+1,c+1);(u===4||u===0)&&o++}return o*a.N2},n.getPenaltyN3=function(e){const r=e.size;let o=0,l=0,c=0;for(let u=0;u<r;u++){l=c=0;for(let g=0;g<r;g++)l=l<<1&2047|e.get(u,g),g>=10&&(l===1488||l===93)&&o++,c=c<<1&2047|e.get(g,u),g>=10&&(c===1488||c===93)&&o++}return o*a.N3},n.getPenaltyN4=function(e){let r=0;const o=e.data.length;for(let c=0;c<o;c++)r+=e.data[c];return Math.abs(Math.ceil(r*100/o/5)-10)*a.N4};function s(t,e,r){switch(t){case n.Patterns.PATTERN000:return(e+r)%2===0;case n.Patterns.PATTERN001:return e%2===0;case n.Patterns.PATTERN010:return r%3===0;case n.Patterns.PATTERN011:return(e+r)%3===0;case n.Patterns.PATTERN100:return(Math.floor(e/2)+Math.floor(r/3))%2===0;case n.Patterns.PATTERN101:return e*r%2+e*r%3===0;case n.Patterns.PATTERN110:return(e*r%2+e*r%3)%2===0;case n.Patterns.PATTERN111:return(e*r%3+(e+r)%2)%2===0;default:throw new Error("bad maskPattern:"+t)}}n.applyMask=function(e,r){const o=r.size;for(let l=0;l<o;l++)for(let c=0;c<o;c++)r.isReserved(c,l)||r.xor(c,l,s(e,c,l))},n.getBestMask=function(e,r){const o=Object.keys(n.Patterns).length;let l=0,c=1/0;for(let u=0;u<o;u++){r(u),n.applyMask(u,e);const g=n.getPenaltyN1(e)+n.getPenaltyN2(e)+n.getPenaltyN3(e)+n.getPenaltyN4(e);n.applyMask(u,e),g<c&&(c=g,l=u)}return l}})(ue)),ue}var G={},Je;function bt(){if(Je)return G;Je=1;const n=Re(),a=[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],s=[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];return G.getBlocksCount=function(e,r){switch(r){case n.L:return a[(e-1)*4+0];case n.M:return a[(e-1)*4+1];case n.Q:return a[(e-1)*4+2];case n.H:return a[(e-1)*4+3];default:return}},G.getTotalCodewordsCount=function(e,r){switch(r){case n.L:return s[(e-1)*4+0];case n.M:return s[(e-1)*4+1];case n.Q:return s[(e-1)*4+2];case n.H:return s[(e-1)*4+3];default:return}},G}var fe={},Q={},Ye;function Ft(){if(Ye)return Q;Ye=1;const n=new Uint8Array(512),a=new Uint8Array(256);return(function(){let t=1;for(let e=0;e<255;e++)n[e]=t,a[t]=e,t<<=1,t&256&&(t^=285);for(let e=255;e<512;e++)n[e]=n[e-255]})(),Q.log=function(t){if(t<1)throw new Error("log("+t+")");return a[t]},Q.exp=function(t){return n[t]},Q.mul=function(t,e){return t===0||e===0?0:n[a[t]+a[e]]},Q}var $e;function Kt(){return $e||($e=1,(function(n){const a=Ft();n.mul=function(t,e){const r=new Uint8Array(t.length+e.length-1);for(let o=0;o<t.length;o++)for(let l=0;l<e.length;l++)r[o+l]^=a.mul(t[o],e[l]);return r},n.mod=function(t,e){let r=new Uint8Array(t);for(;r.length-e.length>=0;){const o=r[0];for(let c=0;c<e.length;c++)r[c]^=a.mul(e[c],o);let l=0;for(;l<r.length&&r[l]===0;)l++;r=r.slice(l)}return r},n.generateECPolynomial=function(t){let e=new Uint8Array([1]);for(let r=0;r<t;r++)e=n.mul(e,new Uint8Array([1,a.exp(r)]));return e}})(fe)),fe}var he,Ge;function zt(){if(Ge)return he;Ge=1;const n=Kt();function a(s){this.genPoly=void 0,this.degree=s,this.degree&&this.initialize(this.degree)}return a.prototype.initialize=function(t){this.degree=t,this.genPoly=n.generateECPolynomial(this.degree)},a.prototype.encode=function(t){if(!this.genPoly)throw new Error("Encoder not initialized");const e=new Uint8Array(t.length+this.degree);e.set(t);const r=n.mod(e,this.genPoly),o=this.degree-r.length;if(o>0){const l=new Uint8Array(this.degree);return l.set(r,o),l}return r},he=a,he}var ge={},me={},xe={},We;function wt(){return We||(We=1,xe.isValid=function(a){return!isNaN(a)&&a>=1&&a<=40}),xe}var P={},Xe;function yt(){if(Xe)return P;Xe=1;const n="[0-9]+",a="[A-Z $%*+\\-./:]+";let s="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";s=s.replace(/u/g,"\\u");const t="(?:(?![A-Z0-9 $%*+\\-./:]|"+s+`)(?:.|[\r
2
+ ]))+`;P.KANJI=new RegExp(s,"g"),P.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),P.BYTE=new RegExp(t,"g"),P.NUMERIC=new RegExp(n,"g"),P.ALPHANUMERIC=new RegExp(a,"g");const e=new RegExp("^"+s+"$"),r=new RegExp("^"+n+"$"),o=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return P.testKanji=function(c){return e.test(c)},P.testNumeric=function(c){return r.test(c)},P.testAlphanumeric=function(c){return o.test(c)},P}var Ze;function F(){return Ze||(Ze=1,(function(n){const a=wt(),s=yt();n.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},n.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},n.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},n.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},n.MIXED={bit:-1},n.getCharCountIndicator=function(r,o){if(!r.ccBits)throw new Error("Invalid mode: "+r);if(!a.isValid(o))throw new Error("Invalid version: "+o);return o>=1&&o<10?r.ccBits[0]:o<27?r.ccBits[1]:r.ccBits[2]},n.getBestModeForData=function(r){return s.testNumeric(r)?n.NUMERIC:s.testAlphanumeric(r)?n.ALPHANUMERIC:s.testKanji(r)?n.KANJI:n.BYTE},n.toString=function(r){if(r&&r.id)return r.id;throw new Error("Invalid mode")},n.isValid=function(r){return r&&r.bit&&r.ccBits};function t(e){if(typeof e!="string")throw new Error("Param is not a string");switch(e.toLowerCase()){case"numeric":return n.NUMERIC;case"alphanumeric":return n.ALPHANUMERIC;case"kanji":return n.KANJI;case"byte":return n.BYTE;default:throw new Error("Unknown mode: "+e)}}n.from=function(r,o){if(n.isValid(r))return r;try{return t(r)}catch{return o}}})(me)),me}var et;function Vt(){return et||(et=1,(function(n){const a=U(),s=bt(),t=Re(),e=F(),r=wt(),o=7973,l=a.getBCHDigit(o);function c(f,d,p){for(let y=1;y<=40;y++)if(d<=n.getCapacity(y,p,f))return y}function u(f,d){return e.getCharCountIndicator(f,d)+4}function g(f,d){let p=0;return f.forEach(function(y){const I=u(y.mode,d);p+=I+y.getBitsLength()}),p}function x(f,d){for(let p=1;p<=40;p++)if(g(f,p)<=n.getCapacity(p,d,e.MIXED))return p}n.from=function(d,p){return r.isValid(d)?parseInt(d,10):p},n.getCapacity=function(d,p,y){if(!r.isValid(d))throw new Error("Invalid QR Code version");typeof y>"u"&&(y=e.BYTE);const I=a.getSymbolTotalCodewords(d),N=s.getTotalCodewordsCount(d,p),R=(I-N)*8;if(y===e.MIXED)return R;const B=R-u(y,d);switch(y){case e.NUMERIC:return Math.floor(B/10*3);case e.ALPHANUMERIC:return Math.floor(B/11*2);case e.KANJI:return Math.floor(B/13);case e.BYTE:default:return Math.floor(B/8)}},n.getBestVersionForData=function(d,p){let y;const I=t.from(p,t.M);if(Array.isArray(d)){if(d.length>1)return x(d,I);if(d.length===0)return 1;y=d[0]}else y=d;return c(y.mode,y.getLength(),I)},n.getEncodedBits=function(d){if(!r.isValid(d)||d<7)throw new Error("Invalid QR Code version");let p=d<<12;for(;a.getBCHDigit(p)-l>=0;)p^=o<<a.getBCHDigit(p)-l;return d<<12|p}})(ge)),ge}var pe={},tt;function Ht(){if(tt)return pe;tt=1;const n=U(),a=1335,s=21522,t=n.getBCHDigit(a);return pe.getEncodedBits=function(r,o){const l=r.bit<<3|o;let c=l<<10;for(;n.getBCHDigit(c)-t>=0;)c^=a<<n.getBCHDigit(c)-t;return(l<<10|c)^s},pe}var be={},we,nt;function Ot(){if(nt)return we;nt=1;const n=F();function a(s){this.mode=n.NUMERIC,this.data=s.toString()}return a.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)},a.prototype.getLength=function(){return this.data.length},a.prototype.getBitsLength=function(){return a.getBitsLength(this.data.length)},a.prototype.write=function(t){let e,r,o;for(e=0;e+3<=this.data.length;e+=3)r=this.data.substr(e,3),o=parseInt(r,10),t.put(o,10);const l=this.data.length-e;l>0&&(r=this.data.substr(e),o=parseInt(r,10),t.put(o,l*3+1))},we=a,we}var ye,rt;function Qt(){if(rt)return ye;rt=1;const n=F(),a=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function s(t){this.mode=n.ALPHANUMERIC,this.data=t}return s.getBitsLength=function(e){return 11*Math.floor(e/2)+6*(e%2)},s.prototype.getLength=function(){return this.data.length},s.prototype.getBitsLength=function(){return s.getBitsLength(this.data.length)},s.prototype.write=function(e){let r;for(r=0;r+2<=this.data.length;r+=2){let o=a.indexOf(this.data[r])*45;o+=a.indexOf(this.data[r+1]),e.put(o,11)}this.data.length%2&&e.put(a.indexOf(this.data[r]),6)},ye=s,ye}var Ne,st;function Jt(){if(st)return Ne;st=1;const n=F();function a(s){this.mode=n.BYTE,typeof s=="string"?this.data=new TextEncoder().encode(s):this.data=new Uint8Array(s)}return a.getBitsLength=function(t){return t*8},a.prototype.getLength=function(){return this.data.length},a.prototype.getBitsLength=function(){return a.getBitsLength(this.data.length)},a.prototype.write=function(s){for(let t=0,e=this.data.length;t<e;t++)s.put(this.data[t],8)},Ne=a,Ne}var Ce,at;function Yt(){if(at)return Ce;at=1;const n=F(),a=U();function s(t){this.mode=n.KANJI,this.data=t}return s.getBitsLength=function(e){return e*13},s.prototype.getLength=function(){return this.data.length},s.prototype.getBitsLength=function(){return s.getBitsLength(this.data.length)},s.prototype.write=function(t){let e;for(e=0;e<this.data.length;e++){let r=a.toSJIS(this.data[e]);if(r>=33088&&r<=40956)r-=33088;else if(r>=57408&&r<=60351)r-=49472;else throw new Error("Invalid SJIS character: "+this.data[e]+`
3
+ Make sure your charset is UTF-8`);r=(r>>>8&255)*192+(r&255),t.put(r,13)}},Ce=s,Ce}var je={exports:{}},it;function $t(){return it||(it=1,(function(n){var a={single_source_shortest_paths:function(s,t,e){var r={},o={};o[t]=0;var l=a.PriorityQueue.make();l.push(t,0);for(var c,u,g,x,f,d,p,y,I;!l.empty();){c=l.pop(),u=c.value,x=c.cost,f=s[u]||{};for(g in f)f.hasOwnProperty(g)&&(d=f[g],p=x+d,y=o[g],I=typeof o[g]>"u",(I||y>p)&&(o[g]=p,l.push(g,p),r[g]=u))}if(typeof e<"u"&&typeof o[e]>"u"){var N=["Could not find a path from ",t," to ",e,"."].join("");throw new Error(N)}return r},extract_shortest_path_from_predecessor_list:function(s,t){for(var e=[],r=t;r;)e.push(r),s[r],r=s[r];return e.reverse(),e},find_path:function(s,t,e){var r=a.single_source_shortest_paths(s,t,e);return a.extract_shortest_path_from_predecessor_list(r,e)},PriorityQueue:{make:function(s){var t=a.PriorityQueue,e={},r;s=s||{};for(r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e.queue=[],e.sorter=s.sorter||t.default_sorter,e},default_sorter:function(s,t){return s.cost-t.cost},push:function(s,t){var e={value:s,cost:t};this.queue.push(e),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};n.exports=a})(je)),je.exports}var ot;function Gt(){return ot||(ot=1,(function(n){const a=F(),s=Ot(),t=Qt(),e=Jt(),r=Yt(),o=yt(),l=U(),c=$t();function u(N){return unescape(encodeURIComponent(N)).length}function g(N,R,B){const j=[];let k;for(;(k=N.exec(B))!==null;)j.push({data:k[0],index:k.index,mode:R,length:k[0].length});return j}function x(N){const R=g(o.NUMERIC,a.NUMERIC,N),B=g(o.ALPHANUMERIC,a.ALPHANUMERIC,N);let j,k;return l.isKanjiModeEnabled()?(j=g(o.BYTE,a.BYTE,N),k=g(o.KANJI,a.KANJI,N)):(j=g(o.BYTE_KANJI,a.BYTE,N),k=[]),R.concat(B,j,k).sort(function(b,C){return b.index-C.index}).map(function(b){return{data:b.data,mode:b.mode,length:b.length}})}function f(N,R){switch(R){case a.NUMERIC:return s.getBitsLength(N);case a.ALPHANUMERIC:return t.getBitsLength(N);case a.KANJI:return r.getBitsLength(N);case a.BYTE:return e.getBitsLength(N)}}function d(N){return N.reduce(function(R,B){const j=R.length-1>=0?R[R.length-1]:null;return j&&j.mode===B.mode?(R[R.length-1].data+=B.data,R):(R.push(B),R)},[])}function p(N){const R=[];for(let B=0;B<N.length;B++){const j=N[B];switch(j.mode){case a.NUMERIC:R.push([j,{data:j.data,mode:a.ALPHANUMERIC,length:j.length},{data:j.data,mode:a.BYTE,length:j.length}]);break;case a.ALPHANUMERIC:R.push([j,{data:j.data,mode:a.BYTE,length:j.length}]);break;case a.KANJI:R.push([j,{data:j.data,mode:a.BYTE,length:u(j.data)}]);break;case a.BYTE:R.push([{data:j.data,mode:a.BYTE,length:u(j.data)}])}}return R}function y(N,R){const B={},j={start:{}};let k=["start"];for(let m=0;m<N.length;m++){const b=N[m],C=[];for(let w=0;w<b.length;w++){const S=b[w],v=""+m+w;C.push(v),B[v]={node:S,lastCount:0},j[v]={};for(let E=0;E<k.length;E++){const h=k[E];B[h]&&B[h].node.mode===S.mode?(j[h][v]=f(B[h].lastCount+S.length,S.mode)-f(B[h].lastCount,S.mode),B[h].lastCount+=S.length):(B[h]&&(B[h].lastCount=S.length),j[h][v]=f(S.length,S.mode)+4+a.getCharCountIndicator(S.mode,R))}}k=C}for(let m=0;m<k.length;m++)j[k[m]].end=0;return{map:j,table:B}}function I(N,R){let B;const j=a.getBestModeForData(N);if(B=a.from(R,j),B!==a.BYTE&&B.bit<j.bit)throw new Error('"'+N+'" cannot be encoded with mode '+a.toString(B)+`.
4
+ Suggested mode is: `+a.toString(j));switch(B===a.KANJI&&!l.isKanjiModeEnabled()&&(B=a.BYTE),B){case a.NUMERIC:return new s(N);case a.ALPHANUMERIC:return new t(N);case a.KANJI:return new r(N);case a.BYTE:return new e(N)}}n.fromArray=function(R){return R.reduce(function(B,j){return typeof j=="string"?B.push(I(j,null)):j.data&&B.push(I(j.data,j.mode)),B},[])},n.fromString=function(R,B){const j=x(R,l.isKanjiModeEnabled()),k=p(j),m=y(k,B),b=c.find_path(m.map,"start","end"),C=[];for(let w=1;w<b.length-1;w++)C.push(m.table[b[w]].node);return n.fromArray(d(C))},n.rawSplit=function(R){return n.fromArray(x(R,l.isKanjiModeEnabled()))}})(be)),be}var ct;function Wt(){if(ct)return ae;ct=1;const n=U(),a=Re(),s=Lt(),t=qt(),e=_t(),r=Dt(),o=Ut(),l=bt(),c=zt(),u=Vt(),g=Ht(),x=F(),f=Gt();function d(m,b){const C=m.size,w=r.getPositions(b);for(let S=0;S<w.length;S++){const v=w[S][0],E=w[S][1];for(let h=-1;h<=7;h++)if(!(v+h<=-1||C<=v+h))for(let T=-1;T<=7;T++)E+T<=-1||C<=E+T||(h>=0&&h<=6&&(T===0||T===6)||T>=0&&T<=6&&(h===0||h===6)||h>=2&&h<=4&&T>=2&&T<=4?m.set(v+h,E+T,!0,!0):m.set(v+h,E+T,!1,!0))}}function p(m){const b=m.size;for(let C=8;C<b-8;C++){const w=C%2===0;m.set(C,6,w,!0),m.set(6,C,w,!0)}}function y(m,b){const C=e.getPositions(b);for(let w=0;w<C.length;w++){const S=C[w][0],v=C[w][1];for(let E=-2;E<=2;E++)for(let h=-2;h<=2;h++)E===-2||E===2||h===-2||h===2||E===0&&h===0?m.set(S+E,v+h,!0,!0):m.set(S+E,v+h,!1,!0)}}function I(m,b){const C=m.size,w=u.getEncodedBits(b);let S,v,E;for(let h=0;h<18;h++)S=Math.floor(h/3),v=h%3+C-8-3,E=(w>>h&1)===1,m.set(S,v,E,!0),m.set(v,S,E,!0)}function N(m,b,C){const w=m.size,S=g.getEncodedBits(b,C);let v,E;for(v=0;v<15;v++)E=(S>>v&1)===1,v<6?m.set(v,8,E,!0):v<8?m.set(v+1,8,E,!0):m.set(w-15+v,8,E,!0),v<8?m.set(8,w-v-1,E,!0):v<9?m.set(8,15-v-1+1,E,!0):m.set(8,15-v-1,E,!0);m.set(w-8,8,1,!0)}function R(m,b){const C=m.size;let w=-1,S=C-1,v=7,E=0;for(let h=C-1;h>0;h-=2)for(h===6&&h--;;){for(let T=0;T<2;T++)if(!m.isReserved(S,h-T)){let M=!1;E<b.length&&(M=(b[E]>>>v&1)===1),m.set(S,h-T,M),v--,v===-1&&(E++,v=7)}if(S+=w,S<0||C<=S){S-=w,w=-w;break}}}function B(m,b,C){const w=new s;C.forEach(function(T){w.put(T.mode.bit,4),w.put(T.getLength(),x.getCharCountIndicator(T.mode,m)),T.write(w)});const S=n.getSymbolTotalCodewords(m),v=l.getTotalCodewordsCount(m,b),E=(S-v)*8;for(w.getLengthInBits()+4<=E&&w.put(0,4);w.getLengthInBits()%8!==0;)w.putBit(0);const h=(E-w.getLengthInBits())/8;for(let T=0;T<h;T++)w.put(T%2?17:236,8);return j(w,m,b)}function j(m,b,C){const w=n.getSymbolTotalCodewords(b),S=l.getTotalCodewordsCount(b,C),v=w-S,E=l.getBlocksCount(b,C),h=w%E,T=E-h,M=Math.floor(w/E),H=Math.floor(v/E),Ct=H+1,Ie=M-H,jt=new c(Ie);let Z=0;const Y=new Array(E),Ae=new Array(E);let ee=0;const kt=new Uint8Array(m.buffer);for(let K=0;K<E;K++){const ne=K<T?H:Ct;Y[K]=kt.slice(Z,Z+ne),Ae[K]=jt.encode(Y[K]),Z+=ne,ee=Math.max(ee,ne)}const te=new Uint8Array(w);let Me=0,L,q;for(L=0;L<ee;L++)for(q=0;q<E;q++)L<Y[q].length&&(te[Me++]=Y[q][L]);for(L=0;L<Ie;L++)for(q=0;q<E;q++)te[Me++]=Ae[q][L];return te}function k(m,b,C,w){let S;if(Array.isArray(m))S=f.fromArray(m);else if(typeof m=="string"){let M=b;if(!M){const H=f.rawSplit(m);M=u.getBestVersionForData(H,C)}S=f.fromString(m,M||40)}else throw new Error("Invalid data");const v=u.getBestVersionForData(S,C);if(!v)throw new Error("The amount of data is too big to be stored in a QR Code");if(!b)b=v;else if(b<v)throw new Error(`
5
+ The chosen QR Code version cannot contain this amount of data.
6
+ Minimum version required to store current data is: `+v+`.
7
+ `);const E=B(b,C,S),h=n.getSymbolSize(b),T=new t(h);return d(T,b),p(T),y(T,b),N(T,C,0),b>=7&&I(T,b),R(T,E),isNaN(w)&&(w=o.getBestMask(T,N.bind(null,T,C))),o.applyMask(w,T),N(T,C,w),{modules:T,version:b,errorCorrectionLevel:C,maskPattern:w,segments:S}}return ae.create=function(b,C){if(typeof b>"u"||b==="")throw new Error("No input text");let w=a.M,S,v;return typeof C<"u"&&(w=a.from(C.errorCorrectionLevel,a.M),S=u.from(C.version),v=o.from(C.maskPattern),C.toSJISFunc&&n.setToSJISFunction(C.toSJISFunc)),k(b,S,w,v)},ae}var ke={},ve={},lt;function Nt(){return lt||(lt=1,(function(n){function a(s){if(typeof s=="number"&&(s=s.toString()),typeof s!="string")throw new Error("Color should be defined as hex string");let t=s.slice().replace("#","").split("");if(t.length<3||t.length===5||t.length>8)throw new Error("Invalid hex color: "+s);(t.length===3||t.length===4)&&(t=Array.prototype.concat.apply([],t.map(function(r){return[r,r]}))),t.length===6&&t.push("F","F");const e=parseInt(t.join(""),16);return{r:e>>24&255,g:e>>16&255,b:e>>8&255,a:e&255,hex:"#"+t.slice(0,6).join("")}}n.getOptions=function(t){t||(t={}),t.color||(t.color={});const e=typeof t.margin>"u"||t.margin===null||t.margin<0?4:t.margin,r=t.width&&t.width>=21?t.width:void 0,o=t.scale||4;return{width:r,scale:r?4:o,margin:e,color:{dark:a(t.color.dark||"#000000ff"),light:a(t.color.light||"#ffffffff")},type:t.type,rendererOpts:t.rendererOpts||{}}},n.getScale=function(t,e){return e.width&&e.width>=t+e.margin*2?e.width/(t+e.margin*2):e.scale},n.getImageWidth=function(t,e){const r=n.getScale(t,e);return Math.floor((t+e.margin*2)*r)},n.qrToImageData=function(t,e,r){const o=e.modules.size,l=e.modules.data,c=n.getScale(o,r),u=Math.floor((o+r.margin*2)*c),g=r.margin*c,x=[r.color.light,r.color.dark];for(let f=0;f<u;f++)for(let d=0;d<u;d++){let p=(f*u+d)*4,y=r.color.light;if(f>=g&&d>=g&&f<u-g&&d<u-g){const I=Math.floor((f-g)/c),N=Math.floor((d-g)/c);y=x[l[I*o+N]?1:0]}t[p++]=y.r,t[p++]=y.g,t[p++]=y.b,t[p]=y.a}}})(ve)),ve}var dt;function Xt(){return dt||(dt=1,(function(n){const a=Nt();function s(e,r,o){e.clearRect(0,0,r.width,r.height),r.style||(r.style={}),r.height=o,r.width=o,r.style.height=o+"px",r.style.width=o+"px"}function t(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}n.render=function(r,o,l){let c=l,u=o;typeof c>"u"&&(!o||!o.getContext)&&(c=o,o=void 0),o||(u=t()),c=a.getOptions(c);const g=a.getImageWidth(r.modules.size,c),x=u.getContext("2d"),f=x.createImageData(g,g);return a.qrToImageData(f.data,r,c),s(x,u,g),x.putImageData(f,0,0),u},n.renderToDataURL=function(r,o,l){let c=l;typeof c>"u"&&(!o||!o.getContext)&&(c=o,o=void 0),c||(c={});const u=n.render(r,o,c),g=c.type||"image/png",x=c.rendererOpts||{};return u.toDataURL(g,x.quality)}})(ke)),ke}var Ee={},ut;function Zt(){if(ut)return Ee;ut=1;const n=Nt();function a(e,r){const o=e.a/255,l=r+'="'+e.hex+'"';return o<1?l+" "+r+'-opacity="'+o.toFixed(2).slice(1)+'"':l}function s(e,r,o){let l=e+r;return typeof o<"u"&&(l+=" "+o),l}function t(e,r,o){let l="",c=0,u=!1,g=0;for(let x=0;x<e.length;x++){const f=Math.floor(x%r),d=Math.floor(x/r);!f&&!u&&(u=!0),e[x]?(g++,x>0&&f>0&&e[x-1]||(l+=u?s("M",f+o,.5+d+o):s("m",c,0),c=0,u=!1),f+1<r&&e[x+1]||(l+=s("h",g),g=0)):c++}return l}return Ee.render=function(r,o,l){const c=n.getOptions(o),u=r.modules.size,g=r.modules.data,x=u+c.margin*2,f=c.color.light.a?"<path "+a(c.color.light,"fill")+' d="M0 0h'+x+"v"+x+'H0z"/>':"",d="<path "+a(c.color.dark,"stroke")+' d="'+t(g,u,c.margin)+'"/>',p='viewBox="0 0 '+x+" "+x+'"',I='<svg xmlns="http://www.w3.org/2000/svg" '+(c.width?'width="'+c.width+'" height="'+c.width+'" ':"")+p+' shape-rendering="crispEdges">'+f+d+`</svg>
8
+ `;return typeof l=="function"&&l(null,I),I},Ee}var ft;function en(){if(ft)return V;ft=1;const n=Pt(),a=Wt(),s=Xt(),t=Zt();function e(r,o,l,c,u){const g=[].slice.call(arguments,1),x=g.length,f=typeof g[x-1]=="function";if(!f&&!n())throw new Error("Callback required as last argument");if(f){if(x<2)throw new Error("Too few arguments provided");x===2?(u=l,l=o,o=c=void 0):x===3&&(o.getContext&&typeof u>"u"?(u=c,c=void 0):(u=c,c=l,l=o,o=void 0))}else{if(x<1)throw new Error("Too few arguments provided");return x===1?(l=o,o=c=void 0):x===2&&!o.getContext&&(c=l,l=o,o=void 0),new Promise(function(d,p){try{const y=a.create(l,c);d(r(y,o,c))}catch(y){p(y)}})}try{const d=a.create(l,c);u(null,r(d,o,c))}catch(d){u(d)}}return V.create=a.create,V.toCanvas=e.bind(null,s.render),V.toDataURL=e.bind(null,s.renderToDataURL),V.toString=e.bind(null,function(r,o,l){return t.render(r,l)}),V}var tn=en();const nn=Tt(tn),rn=2e3,ht=5;function sn({channel:n,onClose:a}){const{t:s}=D(),[t,e]=A.useState("loading"),[r,o]=A.useState(null),[l,c]=A.useState(null),[u,g]=A.useState(""),x=A.useRef(null),f=A.useRef(0),d=A.useRef(null),p=A.useRef(!1),y=()=>{d.current&&(clearTimeout(d.current),d.current=null),p.current=!0},I=async k=>{if(x.current)try{await nn.toCanvas(x.current,k,{width:240,margin:2,color:{dark:"#000000ff",light:"#ffffffff"}})}catch(m){console.warn("[WechatQr] Canvas QR generation failed, falling back to URL:",m)}},N=async()=>{if(!(p.current||!l))try{const k=await Pe.channels.weixin.bindStatus(l),m=(k==null?void 0:k.data)??k,b=(m==null?void 0:m.status)??"";if(f.current=0,b==="confirmed"){if(!(m!=null&&m.channel_id)){e("error"),g(s("channels.bindNoInstance")),$.error(s("channels.bindNoInstance"));return}e("confirmed"),$.success(n?s("channels.toastReauthSuccess",{name:n.name}):s("channels.toastBindSuccess")),setTimeout(a,2400);return}if(b==="scaned")e("scanned");else if(b==="expired"){e("expired");return}p.current||(d.current=setTimeout(N,rn))}catch(k){if(f.current++,console.warn("[WechatQr] poll error ("+f.current+"/"+ht+")",k),f.current>=ht)e("error"),g(s("channels.pollFailedRefresh")),$.error(s("channels.pollFailedToast"));else if(!p.current){const m=Math.min(1e3*Math.pow(2,f.current),1e4);d.current=setTimeout(N,m)}}},R=()=>{y(),p.current=!1,f.current=0,d.current=setTimeout(N,1e3)},B=async()=>{e("loading"),o(null),c(null),g(""),f.current=0;try{const k=await Pe.channels.weixin.bind(),m=(k==null?void 0:k.data)??k,b=(m==null?void 0:m.qrcode_img_content)??"",C=(m==null?void 0:m.qrcode)??"";if(!b||!C){e("error"),g(s("channels.qrDataMissing",{data:JSON.stringify(m)}));return}o(b),c(C),await I(b),e("waiting")}catch(k){e("error");const m=String((k==null?void 0:k.message)??k);g(m),$.error(s("channels.fetchWechatQrFailed",{error:m}))}},j=()=>{B()};return A.useEffect(()=>(B(),y),[]),A.useEffect(()=>(l&&R(),y),[l]),i.jsx(Rt,{isOpen:!0,onClose:a,title:s("channels.bindTitle",{name:(n==null?void 0:n.name)??s("channels.typeLabels.wechat")}),size:"sm",children:i.jsxs("div",{className:"flex flex-col items-center gap-4 py-2",children:[i.jsxs("div",{className:"relative w-60 h-60 rounded-lg bg-white flex items-center justify-center overflow-hidden",children:[t==="loading"&&i.jsx("span",{className:"text-dark-muted text-sm",children:s("channels.qr.generating")}),t!=="error"&&t!=="expired"&&i.jsx("canvas",{ref:x,width:240,height:240,className:`w-full h-full object-contain ${t==="waiting"?"":"opacity-30"}`}),t==="scanned"&&i.jsxs("div",{className:"absolute inset-0 bg-black/70 flex flex-col items-center justify-center text-overlay-fg gap-1",children:[i.jsx("span",{className:"text-2xl",children:"✓"}),i.jsx("span",{className:"text-sm",children:s("channels.qr.scanned")})]}),t==="confirmed"&&i.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:[i.jsx("span",{className:"text-2xl",children:"🎉"}),i.jsx("span",{className:"text-sm font-medium",children:s("channels.bindSuccess")}),i.jsx("span",{className:"text-xs opacity-90",children:n?s("channels.connectedReady",{name:n.name}):s("channels.createdConnectedReady")}),i.jsx("button",{onClick:a,className:"mt-1 text-xs bg-white/20 hover:bg-white/30 px-3 py-1.5 rounded-md transition-colors",children:s("channels.startUsing")})]}),t==="expired"&&i.jsxs("div",{className:"absolute inset-0 bg-black/80 flex flex-col items-center justify-center text-overlay-fg gap-2",children:[i.jsx("span",{className:"text-sm",children:s("channels.qr.expired")}),i.jsx("button",{onClick:j,className:"text-xs bg-accent-green hover:bg-accent-green px-3 py-1 rounded",children:s("channels.clickToRefresh")})]}),t==="error"&&i.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:[i.jsx("span",{className:"text-xs",children:u||s("channels.unknownError")}),i.jsx("button",{onClick:j,className:"text-xs bg-accent-blue hover:bg-accent-blue px-3 py-1 rounded text-accent-fg",children:s("channels.retry")})]})]}),i.jsxs("p",{className:"text-sm text-dark-muted text-center",children:[t==="waiting"&&s("channels.waitingAuthorize"),t==="scanned"&&s("channels.scannedConfirming"),t==="confirmed"&&s("channels.confirmedClosing"),t==="loading"&&s("channels.connectingIlink"),(t==="expired"||t==="error")&&(t==="expired"?s("channels.qr.expired"):"")]}),r&&t==="waiting"&&i.jsxs("button",{onClick:()=>window.open(r,"_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:[i.jsx("span",{children:"🔔"})," ",s("channels.openInNewTabFallback")]})]})})}function fn(){const{t:n}=D(),{load:a,loading:s,qrOpen:t,qrChannel:e,closeQr:r}=Se();return A.useEffect(()=>{a()},[]),i.jsxs("div",{className:"flex h-full min-h-0 flex-col bg-dark-bg text-dark-text",children:[i.jsxs("div",{className:"flex items-center justify-between px-6 py-4 border-b border-dark-border shrink-0",children:[i.jsxs("div",{children:[i.jsx("h2",{className:"font-semibold text-base",children:n("channels.title")}),i.jsx("p",{className:"text-xs text-dark-muted mt-0.5",children:n("channels.viewSubtitle")})]}),i.jsx("div",{className:"flex items-center gap-2",children:i.jsx("button",{onClick:()=>a(),title:n("channels.actions.refresh"),className:"p-2 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors",children:i.jsx(St,{className:`w-4 h-4 ${s?"animate-spin":""}`})})})]}),i.jsxs("div",{className:"flex-1 flex min-h-0 overflow-hidden",children:[i.jsx("div",{className:"w-[260px] shrink-0",children:i.jsx(It,{})}),i.jsx("div",{className:"flex-1 min-w-0",children:i.jsx(At,{})})]}),t&&i.jsx(sn,{channel:e,onClose:r})]})}export{fn as ChannelConfigView};
@@ -0,0 +1 @@
1
+ import{j as t}from"./markdown-BWXjRrSw.js";import{a as d,A as I,q as Y,s as je,d as ke,e as ye,t as Ne,u as Q,b as we,S as W,G as Z,v as J,Z as Ce,K as X,E as Se,w as Ee,D as ee,x as ze}from"./icons-Bm_ZzSAy.js";import{u as $e,w as Te,B as $,a as h}from"./index-CeeLdENM.js";import{S as Be}from"./Skeleton-Dsk6B0U3.js";import"./react-vendor-C0HIWSpf.js";import"./state-Kfon1nTr.js";import"./panels-BQOvnbWH.js";const Le={"code-intelligence":"🧠 代码智能",filesystem:"📂 文件系统",databases:"🗄️ 数据库","browser-automation":"🌐 浏览器自动化","knowledge-memory":"🧠 知识/记忆","search-web":"🔎 搜索/网页","cloud-platforms":"☁️ 云平台",communication:"💬 通讯","developer-tools":"🛠️ 开发者工具",security:"🔒 安全","test-demo":"🧪 测试/Demo",other:"📦 其他"};function Fe(){const{t:a}=$e(),[f,u]=d.useState([]),[te,O]=d.useState(!0),[R,P]=d.useState(null),[U,m]=d.useState({}),[_,x]=d.useState(null),[T,se]=d.useState(""),[j,q]=d.useState(null),[B,ae]=d.useState("all"),[re,k]=d.useState(null),[ne,F]=d.useState({}),[le,L]=d.useState(!1),[c,p]=d.useState({name:"",command:"",args:"",env:"",transport:"stdio",url:"",headers:""}),[y,K]=d.useState(null),[H,C]=d.useState(!1),[M,N]=d.useState(null),oe=async()=>{C(!0),N(null);try{const e=await h.tools.get("computer_use");K(e.success&&e.data?!!e.data.enabled:!1)}catch(e){N(e instanceof Error?e.message:String(e))}C(!1)},ce=async()=>{if(y===null)return;const e=!y;C(!0),N(null);try{const s=await h.tools.toggle("computer_use",e);s.success?K(e):N(s.error||"切换 Computer Use 失败")}catch(s){N(s instanceof Error?s.message:String(s))}C(!1)},de=()=>{window.dispatchEvent(new CustomEvent("switch-tab",{detail:"tools"}))},ie=()=>p({name:"",command:"",args:"",env:"",transport:"stdio",url:"",headers:""}),V=e=>Object.fromEntries(e.split(",").map(s=>s.trim()).filter(Boolean).map(s=>{const r=s.indexOf("=");return r>0?[s.slice(0,r).trim(),s.slice(r+1).trim()]:[s,""]})),ue=async()=>{const e=c.transport!=="stdio";if(!c.name.trim()||!e&&!c.command.trim()||e&&!c.url.trim()){x(a("connectors.customFormRequired"));return}m(s=>({...s,__add:!0})),x(null);try{const s=await h.connectors.addCustom({name:c.name.trim(),command:e?void 0:c.command.trim(),args:e?void 0:c.args.split(/\s+/).filter(Boolean),env:V(c.env),url:e?c.url.trim():void 0,transport:e?c.transport:void 0,headers:e?V(c.headers):void 0});s.success&&s.data?(u(r=>[...r,s.data]),L(!1),ie()):x(s.error||"添加失败")}catch(s){x(s instanceof Error?s.message:String(s))}finally{m(s=>({...s,__add:!1}))}},me=async e=>{m(s=>({...s,[e.id]:!0}));try{const s=await h.connectors.removeCustom(e.id);s.success?u(r=>r.filter(n=>n.id!==e.id)):x(s.error||"删除失败")}finally{m(s=>({...s,[e.id]:!1}))}},S=async()=>{var s;O(!0),P(null);const e=await h.connectors.list();e.success&&Array.isArray((s=e.data)==null?void 0:s.connectors)?u(e.data.connectors):P(e.error||"加载连接器失败"),O(!1)};d.useEffect(()=>{S(),oe()},[]),d.useEffect(()=>{let e=null;const s=n=>{if(!n||n.type!=="mcp_update")return;let o;try{o=typeof n.data=="string"?JSON.parse(n.data):n.data||{}}catch{return}const i=String(o.server||o.name||"");/^(managed|custom)-connector-/.test(i)&&(e&&clearTimeout(e),e=setTimeout(()=>{e=null,S()},150))},r=Te.onMessage(s);return()=>{e&&clearTimeout(e),r()}},[]);const E=(e,s,r,n)=>{x(r||null),u(o=>o.map(i=>i.id===e?{...i,enabled:!!n,status:"error"}:i))},xe=async(e,s,r)=>{x(null),m(n=>({...n,[e.id]:!0})),u(n=>n.map(o=>o.id===e.id?{...o,enabled:s,status:s?"connecting":"installed"}:o));try{const n=await h.connectors.toggle(e.id,s,r);n.success&&n.data?u(o=>o.map(i=>i.id===e.id?n.data:i)):E(e.id,void 0,n.error||`切换 ${e.name} 失败`,!s)}catch(n){E(e.id,void 0,n instanceof Error?n.message:String(n),!s)}finally{m(n=>({...n,[e.id]:!1}))}},pe=e=>{var s,r;if(!e.enabled&&((s=e.requiresEnv)!=null&&s.length)&&((r=e.missingEnv)!=null&&r.length)){k(e.id);return}k(null),xe(e,!e.enabled)},be=async(e,s)=>{k(null),x(null),m(r=>({...r,[e.id]:!0})),u(r=>r.map(n=>n.id===e.id?{...n,enabled:!0,status:"connecting"}:n));try{const r=await h.connectors.connect(e.id,s);r.success&&r.data?(u(n=>n.map(o=>o.id===e.id?r.data:o)),F(n=>({...n,[e.id]:{}}))):E(e.id,void 0,r.error||`连接 ${e.name} 失败`,!1)}catch(r){E(e.id,void 0,r instanceof Error?r.message:String(r),!1)}finally{m(r=>({...r,[e.id]:!1}))}},ge=e=>{const s="inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs font-medium";if(!e.installed)return t.jsxs("span",{className:`${s} bg-dark-hover text-dark-muted`,children:[t.jsx(ee,{size:12}),a("connectors.notInstalled")]});switch(e.status){case"ready":return t.jsxs("span",{className:`${s} bg-accent-green/15 text-accent-green`,children:[t.jsx(ze,{size:12}),a("connectors.ready")]});case"connecting":return t.jsxs("span",{className:`${s} bg-accent-blue/15 text-accent-blue`,children:[t.jsx(Q,{size:12,className:"animate-spin"}),a("connectors.connecting")]});case"error":return t.jsxs("span",{className:`${s} bg-accent-red/15 text-accent-red`,children:[t.jsx(I,{size:12}),a("connectors.error")]});case"disabled":return t.jsx("span",{className:`${s} bg-dark-hover text-dark-muted`,children:a("connectors.disabled")});default:return t.jsx("span",{className:`${s} bg-dark-hover text-dark-muted`,children:a("connectors.installed")})}},z=f.filter(e=>B==="all"||e.kind===B),D=z.filter(e=>{if(T){const s=T.toLowerCase();if(![e.name,e.id,e.description,e.category??"",e.kind,...e.languages??[]].join(" ").toLowerCase().includes(s))return!1}return!(j&&e.category!==j)}).sort((e,s)=>e.enabled!==s.enabled?e.enabled?-1:1:e.name.localeCompare(s.name)),he=[...new Set(z.map(e=>e.category).filter(Boolean))];if(te)return t.jsx("div",{className:"flex-1 overflow-y-auto p-4",role:"status","aria-label":a("common.loading"),children:t.jsx(Be,{count:5})});if(R)return t.jsx("div",{className:"flex-1 flex items-center justify-center",children:t.jsxs("div",{className:"text-center",children:[t.jsx(I,{size:32,className:"mx-auto mb-2 text-accent-red"}),t.jsx("p",{className:"text-accent-red mb-4",children:R}),t.jsx($,{variant:"accent",onClick:()=>void S(),children:a("common.retry")})]})});const fe=e=>{const s=ne[e.id]??{},r=(l,A)=>F(G=>({...G,[e.id]:{...G[e.id]??{},[l]:A}})),n=e.requiresEnv??[],o=n.filter(l=>!l.optional),i=n.filter(l=>l.optional),v=new Set(e.configuredEnv??[]),w=Object.fromEntries(Object.entries(s).filter(([,l])=>l.trim().length>0)),b=o.filter(l=>!w[l.key]&&!v.has(l.key)),g=l=>t.jsxs("div",{children:[t.jsxs("label",{className:"flex items-center gap-1.5 text-meta text-dark-muted mb-1",children:[t.jsx("span",{children:l.label}),l.optional?t.jsx("span",{className:"text-badge px-1 py-0.5 rounded bg-dark-hover text-dark-muted",children:a("connectors.envOptional")}):null,v.has(l.key)?t.jsx("span",{className:"text-badge px-1 py-0.5 rounded bg-accent-green/15 text-accent-green",children:a("connectors.envAlreadySet")}):null]}),t.jsx("input",{type:l.secret?"password":"text",value:s[l.key]??"",onChange:A=>r(l.key,A.target.value),placeholder:v.has(l.key)?a("connectors.envKeepPlaceholder"):l.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"}),l.hint?t.jsx("p",{className:"text-badge text-dark-muted mt-1",children:l.hint}):null]},l.key);return t.jsxs("div",{className:"mt-3 pt-3 border-t border-dark-border",children:[t.jsxs("div",{className:"text-xs text-dark-muted mb-2 flex items-center gap-1",children:[t.jsx(X,{size:12}),o.length?a("connectors.needCredentials"):a("connectors.envOptionalOnly")]}),t.jsx("div",{className:"space-y-2",children:o.map(g)}),i.length?t.jsxs("details",{className:"mt-2",open:b.length===0&&o.length===0,children:[t.jsx("summary",{className:"text-meta text-dark-muted cursor-pointer select-none",children:a("connectors.envOptionalSection",{count:i.length})}),t.jsx("div",{className:"space-y-2 mt-2",children:i.map(g)})]}):null,b.length?t.jsx("p",{className:"text-badge text-accent-yellow mt-2",children:a("connectors.envMissingRequired",{keys:b.map(l=>l.key).join(", ")})}):null,t.jsxs("div",{className:"flex gap-2 mt-2",children:[t.jsx($,{variant:"accent",disabled:b.length>0,onClick:()=>void be(e,w),children:a("connectors.connect")}),t.jsx("button",{onClick:()=>k(null),className:"px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm",children:a("common.cancel")})]})]})},ve=e=>{var i,v,w,b;const s=!!U[e.id],r=re===e.id,n=new Set(e.configuredEnv??[]),o=(e.requiresEnv??[]).filter(g=>g.optional&&!n.has(g.key)).length;return t.jsxs("div",{className:`bg-dark-surface border border-dark-border rounded-lg p-4 transition-opacity ${e.enabled?"":"opacity-80"}`,children:[t.jsxs("div",{className:"flex items-start justify-between gap-4",children:[t.jsxs("div",{className:"flex items-start gap-3 flex-1 min-w-0",children:[t.jsx("span",{className:`mt-0.5 shrink-0 px-2 py-1 rounded-md text-meta font-semibold uppercase ${e.kind==="lsp"?"bg-accent-purple/15 text-accent-purple":"bg-accent-green/15 text-accent-green"}`,children:e.kind==="lsp"?"LSP":"MCP"}),t.jsxs("div",{className:"min-w-0",children:[t.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[t.jsx("span",{className:"font-medium text-sm truncate",children:e.name}),e.custom?t.jsx("span",{className:"text-badge px-1.5 py-0.5 rounded bg-accent-purple/15 text-accent-purple",children:a("connectors.custom")}):null,e.official?t.jsxs("span",{title:"Official",className:"text-badge px-1.5 py-0.5 rounded bg-accent-yellow/15 text-accent-yellow",children:["🎖️ ",a("connectors.official")]}):null,e.scope==="cloud"?t.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:[t.jsx(Z,{size:9}),a("connectors.cloud")]}):t.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:[t.jsx(J,{size:9}),a("connectors.local")]}),e.language?t.jsx("span",{className:"text-badge",children:e.language}):null,ge(e)]}),t.jsx("p",{className:"text-xs text-dark-muted mt-1 line-clamp-2",children:e.description}),t.jsxs("div",{className:"flex items-center gap-3 mt-2 text-meta text-dark-muted flex-wrap",children:[t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(J,{size:11}),t.jsx("code",{className:"text-badge",children:e.installHint})]}),e.transport&&e.transport!=="stdio"?t.jsxs("span",{className:"inline-flex items-center gap-1 text-accent-blue",children:[t.jsx(Z,{size:11}),e.transport==="sse"?"SSE":"Streamable HTTP"]}):null,(i=e.languages)!=null&&i.length?t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(Ce,{size:11}),e.languages.join(", ")]}):null,e.kind==="mcp"&&e.toolCount!==void 0?t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(Y,{size:11}),a("connectors.toolCount",{count:e.toolCount})]}):null,(v=e.requiresEnv)!=null&&v.length?t.jsxs("button",{type:"button",onClick:()=>k(r?null:e.id),className:`inline-flex items-center gap-1 hover:text-accent-blue ${(w=e.missingEnv)!=null&&w.length?"text-accent-yellow":"text-dark-muted"}`,children:[t.jsx(X,{size:11}),(b=e.missingEnv)!=null&&b.length?`${e.missingEnv.join(", ")} ${a("connectors.missing")}`:a("connectors.envConfigured"),o?` · ${a("connectors.envOptionalUnset",{count:o})}`:null]}):null,e.docsUrl?t.jsxs("a",{href:e.docsUrl,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-1 hover:text-accent-blue",onClick:g=>g.stopPropagation(),children:[t.jsx(Se,{size:11}),a("connectors.docs")]}):null]}),e.error?t.jsx("p",{className:"text-meta text-accent-red mt-1",children:e.error}):null]})]}),t.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[e.custom?t.jsx("button",{onClick:()=>void me(e),disabled:s,title:a("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:t.jsx(Ee,{size:14})}):null,!e.installed&&e.enabled?t.jsxs("span",{className:"text-meta text-accent-blue flex items-center gap-1",children:[t.jsx(ee,{size:11,className:"animate-pulse"}),a("connectors.installing")]}):null,t.jsx("button",{role:"switch","aria-checked":e.enabled,disabled:s,onClick:()=>pe(e),className:`relative w-12 h-6 rounded-full transition-colors disabled:opacity-50 ${e.enabled?"bg-accent-green":"bg-dark-border"}`,children:t.jsx("span",{className:`absolute top-1 w-4 h-4 bg-white rounded-full transition-transform ${e.enabled?"left-7":"left-1"}`})})]})]}),r?fe(e):null]},e.id)};return t.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden p-4",children:[t.jsxs("div",{className:"flex items-center justify-between mb-3",children:[t.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[t.jsx(Y,{size:20}),a("nav.connectors"),t.jsxs("span",{className:"text-sm font-normal text-dark-muted",children:["· ",f.filter(e=>e.enabled).length,"/",f.length]})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx($,{variant:"accent",leftIcon:t.jsx(je,{size:14}),onClick:()=>L(e=>!e),children:a("connectors.addCustom")}),t.jsxs("button",{onClick:()=>void S(),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:[t.jsx(ke,{size:14}),a("common.refresh")]})]})]}),t.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:[t.jsxs("div",{className:"flex items-center gap-x-2 gap-y-1 flex-wrap",children:[t.jsx("span",{children:a("connectors.scopeHint")}),t.jsxs("button",{type:"button",onClick:de,className:"inline-flex items-center gap-1 text-accent-blue hover:underline",children:[a("connectors.scopeHintToolsLink"),t.jsx(ye,{size:11})]})]}),t.jsx("div",{children:a("connectors.builtinCardHint")})]}),t.jsxs("div",{className:"mb-4 p-4 bg-dark-surface border border-dark-border rounded-lg space-y-3",children:[t.jsxs("div",{className:"flex items-center justify-between gap-3",children:[t.jsxs("div",{className:"min-w-0 flex items-start gap-2",children:[t.jsx(Ne,{size:16,className:"text-accent-blue mt-0.5 shrink-0"}),t.jsxs("div",{children:[t.jsx("div",{className:"text-sm text-dark-text",children:"Computer Use"}),t.jsx("div",{className:"text-xs text-dark-muted mt-0.5",children:"GUI 截屏 + 鼠标键盘操控(Windows)。每次调用需审批;需要视觉模型读屏。"})]})]}),t.jsx("button",{type:"button",role:"switch","aria-checked":!!y,disabled:H,onClick:()=>void ce(),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:opacity-50 ${y?"bg-accent-blue":"bg-dark-border"}`,children:H?t.jsx(Q,{size:12,className:"absolute left-[7px] top-[3px] animate-spin text-accent-fg"}):t.jsx("span",{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${y?"translate-x-[18px]":"translate-x-0.5"}`})})]}),M?t.jsx("div",{className:"text-xs text-accent-red bg-accent-red/10 border border-accent-red/30 rounded-lg px-3 py-2",children:M}):null]}),le?t.jsxs("div",{className:"mb-4 p-4 bg-dark-surface border border-dark-border rounded-lg",children:[t.jsxs("div",{className:"flex items-center justify-between mb-3",children:[t.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium",children:[t.jsx(we,{size:15,className:"text-accent-purple"}),a("connectors.customTitle")]}),t.jsx("div",{className:"flex gap-1",children:[["stdio","🖥️ "+a("connectors.customLocal")],["http","🌐 HTTP"],["sse","📡 SSE"]].map(([e,s])=>t.jsx("button",{onClick:()=>p(r=>({...r,transport:e})),className:`px-3 py-1.5 rounded-lg text-xs transition-colors ${c.transport===e?"bg-accent-blue text-accent-fg":"bg-dark-bg border border-dark-border hover:bg-dark-hover"}`,children:s},e))})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{children:[t.jsx("label",{className:"block text-meta text-dark-muted mb-1",children:a("connectors.customName")}),t.jsx("input",{value:c.name,onChange:e=>p(s=>({...s,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"})]}),c.transport==="stdio"?t.jsxs(t.Fragment,{children:[t.jsxs("div",{children:[t.jsx("label",{className:"block text-meta text-dark-muted mb-1",children:a("connectors.customCommand")}),t.jsx("input",{value:c.command,onChange:e=>p(s=>({...s,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"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"block text-meta text-dark-muted mb-1",children:a("connectors.customArgs")}),t.jsx("input",{value:c.args,onChange:e=>p(s=>({...s,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"})]})]}):t.jsxs("div",{children:[t.jsx("label",{className:"block text-meta text-dark-muted mb-1",children:a("connectors.customUrl")}),t.jsx("input",{value:c.url,onChange:e=>p(s=>({...s,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"})]}),c.transport==="stdio"?t.jsxs("div",{children:[t.jsx("label",{className:"block text-meta text-dark-muted mb-1",children:a("connectors.customEnv")}),t.jsx("input",{value:c.env,onChange:e=>p(s=>({...s,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"})]}):t.jsxs("div",{children:[t.jsx("label",{className:"block text-meta text-dark-muted mb-1",children:a("connectors.customHeaders")}),t.jsx("input",{value:c.headers,onChange:e=>p(s=>({...s,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"})]})]}),t.jsxs("div",{className:"flex gap-2 mt-3",children:[t.jsx($,{variant:"accent",onClick:()=>void ue(),loading:!!U.__add,children:a("connectors.add")}),t.jsx("button",{onClick:()=>L(!1),className:"px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm",children:a("common.cancel")})]})]}):null,t.jsx("div",{className:"flex gap-1 mb-3",children:[["all",`${a("connectors.all")} (${f.length})`],["lsp",`LSP (${f.filter(e=>e.kind==="lsp").length})`],["mcp",`MCP (${f.filter(e=>e.kind==="mcp").length})`]].map(([e,s])=>t.jsx("button",{onClick:()=>ae(e),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${B===e?"bg-accent-blue text-accent-fg":"bg-dark-surface border border-dark-border hover:bg-dark-hover"}`,children:s},e))}),t.jsx("div",{className:"flex gap-3 mb-3",children:t.jsxs("div",{className:"flex-1 relative",children:[t.jsx(W,{size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-dark-muted"}),t.jsx("input",{type:"text",value:T,onChange:e=>se(e.target.value),placeholder:a("connectors.searchPlaceholder"),className:"w-full pl-10 pr-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"})]})}),t.jsxs("div",{className:"flex gap-1 mb-4 flex-wrap",children:[t.jsxs("button",{onClick:()=>q(null),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${j?"bg-dark-surface border border-dark-border hover:bg-dark-hover":"bg-accent-blue text-accent-fg"}`,children:[a("connectors.all")," ",t.jsxs("span",{className:"opacity-70 text-xs",children:["(",z.length,")"]})]}),he.map(e=>{const s=z.filter(r=>r.category===e).length;return t.jsxs("button",{onClick:()=>q(j===e?null:e),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${j===e?"bg-accent-blue text-accent-fg":"bg-dark-surface border border-dark-border hover:bg-dark-hover"}`,children:[Le[e]??e," ",t.jsxs("span",{className:"opacity-70 text-xs",children:["(",s,")"]})]},e)})]}),_?t.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:_}):null,t.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto custom-scrollbar",children:D.length===0?t.jsxs("div",{className:"text-center text-dark-muted text-sm py-10",children:[t.jsx(W,{size:24,className:"mx-auto mb-2 opacity-50"}),a("connectors.noResults")]}):t.jsx("div",{className:"space-y-2",children:D.map(ve)})})]})}export{Fe as ConnectorsView};
@@ -0,0 +1 @@
1
+ import{j as e}from"./markdown-BWXjRrSw.js";import{u as h,I as u,B as l,V as j}from"./index-CeeLdENM.js";import{V as b}from"./VizCardsSkeleton-C_GaEfXd.js";import{a as o,b as m}from"./Skeleton-Dsk6B0U3.js";import"./icons-Bm_ZzSAy.js";import"./react-vendor-C0HIWSpf.js";import"./state-Kfon1nTr.js";import"./panels-BQOvnbWH.js";const r={id:"trails",name:"Nearby trails"},c=[{id:"t1",title:"Ocean View Trail",subtitle:"Golden Gate National Park",image:"/figma-demo/trail-1.jpg",meta:[{icon:"rating",label:"4.6"},{icon:"difficulty",label:"Moderate"},{icon:"distance",label:"2.8 mi"}],actions:[{label:"View details",tone:"neutral"}]},{id:"t2",title:"Cascade Waterfall Trail",subtitle:"Smith Wilderness Reserve",image:"/figma-demo/trail-2.jpg",meta:[{icon:"rating",label:"4.8"},{icon:"difficulty",label:"Hard"},{icon:"distance",label:"13 mi"}],actions:[{label:"View details",tone:"neutral"}]},{id:"t3",title:"Redwood Forest Loop",subtitle:"Tall Timber Regional Park",image:"/figma-demo/trail-3.jpg",meta:[{icon:"rating",label:"4.8"},{icon:"difficulty",label:"Moderate"},{icon:"distance",label:"4 mi"}],actions:[{label:"View details",tone:"neutral"}]},{id:"t4",title:"Lighthouse Bluff Walk",subtitle:"Point Reyes National Seashore",badge:"New",meta:[{icon:"rating",label:"4.5"},{icon:"difficulty",label:"Easy"}],actions:[{label:"View details",tone:"neutral"}]}],f={id:"bananas",name:"Go Bananas",icon:"/figma-demo/product-1.jpg"},N=[{id:"p1",title:"Cavendish Bananas",image:"/figma-demo/product-1.jpg",meta:[{icon:"rating",label:"4.2"},{icon:"diet",label:"Organic"},{icon:"tag",label:"Fair trade"}],actions:[{label:"Buy now",tone:"primary"}]},{id:"p2",title:"Spotted Bananas",image:"/figma-demo/product-2.jpg",badge:"-20%",meta:[{icon:"rating",label:"4.8"},{icon:"diet",label:"Overripe"},{icon:"stock",label:"In stock"}],actions:[{label:"Details",tone:"neutral"},{label:"Buy now",tone:"primary"}]}],k=[{design:"Text XS",px:12,cls:"text-xs"},{design:"Text small",px:13,cls:"text-compact"},{design:"Text medium",px:14,cls:"text-sm"},{design:"Text large",px:16,cls:"text-base"}],y=[{design:"Heading XS",px:14,cls:"text-sm"},{design:"Heading small",px:16,cls:"text-base"},{design:"Heading medium",px:18,cls:"text-lg"},{design:"Heading large",px:20,cls:"text-xl"},{design:"Heading XL",px:24,cls:"text-2xl"},{design:"Heading 2XL",px:30,cls:"text-3xl"},{design:"Heading 3XL",px:36,cls:"text-4xl"}],v=[{name:"normal",px:"400",cls:"font-normal"},{name:"medium",px:"500",cls:"font-medium"},{name:"semibold",px:"600",cls:"font-semibold"},{name:"bold",px:"700",cls:"font-bold"}],w=["type-display","type-heading-xl","type-heading-lg","type-heading","type-heading-sm","type-body-lg","type-body","type-body-emphasized","type-body-sm","type-caption"],T=[{name:"xs",cls:"rounded-sm"},{name:"sm",cls:"rounded"},{name:"md",cls:"rounded-md"},{name:"lg",cls:"rounded-lg"},{name:"xl",cls:"rounded-xl"},{name:"2xl",cls:"rounded-2xl"},{name:"3xl",cls:"rounded-3xl"},{name:"full",cls:"rounded-full"}],x=["primary","accent","secondary","ghost","danger"];function L(){const{t:s}=h();return e.jsx("div",{className:"ui-page",children:e.jsxs("div",{className:"ui-page-inner",children:[e.jsx("header",{className:"ui-page-header",children:e.jsxs("div",{children:[e.jsx("h1",{className:"ui-page-title",children:s("design.title")}),e.jsx("p",{className:"ui-page-subtitle",children:s("design.subtitle")})]})}),e.jsxs(n,{title:s("design.typography"),hint:s("design.typographyHint"),children:[e.jsx(i,{label:s("design.font"),children:e.jsxs("div",{className:"flex flex-wrap items-end gap-6",children:[e.jsx(p,{cls:"font-sans",sample:"Aa 中",caption:s("design.fontSans")}),e.jsx(p,{cls:"font-mono",sample:"Aa 01",caption:s("design.fontMono")})]})}),e.jsx(i,{label:s("design.weight"),children:e.jsx("div",{className:"flex flex-wrap gap-5",children:v.map(a=>e.jsxs("div",{className:"min-w-[5.5rem]",children:[e.jsx("p",{className:`text-lg text-dark-text ${a.cls}`,children:"Aa"}),e.jsxs("p",{className:"mt-0.5 text-meta text-dark-muted",children:[a.name," · ",a.px]})]},a.name))})}),e.jsx(i,{label:s("design.textSize"),children:e.jsx("div",{className:"space-y-1.5",children:k.map(a=>e.jsxs("div",{className:"flex flex-wrap items-baseline gap-3",children:[e.jsx("code",{className:"w-32 shrink-0 font-mono text-meta text-dark-muted",children:a.cls}),e.jsx("span",{className:`${a.cls} text-dark-text`,children:"The quick brown fox 中文排版"}),e.jsxs("span",{className:"text-meta text-dark-muted",children:[a.design," · ",a.px,"px"]})]},a.cls+a.px))})}),e.jsx(i,{label:s("design.headingSize"),children:e.jsx("div",{className:"space-y-1.5",children:y.map(a=>e.jsxs("div",{className:"flex flex-wrap items-baseline gap-3",children:[e.jsx("code",{className:"w-32 shrink-0 font-mono text-meta text-dark-muted",children:a.cls}),e.jsx("span",{className:`${a.cls} font-semibold text-dark-text`,children:a.design}),e.jsxs("span",{className:"text-meta text-dark-muted",children:[a.px,"px"]})]},a.cls+a.px))})}),e.jsx(i,{label:s("design.styles"),children:e.jsx("div",{className:"space-y-2",children:w.map(a=>e.jsxs("div",{className:"flex flex-wrap items-baseline gap-3",children:[e.jsxs("code",{className:"w-44 shrink-0 font-mono text-meta text-dark-muted",children:[".",a]}),e.jsx("span",{className:a,children:"Heading large / 正文样式预览"})]},a))})})]}),e.jsxs(n,{title:s("design.border"),children:[e.jsx(i,{label:s("design.radius"),children:e.jsx("div",{className:"flex flex-wrap gap-4",children:T.map(a=>e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:`h-12 w-12 border border-dark-border bg-accent-blue/15 ${a.cls}`,"aria-hidden":"true"}),e.jsx("p",{className:"mt-1 font-mono text-meta text-dark-muted",children:a.name})]},a.name))})}),e.jsx(i,{label:s("design.borderWidth"),children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"h-8 w-20 rounded border border-dark-border","aria-hidden":"true"}),e.jsx("code",{className:"font-mono text-meta text-dark-muted",children:"border · 1px · regular"})]})})]}),e.jsx(n,{title:s("design.icons"),hint:s("design.iconsHint"),children:e.jsx("div",{className:"flex flex-wrap gap-3",children:u.map(({name:a,icon:t})=>e.jsxs("div",{className:"flex w-[6.5rem] flex-col items-center gap-1 rounded-lg border border-dark-border/70 p-2 text-center",title:a,children:[e.jsx(t,{size:16,className:"text-dark-text","aria-hidden":"true"}),e.jsx("span",{className:"w-full truncate font-mono text-badge text-dark-muted",children:a})]},a))})}),e.jsxs(n,{title:s("design.cards"),hint:s("design.cardsHint"),children:[e.jsx(d,{title:s("design.chromeTransparent"),block:{id:"demo-transparent",kind:"cards",source:"ai",app:r,chrome:"transparent",items:c}}),e.jsx(d,{title:s("design.layoutCarousel"),block:{id:"demo-carousel",kind:"cards",source:"ai",app:r,chrome:"card",layout:"carousel",items:c}}),e.jsx(d,{title:s("design.chromeContained"),block:{id:"demo-contained",kind:"cards",source:"ai",app:f,chrome:"contained",groupTitle:"Best sellers",items:N}}),e.jsx(d,{title:s("design.layoutGrid"),block:{id:"demo-grid",kind:"cards",source:"ai",app:r,chrome:"card",layout:"grid",items:c}}),e.jsx(d,{title:s("design.loading"),hint:s("viz.connecting",{app:"Nearby trails"}),children:e.jsx(b,{app:r,layout:"carousel",chrome:"card",count:4})})]}),e.jsx(n,{title:s("design.pills"),hint:s("design.pillsHint"),children:e.jsx(i,{label:"variant",children:e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:x.map(a=>e.jsx(l,{variant:a,size:"sm",children:a},a))}),e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:x.map(a=>e.jsxs(l,{variant:a,size:"sm",shape:"pill",children:[a," pill"]},a))}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(l,{size:"sm",children:"sm"}),e.jsx(l,{size:"md",children:"md"}),e.jsx(l,{size:"lg",children:"lg"}),e.jsx(l,{size:"sm",loading:!0,children:"loading"}),e.jsx(l,{size:"sm",disabled:!0,children:"disabled"})]})]})})}),e.jsx(n,{title:s("design.skeleton"),hint:s("design.skeletonHint"),children:e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsx(o,{variant:"text",width:"60%",height:14}),e.jsx(o,{variant:"rectangular",height:44}),e.jsx(m,{}),e.jsx(m,{})]})})]})})}function n({title:s,hint:a,children:t}){return e.jsxs("section",{className:"ui-section mb-4",children:[e.jsx("h2",{className:"ui-section-title mb-1",children:s}),a?e.jsx("p",{className:"mb-3 text-xs leading-normal text-dark-muted",children:a}):null,e.jsx("div",{className:"mt-3 space-y-4",children:t})]})}function i({label:s,children:a}){return e.jsxs("div",{className:"reveal-on-scroll",children:[e.jsx("p",{className:"mb-1.5 text-meta font-semibold uppercase tracking-[0.16em] text-dark-muted/70",children:s}),a]})}function p({cls:s,sample:a,caption:t}){return e.jsxs("div",{children:[e.jsx("p",{className:`${s} text-3xl text-dark-text`,children:a}),e.jsx("p",{className:"mt-1 text-meta text-dark-muted",children:t})]})}function d({title:s,hint:a,block:t,children:g}){return e.jsxs("div",{children:[e.jsxs("p",{className:"mb-1 font-mono text-meta text-dark-muted",children:[s,a?e.jsx("span",{className:"ml-2 text-dark-muted/70",children:a}):null]}),e.jsx("div",{className:"board-ground rounded-xl border border-dark-border/70 p-3",children:g??(t?e.jsx(j,{block:t}):null)})]})}export{L as DesignSystemView};
@@ -0,0 +1 @@
1
+ import{j as e}from"./markdown-BWXjRrSw.js";import{e as o,f as m}from"./index-CeeLdENM.js";import{X as n}from"./icons-Bm_ZzSAy.js";function h({isOpen:s,onClose:r,title:a,children:l,size:t="md",className:d}){if(o({isOpen:s,onClose:r}),!s)return null;const i={sm:"max-w-sm",md:"max-w-md",lg:"max-w-xl"};return e.jsxs("div",{className:"fixed inset-0 z-50 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:r}),e.jsxs("div",{role:"dialog","aria-modal":"true",className:m("absolute inset-y-0 right-0 w-full bg-dark-surface border-l border-dark-border shadow-2xl animate-slide-in-right","flex flex-col overflow-hidden",i[t],d),children:[a&&e.jsxs("div",{className:"flex shrink-0 items-center justify-between px-6 py-4 border-b border-dark-border",children:[e.jsx("h2",{className:"text-lg font-semibold text-dark-text truncate",children:a}),e.jsx("button",{onClick:r,"aria-label":"Close",className:"p-1 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors shrink-0",children:e.jsx(n,{className:"w-5 h-5","aria-hidden":"true"})})]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto custom-scrollbar p-6",children:l})]})]})}export{h as D};