@ai-projector/ide 0.0.0-stage → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (880) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +35 -2
  3. package/bin/install-desktop +17 -0
  4. package/bin/install-desktop.cmd +11 -0
  5. package/bin/projector +22 -0
  6. package/bin/projector.cmd +11 -0
  7. package/dist/assets/CodeViewer--WUSmn5i.css +1 -0
  8. package/dist/assets/CodeViewer-C-C3aibO.js +1 -0
  9. package/dist/assets/DiscussionView-Cd3exhWx.css +1 -0
  10. package/dist/assets/DiscussionView-K3YyWE-E.js +2 -0
  11. package/dist/assets/EditorSettings-DlzJc8cp.js +13 -0
  12. package/dist/assets/EditorSettings-jSngmpPq.css +1 -0
  13. package/dist/assets/HtmlViewer-DULKK0_6.js +2 -0
  14. package/dist/assets/HtmlViewer-XHn9rACG.css +1 -0
  15. package/dist/assets/ImageViewport-BT_ftU4z.js +1 -0
  16. package/dist/assets/ImageViewport-JcG9P4B6.css +1 -0
  17. package/dist/assets/IssueView-ChJFmrTW.js +1 -0
  18. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  19. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  20. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  21. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  22. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  23. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  24. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  25. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  26. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  27. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  28. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  29. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  30. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  31. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  32. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  33. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  34. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  35. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  36. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  37. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  38. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  39. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  40. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  41. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  42. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  43. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  44. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  45. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  46. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  47. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  48. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  49. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  50. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  51. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  52. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  53. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  54. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  55. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  56. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  57. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  58. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  59. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  60. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  61. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  62. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  63. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  64. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  65. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  66. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  67. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  68. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  69. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  70. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  71. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  72. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  73. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  74. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  75. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  76. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  77. package/dist/assets/MarkdownViewer-C646XbYf.css +1 -0
  78. package/dist/assets/MarkdownViewer-Dm2MVp3X.js +2 -0
  79. package/dist/assets/PullRequestView-Cipn5P0H.js +3 -0
  80. package/dist/assets/PullRequestView-CzZn9mOg.css +1 -0
  81. package/dist/assets/ReleaseView-Cz6dH4ej.js +2 -0
  82. package/dist/assets/ReleaseView-VLO9NVfI.css +1 -0
  83. package/dist/assets/SplitPanes-0-UT7ksm.css +1 -0
  84. package/dist/assets/SplitPanes-DNDTWIta.js +1 -0
  85. package/dist/assets/SvgViewer-DP6-1_fw.css +1 -0
  86. package/dist/assets/SvgViewer-DkoULP8F.js +2 -0
  87. package/dist/assets/TerminalView-C30_q784.css +1 -0
  88. package/dist/assets/TerminalView-fWmIbnZn.js +16 -0
  89. package/dist/assets/TrackerDetail-CBaLycQg.css +1 -0
  90. package/dist/assets/TrackerDetail-DuzfEwSZ.js +1 -0
  91. package/dist/assets/UiButton-AkN01P3P.css +1 -0
  92. package/dist/assets/UiButton-DvucBdmd.js +2 -0
  93. package/dist/assets/UiPanel-BUDYIo-h.css +1 -0
  94. package/dist/assets/UiPanel-DtI4DFYT.js +1 -0
  95. package/dist/assets/UiViewerPage-CMFEzZ2i.css +1 -0
  96. package/dist/assets/UiViewerPage-aHNgiSjO.js +2 -0
  97. package/dist/assets/VisualMarkdownEditor-1DNSAYyq.css +1 -0
  98. package/dist/assets/VisualMarkdownEditor-BHx2olWh.js +1070 -0
  99. package/dist/assets/_plugin-vue_export-helper-D62Ebo7D.js +3 -0
  100. package/dist/assets/apl-gfMMiTNf.js +1 -0
  101. package/dist/assets/asciiarmor-C_eisQCp.js +1 -0
  102. package/dist/assets/asn1-DCl_8MCW.js +1 -0
  103. package/dist/assets/asterisk-BEn0Cwpx.js +1 -0
  104. package/dist/assets/brainfuck-D5EjA2JK.js +1 -0
  105. package/dist/assets/clike-xvONpD0Z.js +1 -0
  106. package/dist/assets/clojure-BflJGmDX.js +1 -0
  107. package/dist/assets/cmake-84nbDH0I.js +1 -0
  108. package/dist/assets/cobol-DHLQUbN7.js +1 -0
  109. package/dist/assets/coffeescript-De_zI4J0.js +1 -0
  110. package/dist/assets/commonlisp-DgAKBe0r.js +1 -0
  111. package/dist/assets/compiler-dom.esm-bundler-C5a_rSi1.js +9 -0
  112. package/dist/assets/crystal-Bl6YKCG_.js +1 -0
  113. package/dist/assets/css-CnaYoQib.js +1 -0
  114. package/dist/assets/cypher-p9eYesGn.js +1 -0
  115. package/dist/assets/d-DWkQyNnU.js +1 -0
  116. package/dist/assets/diff-ChtP43wD.js +1 -0
  117. package/dist/assets/dist-23D313r2.js +13 -0
  118. package/dist/assets/dist-9YLT-RM-.js +11 -0
  119. package/dist/assets/dist-9guQ6tUS.js +1 -0
  120. package/dist/assets/dist-BA_HKdx1.js +2 -0
  121. package/dist/assets/dist-BMX-4S0G.js +1 -0
  122. package/dist/assets/dist-BQmIGtmd.js +6 -0
  123. package/dist/assets/dist-BVEl6uFx.js +1 -0
  124. package/dist/assets/dist-BuiJgwGF.js +9 -0
  125. package/dist/assets/dist-Bzl1vuDO.js +1 -0
  126. package/dist/assets/dist-C1mn-4rn.js +1 -0
  127. package/dist/assets/dist-CG79NjMk.js +1 -0
  128. package/dist/assets/dist-CRLdLpSX.js +2 -0
  129. package/dist/assets/dist-Coak6JQD.js +1 -0
  130. package/dist/assets/dist-CpgyHBvu.js +1 -0
  131. package/dist/assets/dist-CrRIwgTS.js +1 -0
  132. package/dist/assets/dist-Cu_4z-jQ.js +1 -0
  133. package/dist/assets/dist-CxoUUhWx.js +1 -0
  134. package/dist/assets/dist-CzOhSFRQ.js +1 -0
  135. package/dist/assets/dist-DN5Y0OA5.js +1 -0
  136. package/dist/assets/dist-Dqsd8MyB.js +1 -0
  137. package/dist/assets/dist-Dvv0YQ-H.js +23 -0
  138. package/dist/assets/dist-DzoDV6Eh.js +2 -0
  139. package/dist/assets/dist-NMUsQt1c.js +1 -0
  140. package/dist/assets/dist-ZRLBgDFY.js +1 -0
  141. package/dist/assets/dist-cLGxPfRN.js +1 -0
  142. package/dist/assets/dist-p1Xy77w3.js +1 -0
  143. package/dist/assets/dockerfile-DJkHQgkl.js +1 -0
  144. package/dist/assets/dtd-DTF72YNO.js +1 -0
  145. package/dist/assets/dylan-S7ucR4pR.js +1 -0
  146. package/dist/assets/ebnf-D4c0_ac3.js +1 -0
  147. package/dist/assets/ecl-BVIeWmwY.js +1 -0
  148. package/dist/assets/editor-theme-ClBxXjSu.js +1 -0
  149. package/dist/assets/eiffel-BEjRio4Q.js +1 -0
  150. package/dist/assets/elm-Cshzl8qu.js +1 -0
  151. package/dist/assets/erlang-BV0c4Hdn.js +1 -0
  152. package/dist/assets/events.worker-C2Opu9Sc.js +1 -0
  153. package/dist/assets/external-link-lkcxItwM.js +1 -0
  154. package/dist/assets/factor-LKH5gN8L.js +1 -0
  155. package/dist/assets/fcl-ClOhbFR7.js +1 -0
  156. package/dist/assets/forth-D6RzAl64.js +1 -0
  157. package/dist/assets/fortran-Bt6PBEDR.js +1 -0
  158. package/dist/assets/gas-BHEdbvp9.js +1 -0
  159. package/dist/assets/gherkin-oBAE_ms0.js +1 -0
  160. package/dist/assets/github-emoji-CXJ5RSZS.js +169 -0
  161. package/dist/assets/github-emoji-D8dkjuM_.css +1 -0
  162. package/dist/assets/groovy-CUrWKPia.js +1 -0
  163. package/dist/assets/haskell-BRsoo5mP.js +1 -0
  164. package/dist/assets/haxe-DjVOVvNP.js +1 -0
  165. package/dist/assets/http-CLVgA2GD.js +1 -0
  166. package/dist/assets/hub-DfPcTPCC.js +1 -0
  167. package/dist/assets/idl-BUZw3wgd.js +1 -0
  168. package/dist/assets/javascript-lS2r2ifg.js +1 -0
  169. package/dist/assets/julia-CQfgDRfP.js +1 -0
  170. package/dist/assets/livescript-BXxG0Yva.js +1 -0
  171. package/dist/assets/lua-DPCEkfD_.js +1 -0
  172. package/dist/assets/main-JoBAi6ol.css +1 -0
  173. package/dist/assets/main-iz4ud0jC.js +178 -0
  174. package/dist/assets/mathematica-u8YMmbU0.js +1 -0
  175. package/dist/assets/mbox-BEMVcqjs.js +1 -0
  176. package/dist/assets/mirc-C9zpzAZU.js +1 -0
  177. package/dist/assets/mllike-B45xgp2S.js +1 -0
  178. package/dist/assets/modelica-CqHI_q-D.js +1 -0
  179. package/dist/assets/mscgen-qgSLujhx.js +1 -0
  180. package/dist/assets/mumps-BSzj6Xyz.js +1 -0
  181. package/dist/assets/nginx-C-ORUuei.js +1 -0
  182. package/dist/assets/nsis-viPvXFiq.js +1 -0
  183. package/dist/assets/ntriples-CzMBulkp.js +1 -0
  184. package/dist/assets/octave-D2Q8cUp1.js +1 -0
  185. package/dist/assets/oz-BwTct_5T.js +1 -0
  186. package/dist/assets/pascal-Dp_KdFgX.js +1 -0
  187. package/dist/assets/perl-BkSkiI9m.js +1 -0
  188. package/dist/assets/pig-AF4Hwhju.js +1 -0
  189. package/dist/assets/powershell-D8WpQPaX.js +1 -0
  190. package/dist/assets/preload-helper-BLdHbfdN.js +1 -0
  191. package/dist/assets/properties-C357ku5U.js +1 -0
  192. package/dist/assets/protobuf-D1ij_kNL.js +1 -0
  193. package/dist/assets/pug-BqCHZ5xT.js +1 -0
  194. package/dist/assets/puppet-BZyAS7I4.js +1 -0
  195. package/dist/assets/python-B_1Jd8HM.js +1 -0
  196. package/dist/assets/q-B9NhS7L_.js +1 -0
  197. package/dist/assets/r-CxDmU1I4.js +1 -0
  198. package/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  199. package/dist/assets/rpm-gpDK5sbt.js +1 -0
  200. package/dist/assets/ruby-ChfNwlCY.js +1 -0
  201. package/dist/assets/sas-C2OyD2Y6.js +1 -0
  202. package/dist/assets/scheme-D9qYN0V5.js +1 -0
  203. package/dist/assets/shared.esm-bundler-DoSbGLUP.js +2 -0
  204. package/dist/assets/shared.worker-DpKROrNH.js +1 -0
  205. package/dist/assets/shell-DwuoZtxw.js +1 -0
  206. package/dist/assets/sieve-tLWDfEkZ.js +1 -0
  207. package/dist/assets/simple-mode-DXiLM1-G.js +1 -0
  208. package/dist/assets/smalltalk-BLp5-jwC.js +1 -0
  209. package/dist/assets/solr-B78wSQJQ.js +1 -0
  210. package/dist/assets/sparql-Dz-mlCAC.js +1 -0
  211. package/dist/assets/spreadsheet-CTIncYxj.js +1 -0
  212. package/dist/assets/sql-DuQMFDvy.js +1 -0
  213. package/dist/assets/stex-DNzd62Q_.js +1 -0
  214. package/dist/assets/styles-CCXo2OoQ.css +1 -0
  215. package/dist/assets/styles-DZDDPlL3.js +1 -0
  216. package/dist/assets/stylus-BOVgKnng.js +1 -0
  217. package/dist/assets/swift-DKB6_1j6.js +1 -0
  218. package/dist/assets/tcl-BGfruO1u.js +1 -0
  219. package/dist/assets/textile-C4jVoHG1.js +1 -0
  220. package/dist/assets/tiddlywiki-VlUiK86J.js +1 -0
  221. package/dist/assets/tiki-CvUEFusT.js +1 -0
  222. package/dist/assets/toml-BPTmHmyx.js +1 -0
  223. package/dist/assets/troff-C2dAgh7P.js +1 -0
  224. package/dist/assets/ttcn-PPSTk1ow.js +1 -0
  225. package/dist/assets/ttcn-cfg-2b4Gb5sE.js +1 -0
  226. package/dist/assets/turtle-Cx3rYX2g.js +1 -0
  227. package/dist/assets/vb-BthdM_4N.js +1 -0
  228. package/dist/assets/vbscript-D9f6rSsU.js +1 -0
  229. package/dist/assets/velocity-CqftRsjg.js +1 -0
  230. package/dist/assets/verilog-CjI9Y6RI.js +1 -0
  231. package/dist/assets/vhdl-kS471soi.js +1 -0
  232. package/dist/assets/webidl-D5jiJvOU.js +1 -0
  233. package/dist/assets/xquery-BKJx4mf9.js +1 -0
  234. package/dist/assets/yacas-CXXgtw0p.js +1 -0
  235. package/dist/assets/z80-Co3PbHdE.js +1 -0
  236. package/dist/favicon.svg +5 -0
  237. package/dist/file-icons/LICENSE-lucide.txt +43 -0
  238. package/dist/file-icons/NOTICE.md +8 -0
  239. package/dist/file-icons/icons/archive.svg +1 -0
  240. package/dist/file-icons/icons/assets.svg +1 -0
  241. package/dist/file-icons/icons/audio.svg +1 -0
  242. package/dist/file-icons/icons/c.svg +1 -0
  243. package/dist/file-icons/icons/components.svg +1 -0
  244. package/dist/file-icons/icons/config.svg +1 -0
  245. package/dist/file-icons/icons/cpp.svg +1 -0
  246. package/dist/file-icons/icons/css.svg +1 -0
  247. package/dist/file-icons/icons/database.svg +1 -0
  248. package/dist/file-icons/icons/docker.svg +1 -0
  249. package/dist/file-icons/icons/env.svg +1 -0
  250. package/dist/file-icons/icons/executable.svg +1 -0
  251. package/dist/file-icons/icons/file.svg +1 -0
  252. package/dist/file-icons/icons/folder-open.svg +1 -0
  253. package/dist/file-icons/icons/folder.svg +1 -0
  254. package/dist/file-icons/icons/font.svg +1 -0
  255. package/dist/file-icons/icons/git.svg +1 -0
  256. package/dist/file-icons/icons/go.svg +1 -0
  257. package/dist/file-icons/icons/graphql.svg +1 -0
  258. package/dist/file-icons/icons/html.svg +1 -0
  259. package/dist/file-icons/icons/ignore.svg +1 -0
  260. package/dist/file-icons/icons/image.svg +1 -0
  261. package/dist/file-icons/icons/java.svg +1 -0
  262. package/dist/file-icons/icons/javascript.svg +1 -0
  263. package/dist/file-icons/icons/json.svg +1 -0
  264. package/dist/file-icons/icons/kotlin.svg +1 -0
  265. package/dist/file-icons/icons/license.svg +1 -0
  266. package/dist/file-icons/icons/lock.svg +1 -0
  267. package/dist/file-icons/icons/markdown.svg +1 -0
  268. package/dist/file-icons/icons/package.svg +1 -0
  269. package/dist/file-icons/icons/php.svg +1 -0
  270. package/dist/file-icons/icons/python.svg +1 -0
  271. package/dist/file-icons/icons/react.svg +1 -0
  272. package/dist/file-icons/icons/ruby.svg +1 -0
  273. package/dist/file-icons/icons/rust.svg +1 -0
  274. package/dist/file-icons/icons/sass.svg +1 -0
  275. package/dist/file-icons/icons/shell.svg +1 -0
  276. package/dist/file-icons/icons/source.svg +1 -0
  277. package/dist/file-icons/icons/svelte.svg +1 -0
  278. package/dist/file-icons/icons/swift.svg +1 -0
  279. package/dist/file-icons/icons/tests.svg +1 -0
  280. package/dist/file-icons/icons/toml.svg +1 -0
  281. package/dist/file-icons/icons/typescript.svg +1 -0
  282. package/dist/file-icons/icons/video.svg +1 -0
  283. package/dist/file-icons/icons/vite.svg +1 -0
  284. package/dist/file-icons/icons/vue.svg +1 -0
  285. package/dist/file-icons/icons/yaml.svg +1 -0
  286. package/dist/file-icons/theme.json +572 -0
  287. package/dist/file-icons/theme.schema.json +137 -0
  288. package/dist/github.svg +1 -0
  289. package/dist/gitlab.svg +1 -0
  290. package/dist/hub.html +21 -0
  291. package/dist/icons/apple-touch-icon.png +0 -0
  292. package/dist/icons/icon-192.png +0 -0
  293. package/dist/icons/icon-512.png +0 -0
  294. package/dist/icons/maskable-512.png +0 -0
  295. package/dist/index.html +42 -0
  296. package/dist/manifest.webmanifest +37 -0
  297. package/dist/sw.js +81 -0
  298. package/package.json +62 -4
  299. package/packages/cli/app/agent-host.js +163 -0
  300. package/packages/cli/app/desktop.js +77 -0
  301. package/packages/cli/app/fix-node-pty.js +52 -0
  302. package/packages/cli/app/import-companion-key.js +57 -0
  303. package/packages/cli/app/install-desktop.js +4 -0
  304. package/packages/cli/app/launch.js +134 -0
  305. package/packages/cli/app/restart.js +32 -0
  306. package/packages/cli/commands/logs.js +10 -0
  307. package/packages/cli/commands/open.js +49 -0
  308. package/packages/cli/commands/projects.js +18 -0
  309. package/packages/cli/commands/run.js +39 -0
  310. package/packages/cli/commands/search.js +19 -0
  311. package/packages/cli/commands/server.js +32 -0
  312. package/packages/cli/commands/status.js +42 -0
  313. package/packages/cli/common/output.js +13 -0
  314. package/packages/cli/modules/api/index.js +60 -0
  315. package/packages/cli/modules/arguments/index.js +188 -0
  316. package/packages/cli/modules/command-runtime/index.js +24 -0
  317. package/packages/cli/modules/projects/index.js +118 -0
  318. package/packages/cli/modules/server/index.js +226 -0
  319. package/packages/cli/modules/server-process/index.js +204 -0
  320. package/packages/core/modules/agent-features/index.js +8 -0
  321. package/packages/core/modules/agent-judge/index.js +73 -0
  322. package/packages/core/modules/agent-read/index.js +25 -0
  323. package/packages/core/modules/agent-role/index.js +187 -0
  324. package/packages/core/modules/agent-task/contract.js +34 -0
  325. package/packages/core/modules/agent-task/index.js +1 -0
  326. package/packages/core/modules/agent-widgets/bars/index.js +11 -0
  327. package/packages/core/modules/agent-widgets/button/index.js +19 -0
  328. package/packages/core/modules/agent-widgets/card/index.js +13 -0
  329. package/packages/core/modules/agent-widgets/checks/index.js +19 -0
  330. package/packages/core/modules/agent-widgets/chips/index.js +15 -0
  331. package/packages/core/modules/agent-widgets/columns/index.js +12 -0
  332. package/packages/core/modules/agent-widgets/donut/index.js +11 -0
  333. package/packages/core/modules/agent-widgets/field/index.js +39 -0
  334. package/packages/core/modules/agent-widgets/form/index.js +18 -0
  335. package/packages/core/modules/agent-widgets/git-info/index.js +29 -0
  336. package/packages/core/modules/agent-widgets/image/index.js +22 -0
  337. package/packages/core/modules/agent-widgets/inline-icon/index.js +45 -0
  338. package/packages/core/modules/agent-widgets/input/index.js +16 -0
  339. package/packages/core/modules/agent-widgets/intelligent-form/index.js +32 -0
  340. package/packages/core/modules/agent-widgets/line/index.js +12 -0
  341. package/packages/core/modules/agent-widgets/row/index.js +11 -0
  342. package/packages/core/modules/agent-widgets/safe-secret-show/index.js +21 -0
  343. package/packages/core/modules/agent-widgets/slider/index.js +18 -0
  344. package/packages/core/modules/agent-widgets/stat/index.js +16 -0
  345. package/packages/core/modules/agent-widgets/steps/index.js +14 -0
  346. package/packages/core/modules/agent-widgets/tab/index.js +12 -0
  347. package/packages/core/modules/agent-widgets/tabs/index.js +24 -0
  348. package/packages/core/modules/agents-integration/claude/index.js +1 -0
  349. package/packages/core/modules/agents-integration/codex/index.js +1 -0
  350. package/packages/core/modules/agents-integration/cursor/index.js +1 -0
  351. package/packages/core/modules/agents-integration/kimi/index.js +1 -0
  352. package/packages/core/modules/agents-integration/opencode/index.js +1 -0
  353. package/packages/core/modules/app-paths/index.js +14 -0
  354. package/packages/core/modules/app-paths/logs.js +194 -0
  355. package/packages/core/modules/app-paths/network-mode.js +24 -0
  356. package/packages/core/modules/app-paths/paths.js +40 -0
  357. package/packages/core/modules/app-paths/server-mode.js +18 -0
  358. package/packages/core/modules/appearance/index.js +35 -0
  359. package/packages/core/modules/browser/index.js +86 -0
  360. package/packages/core/modules/devcontainer/classify.js +101 -0
  361. package/packages/core/modules/devcontainer/contract.js +1 -0
  362. package/packages/core/modules/devcontainer/index.js +1 -0
  363. package/packages/core/modules/directories/contract.js +1 -0
  364. package/packages/core/modules/directories/index.js +1 -0
  365. package/packages/core/modules/docker/contract.js +1 -0
  366. package/packages/core/modules/docker/index.js +1 -0
  367. package/packages/core/modules/editor-themes/index.js +17 -0
  368. package/packages/core/modules/environment/index.js +1 -0
  369. package/packages/core/modules/file-icons/contract.js +177 -0
  370. package/packages/core/modules/file-icons/index.js +1 -0
  371. package/packages/core/modules/github/index.js +23 -0
  372. package/packages/core/modules/gitlab/index.js +164 -0
  373. package/packages/core/modules/hub/index.js +1 -0
  374. package/packages/core/modules/hub/protocol.js +19 -0
  375. package/packages/core/modules/ide/agent-command.js +48 -0
  376. package/packages/core/modules/ide/command-help.js +73 -0
  377. package/packages/core/modules/ide/commands.js +191 -0
  378. package/packages/core/modules/ide/index.js +6 -0
  379. package/packages/core/modules/ide/keybinding-editor.js +34 -0
  380. package/packages/core/modules/ide/keybindings.js +45 -0
  381. package/packages/core/modules/ide/palette.js +33 -0
  382. package/packages/core/modules/ide/safety.js +10 -0
  383. package/packages/core/modules/launcher/actions.js +5 -0
  384. package/packages/core/modules/launcher/index.js +5 -0
  385. package/packages/core/modules/launcher/launcher-model.js +236 -0
  386. package/packages/core/modules/launcher/launcher.js +76 -0
  387. package/packages/core/modules/launcher/query.js +42 -0
  388. package/packages/core/modules/network-mode/index.js +3 -0
  389. package/packages/core/modules/network-mode/network-mode.js +8 -0
  390. package/packages/core/modules/os/bash.js +11 -0
  391. package/packages/core/modules/os/contract.js +1 -0
  392. package/packages/core/modules/os/index.js +3 -0
  393. package/packages/core/modules/os/modules/darwin/catalog.js +108 -0
  394. package/packages/core/modules/os/modules/darwin/directories.js +40 -0
  395. package/packages/core/modules/os/modules/darwin/docker.js +15 -0
  396. package/packages/core/modules/os/modules/darwin/gtk.js +6 -0
  397. package/packages/core/modules/os/modules/darwin/helper.swift +172 -0
  398. package/packages/core/modules/os/modules/darwin/index.js +12 -0
  399. package/packages/core/modules/os/modules/darwin/install-desktop.js +135 -0
  400. package/packages/core/modules/os/modules/darwin/processes.js +97 -0
  401. package/packages/core/modules/os/modules/darwin/resident.js +235 -0
  402. package/packages/core/modules/os/modules/darwin/secrets.js +53 -0
  403. package/packages/core/modules/os/modules/darwin/shell.js +105 -0
  404. package/packages/core/modules/os/modules/darwin/shortcut.js +61 -0
  405. package/packages/core/modules/os/modules/darwin/tools.js +52 -0
  406. package/packages/core/modules/os/modules/darwin/windows.js +135 -0
  407. package/packages/core/modules/os/modules/linux/bus.js +48 -0
  408. package/packages/core/modules/os/modules/linux/catalog.js +47 -0
  409. package/packages/core/modules/os/modules/linux/directories.js +49 -0
  410. package/packages/core/modules/os/modules/linux/docker.js +48 -0
  411. package/packages/core/modules/os/modules/linux/index.js +53 -0
  412. package/packages/core/modules/os/modules/linux/install-desktop.js +66 -0
  413. package/packages/core/modules/os/modules/linux/processes.js +85 -0
  414. package/packages/core/modules/os/modules/linux/resident.js +139 -0
  415. package/packages/core/modules/os/modules/linux/secrets.js +118 -0
  416. package/packages/core/modules/os/modules/linux/shortcut.js +124 -0
  417. package/packages/core/modules/os/modules/linux/tools.js +14 -0
  418. package/packages/core/modules/os/modules/linux/tray.js +190 -0
  419. package/packages/core/modules/os/modules/linux/windows.js +187 -0
  420. package/packages/core/modules/os/modules/windows/agent-process.js +60 -0
  421. package/packages/core/modules/os/modules/windows/alert.js +20 -0
  422. package/packages/core/modules/os/modules/windows/catalog.js +91 -0
  423. package/packages/core/modules/os/modules/windows/color-scheme.js +26 -0
  424. package/packages/core/modules/os/modules/windows/directories.js +101 -0
  425. package/packages/core/modules/os/modules/windows/docker.js +17 -0
  426. package/packages/core/modules/os/modules/windows/git.js +42 -0
  427. package/packages/core/modules/os/modules/windows/hwnd.js +275 -0
  428. package/packages/core/modules/os/modules/windows/index.js +28 -0
  429. package/packages/core/modules/os/modules/windows/install-desktop.js +140 -0
  430. package/packages/core/modules/os/modules/windows/kill-tree.js +26 -0
  431. package/packages/core/modules/os/modules/windows/processes.js +300 -0
  432. package/packages/core/modules/os/modules/windows/ps.js +73 -0
  433. package/packages/core/modules/os/modules/windows/resident-pipe.js +206 -0
  434. package/packages/core/modules/os/modules/windows/resident.js +286 -0
  435. package/packages/core/modules/os/modules/windows/secrets.js +110 -0
  436. package/packages/core/modules/os/modules/windows/shell.js +288 -0
  437. package/packages/core/modules/os/modules/windows/shortcut.js +82 -0
  438. package/packages/core/modules/os/modules/windows/tools.js +273 -0
  439. package/packages/core/modules/os/modules/windows/windows.js +133 -0
  440. package/packages/core/modules/os/os.js +175 -0
  441. package/packages/core/modules/os/session-env.js +11 -0
  442. package/packages/core/modules/os-posix/agent-process.js +105 -0
  443. package/packages/core/modules/os-posix/contract.js +1 -0
  444. package/packages/core/modules/os-posix/git.js +26 -0
  445. package/packages/core/modules/os-posix/index.js +4 -0
  446. package/packages/core/modules/os-posix/tools.js +258 -0
  447. package/packages/core/modules/os-posix/xdg.js +8 -0
  448. package/packages/core/modules/project/contract.js +1 -0
  449. package/packages/core/modules/project/index.js +1 -0
  450. package/packages/core/modules/project/ref.js +126 -0
  451. package/packages/core/modules/server-mode/index.js +3 -0
  452. package/packages/core/modules/server-mode/server-mode.js +13 -0
  453. package/packages/core/modules/terminal/contract.js +1 -0
  454. package/packages/core/modules/terminal/index.js +1 -0
  455. package/packages/core/modules/usage-analytics/index.js +80 -0
  456. package/packages/core/modules/widget-catalog/guide.js +76 -0
  457. package/packages/core/modules/widget-catalog/index.js +219 -0
  458. package/packages/core/modules/workspace/changes.js +114 -0
  459. package/packages/core/modules/workspace/contract.js +1 -0
  460. package/packages/core/modules/workspace/file-size.js +12 -0
  461. package/packages/core/modules/workspace/files-exclude.js +119 -0
  462. package/packages/core/modules/workspace/git-decorations.js +4 -0
  463. package/packages/core/modules/workspace/git-graph.js +35 -0
  464. package/packages/core/modules/workspace/index.js +11 -0
  465. package/packages/core/modules/workspace/paths.js +16 -0
  466. package/packages/core/modules/workspace/pipeline-status.js +86 -0
  467. package/packages/core/modules/workspace/pull-requests.js +1 -0
  468. package/packages/core/modules/workspace/pull-status.js +56 -0
  469. package/packages/core/modules/workspace/scope.js +34 -0
  470. package/packages/core/modules/workspace/search.js +28 -0
  471. package/packages/core/modules/workspace/tree-page.js +25 -0
  472. package/packages/server/app/agents.js +30 -0
  473. package/packages/server/app/api.js +159 -0
  474. package/packages/server/app/claude-runner.js +17 -0
  475. package/packages/server/app/dev-plugin.js +76 -0
  476. package/packages/server/app/dev-runtime.js +119 -0
  477. package/packages/server/app/features.js +35 -0
  478. package/packages/server/app/plugin.js +140 -0
  479. package/packages/server/app/projector-runner.js +15 -0
  480. package/packages/server/app/runtime-contract.js +1 -0
  481. package/packages/server/app/standalone.js +42 -0
  482. package/packages/server/app/static.js +57 -0
  483. package/packages/server/app/widgets-mcp.js +36 -0
  484. package/packages/server/app/widgets.js +54 -0
  485. package/packages/server/middlewares/local-origin.js +4 -0
  486. package/packages/server/modules/access/access.js +118 -0
  487. package/packages/server/modules/access/connections.js +36 -0
  488. package/packages/server/modules/access/http.js +93 -0
  489. package/packages/server/modules/access/hub.js +19 -0
  490. package/packages/server/modules/access/index.js +6 -0
  491. package/packages/server/modules/access/lan-url.js +21 -0
  492. package/packages/server/modules/access/password.js +68 -0
  493. package/packages/server/modules/access/session.js +38 -0
  494. package/packages/server/modules/agent/agent-host.js +46 -0
  495. package/packages/server/modules/agent/agent-runs.js +162 -0
  496. package/packages/server/modules/agent/attachments.js +88 -0
  497. package/packages/server/modules/agent/backend.js +1 -0
  498. package/packages/server/modules/agent/chat-archive.js +67 -0
  499. package/packages/server/modules/agent/command-bridge.js +94 -0
  500. package/packages/server/modules/agent/controls.js +10 -0
  501. package/packages/server/modules/agent/event-streams.js +40 -0
  502. package/packages/server/modules/agent/history-store.js +320 -0
  503. package/packages/server/modules/agent/history.js +160 -0
  504. package/packages/server/modules/agent/hosted-process.js +279 -0
  505. package/packages/server/modules/agent/hosted-run.js +85 -0
  506. package/packages/server/modules/agent/hosted-runner.js +126 -0
  507. package/packages/server/modules/agent/index.js +35 -0
  508. package/packages/server/modules/agent/injection.js +14 -0
  509. package/packages/server/modules/agent/jobs-diff.js +114 -0
  510. package/packages/server/modules/agent/jobs-files.js +65 -0
  511. package/packages/server/modules/agent/jobs-followup.js +66 -0
  512. package/packages/server/modules/agent/jobs-live.js +180 -0
  513. package/packages/server/modules/agent/jobs-store.js +59 -0
  514. package/packages/server/modules/agent/jobs-worktree.js +161 -0
  515. package/packages/server/modules/agent/jobs.js +316 -0
  516. package/packages/server/modules/agent/judge-store.js +21 -0
  517. package/packages/server/modules/agent/lens-request.js +34 -0
  518. package/packages/server/modules/agent/queue-store.js +21 -0
  519. package/packages/server/modules/agent/recent-chats.js +63 -0
  520. package/packages/server/modules/agent/registry.js +108 -0
  521. package/packages/server/modules/agent/replay.js +84 -0
  522. package/packages/server/modules/agent/request.js +132 -0
  523. package/packages/server/modules/agent/role-store.js +21 -0
  524. package/packages/server/modules/agent/run-hub.js +105 -0
  525. package/packages/server/modules/agent/run-request.js +208 -0
  526. package/packages/server/modules/agent/secret-show.js +108 -0
  527. package/packages/server/modules/agent/side-request.js +142 -0
  528. package/packages/server/modules/agent/usage-history.js +62 -0
  529. package/packages/server/modules/agent/worktrees.js +136 -0
  530. package/packages/server/modules/agent-features/catalog.js +18 -0
  531. package/packages/server/modules/agent-features/index.js +2 -0
  532. package/packages/server/modules/agent-features/store.js +172 -0
  533. package/packages/server/modules/agent-mcp/index.js +106 -0
  534. package/packages/server/modules/agent-roles/index.js +3 -0
  535. package/packages/server/modules/agent-roles/project.js +231 -0
  536. package/packages/server/modules/agent-roles/runtime.js +68 -0
  537. package/packages/server/modules/agent-roles/store.js +190 -0
  538. package/packages/server/modules/agents/acp/acp-backend.js +320 -0
  539. package/packages/server/modules/agents/acp/acp-client.js +153 -0
  540. package/packages/server/modules/agents/acp/acp-controls.js +179 -0
  541. package/packages/server/modules/agents/acp/acp-dialect.js +82 -0
  542. package/packages/server/modules/agents/acp/acp-elicitation.js +135 -0
  543. package/packages/server/modules/agents/acp/acp-events.js +340 -0
  544. package/packages/server/modules/agents/acp/acp-process.js +78 -0
  545. package/packages/server/modules/agents/acp/acp-programs.js +11 -0
  546. package/packages/server/modules/agents/acp/acp-tools.js +208 -0
  547. package/packages/server/modules/agents/acp/index.js +4 -0
  548. package/packages/server/modules/agents/acp/mcp-config.js +100 -0
  549. package/packages/server/modules/agents/claude-code/claude-code-backend.js +342 -0
  550. package/packages/server/modules/agents/claude-code/claude-code-checkpoints.js +97 -0
  551. package/packages/server/modules/agents/claude-code/claude-code-env.js +46 -0
  552. package/packages/server/modules/agents/claude-code/claude-code-events.js +299 -0
  553. package/packages/server/modules/agents/claude-code/claude-code-input.js +97 -0
  554. package/packages/server/modules/agents/claude-code/claude-code-replay.js +71 -0
  555. package/packages/server/modules/agents/claude-code/claude-code-sessions.js +207 -0
  556. package/packages/server/modules/agents/claude-code/claude-code-times.js +42 -0
  557. package/packages/server/modules/agents/claude-code/index.js +2 -0
  558. package/packages/server/modules/agents/claude-code/questions.js +51 -0
  559. package/packages/server/modules/agents/codex/dialect.js +130 -0
  560. package/packages/server/modules/agents/codex/forms.js +24 -0
  561. package/packages/server/modules/agents/codex/index.js +17 -0
  562. package/packages/server/modules/agents/cursor/dialect.js +66 -0
  563. package/packages/server/modules/agents/cursor/images.js +12 -0
  564. package/packages/server/modules/agents/cursor/index.js +30 -0
  565. package/packages/server/modules/agents/cursor/plan.js +44 -0
  566. package/packages/server/modules/agents/cursor/questions.js +37 -0
  567. package/packages/server/modules/agents/cursor/selection.js +29 -0
  568. package/packages/server/modules/agents/cursor/task.js +32 -0
  569. package/packages/server/modules/agents/cursor/todos.js +69 -0
  570. package/packages/server/modules/agents/ide-mcp/config.js +40 -0
  571. package/packages/server/modules/agents/ide-mcp/index.js +1 -0
  572. package/packages/server/modules/agents/ide-mcp/server.js +154 -0
  573. package/packages/server/modules/agents/kimi/dialect.js +18 -0
  574. package/packages/server/modules/agents/kimi/index.js +11 -0
  575. package/packages/server/modules/agents/opencode/dialect.js +232 -0
  576. package/packages/server/modules/agents/opencode/index.js +21 -0
  577. package/packages/server/modules/agents/opencode/read.js +46 -0
  578. package/packages/server/modules/agents/opencode/sessions.js +69 -0
  579. package/packages/server/modules/agents/projector/agent-lens.js +110 -0
  580. package/packages/server/modules/agents/projector/agent-tools.js +290 -0
  581. package/packages/server/modules/agents/projector/answer-doctor.js +32 -0
  582. package/packages/server/modules/agents/projector/form-doctor.js +33 -0
  583. package/packages/server/modules/agents/projector/index.js +12 -0
  584. package/packages/server/modules/agents/projector/project-instructions.js +34 -0
  585. package/packages/server/modules/agents/projector/projector-backend.js +350 -0
  586. package/packages/server/modules/agents/projector/projector-budget.js +70 -0
  587. package/packages/server/modules/agents/projector/projector-compaction.js +128 -0
  588. package/packages/server/modules/agents/projector/projector-controls.js +70 -0
  589. package/packages/server/modules/agents/projector/projector-guard.js +196 -0
  590. package/packages/server/modules/agents/projector/projector-history.js +87 -0
  591. package/packages/server/modules/agents/projector/projector-hooks.js +201 -0
  592. package/packages/server/modules/agents/projector/projector-input.js +40 -0
  593. package/packages/server/modules/agents/projector/projector-mcp-config.js +1 -0
  594. package/packages/server/modules/agents/projector/projector-mcp.js +119 -0
  595. package/packages/server/modules/agents/projector/projector-memory.js +92 -0
  596. package/packages/server/modules/agents/projector/projector-retry.js +52 -0
  597. package/packages/server/modules/agents/projector/projector-review.js +40 -0
  598. package/packages/server/modules/agents/projector/projector-side.js +56 -0
  599. package/packages/server/modules/agents/projector/projector-skills.js +143 -0
  600. package/packages/server/modules/agents/projector/projector-task.js +235 -0
  601. package/packages/server/modules/agents/projector/projector-usage.js +19 -0
  602. package/packages/server/modules/agents/projector/projector-web-search.js +76 -0
  603. package/packages/server/modules/agents/projector/projector-web.js +172 -0
  604. package/packages/server/modules/agents/projector/prompts.js +46 -0
  605. package/packages/server/modules/agents/projector/secrets/secret-destination.js +226 -0
  606. package/packages/server/modules/agents/projector/secrets/secret-show.js +23 -0
  607. package/packages/server/modules/agents/projector/secrets/secret-tools.js +124 -0
  608. package/packages/server/modules/agents/projector/tool-spec.js +4 -0
  609. package/packages/server/modules/agents/projector/tool-specs.js +167 -0
  610. package/packages/server/modules/agents/projector/widgets.js +4 -0
  611. package/packages/server/modules/agents/widgets-mcp/config.js +34 -0
  612. package/packages/server/modules/agents/widgets-mcp/index.js +1 -0
  613. package/packages/server/modules/agents-integration/_/usage-cache.js +19 -0
  614. package/packages/server/modules/agents-integration/claude/client.js +33 -0
  615. package/packages/server/modules/agents-integration/claude/index.js +1 -0
  616. package/packages/server/modules/agents-integration/claude/usage.js +49 -0
  617. package/packages/server/modules/agents-integration/codex/cli.js +86 -0
  618. package/packages/server/modules/agents-integration/codex/index.js +1 -0
  619. package/packages/server/modules/agents-integration/codex/usage.js +45 -0
  620. package/packages/server/modules/agents-integration/cursor/client.js +40 -0
  621. package/packages/server/modules/agents-integration/cursor/credentials.js +34 -0
  622. package/packages/server/modules/agents-integration/cursor/index.js +1 -0
  623. package/packages/server/modules/agents-integration/cursor/usage.js +59 -0
  624. package/packages/server/modules/agents-integration/kimi/client.js +48 -0
  625. package/packages/server/modules/agents-integration/kimi/credential-config.js +167 -0
  626. package/packages/server/modules/agents-integration/kimi/credentials.js +261 -0
  627. package/packages/server/modules/agents-integration/kimi/index.js +1 -0
  628. package/packages/server/modules/agents-integration/kimi/usage.js +149 -0
  629. package/packages/server/modules/agents-integration/opencode/client.js +30 -0
  630. package/packages/server/modules/agents-integration/opencode/credentials.js +36 -0
  631. package/packages/server/modules/agents-integration/opencode/index.js +1 -0
  632. package/packages/server/modules/agents-integration/opencode/usage.js +47 -0
  633. package/packages/server/modules/appearance/index.js +38 -0
  634. package/packages/server/modules/browser/cookies.js +112 -0
  635. package/packages/server/modules/browser/guard.js +55 -0
  636. package/packages/server/modules/browser/index.js +2 -0
  637. package/packages/server/modules/browser/key.js +34 -0
  638. package/packages/server/modules/browser/proxy.js +255 -0
  639. package/packages/server/modules/browser/rewrite.js +82 -0
  640. package/packages/server/modules/devcontainer/discovery.js +85 -0
  641. package/packages/server/modules/devcontainer/exec.js +81 -0
  642. package/packages/server/modules/devcontainer/index.js +4 -0
  643. package/packages/server/modules/devcontainer/launch.js +51 -0
  644. package/packages/server/modules/devcontainer/state.js +68 -0
  645. package/packages/server/modules/devcontainer/trust.js +41 -0
  646. package/packages/server/modules/directories/directories.js +34 -0
  647. package/packages/server/modules/directories/index.js +1 -0
  648. package/packages/server/modules/docker/actions.js +121 -0
  649. package/packages/server/modules/docker/daemon.js +72 -0
  650. package/packages/server/modules/docker/index.js +4 -0
  651. package/packages/server/modules/docker/settings.js +127 -0
  652. package/packages/server/modules/docker/snapshot.js +105 -0
  653. package/packages/server/modules/environments/execution.js +125 -0
  654. package/packages/server/modules/environments/index.js +3 -0
  655. package/packages/server/modules/environments/reconcile.js +62 -0
  656. package/packages/server/modules/environments/settings.js +58 -0
  657. package/packages/server/modules/events/implementation.js +85 -0
  658. package/packages/server/modules/events/index.js +1 -0
  659. package/packages/server/modules/folder-picker/index.js +1 -0
  660. package/packages/server/modules/folder-picker/pick-folder.js +2 -0
  661. package/packages/server/modules/git-import/clone.js +47 -0
  662. package/packages/server/modules/git-import/container.js +57 -0
  663. package/packages/server/modules/git-import/import.js +82 -0
  664. package/packages/server/modules/git-import/index.js +4 -0
  665. package/packages/server/modules/git-import/jobs.js +68 -0
  666. package/packages/server/modules/github/api.js +260 -0
  667. package/packages/server/modules/github/browser.js +185 -0
  668. package/packages/server/modules/github/clone.js +55 -0
  669. package/packages/server/modules/github/container.js +15 -0
  670. package/packages/server/modules/github/discussions.js +141 -0
  671. package/packages/server/modules/github/emojis.js +14 -0
  672. package/packages/server/modules/github/history.js +205 -0
  673. package/packages/server/modules/github/index.js +11 -0
  674. package/packages/server/modules/github/issues.js +81 -0
  675. package/packages/server/modules/github/navigation.js +35 -0
  676. package/packages/server/modules/github/pipelines.js +266 -0
  677. package/packages/server/modules/github/pulls.js +111 -0
  678. package/packages/server/modules/github/releases.js +241 -0
  679. package/packages/server/modules/gitlab/api.js +257 -0
  680. package/packages/server/modules/gitlab/base.js +24 -0
  681. package/packages/server/modules/gitlab/blob-search.js +110 -0
  682. package/packages/server/modules/gitlab/browser.js +296 -0
  683. package/packages/server/modules/gitlab/clone.js +78 -0
  684. package/packages/server/modules/gitlab/compare.js +68 -0
  685. package/packages/server/modules/gitlab/connection.js +55 -0
  686. package/packages/server/modules/gitlab/container.js +15 -0
  687. package/packages/server/modules/gitlab/history.js +127 -0
  688. package/packages/server/modules/gitlab/icon.js +67 -0
  689. package/packages/server/modules/gitlab/index.js +14 -0
  690. package/packages/server/modules/gitlab/issues.js +61 -0
  691. package/packages/server/modules/gitlab/merge-requests.js +287 -0
  692. package/packages/server/modules/gitlab/navigation.js +187 -0
  693. package/packages/server/modules/gitlab/oauth.js +250 -0
  694. package/packages/server/modules/gitlab/pipelines.js +240 -0
  695. package/packages/server/modules/gitlab/releases.js +226 -0
  696. package/packages/server/modules/gitlab/search.js +75 -0
  697. package/packages/server/modules/gitlab/trackers.js +96 -0
  698. package/packages/server/modules/http/download.js +50 -0
  699. package/packages/server/modules/http/http.js +8 -0
  700. package/packages/server/modules/http/index.js +2 -0
  701. package/packages/server/modules/hub/connector.js +114 -0
  702. package/packages/server/modules/hub/hub.js +142 -0
  703. package/packages/server/modules/hub/index.js +1 -0
  704. package/packages/server/modules/ide/editor-settings.js +37 -0
  705. package/packages/server/modules/ide/index.js +3 -0
  706. package/packages/server/modules/ide/keybindings.js +37 -0
  707. package/packages/server/modules/ide/mcp-bridge.js +150 -0
  708. package/packages/server/modules/instance/index.js +2 -0
  709. package/packages/server/modules/instance/instance.js +50 -0
  710. package/packages/server/modules/integration-store/index.js +2 -0
  711. package/packages/server/modules/integration-store/list.js +12 -0
  712. package/packages/server/modules/integration-store/store.js +141 -0
  713. package/packages/server/modules/judge/approval.js +35 -0
  714. package/packages/server/modules/judge/index.js +3 -0
  715. package/packages/server/modules/judge/settings.js +35 -0
  716. package/packages/server/modules/judge/verdict.js +141 -0
  717. package/packages/server/modules/launcher/browse.js +29 -0
  718. package/packages/server/modules/launcher/folders.js +138 -0
  719. package/packages/server/modules/launcher/hosted-search.js +43 -0
  720. package/packages/server/modules/launcher/index.js +12 -0
  721. package/packages/server/modules/launcher/launcher.js +352 -0
  722. package/packages/server/modules/launcher/potential.js +70 -0
  723. package/packages/server/modules/launcher/project-entries.js +165 -0
  724. package/packages/server/modules/network/eu-context.js +29 -0
  725. package/packages/server/modules/network/index.js +1 -0
  726. package/packages/server/modules/openai-gateway/config.js +125 -0
  727. package/packages/server/modules/openai-gateway/gateway.js +178 -0
  728. package/packages/server/modules/openai-gateway/index.js +7 -0
  729. package/packages/server/modules/preferences/index.js +7 -0
  730. package/packages/server/modules/preferences/preferences.js +142 -0
  731. package/packages/server/modules/processes/index.js +6 -0
  732. package/packages/server/modules/processes/processes.js +174 -0
  733. package/packages/server/modules/project-presentation/implementation.js +130 -0
  734. package/packages/server/modules/project-presentation/index.js +1 -0
  735. package/packages/server/modules/project-widgets/index.js +210 -0
  736. package/packages/server/modules/projects/discovery.js +179 -0
  737. package/packages/server/modules/projects/favicon.js +180 -0
  738. package/packages/server/modules/projects/index.js +11 -0
  739. package/packages/server/modules/projects/inspect.js +148 -0
  740. package/packages/server/modules/projects/remote-icon.js +39 -0
  741. package/packages/server/modules/projects/store.js +41 -0
  742. package/packages/server/modules/projects/types.js +1 -0
  743. package/packages/server/modules/providers/atomic-file.js +29 -0
  744. package/packages/server/modules/providers/balance.js +125 -0
  745. package/packages/server/modules/providers/index.js +15 -0
  746. package/packages/server/modules/providers/kinds.js +24 -0
  747. package/packages/server/modules/providers/model-list.js +16 -0
  748. package/packages/server/modules/providers/models.js +124 -0
  749. package/packages/server/modules/providers/openai-client.js +40 -0
  750. package/packages/server/modules/providers/provider-seeds.js +39 -0
  751. package/packages/server/modules/providers/provider-store.js +317 -0
  752. package/packages/server/modules/providers/quiet-model.js +36 -0
  753. package/packages/server/modules/providers/secret-obfuscation.js +48 -0
  754. package/packages/server/modules/providers/thinking.js +105 -0
  755. package/packages/server/modules/providers/types.js +1 -0
  756. package/packages/server/modules/restart/index.js +1 -0
  757. package/packages/server/modules/restart/restart.js +56 -0
  758. package/packages/server/modules/secrets/index.js +1 -0
  759. package/packages/server/modules/secrets/vault.js +51 -0
  760. package/packages/server/modules/spend/index.js +2 -0
  761. package/packages/server/modules/spend/ledger.js +82 -0
  762. package/packages/server/modules/spend/store.js +92 -0
  763. package/packages/server/modules/terminal/drop-files.js +42 -0
  764. package/packages/server/modules/terminal/index.js +15 -0
  765. package/packages/server/modules/terminal/link-files.js +44 -0
  766. package/packages/server/modules/terminal/scenario-folder.js +20 -0
  767. package/packages/server/modules/terminal/session-state.js +85 -0
  768. package/packages/server/modules/terminal/socket.js +159 -0
  769. package/packages/server/modules/terminal/terminal-activity.js +56 -0
  770. package/packages/server/modules/terminal/terminal-file.js +32 -0
  771. package/packages/server/modules/terminal/terminal-mouse.js +29 -0
  772. package/packages/server/modules/terminal/terminal.js +308 -0
  773. package/packages/server/modules/terminal/terminate.js +68 -0
  774. package/packages/server/modules/terminal-control/control.js +75 -0
  775. package/packages/server/modules/terminal-control/handlers.js +10 -0
  776. package/packages/server/modules/terminal-control/index.js +3 -0
  777. package/packages/server/modules/terminal-control/shared-socket.js +319 -0
  778. package/packages/server/modules/terminal-control/socket.js +153 -0
  779. package/packages/server/modules/transport/implementation.js +24 -0
  780. package/packages/server/modules/transport/index.js +2 -0
  781. package/packages/server/modules/transport/router.js +16 -0
  782. package/packages/server/modules/transport/types.js +1 -0
  783. package/packages/server/modules/usage-analytics/index.js +4 -0
  784. package/packages/server/modules/usage-analytics/limits.js +144 -0
  785. package/packages/server/modules/usage-analytics/overview.js +117 -0
  786. package/packages/server/modules/usage-analytics/providers.js +120 -0
  787. package/packages/server/modules/usage-analytics/store.js +152 -0
  788. package/packages/server/modules/window/desktop.js +24 -0
  789. package/packages/server/modules/window/index.js +8 -0
  790. package/packages/server/modules/window/window.js +86 -0
  791. package/packages/server/modules/workspace/archive.py +109 -0
  792. package/packages/server/modules/workspace/external-files.js +22 -0
  793. package/packages/server/modules/workspace/files-exclude.js +73 -0
  794. package/packages/server/modules/workspace/files.js +332 -0
  795. package/packages/server/modules/workspace/find-paths.js +92 -0
  796. package/packages/server/modules/workspace/git-branches.js +159 -0
  797. package/packages/server/modules/workspace/git-compare.js +121 -0
  798. package/packages/server/modules/workspace/git-history.js +182 -0
  799. package/packages/server/modules/workspace/git-sync.js +245 -0
  800. package/packages/server/modules/workspace/git-tree.js +126 -0
  801. package/packages/server/modules/workspace/git.js +276 -0
  802. package/packages/server/modules/workspace/ignored.js +23 -0
  803. package/packages/server/modules/workspace/import.js +190 -0
  804. package/packages/server/modules/workspace/index.js +15 -0
  805. package/packages/server/modules/workspace/paths.js +38 -0
  806. package/packages/server/modules/workspace/reveal.js +14 -0
  807. package/packages/server/modules/workspace/search.js +136 -0
  808. package/packages/server/modules/workspace/site.js +62 -0
  809. package/packages/server/modules/workspace/watcher.js +176 -0
  810. package/packages/server/routes/api/agent-answer-repair.js +35 -0
  811. package/packages/server/routes/api/agent-chats.js +77 -0
  812. package/packages/server/routes/api/agent-features.js +36 -0
  813. package/packages/server/routes/api/agent-form-repair.js +35 -0
  814. package/packages/server/routes/api/agent-hooks.js +35 -0
  815. package/packages/server/routes/api/agent-jobs.js +322 -0
  816. package/packages/server/routes/api/agent-judge.js +33 -0
  817. package/packages/server/routes/api/agent-lens.js +27 -0
  818. package/packages/server/routes/api/agent-mcp.js +41 -0
  819. package/packages/server/routes/api/agent-memory.js +33 -0
  820. package/packages/server/routes/api/agent-project-roles.js +112 -0
  821. package/packages/server/routes/api/agent-project-widgets.js +67 -0
  822. package/packages/server/routes/api/agent-roles.js +106 -0
  823. package/packages/server/routes/api/agent-secret-show.js +87 -0
  824. package/packages/server/routes/api/agent-side.js +70 -0
  825. package/packages/server/routes/api/agent-skills.js +31 -0
  826. package/packages/server/routes/api/agent-web.js +27 -0
  827. package/packages/server/routes/api/agent-worktrees.js +49 -0
  828. package/packages/server/routes/api/agent.js +269 -0
  829. package/packages/server/routes/api/analytics.js +21 -0
  830. package/packages/server/routes/api/app/hide.js +12 -0
  831. package/packages/server/routes/api/app/mode.js +49 -0
  832. package/packages/server/routes/api/app/network.js +54 -0
  833. package/packages/server/routes/api/app/open.js +33 -0
  834. package/packages/server/routes/api/app/quit.js +14 -0
  835. package/packages/server/routes/api/app/restart.js +18 -0
  836. package/packages/server/routes/api/appearance.js +70 -0
  837. package/packages/server/routes/api/browser.js +27 -0
  838. package/packages/server/routes/api/claude.js +15 -0
  839. package/packages/server/routes/api/codex.js +15 -0
  840. package/packages/server/routes/api/cursor.js +15 -0
  841. package/packages/server/routes/api/directories.js +16 -0
  842. package/packages/server/routes/api/docker.js +74 -0
  843. package/packages/server/routes/api/events.js +25 -0
  844. package/packages/server/routes/api/health.js +20 -0
  845. package/packages/server/routes/api/hub.js +26 -0
  846. package/packages/server/routes/api/ide/commands.js +72 -0
  847. package/packages/server/routes/api/ide/editor.js +37 -0
  848. package/packages/server/routes/api/ide/files-exclude.js +37 -0
  849. package/packages/server/routes/api/ide/keybindings.js +37 -0
  850. package/packages/server/routes/api/inspect.js +21 -0
  851. package/packages/server/routes/api/integrations/[...action].js +201 -0
  852. package/packages/server/routes/api/integrations/github-browse.js +190 -0
  853. package/packages/server/routes/api/kimi.js +15 -0
  854. package/packages/server/routes/api/launcher/icon.js +16 -0
  855. package/packages/server/routes/api/launcher/launch.js +27 -0
  856. package/packages/server/routes/api/launcher/search.js +20 -0
  857. package/packages/server/routes/api/launcher/settings.js +68 -0
  858. package/packages/server/routes/api/openai.js +94 -0
  859. package/packages/server/routes/api/opencode.js +15 -0
  860. package/packages/server/routes/api/pick-folder.js +12 -0
  861. package/packages/server/routes/api/preview-icon.js +21 -0
  862. package/packages/server/routes/api/projects/[id]/index.js +240 -0
  863. package/packages/server/routes/api/projects/[id]/site.js +59 -0
  864. package/packages/server/routes/api/projects/[id]/terminals.js +38 -0
  865. package/packages/server/routes/api/projects/[id]/workspace-read.js +126 -0
  866. package/packages/server/routes/api/projects/[id]/workspace.js +147 -0
  867. package/packages/server/routes/api/projects/index.js +62 -0
  868. package/packages/server/routes/api/providers/active.js +12 -0
  869. package/packages/server/routes/api/providers/balance.js +15 -0
  870. package/packages/server/routes/api/providers/models.js +19 -0
  871. package/packages/server/routes/api/providers.js +23 -0
  872. package/packages/server/routes/api/status.js +11 -0
  873. package/resources/icons/128.png +0 -0
  874. package/resources/icons/16.png +0 -0
  875. package/resources/icons/256.png +0 -0
  876. package/resources/icons/32.png +0 -0
  877. package/resources/icons/48.png +0 -0
  878. package/resources/icons/512.png +0 -0
  879. package/resources/icons/64.png +0 -0
  880. package/resources/icons/projector.svg +5 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Projector contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,36 @@
1
- # Temporary Holding Version
1
+ # @ai-projector/ide
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Projector web IDE: files, Git, terminals and agent chats in one local server. This package does not include the GTK palette.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install -g @ai-projector/ide
9
+ projector --browser
10
+ ```
11
+
12
+ Open <http://localhost:4177> while Projector is running. Without `@ai-projector/native` the default launch mode opens the browser.
13
+
14
+ The CLI can drive projects without the UI:
15
+
16
+ ```bash
17
+ projector open ~/code/app # registers and opens a folder as a project
18
+ projector projects # saved projects
19
+ projector status . # server, project and process state
20
+ projector run . --command dev # start the project command
21
+ projector stop .
22
+ projector search opencode
23
+ projector start | restart | quit
24
+ ```
25
+
26
+ Use `--json` for machine-readable output. `projector open` also accepts a project id or name, `gh:/owner/repository` and `gl:/<instance>/<group>/<project>`.
27
+
28
+ Requirements: Node.js 24.11–24.x; on Linux, Python 3, `make` and a C++ compiler to build `node-pty`. Projector also uses `git`, `rg` and GNU `mv`.
29
+
30
+ To add a desktop entry and the `projector` command:
31
+
32
+ ```bash
33
+ projector-install-desktop
34
+ ```
35
+
36
+ Data and settings are stored in `$XDG_DATA_HOME/projector` (`~/.local/share/projector` by default).
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ ROOT="$(cd "$(dirname "$(readlink -f "$0")")/.." && pwd)"
5
+ export PATH="${HOME}/.vite-plus/bin:${ROOT}/node_modules/.bin:/usr/local/bin:/usr/bin:/bin:${PATH}"
6
+ cd "$ROOT"
7
+
8
+ ENTRY="$ROOT/packages/cli/app/install-desktop.ts"
9
+ if [[ ! -f "$ENTRY" ]]; then
10
+ ENTRY="$ROOT/packages/cli/app/install-desktop.js"
11
+ fi
12
+
13
+ if [[ -x "${HOME}/.vite-plus/bin/node" ]]; then
14
+ exec "${HOME}/.vite-plus/bin/node" "$ENTRY" "$@"
15
+ fi
16
+
17
+ exec node "$ENTRY" "$@"
@@ -0,0 +1,11 @@
1
+ @echo off
2
+ setlocal
3
+ cd /d "%~dp0.."
4
+ where node >nul 2>&1
5
+ if errorlevel 1 (
6
+ echo Нужен node в PATH 1>&2
7
+ exit /b 1
8
+ )
9
+ set "ENTRY=%~dp0..\packages\cli\app\install-desktop.ts"
10
+ if not exist "%ENTRY%" set "ENTRY=%~dp0..\packages\cli\app\install-desktop.js"
11
+ node "%ENTRY%" %*
package/bin/projector ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ ROOT="$(cd "$(dirname "$(readlink -f "$0")")/.." && pwd)"
5
+ export PATH="${HOME}/.vite-plus/bin:${ROOT}/node_modules/.bin:/usr/local/bin:/usr/bin:/bin:${PATH}"
6
+ cd "$ROOT"
7
+
8
+ ENTRY="$ROOT/packages/cli/app/launch.ts"
9
+ if [[ ! -f "$ENTRY" ]]; then
10
+ ENTRY="$ROOT/packages/cli/app/launch.js"
11
+ fi
12
+
13
+ if [[ -x "${HOME}/.vite-plus/bin/node" ]]; then
14
+ exec "${HOME}/.vite-plus/bin/node" "$ENTRY" "$@"
15
+ fi
16
+
17
+ if command -v node >/dev/null 2>&1; then
18
+ exec node "$ENTRY" "$@"
19
+ fi
20
+
21
+ echo "Нужны vp или node в PATH" >&2
22
+ exit 1
@@ -0,0 +1,11 @@
1
+ @echo off
2
+ setlocal
3
+ cd /d "%~dp0.."
4
+ where node >nul 2>&1
5
+ if errorlevel 1 (
6
+ echo Нужен node в PATH 1>&2
7
+ exit /b 1
8
+ )
9
+ set "ENTRY=%~dp0..\packages\cli\app\launch.ts"
10
+ if not exist "%ENTRY%" set "ENTRY=%~dp0..\packages\cli\app\launch.js"
11
+ node "%ENTRY%" %*
@@ -0,0 +1 @@
1
+ .code-viewer-root[data-v-8695ecd1]{position:relative}.diff-header[data-v-8695ecd1]{border-bottom:1px solid var(--line);height:24px;color:var(--muted);font:var(--fs-xs) var(--sans);flex:none;align-items:center;display:flex}.diff-side[data-v-8695ecd1]{flex:1;min-width:0;padding:0 12px}.diff-side+.diff-side[data-v-8695ecd1]{border-left:1px solid var(--line)}.diff-arrow[data-v-8695ecd1]{flex:none}.diff-layout[data-v-8695ecd1]{z-index:5;gap:2px;display:flex;position:absolute;top:2px;right:18px}.diff-layout button[data-v-8695ecd1]{border-radius:var(--r-sm);width:20px;height:20px;color:var(--muted);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:grid}.diff-layout button[data-v-8695ecd1]:hover,.diff-layout button.active[data-v-8695ecd1]{background:var(--active);color:var(--text)}.code-viewer[data-v-8695ecd1] .cm-mergeView,.code-viewer[data-v-8695ecd1] .cm-mergeViewEditors{height:100%}.code-viewer[data-v-8695ecd1] .cm-mergeViewEditor{min-width:0;height:100%;overflow:hidden}.code-viewer[data-v-8695ecd1] .cm-mergeViewEditor+.cm-mergeViewEditor{border-left:1px solid var(--line)}.code-viewer[data-v-8695ecd1] .cm-mergeView .cm-editor{height:100%}.code-viewer[data-v-8695ecd1]{flex:1;height:auto;min-height:0;overflow:hidden}.code-viewer[data-v-8695ecd1] .selection-chat{border:1px solid var(--line-strong);border-radius:var(--r-full);background:var(--bg-3);min-height:26px;box-shadow:var(--shadow-popover);color:var(--text);font:var(--fs-xs) var(--sans);cursor:pointer;align-items:center;padding:0 10px;display:inline-flex}.code-viewer[data-v-8695ecd1] .selection-chat:hover{background:var(--bg-4)}.code-viewer[data-v-8695ecd1] .selection-chat:focus-visible{border-color:var(--focus);background:var(--bg-4)}.code-viewer[data-v-8695ecd1] .cm-dirty-gutter{width:10px}.code-viewer[data-v-8695ecd1] .git-gutter-added,.code-viewer[data-v-8695ecd1] .git-gutter-modified{cursor:pointer;background:var(--run);width:3px;height:100%;margin-left:3px}.code-viewer[data-v-8695ecd1] .git-gutter-modified{background:var(--info)}.code-viewer[data-v-8695ecd1] .git-gutter-deleted{border-left:4px solid var(--err);border-top:4px solid #0000;border-bottom:4px solid #0000;width:0;height:0;margin-top:100%;margin-left:3px}.code-viewer[data-v-8695ecd1] .git-gutter-deleted-top{margin-top:0}.code-viewer[data-v-8695ecd1] .dirty-diff-peek{box-sizing:border-box;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--bg-2);overflow:hidden}.code-viewer[data-v-8695ecd1] .dirty-diff-bar{height:20px;color:var(--muted);font:var(--fs-xs) var(--sans);align-items:center;gap:2px;padding:0 8px;display:flex}.code-viewer[data-v-8695ecd1] .dirty-diff-title{flex:1}.code-viewer[data-v-8695ecd1] .dirty-diff-button{border-radius:var(--r-sm);min-width:20px;height:18px;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;line-height:1}.code-viewer[data-v-8695ecd1] .dirty-diff-button:hover{background:var(--active);color:var(--text)}.code-viewer[data-v-8695ecd1] .dirty-diff-body{background:color-mix(in srgb, var(--err) 8%, transparent);font:var(--fs-sm) var(--mono);white-space:pre;padding:0 0 0 64px;line-height:20px}.code-viewer[data-v-8695ecd1] .cm-changedLine{background:color-mix(in srgb, var(--run) 8%, transparent)}.code-viewer[data-v-8695ecd1] .cm-changedText{background:color-mix(in srgb, var(--run) 20%, transparent)}.code-viewer[data-v-8695ecd1] .diff-revert{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-2);color:var(--muted);font:var(--fs-xs) var(--sans);cursor:pointer;margin:0 4px;padding:0 6px}.code-viewer[data-v-8695ecd1] .diff-revert:hover{background:var(--active);color:var(--text)}.code-viewer[data-v-8695ecd1] .cm-deletedChunk{background:color-mix(in srgb, var(--err) 8%, transparent)}
@@ -0,0 +1 @@
1
+ import{V as e,q as t}from"./shared.esm-bundler-DoSbGLUP.js";import{A as n,Jt as r,O as i,Ut as a,Y as o,at as ee,b as s,ht as c,kn as l,lt as te,pn as u,t as d,v as f,x as p,y as m,yn as h}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{O as ne,a as re,f as ie,i as ae,o as oe,r as se}from"./dist-DzoDV6Eh.js";import{t as ce}from"./UiPanel-DtI4DFYT.js";import{At as g,Lt as le,Rt as _,T as ue,Y as v,Z as de,ct as fe,dt as y,ft as b,g as x,l as S,st as pe,tt as me,yt as he}from"./dist-23D313r2.js";import{a as C,c as ge,i as _e,l as ve,n as ye,o as w,r as T,s as E,u as D}from"./main-iz4ud0jC.js";import{n as O,t as k}from"./dist-CRLdLpSX.js";import{n as A,r as j}from"./editor-theme-ClBxXjSu.js";var M={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function N(e,t){return c(),p(`svg`,M,[...t[0]||=[f(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[f(`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`}),f(`path`,{d:`M3 12h18`})],-1)]])}var P=u({name:`lucide-rows-2`,render:N}),F={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function I(e,t){return c(),p(`svg`,F,[...t[0]||=[f(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[f(`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`}),f(`path`,{d:`M12 3v18`})],-1)]])}var L=u({name:`lucide-columns-2`,render:I}),be={key:0,class:`diff-layout`,role:`group`,"aria-label":`Вид сравнения`},xe=[`aria-pressed`],Se=[`aria-pressed`],Ce={key:1,class:`diff-header`},we={class:`diff-side u-truncate`},Te={key:0,class:`diff-arrow`},Ee={class:`diff-side u-truncate`},De=[`aria-label`],R=d(n({__name:`CodeViewer`,props:{path:{},content:{},original:{},originalLabel:{},modifiedLabel:{},line:{},endLine:{},column:{},editable:{type:Boolean},projectId:{},revision:{}},emits:[`change`,`save`],setup(n,{emit:u}){let d=n,M=u,N=h(),F,I,R=h(!1),z=0,B=new Map,V=``,H=D(),U=H.acquire(),W=o(Symbol.for(`projector.editor-selection`),void 0),G=()=>!!W&&!!d.projectId&&d.editable===!0&&d.original===void 0&&!d.path.startsWith(`/`);function K(e){if(!G())return;let{main:t}=e.selection,n=e.doc.lineAt(t.from),r=e.doc.lineAt(t.to);t.to>t.from&&r.from===t.to&&r.number>n.number&&(r=e.doc.line(r.number-1)),W.report({path:d.path,from:n.number,to:r.number})}let q=le.define(),J=_.define({create:()=>!0,update(e,t){let n=e;t.selection&&(n=t.state.selection.main.empty);for(let e of t.effects)e.is(q)&&(n=e.value);return n}}),Oe=de.fromClass(class{timer;pointerDown=!1;view;onMouseDown;onMouseUp;constructor(e){this.view=e;let t=e.dom.ownerDocument;this.onMouseDown=t=>{let n=t.target;n instanceof Node&&e.dom.contains(n)&&(n instanceof Element&&n.closest(`.selection-chat`)||(this.pointerDown=!0,this.clear(),e.dispatch({effects:q.of(!1)})))},this.onMouseUp=()=>{this.pointerDown&&(this.pointerDown=!1,this.schedule(120))},t.addEventListener(`mousedown`,this.onMouseDown,!0),t.addEventListener(`mouseup`,this.onMouseUp,!0)}clear(){clearTimeout(this.timer),this.timer=void 0}schedule(e){this.clear(),this.timer=setTimeout(()=>{this.timer=void 0,this.view.state.selection.main.empty||this.view.dispatch({effects:q.of(!0)})},e)}update(e){e.selectionSet&&(this.clear(),e.state.selection.main.empty||this.pointerDown||this.schedule(180))}destroy(){this.clear();let e=this.view.dom.ownerDocument;e.removeEventListener(`mousedown`,this.onMouseDown,!0),e.removeEventListener(`mouseup`,this.onMouseUp,!0)}});function ke(){let e=_.define({create:()=>[],update(e,t){let n=t.state.selection.main;return n.empty||!t.state.field(J)?[]:[{pos:n.head,above:!1,create:()=>{let e=document.createElement(`button`);return e.type=`button`,e.className=`selection-chat`,e.textContent=`В чат`,e.title=`Добавить выделенные строки в чат агента`,e.setAttribute(`aria-label`,`Добавить выделенные строки в чат агента`),e.addEventListener(`mousedown`,e=>e.preventDefault()),e.addEventListener(`click`,()=>W?.add()),{dom:e}}}]}});return[J,Oe,e,he.computeN([e],t=>t.field(e))]}function Y(e){let{main:t}=e.selection,n=e.doc.lineAt(t.head);return{line:n.number,column:t.head-n.from+1,selectedChars:t.empty?0:t.to-t.from,selectedLines:t.empty?0:e.doc.lineAt(t.to).number-n.number+1}}async function X(){let e=++z,t=F;if(!t||d.original!==void 0||!d.projectId||d.path.startsWith(`/`)||!ne(d.projectId).git)t?.dispatch({effects:C.of(null)});else try{let n=await ie(d.projectId,d.path);if(e!==z||F!==t)return;t.dispatch({effects:C.of(n.available?n.original:null)})}catch{e===z&&t.dispatch({effects:C.of(null)})}}function Ae(e,t){let n=document.createElement(e===`reject`?`button`:`span`);return e===`reject`&&(n.className=`diff-revert`,n.textContent=`↶ Откатить`,n.title=`Вернуть версию из индекса`,n.onmousedown=t),n}function Z(e=`inline`){return[b(),x(),me(),ue(),S(),pe(),fe(),k(),ae(),y.of([...se,...O,...re,oe]),g.readOnly.of(!d.editable),v.editable.of(!!d.editable),d.editable?v.lineWrapping:[],...G()?ke():[],w.of(E(A.value)),T.of([]),g.phrases.of({"Revert this chunk":`Откатить изменение`,"$ unchanged lines":`$ строк без изменений`}),d.original===void 0?ye:e===`inline`?ve({original:d.original,gutter:!0,mergeControls:d.editable?Ae:!1}):[],v.updateListener.of(e=>{e.docChanged&&d.editable&&M(`change`,e.state.doc.toString()),e.view===F&&(e.selectionSet?H.activate(U,Y(e.state)):e.docChanged&&H.update(U,Y(e.state)),(e.selectionSet||e.docChanged)&&e.view.hasFocus&&K(e.state))}),v.domEventHandlers({focus(e,t){return K(t.state),!1}})]}function Q(){if(!N.value)return;F&&B.set(V,F.state),I?.destroy(),I=void 0,F?.destroy(),V=d.path;let e=d.original===void 0?B.get(d.path):void 0;d.original!==void 0&&R.value?(I=new ge({parent:N.value,a:{doc:d.original,extensions:[...Z(`side`),g.readOnly.of(!0),v.editable.of(!1)]},b:{doc:d.content,extensions:Z(`side`)},gutter:!0,revertControls:d.editable?`a-to-b`:void 0,highlightChanges:!0,collapseUnchanged:{margin:3,minSize:6}}),F=I.b):F=new v({parent:N.value,state:e??g.create({doc:d.content,extensions:Z()})});let t=F;H.activate(U,Y(t.state)),_e(d.path).then(e=>{if(F!==t)return;let n={effects:T.reconfigure(e)};I?.a.dispatch(n),t.dispatch(n)}),X(),$()}function $(){if(!F||!d.line)return;let e=F.state.doc.line(Math.min(d.line,F.state.doc.lines));if(d.endLine){let t=F.state.doc.line(Math.max(e.number,Math.min(d.endLine,F.state.doc.lines)));F.dispatch({selection:{anchor:e.from,head:t.to},effects:v.scrollIntoView(e.from,{y:`center`})});return}let t=Math.min(e.from+(d.column??1)-1,e.to);F.dispatch({selection:{anchor:t},effects:v.scrollIntoView(t,{y:`center`})})}function je(e){if(!d.editable)return;let t=e.relatedTarget;t instanceof Node&&N.value?.contains(t)||M(`save`)}return te(()=>{Q(),j().catch(()=>void 0)}),a(()=>[d.path,d.original,d.editable,R.value],Q),a(A,e=>{let t={effects:w.reconfigure(E(e))};I?.a.dispatch(t),F?.dispatch(t)}),a(()=>d.content,e=>{F&&F.state.doc.toString()!==e&&F.dispatch({changes:{from:0,to:F.state.doc.length,insert:e}})}),a(()=>[d.projectId,d.revision],()=>void X()),a(()=>[d.line,d.column,d.endLine],$),ee(()=>{++z,I?.destroy(),F?.destroy(),B.clear(),H.release(U),W?.clear(d.path)}),(a,o)=>(c(),m(ce,{as:`div`,class:`code-viewer-root`},{default:r(()=>[n.original===void 0?s(``,!0):(c(),p(`div`,be,[f(`button`,{type:`button`,title:`В одну колонку`,"aria-pressed":!R.value,class:e({active:!R.value}),onClick:o[0]||=e=>R.value=!1},[i(l(P))],10,xe),f(`button`,{type:`button`,title:`Две колонки`,"aria-pressed":R.value,class:e({active:R.value}),onClick:o[1]||=e=>R.value=!0},[i(l(L))],10,Se)])),n.original===void 0?s(``,!0):(c(),p(`div`,Ce,[f(`span`,we,t(n.originalLabel??`Было`),1),R.value?s(``,!0):(c(),p(`span`,Te,`→`)),f(`span`,Ee,t(n.modifiedLabel??`Стало`),1)])),f(`div`,{ref_key:`container`,ref:N,class:`code-viewer`,onFocusout:je,"aria-label":n.editable?`Редактор файла`:`Просмотр кода`},null,40,De)]),_:1}))}}),[[`__scopeId`,`data-v-8695ecd1`]]);export{R as default};
@@ -0,0 +1 @@
1
+ .category[data-v-97ac5b16]{color:var(--text-2)}
@@ -0,0 +1,2 @@
1
+ import{E as e}from"./styles-DZDDPlL3.js";import{q as t}from"./shared.esm-bundler-DoSbGLUP.js";import{A as n,D as r,Jt as i,O as a,_ as o,b as s,ht as c,kn as l,t as u,x as d,y as f}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{d as p,u as m}from"./UiViewerPage-aHNgiSjO.js";import{h}from"./main-iz4ud0jC.js";import{n as g,r as _,t as v}from"./TrackerDetail-DuzfEwSZ.js";var y={key:0,class:`category`},b={key:1},x=u(n({__name:`DiscussionView`,props:{projectId:{},number:{}},emits:[`open`],setup(n,{emit:u}){let x=n,S=u,{detail:C,loading:w,error:T}=_(()=>x.projectId,()=>x.number,`discussion`,`Не удалось открыть discussion`),E=(e,t)=>({...e,at:e.createdAt,depth:t,badge:e.isAnswer?`ответ`:void 0,badgeClass:e.isAnswer?`answer`:void 0}),D=o(()=>(C.value?.comments??[]).flatMap(e=>[E(e,0),...e.replies.map(e=>E(e,1))])),O=o(()=>(C.value?.comments??[]).some(e=>e.repliesTruncated)),k=o(()=>{let e=C.value?.discussion;return e?.closed?`closed`:e?.answered?`answered`:`open`}),A={open:`открыто`,closed:`закрыто`,answered:`есть ответ`};return p(()=>{let e=`Discussion #${C.value?.discussion.number??x.number}`;if(T.value)return{note:e,text:`Ошибка: ${T.value}`};let t=C.value;if(!t)return{note:e,text:`Загрузка…`};let n=t.discussion,r=n.body.length>4e3?`${n.body.slice(0,4e3)}…`:n.body,i=t.comments.flatMap(e=>[`${e.isAnswer?`[ответ] `:``}${e.author.login}`,...e.replies.map(e=>` ↳ ${e.author.login}`)]),a=i.slice(0,200);return{note:e,text:m(`Состояние: ${A[k.value]}`,`${n.title} (#${n.number})`,`Автор: ${n.author.login}, создано ${n.createdAt}`,n.category.name?`Категория: ${n.category.name}`:``,n.labels.length?`Метки: ${n.labels.map(e=>e.name).join(`, `)}`:`Метки: нет`,`Голосов: ${n.upvotes}`,i.length?`Комментарии (${t.comments.length}):\n${a.join(`
2
+ `)}${i.length>a.length?`\n… ещё ${i.length-a.length}`:``}`:`Комментариев: нет`,t.commentsTruncated?`Комментарии показаны не все.`:``,O.value?`Ответы на комментарии показаны не все.`:``,r)}}),(o,u)=>(c(),f(v,{"project-id":n.projectId,loading:l(w),error:l(T),ready:!!l(C),noun:`discussion`,state:k.value,"state-label":A[k.value],title:l(C)?.discussion.title??``,number:l(C)?.discussion.number??n.number,author:l(C)?.discussion.author??{login:``,avatarUrl:``},"created-at":l(C)?.discussion.createdAt??``,"html-url":l(C)?.discussion.htmlUrl??``,labels:l(C)?.discussion.labels??[],body:l(C)?.discussion.body??``,reactions:l(C)?.discussion.reactions??[],onOpen:u[1]||=e=>S(`open`,e)},{meta:i(()=>[l(C)?.discussion.category.name?(c(),d(`span`,y,[a(h,{text:l(C).discussion.category.emoji},null,8,[`text`]),r(` `+t(l(C).discussion.category.name),1)])):s(``,!0),l(C)?.discussion.upvotes?(c(),d(`span`,b,`▲ `+t(l(C).discussion.upvotes),1)):s(``,!0)]),default:i(()=>[a(g,{"project-id":n.projectId,title:`Комментарии`,empty:`Комментариев нет`,items:D.value,onOpen:u[0]||=e=>S(`open`,e)},null,8,[`project-id`,`items`]),O.value?(c(),f(e,{key:0,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:i(()=>[...u[2]||=[r(` У некоторых комментариев показаны не все ответы. Откройте discussion на GitHub, чтобы увидеть все. `,-1)]]),_:1})):s(``,!0),l(C)?.commentsTruncated?(c(),f(e,{key:1,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:i(()=>[...u[3]||=[r(` Показаны первые 250 комментариев. Откройте discussion на GitHub, чтобы увидеть все. `,-1)]]),_:1})):s(``,!0)]),_:1},8,[`project-id`,`loading`,`error`,`ready`,`state`,`state-label`,`title`,`number`,`author`,`created-at`,`html-url`,`labels`,`body`,`reactions`]))}}),[[`__scopeId`,`data-v-97ac5b16`]]);export{x as default};
@@ -0,0 +1,13 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeViewer-C-C3aibO.js","assets/shared.esm-bundler-DoSbGLUP.js","assets/_plugin-vue_export-helper-D62Ebo7D.js","assets/dist-DzoDV6Eh.js","assets/styles-DZDDPlL3.js","assets/UiButton-DvucBdmd.js","assets/UiButton-AkN01P3P.css","assets/styles-CCXo2OoQ.css","assets/preload-helper-BLdHbfdN.js","assets/dist-23D313r2.js","assets/UiPanel-DtI4DFYT.js","assets/UiPanel-BUDYIo-h.css","assets/main-iz4ud0jC.js","assets/rolldown-runtime-XKyaHtl9.js","assets/github-emoji-CXJ5RSZS.js","assets/ImageViewport-BT_ftU4z.js","assets/ImageViewport-JcG9P4B6.css","assets/github-emoji-D8dkjuM_.css","assets/UiViewerPage-aHNgiSjO.js","assets/external-link-lkcxItwM.js","assets/UiViewerPage-CMFEzZ2i.css","assets/main-JoBAi6ol.css","assets/dist-CRLdLpSX.js","assets/editor-theme-ClBxXjSu.js","assets/CodeViewer--WUSmn5i.css"])))=>i.map(i=>d[i]);
2
+ import{A as e,O as t,b as n,j as r}from"./styles-DZDDPlL3.js";import{V as i,q as a}from"./shared.esm-bundler-DoSbGLUP.js";import{A as o,D as s,Ft as c,Jt as l,O as u,_ as d,b as f,ht as p,k as m,kn as h,lt as g,s as _,t as v,v as y,x as b,xt as x,y as S,yn as C}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{t as w}from"./UiButton-DvucBdmd.js";import{t as T}from"./preload-helper-BLdHbfdN.js";import{L as E}from"./main-iz4ud0jC.js";import{i as D,n as O,r as k,t as A}from"./editor-theme-ClBxXjSu.js";var j=[`aria-labelledby`],M=[`value`],N={class:`hint`},P={class:`preview`},F=`// Спокойная подсветка для повседневной работы
3
+ interface Project {
4
+ name: string;
5
+ active: boolean;
6
+ }
7
+
8
+ export function recentProjects(projects: Project[], limit = 5) {
9
+ return projects
10
+ .filter((project) => project.active)
11
+ .slice(0, limit)
12
+ .map((project) => \`Открыть \${project.name}\`);
13
+ }`,I=v(o({__name:`EditorSettings`,props:{embedded:{type:Boolean}},setup(o){let v=c(),I=c(),L=m(()=>T(()=>import(`./CodeViewer-C-C3aibO.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]))),R=C(O.value),{ready:z,busy:B,error:V,status:H,load:U,perform:W}=n(),G=d(()=>D.find(e=>e.id===R.value)?.description);function K(){return U(async()=>{await k(),R.value=O.value},`Не удалось загрузить настройки`)}g(K);async function q(){await W(async()=>{let e=await fetch(`/api/ide/editor`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({theme:R.value})}),t=await e.json();if(!e.ok)throw Error(t.error||`Не удалось сохранить тему`);A(R.value)},{errorFallback:`Не удалось сохранить тему`,success:`Тема сохранена`,rollback:()=>{R.value=O.value}})}return(n,c)=>(p(),b(`section`,{class:`editor-settings`,"aria-labelledby":h(v)},[u(r,{id:h(v),size:`sm`,"space-after":4,class:i({"u-sr-only":o.embedded})},{default:l(()=>[...c[1]||=[s(`Редактор кода`,-1)]]),_:1},8,[`id`,`class`]),u(E,{for:h(I),"space-after":2},{default:l(()=>[...c[2]||=[s(`Цветовая тема редактора`,-1)]]),_:1},8,[`for`]),u(t,{as:`select`,id:h(I),modelValue:R.value,"onUpdate:modelValue":c[0]||=e=>R.value=e,disabled:!h(z)||h(B),onChange:q},{default:l(()=>[(p(!0),b(_,null,x(h(D),e=>(p(),b(`option`,{key:e.id,value:e.id},a(e.title),9,M))),128))]),_:1},8,[`id`,`modelValue`,`disabled`]),y(`p`,N,a(G.value),1),y(`div`,P,[u(h(L),{path:`theme-preview.ts`,content:F})]),c[4]||=y(`p`,{class:`hint`},` Тема применяется к коду и сравнению изменений во всех проектах. Выбор сохраняется автоматически. `,-1),h(V)||h(H)?(p(),S(e,{key:0,role:`status`,tone:h(V)?`danger`:void 0},{default:l(()=>[s(a(h(V)||h(H)),1)]),_:1},8,[`tone`])):f(``,!0),!h(z)&&h(V)?(p(),S(w,{key:1,onClick:K},{default:l(()=>[...c[3]||=[s(`Повторить загрузку`,-1)]]),_:1})):f(``,!0)],8,j))}}),[[`__scopeId`,`data-v-024612f3`]]);export{I as default};
@@ -0,0 +1 @@
1
+ .editor-settings[data-v-024612f3]{margin-bottom:var(--ui-section-margin,var(--sp-6))}select[data-v-024612f3]{max-width:420px}.hint[data-v-024612f3]{color:var(--muted);font-size:var(--ui-hint-font-size,var(--fs-sm));margin:var(--sp-3) 0}.preview[data-v-024612f3]{border:1px solid var(--line);border-radius:var(--r-md);height:240px;overflow:hidden}
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeViewer-C-C3aibO.js","assets/shared.esm-bundler-DoSbGLUP.js","assets/_plugin-vue_export-helper-D62Ebo7D.js","assets/dist-DzoDV6Eh.js","assets/styles-DZDDPlL3.js","assets/UiButton-DvucBdmd.js","assets/UiButton-AkN01P3P.css","assets/styles-CCXo2OoQ.css","assets/preload-helper-BLdHbfdN.js","assets/dist-23D313r2.js","assets/UiPanel-DtI4DFYT.js","assets/UiPanel-BUDYIo-h.css","assets/main-iz4ud0jC.js","assets/rolldown-runtime-XKyaHtl9.js","assets/github-emoji-CXJ5RSZS.js","assets/ImageViewport-BT_ftU4z.js","assets/ImageViewport-JcG9P4B6.css","assets/github-emoji-D8dkjuM_.css","assets/UiViewerPage-aHNgiSjO.js","assets/external-link-lkcxItwM.js","assets/UiViewerPage-CMFEzZ2i.css","assets/main-JoBAi6ol.css","assets/dist-CRLdLpSX.js","assets/editor-theme-ClBxXjSu.js","assets/CodeViewer--WUSmn5i.css"])))=>i.map(i=>d[i]);
2
+ import{D as e,O as t}from"./styles-DZDDPlL3.js";import{W as n,q as r}from"./shared.esm-bundler-DoSbGLUP.js";import{A as i,D as a,Jt as o,O as s,Ut as c,_ as l,ht as u,k as d,kn as f,pn as p,s as m,t as h,v as g,x as _,xt as v,y,yn as b}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{t as x}from"./UiButton-DvucBdmd.js";import{t as S}from"./UiPanel-DtI4DFYT.js";import{t as C}from"./preload-helper-BLdHbfdN.js";import{t as w}from"./external-link-lkcxItwM.js";import{A as T,O as E}from"./main-iz4ud0jC.js";import{t as D}from"./SplitPanes-DNDTWIta.js";var O={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function k(e,t){return u(),_(`svg`,O,[...t[0]||=[g(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[g(`rect`,{width:`20`,height:`16`,x:`2`,y:`4`,rx:`2`}),g(`path`,{d:`M10 4v4M2 8h20M6 4v4`})],-1)]])}var A=p({name:`lucide-app-window`,render:k}),j=[`value`],M=[`title`],N={class:`page-pane`},P=[`src`,`title`],F=h(i({__name:`HtmlViewer`,props:{path:{},projectId:{},content:{},saved:{},siteUrl:{},reload:{},editable:{type:Boolean},line:{},endLine:{},column:{}},emits:[`change`,`save`,`command`],setup(i,{emit:p}){let h=d(()=>C(()=>import(`./CodeViewer-C-C3aibO.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]))),O=i,k=p,F=[{id:`auto`,label:`Авто`,width:``},{id:`mobile`,label:`Телефон · 375`,width:`375px`},{id:`tablet`,label:`Планшет · 768`,width:`768px`},{id:`desktop`,label:`Ноутбук · 1280`,width:`1280px`}],I=b(`auto`),L=b(0);c(()=>[O.saved,O.reload],()=>L.value++);let R=l(()=>{let e=F.find(e=>e.id===I.value)?.width;return e?{width:e,maxWidth:`100%`}:void 0});return(c,l)=>(u(),y(S,{class:`html-viewer`,"aria-label":`Просмотр HTML`},{default:o(()=>[s(T,{class:`toolbar`,"column-gap":4,text:`xs`},{default:o(()=>[s(e,{as:`label`,gap:1.5,justify:`normal`},{default:o(()=>[l[6]||=a(`Ширина `,-1),s(t,{as:`select`,modelValue:I.value,"onUpdate:modelValue":l[0]||=e=>I.value=e,appearance:`inline-select`,"aria-label":`Ширина страницы`},{default:o(()=>[(u(),_(m,null,v(F,e=>g(`option`,{key:e.id,value:e.id},r(e.label),9,j)),64))]),_:1},8,[`modelValue`])]),_:1}),g(`span`,{class:`url u-truncate`,title:i.siteUrl},r(i.siteUrl),9,M),s(x,{shape:`icon`,size:`sm`,"aria-label":`Перезагрузить страницу`,title:`Перезагрузить страницу`,onClick:l[1]||=e=>k(`command`,`ide.editor.html.reload`)},{default:o(()=>[s(f(E),{"aria-hidden":`true`})]),_:1}),s(x,{shape:`icon`,size:`sm`,"aria-label":`Открыть во вкладке браузера`,title:`Открыть страницу во вкладке браузера Projector`,onClick:l[2]||=e=>k(`command`,`ide.editor.html.openInBrowserTab`)},{default:o(()=>[s(f(A),{"aria-hidden":`true`})]),_:1}),s(x,{shape:`icon`,size:`sm`,"aria-label":`Открыть в браузере`,title:`Открыть страницу в новой вкладке браузера`,onClick:l[3]||=e=>k(`command`,`ide.editor.html.openInBrowser`)},{default:o(()=>[s(f(w),{"aria-hidden":`true`})]),_:1})]),_:1}),s(D,{"top-label":`Страница`,"bottom-label":`Код`,reveal:i.line},{top:o(()=>[g(`div`,N,[(u(),_(`iframe`,{key:L.value,class:`page-frame`,style:n(R.value),src:i.siteUrl,title:`Страница ${i.path}`,sandbox:`allow-scripts allow-forms allow-popups allow-modals`,referrerpolicy:`no-referrer`},null,12,P))])]),bottom:o(()=>[s(f(h),{path:i.path,"project-id":i.projectId,content:i.content,editable:i.editable,line:i.line,"end-line":i.endLine,column:i.column,onChange:l[4]||=e=>k(`change`,e),onSave:l[5]||=e=>k(`save`)},null,8,[`path`,`project-id`,`content`,`editable`,`line`,`end-line`,`column`])]),_:1},8,[`reveal`])]),_:1}))}}),[[`__scopeId`,`data-v-3090fa71`]]);export{F as default};
@@ -0,0 +1 @@
1
+ .url[data-v-3090fa71]{min-width:0;font-family:var(--mono);color:var(--muted);flex:1}.page-pane[data-v-3090fa71]{background:var(--bg-3);flex:1;justify-content:center;min-height:0;display:flex;overflow:auto}.page-frame[data-v-3090fa71]{color-scheme:normal;background:#fff;border:0;width:100%;height:100%}
@@ -0,0 +1 @@
1
+ import{D as e,O as t}from"./styles-DZDDPlL3.js";import{V as n,W as r,q as i}from"./shared.esm-bundler-DoSbGLUP.js";import{A as a,D as o,Jt as s,O as c,Ut as l,_ as u,at as d,b as f,ht as p,kn as m,lt as h,pn as g,t as _,v,x as y,y as b,yn as x}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{E as S,t as C}from"./UiButton-DvucBdmd.js";import{t as w}from"./UiPanel-DtI4DFYT.js";function T(e,t,n,r){let i=Math.max(1/64,Math.min(32,t)),a=e.zoom<1&&i>1||e.zoom>1&&i<1?1:i,o=a/e.zoom;return{zoom:a,x:n-(n-e.x)*o,y:r-(r-e.y)*o}}var E=e=>Math.min(48,e*.1);function D(e,t,n,r){return Math.max(1/64,Math.min(32,Math.max(1,n-E(n))/e,Math.max(1,r-E(r))/t))}var O={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function k(e,t){return p(),y(`svg`,O,[...t[0]||=[v(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[v(`rect`,{width:`12`,height:`20`,x:`6`,y:`2`,rx:`2`}),v(`rect`,{width:`20`,height:`12`,x:`2`,y:`6`,rx:`2`})],-1)]])}var A=g({name:`lucide-ratio`,render:k}),j={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function M(e,t){return p(),y(`svg`,j,[...t[0]||=[v(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3m8 0h3a2 2 0 0 0 2-2v-3`},null,-1)]])}var N=g({name:`lucide-maximize`,render:M}),P={key:0,class:`error`,role:`alert`},F=[`aria-label`,`innerHTML`],I=[`src`,`alt`],ee={class:`view-controls`},te={class:`zoom`},L=_(a({__name:`ImageViewport`,props:{src:{},svg:{},alt:{},width:{},height:{},identity:{},fit:{type:Boolean,default:!0},background:{default:`checker`},backgroundColor:{default:`#808080`},backgroundControls:{type:Boolean,default:!0},error:{},floating:{type:Boolean}},setup(a,{expose:g}){let _=a,E=x(_.background),O=x(_.backgroundColor),k=u(()=>_.backgroundControls?E.value:_.background),j=u(()=>_.backgroundControls?O.value:_.backgroundColor),M=x(),L=x({width:0,height:0}),R=x({zoom:1,x:0,y:0}),z=x(!1),B=x(!1),V=u(()=>({width:_.width??L.value.width,height:_.height??L.value.height})),H=u(()=>({width:`${V.value.width}px`,height:`${V.value.height}px`,transform:`translate(-50%, -50%) translate(${R.value.x}px, ${R.value.y}px) scale(${R.value.zoom})`})),U=!1,W,G,K=new Map,q,J={clientX:0,clientY:0,x:0,y:0},Y=0;function X(e=_.fit){let t=M.value,{width:n,height:r}=V.value;!t||!n||!r||!t.clientWidth||!t.clientHeight?U=!1:(R.value={zoom:e?D(n,r,t.clientWidth,t.clientHeight):1,x:0,y:0},U=!0,Y=0)}function Z(e){let t=e.target;L.value={width:t.naturalWidth,height:t.naturalHeight},U||X()}function ne(e){let t=M.value;if(!t||_.error||z.value)return;let n=performance.now();if(n<Y)return;let r=t.getBoundingClientRect(),i=e.deltaMode===1?16:e.deltaMode===2?r.height:1,a=Math.max(-500,Math.min(500,(e.deltaY||e.deltaX)*i)),o=R.value.zoom;R.value=T(R.value,R.value.zoom*Math.exp(-a*.002),e.clientX-r.left-r.width/2,e.clientY-r.top-r.height/2),o!==1&&R.value.zoom===1&&(Y=n+180)}function Q(e){J={clientX:e.x,clientY:e.y,x:R.value.x,y:R.value.y},B.value=!0}function re(e){if(e.pointerType===`mouse`&&e.button!==0||_.error||z.value)return;e.preventDefault();let t=e.currentTarget;if(t.focus({preventScroll:!0}),t.setPointerCapture(e.pointerId),K.set(e.pointerId,{x:e.clientX,y:e.clientY}),K.size===1)G=e.pointerId,Q({x:e.clientX,y:e.clientY});else if(K.size===2){let[e,n]=[...K.values()],r=t.getBoundingClientRect();q={distance:Math.max(1,Math.hypot(e.x-n.x,e.y-n.y)),mid:{x:(e.x+n.x)/2-r.left-r.width/2,y:(e.y+n.y)/2-r.top-r.height/2},view:R.value},B.value=!1}}function ie(e){if(K.has(e.pointerId)){if(K.set(e.pointerId,{x:e.clientX,y:e.clientY}),q&&K.size===2){let t=e.currentTarget.getBoundingClientRect(),[n,r]=[...K.values()],i=Math.max(1/64,Math.min(32,q.view.zoom*Math.hypot(n.x-r.x,n.y-r.y)/q.distance)),a=i/q.view.zoom,o={x:(n.x+r.x)/2-t.left-t.width/2,y:(n.y+r.y)/2-t.top-t.height/2};R.value={zoom:i,x:o.x-(q.mid.x-q.view.x)*a,y:o.y-(q.mid.y-q.view.y)*a}}else B.value&&e.pointerId===G&&(R.value={...R.value,x:J.x+e.clientX-J.clientX,y:J.y+e.clientY-J.clientY})}}function $(e){if(!K.delete(e.pointerId))return;let t=e.currentTarget;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),q=void 0;let[n]=[...K.entries()];n?(G=n[0],Q(n[1])):(B.value=!1,G=void 0)}function ae(e){if([`+`,`=`,`-`,`0`,`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`].includes(e.key)){if(e.preventDefault(),e.key===`0`)X();else if([`+`,`=`,`-`].includes(e.key))R.value=T(R.value,R.value.zoom*(e.key===`-`?1/1.2:1.2),0,0);else{let t=e.shiftKey?100:30;R.value={...R.value,x:R.value.x+(e.key===`ArrowLeft`?-t:e.key===`ArrowRight`?t:0),y:R.value.y+(e.key===`ArrowUp`?-t:e.key===`ArrowDown`?t:0)}}}}return l(()=>_.src,()=>{z.value=!1}),l(()=>_.identity??_.src,()=>{U=!1,L.value={width:0,height:0},R.value={zoom:1,x:0,y:0}}),h(()=>{W=new ResizeObserver(()=>{U||X()}),M.value&&W.observe(M.value)}),d(()=>W?.disconnect()),g({reset:X}),(l,u)=>(p(),b(w,{class:n([`image-viewport`,{floating:a.floating}]),"aria-label":`Просмотр изображения`,"data-swipe-ignore":``},{default:s(()=>[v(`div`,{ref_key:`canvas`,ref:M,class:n([`image-canvas`,[k.value,{panning:B.value}]]),style:r(k.value===`custom`?{background:j.value}:void 0),role:`region`,"aria-label":`Область изображения`,tabindex:`0`,onWheel:S(ne,[`prevent`]),onPointerdown:re,onPointermove:ie,onPointerup:$,onPointercancel:$,onLostpointercapture:$,onDblclick:u[1]||=e=>X(),onKeydown:ae,onDragstart:u[2]||=S(()=>{},[`prevent`])},[a.error||z.value?(p(),y(`p`,P,i(a.error||`Браузер не смог отобразить это изображение.`),1)):f(``,!0),a.svg?(p(),y(`div`,{key:1,class:`image-svg`,style:r(H.value),role:`img`,"aria-label":a.alt,innerHTML:a.svg},null,12,F)):(p(),y(`img`,{key:2,src:a.src,alt:a.alt,style:r(H.value),draggable:`false`,onLoad:Z,onError:u[0]||=e=>z.value=!0},null,44,I))],38),v(`div`,ee,[v(`span`,te,i(Math.round(R.value.zoom*100))+`%`,1),c(C,{shape:`icon`,size:`sm`,"aria-label":`Сбросить масштаб`,title:`Масштаб 100% и центрирование изображения`,onClick:u[3]||=e=>X(!1)},{default:s(()=>[c(m(A),{"aria-hidden":`true`})]),_:1}),c(C,{shape:`icon`,size:`sm`,"aria-label":`Вписать`,title:`Вписать изображение в область просмотра`,onClick:u[4]||=e=>X(!0)},{default:s(()=>[c(m(N),{"aria-hidden":`true`})]),_:1}),a.backgroundControls?(p(),b(e,{key:0,as:`label`,class:`background-control`,gap:1.5,justify:`normal`},{default:s(()=>[u[8]||=o(`Фон `,-1),c(t,{as:`select`,modelValue:E.value,"onUpdate:modelValue":u[5]||=e=>E.value=e,"aria-label":`Фон изображения`},{default:s(()=>[...u[7]||=[v(`option`,{value:`light`},`Светлый`,-1),v(`option`,{value:`dark`},`Тёмный`,-1),v(`option`,{value:`transparent`},`Прозрачный`,-1),v(`option`,{value:`checker`},`Шашечки`,-1),v(`option`,{value:`gradient`},`Градиент`,-1),v(`option`,{value:`color-gradient`},`Цветной градиент`,-1),v(`option`,{value:`custom`},`Свой цвет`,-1)]]),_:1},8,[`modelValue`])]),_:1})):f(``,!0),a.backgroundControls&&E.value===`custom`?(p(),b(t,{key:1,modelValue:O.value,"onUpdate:modelValue":u[6]||=e=>O.value=e,type:`color`,appearance:`swatch`,"swatch-size":`sm`,"aria-label":`Свой цвет фона изображения`},null,8,[`modelValue`])):f(``,!0)])]),_:1},8,[`class`]))}}),[[`__scopeId`,`data-v-617d943b`]]);export{N as n,L as t};
@@ -0,0 +1 @@
1
+ .image-viewport[data-v-617d943b]{flex:1;min-width:0;position:relative}.image-canvas[data-v-617d943b]{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;overscroll-behavior:contain;flex:1;min-height:0;position:relative;overflow:hidden}.image-canvas.panning[data-v-617d943b]{cursor:grabbing}.image-canvas[data-v-617d943b]:focus-visible{outline-offset:-2px}.image-canvas img[data-v-617d943b],.image-canvas .image-svg[data-v-617d943b]{transform-origin:50%;pointer-events:none;max-width:none;max-height:none;position:absolute;top:50%;left:50%}.image-canvas .image-svg svg[data-v-617d943b]{width:100%;height:100%;display:block}.view-controls[data-v-617d943b]{align-items:center;gap:var(--sp-2) var(--sp-3);padding:var(--sp-1) var(--sp-3);font-size:var(--fs-2xs);border-top:1px solid var(--line);flex-wrap:wrap;display:flex}.zoom[data-v-617d943b]{font-variant-numeric:tabular-nums;min-width:4ch;margin-right:auto}.background-control select[data-v-617d943b]{width:auto;padding-block:2px}.image-canvas[data-v-617d943b]{--preview-light:#f5f5f4;--preview-dark:#18181b;--preview-checker-a:#e4e4e7;--preview-checker-b:#b4b4bb;--preview-gradient-from:#fafafa;--preview-gradient-to:#18181b;--preview-color-1:#c4b5fd;--preview-color-2:#7dd3fc;--preview-color-3:#fda4af}.light[data-v-617d943b]{background:var(--preview-light)}.dark[data-v-617d943b]{background:var(--preview-dark)}.transparent[data-v-617d943b]{background:0 0}.checker[data-v-617d943b]{background-color:var(--preview-checker-a);background-image:conic-gradient(var(--preview-checker-b) 25%, transparent 0 50%, var(--preview-checker-b) 0 75%, transparent 0);background-size:20px 20px}.gradient[data-v-617d943b]{background:linear-gradient(135deg, var(--preview-gradient-from), var(--preview-gradient-to))}.color-gradient[data-v-617d943b]{background:linear-gradient(135deg, var(--preview-color-1), var(--preview-color-2) 50%, var(--preview-color-3))}.error[data-v-617d943b]{margin:var(--sp-4);padding:var(--sp-3);border-radius:var(--r-md);color:var(--err);background:var(--bg-2);font-size:var(--fs-sm);cursor:default}.floating .view-controls[data-v-617d943b]{left:50%;bottom:max(var(--sp-3), env(safe-area-inset-bottom));gap:var(--sp-1);padding:var(--sp-1) var(--sp-1) var(--sp-1) var(--sp-3);border:1px solid var(--line-strong);border-radius:var(--r-full);background:color-mix(in srgb, var(--bg-2) 88%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:var(--shadow-popover);font-size:var(--fs-xs);flex-wrap:nowrap;position:absolute;transform:translate(-50%)}.floating .zoom[data-v-617d943b]{margin-right:var(--sp-1)}.floating .view-controls[data-v-617d943b] .btn{border-radius:var(--r-full);border-color:#0000}
@@ -0,0 +1 @@
1
+ import{E as e}from"./styles-DZDDPlL3.js";import{q as t}from"./shared.esm-bundler-DoSbGLUP.js";import{A as n,D as r,Jt as i,O as a,_ as o,b as s,ht as c,kn as l,x as u,y as d}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{d as f,u as p}from"./UiViewerPage-aHNgiSjO.js";import{n as m,r as h,t as g}from"./TrackerDetail-DuzfEwSZ.js";var _={key:0},v=n({__name:`IssueView`,props:{projectId:{},number:{},host:{default:`GitHub`}},emits:[`open`],setup(n,{emit:v}){let y=n,b=v,{detail:x,loading:S,error:C}=h(()=>y.projectId,()=>y.number,`issue`,`Не удалось открыть issue`),w=o(()=>(x.value?.comments??[]).map(e=>({...e,at:e.createdAt})));return f(()=>{let e=`Issue #${x.value?.issue.number??y.number}`;if(C.value)return{note:e,text:`Ошибка: ${C.value}`};let t=x.value;if(!t)return{note:e,text:`Загрузка…`};let n=t.issue,r=n.body.length>4e3?`${n.body.slice(0,4e3)}…`:n.body;return{note:e,text:p(n.state===`closed`?`Состояние: закрыт`:`Состояние: открыт`,`${n.title} (#${n.number})`,`Автор: ${n.author.login}, создано ${n.createdAt}`,n.labels.length?`Метки: ${n.labels.map(e=>e.name).join(`, `)}`:`Метки: нет`,`Комментариев: ${n.comments}`,r,t.commentsTruncated?`Комментарии показаны не все.`:``)}}),(o,f)=>(c(),d(g,{"project-id":n.projectId,loading:l(S),error:l(C),ready:!!l(x),noun:`issue`,state:l(x)?.issue.state??``,"state-label":l(x)?.issue.state===`closed`?`закрыт`:`открыт`,title:l(x)?.issue.title??``,number:l(x)?.issue.number??n.number,author:l(x)?.issue.author??{login:``,avatarUrl:``},"created-at":l(x)?.issue.createdAt??``,"html-url":l(x)?.issue.htmlUrl??``,labels:l(x)?.issue.labels??[],body:l(x)?.issue.body??``,reactions:l(x)?.issue.reactions??[],host:n.host,onOpen:f[1]||=e=>b(`open`,e)},{meta:i(()=>[l(x)?.issue.comments?(c(),u(`span`,_,t(l(x).issue.comments)+` комментариев`,1)):s(``,!0)]),default:i(()=>[a(m,{"project-id":n.projectId,title:`Комментарии`,empty:`Комментариев нет`,items:w.value,onOpen:f[0]||=e=>b(`open`,e)},null,8,[`project-id`,`items`]),l(x)?.commentsTruncated?(c(),d(e,{key:0,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:i(()=>[r(` Показаны первые 500 комментариев. Откройте issue на `+t(n.host)+`, чтобы увидеть все. `,1)]),_:1})):s(``,!0)]),_:1},8,[`project-id`,`loading`,`error`,`ready`,`state`,`state-label`,`title`,`number`,`author`,`created-at`,`html-url`,`labels`,`body`,`reactions`,`host`]))}});export{v as default};
@@ -0,0 +1 @@
1
+ .save-error[data-v-a2f829f2]{color:var(--err);font-size:var(--fs-xs);padding:10px var(--sp-4);border-bottom:1px solid var(--line);margin:0}.save-error button[data-v-a2f829f2]{text-decoration:underline}.markdown-body[data-v-a2f829f2]{flex:1;min-height:0;overflow:hidden}
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeViewer-C-C3aibO.js","assets/shared.esm-bundler-DoSbGLUP.js","assets/_plugin-vue_export-helper-D62Ebo7D.js","assets/dist-DzoDV6Eh.js","assets/styles-DZDDPlL3.js","assets/UiButton-DvucBdmd.js","assets/UiButton-AkN01P3P.css","assets/styles-CCXo2OoQ.css","assets/preload-helper-BLdHbfdN.js","assets/dist-23D313r2.js","assets/UiPanel-DtI4DFYT.js","assets/UiPanel-BUDYIo-h.css","assets/main-iz4ud0jC.js","assets/rolldown-runtime-XKyaHtl9.js","assets/github-emoji-CXJ5RSZS.js","assets/ImageViewport-BT_ftU4z.js","assets/ImageViewport-JcG9P4B6.css","assets/github-emoji-D8dkjuM_.css","assets/UiViewerPage-aHNgiSjO.js","assets/external-link-lkcxItwM.js","assets/UiViewerPage-CMFEzZ2i.css","assets/main-JoBAi6ol.css","assets/dist-CRLdLpSX.js","assets/editor-theme-ClBxXjSu.js","assets/CodeViewer--WUSmn5i.css"])))=>i.map(i=>d[i]);
2
+ import{q as e}from"./shared.esm-bundler-DoSbGLUP.js";import{A as t,D as n,Jt as r,O as i,St as a,Xt as o,b as s,d as c,ht as l,k as u,kn as d,pn as f,t as p,v as m,x as h,y as g,yn as _}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{t as v,w as y}from"./UiButton-DvucBdmd.js";import{t as b}from"./UiPanel-DtI4DFYT.js";import{t as x}from"./preload-helper-BLdHbfdN.js";import{k as S,t as C}from"./main-iz4ud0jC.js";import{t as w}from"./VisualMarkdownEditor-BHx2olWh.js";var T=t({__name:`EditorTopbarActions`,setup(e){let t=C();return(e,n)=>d(t)?(l(),g(c,{key:0,to:d(t)},[a(e.$slots,`default`)],8,[`to`])):s(``,!0)}}),E={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function D(e,t){return l(),h(`svg`,E,[...t[0]||=[m(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m18 16l4-4l-4-4M6 8l-4 4l4 4m8.5-12l-5 16`},null,-1)]])}var O=f({name:`lucide-code-xml`,render:D}),k={key:0,class:`save-error`,role:`alert`},A={key:1,class:`save-error`,role:`alert`},j={class:`markdown-body`},M=p(t({__name:`MarkdownViewer`,props:{projectId:{},path:{},scope:{},content:{},mode:{},error:{},editable:{type:Boolean,default:!0},line:{},endLine:{},column:{}},emits:[`change`,`mode`,`save`,`command`,`open`],setup(t,{emit:a}){let c=u(()=>x(()=>import(`./CodeViewer-C-C3aibO.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]))),f=a,p=_(``);function C(e){let t=e.currentTarget,n=e.relatedTarget;n instanceof Node&&t.contains(n)||f(`save`)}return(a,u)=>(l(),g(b,{class:`markdown-viewer`,"aria-label":`Документ Markdown`,onFocusout:C},{default:r(()=>[t.error?(l(),h(`p`,k,e(t.error),1)):s(``,!0),p.value&&t.mode===`document`?(l(),h(`p`,A,[n(e(p.value)+` `,1),m(`button`,{onClick:u[0]||=e=>f(`mode`,`source`)},`Открыть исходник`)])):s(``,!0),i(T,null,{default:r(()=>[i(v,{shape:`icon`,size:`sm`,"aria-label":t.mode===`source`?`Показать как документ`:`Показать исходник`,title:t.mode===`source`?`Режим документа (WYSIWYG)`:`Режим исходника (Markdown)`,onClick:u[1]||=e=>f(`command`,`ide.editor.markdown.toggleSource`)},{default:r(()=>[t.mode===`source`?(l(),g(d(S),{key:0,"aria-hidden":`true`})):(l(),g(d(O),{key:1,"aria-hidden":`true`}))]),_:1},8,[`aria-label`,`title`])]),_:1}),m(`div`,j,[o(i(w,{path:t.path,editable:t.editable!==!1,"project-id":t.projectId,scope:t.scope,content:t.content,onChange:u[2]||=e=>f(`change`,e),onOpen:u[3]||=e=>f(`open`,e),onSource:u[4]||=e=>f(`mode`,`source`),onCommand:u[5]||=(e,t)=>f(`command`,e,t),onError:u[6]||=e=>p.value=e},null,8,[`path`,`editable`,`project-id`,`scope`,`content`]),[[y,t.mode===`document`]]),t.mode===`source`?(l(),g(d(c),{key:0,path:t.path,"project-id":t.projectId,content:t.content,line:t.line,"end-line":t.endLine,column:t.column,editable:t.editable!==!1,onChange:u[7]||=e=>f(`change`,e),onSave:u[8]||=e=>f(`save`)},null,8,[`path`,`project-id`,`content`,`line`,`end-line`,`column`,`editable`])):s(``,!0)])]),_:1}))}}),[[`__scopeId`,`data-v-a2f829f2`]]);export{M as default};
@@ -0,0 +1,3 @@
1
+ import{E as e,_ as t,j as n,m as r,v as i,y as a}from"./styles-DZDDPlL3.js";import{V as o,q as s}from"./shared.esm-bundler-DoSbGLUP.js";import{A as c,D as l,Jt as u,O as d,Sn as f,Ut as p,_ as m,b as h,ht as g,kn as _,pn as v,s as y,t as b,v as x,x as S,xt as C,y as w,yn as T}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{t as E}from"./UiButton-DvucBdmd.js";import{A as D,I as O,L as k,Q as A,X as j,Z as M}from"./dist-DzoDV6Eh.js";import{a as N,d as ee,u as te}from"./UiViewerPage-aHNgiSjO.js";import{d as P,f as F,g as I,j as L}from"./main-iz4ud0jC.js";import{n as ne,r as re,t as ie}from"./TrackerDetail-DuzfEwSZ.js";var R={mergeable:`можно вливать`,checking:`проверяется`,preparing:`готовится`,ci_still_running:`pipeline идёт`,ci_must_pass:`нужен успешный pipeline`,status_checks_must_pass:`нужны status checks`,approvals_syncing:`одобрения синхронизируются`,not_approved:`нужно одобрение`,blocked_status:`заблокирован`,merge_request_blocked:`ждёт другой merge request`,conflict:`конфликт`,discussions_not_resolved:`обсуждения не решены`,draft_status:`черновик`,commits_status:`нет коммитов`,merge_time:`время merge не наступило`,requested_changes:`запрошены изменения`,security_policy_violations:`нарушена security policy`,jira_association_missing:`нет связи с Jira`},z=new Set([`conflict`,`discussions_not_resolved`,`draft_status`,`not_approved`,`requested_changes`,`security_policy_violations`]),B=new Set([`checking`,`preparing`,`ci_still_running`,`ci_must_pass`,`status_checks_must_pass`,`approvals_syncing`,`blocked_status`,`merge_request_blocked`,`merge_time`,`jira_association_missing`]);function V(e){return e?R[e]??e:``}function H(e){return e===`mergeable`?`success`:z.has(e)?`danger`:B.has(e)?`warning`:`muted`}function ae(e,t,n){return P({projectId:e,action:`pull-diff`,params:()=>({number:String(t())}),errorFallback:`Не удалось прочитать изменения`,resetOn:n})}var U={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function W(e,t){return g(),S(`svg`,U,[...t[0]||=[x(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[x(`path`,{d:`M8 5h13m-8 7h8m-8 7h8M3 10a2 2 0 0 0 2 2h3`}),x(`path`,{d:`M3 5v12a2 2 0 0 0 2 2h3`})],-1)]])}var G=v({name:`lucide-list-tree`,render:W}),K={class:`changes`},q={class:`head`},J={class:`count`},Y={class:`totals`},X={class:`add`},Z={class:`del`},Q={key:1,class:`file-list`},oe=b(c({__name:`PullRequestFiles`,props:{files:{},changedFiles:{},changedFilesCapped:{type:Boolean},filesTruncated:{type:Boolean},diffRefs:{},expanded:{},heights:{},diffs:{},host:{}},emits:[`toggle`,`toggleAll`,`open`,`openTree`,`resize`],setup(t,{emit:r}){let i=t,a=r,{resolver:o}=I(),c=m(()=>i.host??`GitLab`),f={added:`A`,removed:`D`,modified:`M`,renamed:`R`,copied:`C`,changed:`M`,unchanged:`·`},p=m(()=>i.files.map(e=>{let t=e.path.split(`/`).at(-1);return{path:e.path,name:t,directory:e.path.split(`/`).slice(0,-1).join(`/`),icon:o.value.resolve({name:t,path:e.path,directory:!1},!1),previousPath:e.previousPath,mark:f[e.status],additions:e.additions,deletions:e.deletions,binary:!!e.binary,tooLarge:e.tooLarge,generated:e.generated,expandable:!!i.diffRefs&&!e.binary&&!e.tooLarge,openable:!!i.diffRefs&&!e.binary&&!e.tooLarge,disabledTitle:i.diffRefs?e.binary?`Бинарный файл`:e.tooLarge?`Файл слишком большой для diff`:`Показать изменения`:`Diff недоступен`,share:e.additions+e.deletions?e.additions/(e.additions+e.deletions):0}})),v=m(()=>p.value.filter(e=>e.expandable)),b=m(()=>i.files.reduce((e,t)=>e+t.additions,0)),T=m(()=>i.files.reduce((e,t)=>e+t.deletions,0)),D=m(()=>!!i.diffRefs),O=m(()=>i.changedFilesCapped?`${i.changedFiles}+`:String(i.changedFiles));return(r,i)=>(g(),S(`section`,K,[x(`div`,q,[d(n,{as:`h3`,size:`sm`,tone:`secondary`,"space-after":0},{default:u(()=>[i[2]||=l(` Изменённые файлы `,-1),x(`span`,J,s(p.value.length),1)]),_:1}),x(`span`,Y,[x(`b`,X,`+`+s(b.value),1),x(`b`,Z,`−`+s(T.value),1)]),D.value?(g(),S(`button`,{key:0,type:`button`,class:`tree-button`,"data-command":`ide.mergeRequest.files.open`,title:`Открыть дерево изменений в боковой панели`,onClick:i[0]||=e=>a(`openTree`)},[d(_(G),{"aria-hidden":`true`}),i[3]||=l(` Дерево `,-1)])):h(``,!0),v.value.length&&t.diffRefs?(g(),w(E,{key:1,size:`sm`,"data-command":`ide.mergeRequest.files.toggleAll`,onClick:i[1]||=e=>a(`toggleAll`)},{default:u(()=>[l(s(t.expanded.size?`Свернуть всё`:`Развернуть всё`),1)]),_:1})):h(``,!0)]),p.value.length?(g(),S(`ul`,Q,[(g(!0),S(y,null,C(p.value,e=>(g(),w(F,{key:e.path,file:e,expanded:t.expanded.has(e.path),diff:t.diffs[e.path],height:t.heights[e.path],"open-command":`ide.mergeRequest.file.open`,host:c.value,onToggle:t=>a(`toggle`,e.path,t),onOpen:t=>a(`open`,e.path),onResize:t=>a(`resize`,e.path,t)},null,8,[`file`,`expanded`,`diff`,`height`,`host`,`onToggle`,`onOpen`,`onResize`]))),128))])):(g(),w(e,{key:0,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:u(()=>[...i[4]||=[l(`Файлов нет`,-1)]]),_:1})),t.filesTruncated||t.changedFilesCapped?(g(),w(e,{key:2,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:u(()=>[l(` Показано `+s(p.value.length)+` из `+s(O.value)+` файлов. Остальные — на `+s(c.value)+`. `,1)]),_:1})):h(``,!0),t.filesTruncated&&p.value.length?(g(),w(e,{key:3,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:u(()=>[...i[5]||=[l(` Суммы +/− посчитаны по показанным файлам. `,-1)]]),_:1})):h(``,!0),t.diffRefs?h(``,!0):(g(),w(e,{key:4,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:u(()=>[l(` Diff файлов этого источника пока недоступен. Изменённые файлы можно посмотреть на `+s(c.value)+`. `,1)]),_:1}))]))}}),[[`__scopeId`,`data-v-9015def5`]]),$=new Set([`queued`,`running`]);function se(e,t){let n=f(),r=T(!1),i=T(``),a=T(0);return p(()=>[e(),t(),a.value],async([e,t],o,s)=>{let c=new AbortController,l=!0,u;s(()=>{l=!1,clearTimeout(u),c.abort()}),r.value=!n.value,i.value=``;try{let r=await D(e,`pipeline`,{id:String(t)},c.signal);if(!l)return;n.value=r,$.has(r.pipeline.status)&&(u=setTimeout(()=>a.value++,1e4))}catch(e){l&&(i.value=e instanceof Error?e.message:`Не удалось открыть pipeline`)}finally{l&&(r.value=!1)}},{immediate:!0}),{detail:n,loading:r,error:i,reload:()=>a.value++}}var ce={class:`stages`},le={class:`stage-head`},ue={class:`stage-name`},de={class:`stage-count`},fe={class:`stage-summary`},pe={key:0,class:`jobs`},me=[`title`,`onClick`],he={class:`job-name`},ge={key:0,class:`job-time`},_e={class:`job-number`},ve={key:0,class:`more`},ye=b(c({__name:`PullRequestPipelineStages`,props:{projectId:{},id:{},host:{}},emits:[`openJob`],setup(t,{emit:n}){let r=t,i=n,{detail:o,error:c}=se(()=>r.projectId,()=>r.id),f=m(()=>O(o.value?.jobs??[]));return(n,r)=>(g(),S(`div`,ce,[!_(o)&&!_(c)?(g(),w(e,{key:0,size:`xs`,leading:`inherit`,class:`note`,role:`status`},{default:u(()=>[...r[0]||=[l(`загрузка: стадии…`,-1)]]),_:1})):_(c)?(g(),w(e,{key:1,size:`xs`,leading:`inherit`,class:`note error`,role:`alert`},{default:u(()=>[l(s(_(c)),1)]),_:1})):f.value.length?h(``,!0):(g(),w(e,{key:2,size:`xs`,leading:`inherit`,class:`note`},{default:u(()=>[...r[1]||=[l(`Джобов нет`,-1)]]),_:1})),(g(!0),S(y,null,C(f.value,e=>(g(),S(`div`,{key:e.stage,class:`stage`},[x(`div`,le,[d(a,{tone:e.tone,shrink:``},null,8,[`tone`]),x(`span`,ue,s(e.stage),1),x(`span`,de,s(e.done)+`/`+s(e.total),1),x(`span`,fe,s(e.summary.join(` · `)),1)]),e.visible.length?(g(),S(`div`,pe,[(g(!0),S(y,null,C(e.visible,e=>(g(),S(`button`,{key:e.id,type:`button`,class:`job`,title:e.failureReason||`Открыть джоб #${e.id}`,onClick:t=>i(`openJob`,{id:e.id,title:e.name})},[d(a,{tone:_(M)[e.status],shrink:``},null,8,[`tone`]),x(`span`,he,s(e.name||`Job #${e.id}`),1),_(A)(e.duration)?(g(),S(`span`,ge,s(_(A)(e.duration)),1)):h(``,!0),x(`span`,_e,`#`+s(e.id),1)],8,me))),128)),e.hidden?(g(),S(`span`,ve,`ещё `+s(e.hidden)+` · откройте pipeline`,1)):h(``,!0)])):h(``,!0)]))),128)),_(o)?.jobsTruncated?(g(),w(e,{key:3,size:`xs`,leading:`inherit`,class:`note`},{default:u(()=>[l(` Показаны не все джобы — остальные на `+s(t.host)+`. `,1)]),_:1})):h(``,!0)]))}}),[[`__scopeId`,`data-v-f7fcba7d`]]),be={class:`pipeline-card`},xe={class:`summary-row`},Se=[`aria-expanded`,`title`],Ce={class:`title`},we={class:`state`},Te={key:0,class:`meta`},Ee=[`title`],De=[`href`],Oe=b(c({__name:`PullRequestPipeline`,props:{projectId:{},pipeline:{},host:{default:`GitLab`}},emits:[`openPipeline`,`openJob`],setup(e,{emit:n}){let r=e,c=n,f=T(!1),p=i(`merge-request-pipeline:${r.projectId}:${r.pipeline.id}`,()=>({surface:`merge-request-pipeline`,projectId:r.projectId,pipelineId:r.pipeline.id}));return t(p.scope)(`ide.mergeRequest.pipeline.toggle`,`Показать или скрыть стадии pipeline merge request`,`Раскрывает ход pipeline по стадиям прямо в карточке merge request.`,()=>{f.value=!f.value}),(t,n)=>(g(),S(`div`,be,[x(`div`,xe,[x(`button`,{type:`button`,class:`summary`,"aria-expanded":f.value,"data-command":`ide.mergeRequest.pipeline.toggle`,title:f.value?`Свернуть стадии`:`Показать стадии`,onClick:n[0]||=e=>f.value=!f.value},[d(_(L),{class:o([`chevron`,{open:f.value}]),"aria-hidden":`true`},null,8,[`class`]),d(a,{tone:_(M)[e.pipeline.status],shrink:``},null,8,[`tone`]),x(`span`,Ce,`Pipeline #`+s(e.pipeline.id),1),x(`span`,we,s(_(j)[e.pipeline.status]),1),_(A)(e.pipeline.duration)?(g(),S(`span`,Te,`за `+s(_(A)(e.pipeline.duration)),1)):h(``,!0),e.pipeline.createdAt?(g(),S(`span`,{key:1,class:`meta`,title:e.pipeline.createdAt},`создан `+s(_(N)(e.pipeline.createdAt)),9,Ee)):h(``,!0)],8,Se),d(E,{size:`sm`,"data-command":`ide.mergeRequest.pipeline.open`,onClick:n[1]||=e=>c(`openPipeline`,{id:r.pipeline.id,title:r.pipeline.name})},{default:u(()=>[...n[3]||=[l(` Открыть `,-1)]]),_:1}),e.pipeline.webUrl?(g(),S(`a`,{key:0,class:`external`,href:e.pipeline.webUrl,target:`_blank`,rel:`noopener noreferrer`},`на `+s(e.host),9,De)):h(``,!0)]),f.value?(g(),w(ye,{key:0,"project-id":e.projectId,id:e.pipeline.id,host:e.host,onOpenJob:n[2]||=e=>c(`openJob`,e)},null,8,[`project-id`,`id`,`host`])):h(``,!0)]))}}),[[`__scopeId`,`data-v-327e78c6`]]),ke={class:`branches`},Ae={key:0,class:`conflict`},je={key:1,class:`conflict`},Me={key:2,class:`review-line`},Ne={key:0,class:`stats`},Pe={class:`add`},Fe={class:`del`},Ie=b(c({__name:`PullRequestView`,props:{projectId:{},number:{},host:{default:`GitHub`},short:{default:`PR`},noun:{default:`pull request`},onOpenSection:{},onOpenPullFile:{},onOpenJob:{}},emits:[`open`,`openPipeline`],setup(n,{emit:c}){let f=n,p=c,{detail:v,loading:b,error:T,reload:E}=re(()=>f.projectId,()=>f.number,`pull`,`Не удалось открыть ${f.noun}`),D=m(()=>v.value?.diffRefs?.headSha??``),O=m(()=>v.value?.mergeStatus??``),{expanded:A,heights:M,diffs:N,toggle:P}=ae(()=>f.projectId,()=>f.number,()=>D.value),F=m(()=>(v.value?.files??[]).filter(e=>!e.binary&&!e.tooLarge)),I=i(`merge-request:${f.projectId}:${f.number}`,()=>({surface:`merge-request`,projectId:f.projectId,number:f.number})),L=t(I.scope),R={open:`открыт`,closed:`закрыт`,merged:`влит`},z={approved:`одобрил`,changes_requested:`запросил изменения`,commented:`прокомментировал`,dismissed:`ревью отклонено`,pending:`черновик ревью`},B={added:`A`,removed:`D`,modified:`M`,renamed:`R`,copied:`C`,changed:`M`,unchanged:`·`},U=e=>e.previousPath?`${e.previousPath} → ${e.path}`:e.path,W=m(()=>(v.value?.reviews??[]).map(e=>({...e,at:e.submittedAt,badge:z[e.state],badgeClass:e.state}))),G=m(()=>(v.value?.comments??[]).map(e=>({...e,at:e.createdAt}))),K=m(()=>{let e=v.value?.pull;return e?.draft&&e.state===`open`?`черновик`:R[e?.state??`open`]}),q=m(()=>v.value?.pipeline??null),J=m(()=>new Set((v.value?.reviews??[]).map(e=>e.author.login))),Y=m(()=>{let e=new Set,t=(v.value?.reviewers??[]).map(t=>(e.add(t.login),{author:t,approved:J.value.has(t.login)}));for(let n of v.value?.approvals?.approvedBy??[])e.has(n.login)||(e.add(n.login),t.push({author:n,approved:!0}));return t.sort((e,t)=>Number(t.approved)-Number(e.approved))}),X=()=>{q.value&&p(`openPipeline`,{id:q.value.id,title:q.value.name})},Z=()=>{let e=v.value;f.onOpenSection?.({id:`merge-request-files:${f.number}`,title:`Изменения !${f.number}`,source:`Только чтение · MR`,group:`merge-requests`,kind:`merge-request-files`,params:{number:f.number,head:D.value,...e?{snapshot:{files:e.files,changedFiles:e.changedFiles,changedFilesCapped:e.changedFilesCapped===!0,filesTruncated:e.filesTruncated,...e.diffRefs?{diffRefs:e.diffRefs}:{}}}:{}},closable:!0})},Q=(e,t=!1)=>f.onOpenPullFile?.(f.number,e,D.value,t),$=e=>f.onOpenJob?.(e);return L(`ide.mergeRequest.refresh`,`Обновить merge request`,`Перечитывает состояние, ревью, обсуждение и изменённые файлы merge request.`,()=>E()),L(`ide.mergeRequest.files.open`,`Дерево изменений merge request`,`Открывает временный раздел боковой панели с деревом изменённых файлов merge request.`,()=>Z()),L(`ide.mergeRequest.file.open`,`Открыть изменения файла merge request`,`Открывает файл merge request отдельной вкладкой base → head.`,e=>{let{path:t,pinned:n}=r(e);if(typeof t!=`string`||!t)throw Error(`Укажите path файла`);Q(t,n===!0)},{path:`string: путь файла в merge request`,pinned:`boolean (необязательно): true — постоянная вкладка`}),L(`ide.mergeRequest.file.toggle`,`Раскрыть изменения файла merge request`,`Раскрывает diff файла прямо в карточке merge request.`,async e=>{let{path:t,open:n}=r(e);if(typeof t!=`string`||!t)throw Error(`Укажите path файла`);if(n!==void 0&&typeof n!=`boolean`)throw Error(`open должен быть boolean`);await P(t,n)},{path:`string: путь файла`,open:`boolean (необязательно): true/false`}),L(`ide.mergeRequest.files.toggleAll`,`Раскрыть или свернуть все файлы merge request`,`Раскрывает diff всех текстовых файлов merge request или сворачивает их.`,async e=>{let{open:t}=r(e);(typeof t==`boolean`?t:A.value.size===0)?await Promise.all(F.value.map(e=>P(e.path,!0))):A.value.clear()},{open:`boolean (необязательно): true — раскрыть всё, false — свернуть`}),L(`ide.mergeRequest.pipeline.open`,`Открыть pipeline merge request`,`Открывает вкладку последнего pipeline источника merge request.`,()=>X()),L(`ide.mergeRequest.pipeline.job.open`,`Открыть джоб merge request`,`Открывает вкладку джоба pipeline merge request.`,e=>{let{id:t,title:n}=r(e);if(typeof t!=`number`)throw Error(`Укажите номер джоба`);$({id:t,title:typeof n==`string`?n:``})},{id:`number: номер джоба`,title:`string (необязательно): заголовок`}),ee(()=>{let e=`${f.short} #${v.value?.pull.number??f.number}`;if(T.value)return{note:e,text:`Ошибка: ${T.value}`};let t=v.value;if(!t)return{note:e,text:`Загрузка…`};let n=t.pull,r=n.body.length>4e3?`${n.body.slice(0,4e3)}…`:n.body,i=t.reviews.map(e=>`${z[e.state]}: ${e.author.login}`),a=t.files.map(e=>`${B[e.status]} ${U(e)}`),o=a.slice(0,100);return{note:e,text:te(`Состояние: ${K.value}`,`${n.title} (#${n.number})`,`Автор: ${n.author.login}, создано ${n.createdAt}`,`Ветки: ${n.head} → ${n.base}`,O.value?`Готовность: ${V(O.value)}`:``,t.diffRefs?`Diff: ${t.diffRefs.baseSha.slice(0,7)}..${t.diffRefs.headSha.slice(0,7)}`:`Diff ещё не подготовлен`,`Коммитов: ${t.commits}, файлов: ${t.changedFiles}, +${t.additions} −${t.deletions}`,t.pipeline?`Pipeline: #${t.pipeline.id} ${j[t.pipeline.status]}`:``,Y.value.length?`Ревьюеры: ${Y.value.map(e=>`${e.author.login}${e.approved?` (одобрил)`:``}`).join(`, `)}`:``,n.labels.length?`Метки: ${n.labels.map(e=>e.name).join(`, `)}`:`Метки: нет`,`Комментариев: ${t.comments.length}`,i.length?`Ревью (${i.length}):\n${i.join(`
2
+ `)}`:`Ревью: нет`,a.length?`Файлы (${a.length}):\n${o.join(`
3
+ `)}${a.length>o.length?`\n… ещё ${a.length-o.length}`:``}`:`Файлы: нет`,t.filesTruncated?`Файлы показаны не все (${t.files.length} из ${t.changedFiles}${t.changedFilesCapped?`+`:``}).`:``,t.commentsTruncated?`Комментарии показаны не все.`:``,r)}}),(t,r)=>(g(),w(ie,{"project-id":n.projectId,loading:_(b),error:_(T),ready:!!_(v),noun:n.noun,state:_(v)?.pull.state??``,"state-label":K.value,title:_(v)?.pull.title??``,number:_(v)?.pull.number??n.number,author:_(v)?.pull.author??{login:``,avatarUrl:``},"created-at":_(v)?.pull.createdAt??``,"html-url":_(v)?.pull.htmlUrl??``,labels:_(v)?.pull.labels??[],body:_(v)?.pull.body??``,reactions:_(v)?.pull.reactions??[],host:n.host,onOpen:r[7]||=e=>p(`open`,e)},{meta:u(()=>[x(`span`,ke,s(_(v)?.pull.head)+` → `+s(_(v)?.pull.base),1)]),summary:u(()=>[O.value&&!(_(v)?.pull.draft&&O.value===`draft_status`)?(g(),S(`p`,{key:0,class:o([`merge-status`,_(H)(O.value)])},[d(a,{tone:_(H)(O.value),shrink:``},null,8,[`tone`]),x(`span`,null,s(_(V)(O.value)),1),_(v)?.hasConflicts?(g(),S(`span`,Ae,`конфликты`)):_(v)?.blockingDiscussionsResolved===!1?(g(),S(`span`,je,`обсуждения не решены`)):h(``,!0)],2)):h(``,!0),q.value?(g(),w(Oe,{key:1,"project-id":n.projectId,pipeline:q.value,host:n.host,onOpenPipeline:r[0]||=e=>p(`openPipeline`,e),onOpenJob:$},null,8,[`project-id`,`pipeline`,`host`])):h(``,!0),Y.value.length?(g(),S(`p`,Me,[r[8]||=x(`span`,{class:`approvals`},`Ревьюеры`,-1),(g(!0),S(y,null,C(Y.value,e=>(g(),S(`span`,{key:e.author.login,class:`reviewer`},[x(`span`,{class:o({approved:e.approved})},s(e.author.login),3),x(`span`,{class:o([`reviewer-mark`,{approved:e.approved}])},s(e.approved?`✓`:`○`),3)]))),128))])):h(``,!0)]),stats:u(()=>[_(v)?(g(),S(`p`,Ne,[x(`span`,null,s(_(k)(_(v).commits,`коммит`,`коммита`,`коммитов`)),1),x(`span`,null,s(_(k)(_(v).changedFiles,`файл`,`файла`,`файлов`))+s(_(v).changedFilesCapped?`+`:``),1),x(`span`,Pe,`+`+s(_(v).additions),1),x(`span`,Fe,`−`+s(_(v).deletions),1)])):h(``,!0)]),default:u(()=>[W.value.length?(g(),w(ne,{key:0,"project-id":n.projectId,title:`Ревью`,items:W.value,onOpen:r[1]||=e=>p(`open`,e)},null,8,[`project-id`,`items`])):h(``,!0),_(v)?(g(),w(oe,{key:1,files:_(v).files,"changed-files":_(v).changedFiles,"changed-files-capped":_(v).changedFilesCapped,"files-truncated":_(v).filesTruncated,"diff-refs":_(v).diffRefs,host:n.host,expanded:_(A),heights:_(M),diffs:_(N),onToggle:r[2]||=(e,t)=>_(I).run(`ide.mergeRequest.file.toggle`,{path:e,open:t}),onToggleAll:r[3]||=e=>_(I).run(`ide.mergeRequest.files.toggleAll`),onOpen:Q,onOpenTree:r[4]||=e=>_(I).run(`ide.mergeRequest.files.open`),onResize:r[5]||=(e,t)=>_(M)[e]=t},null,8,[`files`,`changed-files`,`changed-files-capped`,`files-truncated`,`diff-refs`,`host`,`expanded`,`heights`,`diffs`])):h(``,!0),d(ne,{"project-id":n.projectId,title:`Обсуждение`,empty:`Комментариев нет`,items:G.value,onOpen:r[6]||=e=>p(`open`,e)},null,8,[`project-id`,`items`]),_(v)?.commentsTruncated?(g(),w(e,{key:2,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:u(()=>[l(` Показаны первые 500 комментариев. Откройте `+s(n.noun)+` на `+s(n.host)+`, чтобы увидеть все. `,1)]),_:1})):h(``,!0)]),_:1},8,[`project-id`,`loading`,`error`,`ready`,`noun`,`state`,`state-label`,`title`,`number`,`author`,`created-at`,`html-url`,`labels`,`body`,`reactions`,`host`]))}}),[[`__scopeId`,`data-v-15a3d68e`]]);export{Ie as default};
@@ -0,0 +1 @@
1
+ .changes[data-v-9015def5]{margin-top:var(--sp-4)}.head[data-v-9015def5]{align-items:baseline;gap:var(--sp-2);margin-bottom:var(--sp-2);flex-wrap:wrap;display:flex}.count[data-v-9015def5]{color:var(--faint);font:var(--fs-2xs) var(--mono)}.totals[data-v-9015def5]{font:var(--fs-2xs) var(--mono);margin-left:auto}.tree-button[data-v-9015def5]{align-items:center;gap:var(--sp-1);padding:2px var(--sp-2);border:1px solid var(--line);border-radius:var(--r-sm);color:var(--muted);font-size:var(--fs-2xs);display:inline-flex}.tree-button[data-v-9015def5]:hover{color:var(--text);border-color:var(--line-strong)}.tree-button svg[data-v-9015def5]{width:13px;height:13px}.file-list[data-v-9015def5]{border:1px solid var(--line);border-radius:var(--r-md);margin:0;padding:0;list-style:none;overflow:hidden}.file-list li+li[data-v-9015def5]{border-top:1px solid var(--line)}.add[data-v-9015def5],.del[data-v-9015def5]{font:var(--fs-2xs) var(--mono);flex-shrink:0}.add[data-v-9015def5]{color:var(--run)}.del[data-v-9015def5]{color:var(--err)}.stages[data-v-f7fcba7d]{padding:0 var(--sp-3) var(--sp-2)}.stage+.stage[data-v-f7fcba7d]{margin-top:var(--sp-1)}.stage-head[data-v-f7fcba7d]{align-items:center;gap:var(--sp-2);padding:var(--sp-1) 0;color:var(--muted);font-size:var(--fs-2xs);display:flex}.stage-name[data-v-f7fcba7d]{color:var(--text-2);font-weight:500}.stage-count[data-v-f7fcba7d]{font-family:var(--mono)}.stage-summary[data-v-f7fcba7d]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--faint);overflow:hidden}.jobs[data-v-f7fcba7d]{padding-left:var(--sp-4);flex-direction:column;gap:2px;display:flex}.job[data-v-f7fcba7d]{align-items:center;gap:var(--sp-2);padding:2px var(--sp-2);border-radius:var(--r-sm);text-align:left;color:var(--text-2);font-size:var(--fs-2xs);display:flex}.job[data-v-f7fcba7d]:hover{background:var(--active);color:var(--text)}.job-name[data-v-f7fcba7d]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.job-time[data-v-f7fcba7d],.job-number[data-v-f7fcba7d]{color:var(--muted);font-family:var(--mono)}.more[data-v-f7fcba7d]{padding:1px var(--sp-2);color:var(--faint);font-size:var(--fs-2xs)}.note[data-v-f7fcba7d]{margin:var(--sp-1) 0 0}.pipeline-card[data-v-327e78c6]{margin-top:var(--sp-3);border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-2);font-size:var(--fs-xs)}.summary-row[data-v-327e78c6]{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);min-width:0;display:flex}.summary[data-v-327e78c6]{align-items:center;gap:var(--sp-2);text-align:left;min-width:0;color:var(--text-2);flex:1;display:flex}.summary[data-v-327e78c6]:hover{color:var(--text)}.chevron[data-v-327e78c6]{width:12px;height:12px;color:var(--faint);transition:transform var(--t-fast);flex-shrink:0}.chevron.open[data-v-327e78c6]{transform:rotate(90deg)}.title[data-v-327e78c6]{font-family:var(--mono);white-space:nowrap}.state[data-v-327e78c6]{color:var(--muted);white-space:nowrap}.meta[data-v-327e78c6]{color:var(--faint);font-size:var(--fs-2xs);white-space:nowrap}.external[data-v-327e78c6]{color:var(--muted);font-size:var(--fs-2xs);white-space:nowrap;text-decoration:underline}.branches[data-v-15a3d68e]{font-family:var(--mono);color:var(--text-2)}.stats[data-v-15a3d68e]{gap:var(--sp-2);margin:var(--sp-2) 0 0;color:var(--muted);font-size:var(--fs-xs);display:flex}.merge-status[data-v-15a3d68e]{align-items:center;gap:var(--sp-2);margin:var(--sp-2) 0 0;padding:var(--sp-1) var(--sp-2);border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-2);color:var(--muted);font-size:var(--fs-2xs);flex-wrap:wrap;display:flex}.merge-status.success[data-v-15a3d68e]{color:var(--run)}.merge-status.warning[data-v-15a3d68e]{color:var(--warn)}.merge-status.danger[data-v-15a3d68e],.conflict[data-v-15a3d68e]{color:var(--err)}.review-line[data-v-15a3d68e]{gap:var(--sp-2);margin:var(--sp-2) 0 0;color:var(--muted);font-size:var(--fs-2xs);flex-wrap:wrap;display:flex}.approvals[data-v-15a3d68e]{color:var(--text-2)}.reviewer[data-v-15a3d68e]{font-family:var(--mono);align-items:center;gap:2px;display:inline-flex}.reviewer .approved[data-v-15a3d68e]{color:var(--run)}.reviewer-mark[data-v-15a3d68e]{color:var(--faint)}.reviewer-mark.approved[data-v-15a3d68e]{color:var(--run)}.add[data-v-15a3d68e]{color:var(--run);font-family:var(--mono)}.del[data-v-15a3d68e]{color:var(--err);font-family:var(--mono)}
@@ -0,0 +1,2 @@
1
+ import{A as e,D as t,E as n,_ as r,m as i,v as a}from"./styles-DZDDPlL3.js";import{q as o}from"./shared.esm-bundler-DoSbGLUP.js";import{A as s,D as c,Jt as l,O as u,Sn as d,Ut as f,_ as p,b as m,ht as h,kn as g,s as _,t as v,v as y,x as b,xt as x,y as S,yn as C}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{A as w,L as T}from"./dist-DzoDV6Eh.js";import{a as E,d as D,i as O,n as k,r as A,s as j,t as M,u as N}from"./UiViewerPage-aHNgiSjO.js";import{m as P,p as F}from"./main-iz4ud0jC.js";import{t as I}from"./VisualMarkdownEditor-BHx2olWh.js";function L(e,t){let n=d(),r=C(!1),i=C(``),a=C(0);return f(()=>[e(),t(),a.value],async([e,t],a,o)=>{let s=new AbortController,c=!0;o(()=>{c=!1,s.abort()}),r.value=!n.value,i.value=``;try{let r=await w(e,`release`,{tag:t},s.signal);c&&(n.value=r)}catch(e){c&&(i.value=e instanceof Error?e.message:`Не удалось открыть релиз`)}finally{c&&(r.value=!1)}},{immediate:!0}),{detail:n,loading:r,error:i,reload:()=>a.value++}}var R={key:0,class:`release-assets`,"aria-label":`Файлы релиза`},z={class:`assets-head`},B={class:`count`},V={key:0,class:`group`},H={class:`asset-list`},U={class:`asset-text`},W=[`title`],ee={class:`asset-meta`},G={key:0},K={key:1},q=[`title`],J={key:0,class:`pending`},Y=[`href`],X=[`href`,`download`],Z={key:1,class:`group`},Q={class:`asset-list`},$={class:`asset-text`},te={class:`asset-name`},ne={class:`asset-meta`},re=[`href`,`download`],ie=v(s({__name:`ReleaseAssets`,props:{assets:{}},setup(e){let t=e,r=p(()=>t.assets.filter(e=>!e.source)),i=p(()=>t.assets.filter(e=>e.source)),a=p(()=>t.assets.length);return(e,t)=>a.value?(h(),b(`section`,R,[y(`div`,z,[t[0]||=y(`h3`,null,`Файлы`,-1),y(`span`,B,o(g(T)(a.value,`файл`,`файла`,`файлов`)),1)]),r.value.length?(h(),b(`div`,V,[y(`ul`,H,[(h(!0),b(_,null,x(r.value,e=>(h(),b(`li`,{key:e.id,class:`asset`},[y(`span`,U,[y(`span`,{class:`asset-name`,title:e.name},o(e.name),9,W),y(`span`,ee,[g(P)(e.size)?(h(),b(`span`,G,o(g(P)(e.size)),1)):m(``,!0),g(F)(e.downloads)?(h(),b(`span`,K,o(g(F)(e.downloads)),1)):m(``,!0),e.digest?(h(),b(`span`,{key:2,class:`mono digest`,title:e.digest},o(e.digest.length>28?`${e.digest.slice(0,28)}…`:e.digest),9,q)):m(``,!0)])]),e.uploading?(h(),b(`span`,J,`загружается`)):e.external?(h(),b(`a`,{key:1,class:`asset-action`,href:e.url,target:`_blank`,rel:`noopener noreferrer`},`Открыть`,8,Y)):(h(),b(`a`,{key:2,class:`asset-action`,href:e.url,download:e.name},`Скачать`,8,X))]))),128))])])):m(``,!0),i.value.length?(h(),b(`div`,Z,[t[1]||=y(`h4`,null,`Исходный код`,-1),y(`ul`,Q,[(h(!0),b(_,null,x(i.value,e=>(h(),b(`li`,{key:e.id,class:`asset`},[y(`span`,$,[y(`span`,te,o(e.name),1),y(`span`,ne,o(e.contentType),1)]),y(`a`,{class:`asset-action`,href:e.url,download:e.name},`Скачать`,8,re)]))),128))])])):m(``,!0)])):(h(),S(n,{key:1,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:l(()=>[...t[2]||=[c(`Файлов и исходников нет`,-1)]]),_:1}))}}),[[`__scopeId`,`data-v-63e1a936`]]),ae={class:`tag mono`},oe=[`title`],se={key:1},ce=v(s({__name:`ReleaseView`,props:{projectId:{},tag:{},host:{default:`хостинге`}},setup(s){let d=s,{detail:f,loading:_,error:v,reload:x}=L(()=>d.projectId,()=>d.tag),C=p(()=>{let e=f.value?.release;return e?e.draft?`черновик`:e.prerelease?`пререлиз`:e.upcoming?`скоро`:``:``}),w=a(`release:${d.projectId}:${d.tag}`,()=>({surface:`release`,projectId:d.projectId,tag:d.tag,host:d.host})),T=r(w.scope);return T(`ide.release.refresh`,`Обновить релиз`,`Перечитывает описание и файлы релиза.`,()=>x()),T(`ide.release.asset.download`,`Скачать файл релиза`,`Открывает внутреннюю ссылку скачивания или страницу внешнего файла.`,e=>{let{id:t}=i(e);if(typeof t!=`string`||!t)throw Error(`Укажите id файла релиза`);let n=f.value?.assets.find(e=>e.id===t);if(!n)throw Error(`Файл релиза не найден`);if(n.uploading)throw Error(`Файл ещё загружается`);n.external?window.open(n.url,`_blank`,`noopener,noreferrer`):window.location.assign(n.url)},{id:`string: id файла релиза`}),D(()=>{let e=`Release ${d.tag}`;if(v.value)return{note:e,text:`Ошибка: ${v.value}`};let t=f.value;if(!t)return{note:e,text:`Загрузка…`};let n=t.release,r=n.name&&n.name!==n.tag?n.name:``,i=t.assets.map(e=>{let t=P(e.size),n=F(e.downloads);return`${e.source?`исходники`:e.external?`ссылка`:`файл`}: ${e.name}${t?` (${t})`:``}${n?` · ${n}`:``}`});return{note:e,text:N(`Тег: ${n.tag}`,r?`Название: ${r}`:``,`Автор: ${n.author.login||`нет`}`,`Опубликован: ${n.releasedAt||n.createdAt}`,n.draft?`Черновик`:``,n.prerelease?`Пререлиз`:``,n.upcoming?`Запланирован`:``,`Файлов: ${n.assetCount}`,n.downloads===null?``:`Скачиваний: ${n.downloads}`,t.body.length>4e3?`${t.body.slice(0,4e3)}…`:t.body,i.length?`Файлы:\n${i.slice(0,100).join(`
2
+ `)}`:`Файлов нет`,i.length>100?`Показано 100 файлов, остальные — на ${d.host}.`:``)}}),(r,i)=>(h(),S(M,null,{default:l(()=>[g(_)?(h(),S(n,{key:0,size:`xs`,leading:`inherit`,role:`status`},{default:l(()=>[...i[0]||=[c(`загрузка: релиз…`,-1)]]),_:1})):g(v)?(h(),S(e,{key:1,variant:`note`,tone:`danger`,size:`xs`,role:`alert`},{default:l(()=>[c(o(g(v)),1)]),_:1})):g(f)?(h(),S(A,{key:2},{default:l(()=>[u(k,{state:C.value,tone:C.value?`warning`:`neutral`,"external-href":g(f).release.htmlUrl,host:s.host},{title:l(()=>[c(o(g(f).release.name&&g(f).release.name!==g(f).release.tag?g(f).release.name:`Релиз`)+` `,1),y(`span`,ae,o(g(f).release.tag),1)]),meta:l(()=>[u(t,{as:`span`,inline:``,gap:1.25,justify:`normal`,class:`author`},{default:l(()=>[u(j,{src:g(f).release.author.avatarUrl,alt:g(f).release.author.login,size:18},null,8,[`src`,`alt`]),c(` `+o(g(f).release.author.login),1)]),_:1}),g(f).release.releasedAt||g(f).release.createdAt?(h(),b(`span`,{key:0,title:g(O)(g(f).release.releasedAt||g(f).release.createdAt)},`опубликован `+o(g(E)(g(f).release.releasedAt||g(f).release.createdAt)),9,oe)):m(``,!0),g(f).release.downloads?(h(),b(`span`,se,o(g(F)(g(f).release.downloads)),1)):m(``,!0)]),_:1},8,[`state`,`tone`,`external-href`,`host`]),g(f).body?(h(),S(I,{key:0,class:`body`,content:g(f).body,path:``,"project-id":s.projectId,editable:!1,compact:``},null,8,[`content`,`project-id`])):(h(),S(n,{key:1,size:`xs`,leading:`inherit`,"space-before":2},{default:l(()=>[...i[1]||=[c(`Без описания`,-1)]]),_:1})),u(ie,{assets:g(f).assets},null,8,[`assets`])]),_:1})):m(``,!0)]),_:1}))}}),[[`__scopeId`,`data-v-39aad9c6`]]);export{ce as default};
@@ -0,0 +1 @@
1
+ .release-assets[data-v-63e1a936]{margin-top:var(--sp-4)}.assets-head[data-v-63e1a936],.group h4[data-v-63e1a936]{align-items:baseline;gap:var(--sp-2);margin:0 0 var(--sp-1);color:var(--text-2);font-size:var(--fs-xs);font-weight:600;display:flex}.assets-head h3[data-v-63e1a936]{font-size:var(--fs-xs);margin:0;font-weight:600}.group+.group[data-v-63e1a936]{margin-top:var(--sp-3)}.count[data-v-63e1a936]{color:var(--faint);font-size:var(--fs-2xs);font-weight:400}.asset-list[data-v-63e1a936]{border-top:1px solid var(--line);margin:0;padding:0;list-style:none}.asset[data-v-63e1a936]{align-items:center;gap:var(--sp-3);padding:var(--sp-2) 0;border-bottom:1px solid var(--line);display:flex}.asset-text[data-v-63e1a936]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.asset-name[data-v-63e1a936]{text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);font-family:var(--mono);font-size:var(--fs-xs);overflow:hidden}.asset-meta[data-v-63e1a936]{gap:var(--sp-2);color:var(--muted);font-size:var(--fs-2xs);flex-wrap:wrap;display:flex}.mono[data-v-63e1a936]{font-family:var(--mono)}.asset-action[data-v-63e1a936],.pending[data-v-63e1a936]{padding:3px var(--sp-2);border:1px solid var(--line);border-radius:var(--r-sm);color:var(--text-2);font-size:var(--fs-2xs);flex-shrink:0}.asset-action[data-v-63e1a936]:hover{border-color:var(--line-strong);background:var(--hover);color:var(--text)}.pending[data-v-63e1a936]{color:var(--muted);border-color:#0000}.tag[data-v-39aad9c6]{color:var(--muted);font-size:var(--fs-xs)}.mono[data-v-39aad9c6]{font-family:var(--mono)}.author[data-v-39aad9c6]{font-family:var(--mono);color:var(--text-2)}.body[data-v-39aad9c6]{margin-top:var(--sp-3)}
@@ -0,0 +1 @@
1
+ .panes[data-v-e46c1a23]{flex:1;min-width:0;min-height:0;display:grid}.pane-resize[data-v-e46c1a23]{color:var(--text);font-size:var(--fs-2xs);line-height:var(--fs-2xs);grid-row:2;position:relative}.panes.dragging[data-v-e46c1a23],.panes.dragging[data-v-e46c1a23] *{-webkit-user-select:none;user-select:none;cursor:row-resize!important}.top-pane[data-v-e46c1a23]{flex-direction:column;grid-row:1;min-width:0;min-height:0;display:flex;overflow:hidden}.bottom-pane[data-v-e46c1a23]{border-top:1px solid var(--line);grid-row:3;min-width:0;min-height:0;overflow:hidden}
@@ -0,0 +1 @@
1
+ import{V as e,W as t,q as n}from"./shared.esm-bundler-DoSbGLUP.js";import{A as r,Jt as i,O as a,St as o,Ut as s,Xt as c,_ as l,ht as u,kn as d,t as f,v as p,x as m,yn as h}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{w as g}from"./UiButton-DvucBdmd.js";import{C as _,S as v}from"./main-iz4ud0jC.js";var y={class:`top-pane`},b={class:`bottom-pane`},x=f(r({__name:`SplitPanes`,props:{topLabel:{},bottomLabel:{},reveal:{},initial:{default:.45},solo:{type:Boolean,default:!1}},setup(r){let f=r,x=h(),S=h(f.initial),C=h(f.initial),w=f.initial,T=l(()=>({gridTemplateRows:f.solo?`minmax(0, 1fr)`:`minmax(0, ${S.value}fr) 12px minmax(0, ${1-S.value}fr)`})),E=l(()=>f.topLabel??`Рендер`),D=l(()=>f.bottomLabel??`Код`),O=e=>e.toLowerCase(),k=l(()=>S.value===0?`${E.value} скрыт · потяните вниз или дважды нажмите для восстановления`:S.value===1?`${D.value} скрыт · потяните вверх или дважды нажмите для восстановления`:`Соотношение высот: ${O(E.value)} / ${O(D.value)} · у краёв панель схлопывается · двойной клик восстанавливает`);function A(e){let t=e<=.1?0:e>=.9?1:e;(t===0||t===1)&&!N.value&&S.value>0&&S.value<1&&(C.value=S.value),S.value=t}function j(){S.value=C.value}let M=v({start:()=>(w=S.value,S.value>0&&S.value<1&&(C.value=S.value),w),move:e=>{if(!x.value)return;let t=x.value.getBoundingClientRect();A((e.clientY-t.top-6)/Math.max(1,t.height-12))},finish:(e,t)=>{e===`cancel`&&(S.value=t)}}),{dragging:N,start:P}=M;function F(e){if([`ArrowUp`,`ArrowDown`,`Home`,`End`,`Enter`,`Escape`].includes(e.key)){if(e.preventDefault(),e.key===`Escape`)N.value&&(S.value=w),M.stop();else if(e.key===`Enter`)j();else if(e.key===`Home`)A(0);else if(e.key===`End`)A(1);else{let t=e.shiftKey?.1:.05,n=S.value+(e.key===`ArrowDown`?t:-t);A(S.value===0&&n>0?.15:S.value===1&&n<1?.85:n)}}}return s(()=>f.reveal,e=>{e&&S.value===1&&j()}),(s,l)=>(u(),m(`div`,{ref_key:`panes`,ref:x,class:e([`panes`,{dragging:d(N)}]),style:t(T.value)},[c(p(`div`,y,[o(s.$slots,`top`,{},void 0,!0)],512),[[g,r.solo||S.value>0]]),c(a(_,{labelled:S.value===0||S.value===1,class:`pane-resize`,"aria-label":`Соотношение высот: ${O(E.value)} / ${O(D.value)}`,"aria-valuenow":Math.round(S.value*100),"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-valuetext":S.value===0?`${E.value} скрыт`:S.value===1?`${D.value} скрыт`:`${E.value} ${Math.round(S.value*100)}%, ${O(D.value)} ${Math.round((1-S.value)*100)}%`,title:k.value,tabindex:`0`,onPointerdown:d(P),onDblclick:j,onKeydown:F},{default:i(()=>[p(`span`,null,n(S.value===0?`${E.value} ▾`:S.value===1?`${D.value} ▴`:``),1)]),_:1},8,[`labelled`,`aria-label`,`aria-valuenow`,`aria-valuetext`,`title`,`onPointerdown`]),[[g,!r.solo]]),c(p(`div`,b,[o(s.$slots,`bottom`,{},void 0,!0)],512),[[g,!r.solo&&S.value<1]])],6))}}),[[`__scopeId`,`data-v-e46c1a23`]]);export{x as t};
@@ -0,0 +1 @@
1
+ .params[data-v-0d1045c1]{font-size:var(--fs-xs)}.field[data-v-0d1045c1],.value[data-v-0d1045c1]{min-width:0}.hex[data-v-0d1045c1]{font-family:var(--mono)}.size-input[data-v-0d1045c1]{width:72px;padding-block:var(--sp-1)}.bar[data-v-0d1045c1]{align-items:center;gap:var(--sp-2) var(--sp-4);flex-wrap:wrap;display:flex}.bar .slider[data-v-0d1045c1]{width:clamp(100px,15vw,180px)}.bar .reset[data-v-0d1045c1]{margin-left:auto}.sheet[data-v-0d1045c1]{gap:var(--sp-3);padding:var(--sp-2) var(--sp-3) var(--sp-3);flex-direction:column;display:flex}.sheet .field[data-v-0d1045c1]{flex-direction:column}.sheet .value[data-v-0d1045c1]>:is(select,.slider){flex:1}.sheet .color-control .value[data-v-0d1045c1]{min-height:var(--control-h)}.sheet .reset[data-v-0d1045c1]{align-self:flex-start}.svg-viewer.fullscreen[data-v-265971d7]{z-index:calc(var(--z-popover) - 1);background:var(--bg);position:fixed;inset:0}.toolbar[data-v-265971d7] .params{flex:1}.render-pane[data-v-265971d7]{overflow:hidden}.render-info[data-v-265971d7]{gap:var(--sp-1) var(--sp-3);padding:6px var(--sp-3);font-size:var(--fs-2xs);color:var(--muted);border-bottom:1px solid var(--line);flex-wrap:wrap;display:flex}.render-info span[data-v-265971d7]{margin-left:auto}.stage[data-v-265971d7]{flex:1;min-height:0;display:flex;position:relative}.chip[data-v-265971d7]{top:var(--sp-3);left:var(--sp-3);padding:2px var(--sp-2);border-radius:var(--r-full);background:color-mix(in srgb, var(--bg-2) 90%, transparent);color:var(--text);font:var(--fs-2xs) var(--mono);pointer-events:none;position:absolute}.actions[data-v-265971d7]{top:var(--sp-2);right:var(--sp-2);gap:var(--sp-1);padding-top:env(safe-area-inset-top);display:flex;position:absolute}.float[data-v-265971d7]{border-radius:var(--r-full);background:color-mix(in srgb, var(--bg-2) 88%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-color:#0000}
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeViewer-C-C3aibO.js","assets/shared.esm-bundler-DoSbGLUP.js","assets/_plugin-vue_export-helper-D62Ebo7D.js","assets/dist-DzoDV6Eh.js","assets/styles-DZDDPlL3.js","assets/UiButton-DvucBdmd.js","assets/UiButton-AkN01P3P.css","assets/styles-CCXo2OoQ.css","assets/preload-helper-BLdHbfdN.js","assets/dist-23D313r2.js","assets/UiPanel-DtI4DFYT.js","assets/UiPanel-BUDYIo-h.css","assets/main-iz4ud0jC.js","assets/rolldown-runtime-XKyaHtl9.js","assets/github-emoji-CXJ5RSZS.js","assets/ImageViewport-BT_ftU4z.js","assets/ImageViewport-JcG9P4B6.css","assets/github-emoji-D8dkjuM_.css","assets/UiViewerPage-aHNgiSjO.js","assets/external-link-lkcxItwM.js","assets/UiViewerPage-CMFEzZ2i.css","assets/main-JoBAi6ol.css","assets/dist-CRLdLpSX.js","assets/editor-theme-ClBxXjSu.js","assets/CodeViewer--WUSmn5i.css"])))=>i.map(i=>d[i]);
2
+ import{D as e,O as t,m as n,v as r}from"./styles-DZDDPlL3.js";import{V as i,q as a}from"./shared.esm-bundler-DoSbGLUP.js";import{A as o,D as s,Ft as c,It as l,Jt as u,O as d,Tt as f,Xt as p,_ as m,at as h,b as g,et as _,ht as v,k as y,kn as b,s as x,t as S,v as C,x as w,y as T,yn as E}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{t as D,w as O}from"./UiButton-DvucBdmd.js";import{t as k}from"./UiPanel-DtI4DFYT.js";import{t as ee}from"./preload-helper-BLdHbfdN.js";import{t as te}from"./ImageViewport-BT_ftU4z.js";import{A as ne,F as A,I as re,L as j,M,N as ie,P as ae,b as oe,w as N,x as P}from"./main-iz4ud0jC.js";import{t as F}from"./SplitPanes-DNDTWIta.js";var I={class:`hex`},L=S(o({__name:`SvgParameters`,props:_({variant:{}},{color:{required:!0},colorModifiers:{},size:{required:!0},sizeModifiers:{},background:{required:!0},backgroundModifiers:{},backgroundColor:{required:!0},backgroundColorModifiers:{}}),emits:_([`reset`],[`update:color`,`update:size`,`update:background`,`update:backgroundColor`]),setup(n){let r=c(),o=l(n,`color`),f=l(n,`size`),p=l(n,`background`),m=l(n,`backgroundColor`),h=()=>f.value=Math.max(8,Math.min(2048,Math.round(Number(f.value)||256)));return(c,l)=>(v(),w(`div`,{class:i([`params`,n.variant])},[d(e,{as:`label`,class:`field color-control`,gap:n.variant===`bar`?1.5:1,align:n.variant===`bar`?`center`:`stretch`,justify:`normal`},{default:u(()=>[d(j,{as:`span`,size:n.variant===`sheet`?`2xs`:void 0,tone:n.variant===`sheet`?`muted`:void 0},{default:u(()=>[...l[6]||=[s(`currentColor`,-1)]]),_:1},8,[`size`,`tone`]),d(e,{as:`span`,class:`value`,justify:`normal`},{default:u(()=>[d(t,{modelValue:o.value,"onUpdate:modelValue":l[0]||=e=>o.value=e,type:`color`,appearance:`swatch`,"aria-label":`Цвет currentColor`},null,8,[`modelValue`]),C(`span`,I,a(o.value),1)]),_:1})]),_:1},8,[`gap`,`align`]),d(e,{class:`field size-control`,gap:n.variant===`bar`?1.5:1,align:n.variant===`bar`?`center`:`stretch`,justify:`normal`},{default:u(()=>[d(j,{for:b(r),size:n.variant===`sheet`?`2xs`:void 0,tone:n.variant===`sheet`?`muted`:void 0},{default:u(()=>[...l[7]||=[s(`Размер, px`,-1)]]),_:1},8,[`for`,`size`,`tone`]),d(e,{as:`span`,class:`value`,justify:`normal`},{default:u(()=>[d(t,{modelValue:f.value,"onUpdate:modelValue":l[1]||=e=>f.value=e,modelModifiers:{number:!0},class:`slider`,type:`range`,min:`8`,max:`2048`,step:`1`,"aria-label":`Размер SVG`},null,8,[`modelValue`]),d(t,{id:b(r),modelValue:f.value,"onUpdate:modelValue":l[2]||=e=>f.value=e,modelModifiers:{number:!0},class:`size-input`,type:`number`,min:`8`,max:`2048`,step:`1`,"aria-label":`Произвольный размер SVG в пикселях`,onChange:h},null,8,[`id`,`modelValue`])]),_:1})]),_:1},8,[`gap`,`align`]),d(e,{as:`label`,class:`field background-control`,gap:n.variant===`bar`?1.5:1,align:n.variant===`bar`?`center`:`stretch`,justify:`normal`},{default:u(()=>[d(j,{as:`span`,size:n.variant===`sheet`?`2xs`:void 0,tone:n.variant===`sheet`?`muted`:void 0},{default:u(()=>[...l[8]||=[s(`Фон`,-1)]]),_:1},8,[`size`,`tone`]),d(e,{as:`span`,class:`value`,justify:`normal`},{default:u(()=>[d(t,{as:`select`,modelValue:p.value,"onUpdate:modelValue":l[3]||=e=>p.value=e,appearance:`inline-select`,"aria-label":`Фон SVG`},{default:u(()=>[...l[9]||=[C(`option`,{value:`light`},`Светлый`,-1),C(`option`,{value:`dark`},`Тёмный`,-1),C(`option`,{value:`checker`},`Шашечки`,-1),C(`option`,{value:`gradient`},`Градиент`,-1),C(`option`,{value:`color-gradient`},`Цветной градиент`,-1),C(`option`,{value:`custom`},`Свой цвет`,-1)]]),_:1},8,[`modelValue`]),p.value===`custom`?(v(),T(t,{key:0,modelValue:m.value,"onUpdate:modelValue":l[4]||=e=>m.value=e,type:`color`,appearance:`swatch`,"aria-label":`Свой цвет фона SVG`},null,8,[`modelValue`])):g(``,!0)]),_:1})]),_:1},8,[`gap`,`align`]),d(D,{class:`reset`,shape:n.variant===`bar`?`icon`:`rect`,size:`sm`,"aria-label":`Сбросить параметры SVG`,title:`Вернуть исходные currentColor, размер и фон SVG`,onClick:l[5]||=e=>c.$emit(`reset`)},{default:u(()=>[d(b(M),{"aria-hidden":`true`}),n.variant===`sheet`?(v(),w(x,{key:0},[s(`Сбросить`)],64)):g(``,!0)]),_:1},8,[`shape`])],2))}}),[[`__scopeId`,`data-v-0d1045c1`]]);function R(e,t){let n=new DOMParser,r=n.parseFromString(e,`image/svg+xml`),i=r.documentElement;if(r.querySelector(`parsererror`)||i.localName!==`svg`||i.namespaceURI&&i.namespaceURI!==`http://www.w3.org/2000/svg`)throw Error(`Не удалось отобразить SVG: проверьте разметку исходника.`);i.namespaceURI||(i.setAttribute(`xmlns`,`http://www.w3.org/2000/svg`),r=n.parseFromString(new XMLSerializer().serializeToString(i),`image/svg+xml`),i=r.documentElement);let a=i.getAttribute(`viewBox`)?.trim().split(/[\s,]+/).map(Number),o=e=>{let t=i.getAttribute(e)?.trim()??``;return/^\d+(?:\.\d+)?(?:px)?$/.test(t)?parseFloat(t):NaN},s=o(`width`),c=o(`height`),l=a?.length===4&&a.every(Number.isFinite)&&a[2]>0&&a[3]>0;if(!(s>0&&c>0)){let e=l?a[2]/a[3]:2;s>0?c=s/e:c>0?s=c*e:(s=l?a[2]:300,c=l?a[3]:150)}let u=i.style;return u.setProperty(`color`,t,`important`),u.setProperty(`width`,`100%`,`important`),u.setProperty(`height`,`100%`,`important`),i.setAttribute(`width`,`100%`),i.setAttribute(`height`,`100%`),!l&&!i.hasAttribute(`viewBox`)&&i.setAttribute(`viewBox`,`0 0 ${s} ${c}`),{url:`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(i))}`,width:s,height:c}}var z={key:0,class:`render-info`},B={class:`stage`},V={class:`chip`},H={class:`actions`},U=S(o({__name:`SvgViewer`,props:{path:{},projectId:{},content:{},editable:{type:Boolean},line:{},endLine:{},column:{}},emits:[`change`,`save`],setup(e,{emit:t}){let o=y(()=>ee(()=>import(`./CodeViewer-C-C3aibO.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]))),c=e,l=t,_=ae();function S(){let e=getComputedStyle(document.documentElement).getPropertyValue(`--text-2`).trim();return/^#[0-9a-f]{6}$/i.test(e)?e:`#d8d2c4`}let j=E(S()),M=E(256),I=E(`checker`),U=E(`#808080`),W=E(!1),G=[`light`,`dark`,`checker`,`gradient`,`color-gradient`,`custom`],K=m(()=>{try{return{...R(c.content,j.value),error:``}}catch(e){return{url:``,width:1,height:1,error:String(e.message)}}}),q=m(()=>{let{width:e,height:t}=K.value,n=Math.max(e,t),r=Math.max(8,Math.min(2048,Number(M.value)||256));return{width:Math.max(1,Math.round(r*e/n)),height:Math.max(1,Math.round(r*t/n))}}),J=m(()=>_.value||W.value),Y=ie({anchor:`right`,initialFocus:[`input`,`select`],items:`input,select,button`});function X(){j.value=S(),M.value=256,I.value=`checker`,U.value=`#808080`}let Z=!1;function Q(e){e!==W.value&&(W.value=e,Y.close(!1),e?(Z=!!document.documentElement.requestFullscreen,document.documentElement.requestFullscreen?.().catch(()=>Z=!1)):document.fullscreenElement&&(Z=!1,document.exitFullscreen().catch(()=>{})))}A(document,`fullscreenchange`,()=>{!document.fullscreenElement&&Z&&(Z=!1,W.value=!1)}),A(window,`keydown`,e=>{e.key===`Escape`&&W.value&&!Y.open.value&&Q(!1)}),h(()=>Q(!1));let $=r(`svg-viewer:${c.path}`,()=>({surface:`svg-viewer`,path:c.path}));return $.scope.registerCommand({id:`ide.svg.fullscreen.toggle`,title:`SVG: полноэкранный просмотр`,description:`Открывает или закрывает просмотр SVG на весь экран без панелей и кода.`,run:()=>Q(!W.value)}),$.scope.registerCommand({id:`ide.svg.parameters.toggle`,title:`SVG: показать или скрыть параметры`,description:`Открывает панель параметров просмотра SVG: цвет currentColor, размер и фон.`,run:()=>void Y.toggle()}),$.scope.registerCommand({id:`ide.svg.parameters.set`,title:`SVG: изменить параметры просмотра`,description:`Задаёт цвет currentColor, размер рендера в пикселях и фон просмотра SVG; можно указать любые из параметров.`,arguments:{color:`Цвет currentColor, #rrggbb`,size:`Размер длинной стороны, 8–2048 px`,background:`Фон: ${G.join(`, `)}`,backgroundColor:`Цвет фона #rrggbb, используется при background=custom`},run:e=>{let t=n(e),r=/^#[0-9a-f]{6}$/i,i={color:j.value,size:M.value,background:I.value,backgroundColor:U.value};if(t.color!==void 0){if(typeof t.color!=`string`||!r.test(t.color))throw Error(`color: цвет вида #rrggbb`);i.color=t.color}if(t.backgroundColor!==void 0){if(typeof t.backgroundColor!=`string`||!r.test(t.backgroundColor))throw Error(`backgroundColor: цвет вида #rrggbb`);i.backgroundColor=t.backgroundColor}if(t.size!==void 0){if(typeof t.size!=`number`||!Number.isFinite(t.size)||t.size<8||t.size>2048)throw Error(`size: число от 8 до 2048`);i.size=Math.round(t.size)}if(t.background!==void 0){if(typeof t.background!=`string`||!G.includes(t.background))throw Error(`background: ${G.join(`, `)}`);i.background=t.background}j.value=i.color,M.value=i.size,I.value=i.background,U.value=i.backgroundColor}}),$.scope.registerCommand({id:`ide.svg.parameters.reset`,title:`SVG: сбросить параметры просмотра`,description:`Возвращает исходные currentColor, размер и фон просмотра SVG.`,run:X}),(t,n)=>(v(),T(k,{class:i([`svg-viewer`,{fullscreen:W.value}]),"aria-label":`Просмотр SVG`,onPointerdown:n[13]||=e=>b($).scope.activate()},{default:u(()=>[b(_)?g(``,!0):p((v(),T(ne,{key:0,class:`toolbar`,gap:3},{default:u(()=>[d(L,{color:j.value,"onUpdate:color":n[0]||=e=>j.value=e,size:M.value,"onUpdate:size":n[1]||=e=>M.value=e,background:I.value,"onUpdate:background":n[2]||=e=>I.value=e,"background-color":U.value,"onUpdate:backgroundColor":n[3]||=e=>U.value=e,variant:`bar`,onReset:X},null,8,[`color`,`size`,`background`,`background-color`]),d(D,{shape:`icon`,size:`sm`,"aria-label":`Во весь экран`,title:`Просмотр SVG на весь экран`,onClick:n[4]||=e=>b($).run(`ide.svg.fullscreen.toggle`)},{default:u(()=>[d(b(P),{"aria-hidden":`true`})]),_:1})]),_:1},512)),[[O,!W.value]]),d(F,{reveal:e.line,initial:b(_)?1:.45,solo:W.value},{top:u(()=>[d(k,{as:`div`,sizing:`flex`,class:`render-pane`},{default:u(()=>[b(_)?g(``,!0):p((v(),w(`div`,z,[s(a(q.value.width)+` × `+a(q.value.height)+` px `,1),C(`span`,null,`Исходный: `+a(Math.round(K.value.width))+` × `+a(Math.round(K.value.height)),1)],512)),[[O,!W.value]]),C(`div`,B,[d(te,{src:K.value.url,alt:e.path,identity:e.path,width:q.value.width,height:q.value.height,fit:J.value,floating:J.value,background:I.value,"background-controls":!1,"background-color":U.value,error:K.value.error},null,8,[`src`,`alt`,`identity`,`width`,`height`,`fit`,`floating`,`background`,`background-color`,`error`]),J.value?(v(),w(x,{key:0},[C(`span`,V,a(q.value.width)+` × `+a(q.value.height),1),C(`div`,H,[C(`span`,{ref:b(Y).trigger},[d(D,{shape:`icon`,class:`float`,"aria-label":`Параметры`,title:`Параметры: цвет, размер, фон`,"aria-haspopup":`dialog`,"aria-expanded":b(Y).open.value,"aria-controls":b(Y).open.value?b(Y).id:void 0,onClick:n[5]||=e=>b($).run(`ide.svg.parameters.toggle`)},{default:u(()=>[d(b(N),{"aria-hidden":`true`})]),_:1},8,[`aria-expanded`,`aria-controls`])],512),d(D,{shape:`icon`,class:`float`,"aria-label":W.value?`Выйти из полноэкранного режима`:`Во весь экран`,title:W.value?`Выйти из полноэкранного режима (Esc)`:`На весь экран`,onClick:n[6]||=e=>b($).run(`ide.svg.fullscreen.toggle`)},{default:u(()=>[(v(),T(f(W.value?b(oe):b(P)),{"aria-hidden":`true`}))]),_:1},8,[`aria-label`,`title`])])],64)):g(``,!0)])]),_:1})]),bottom:u(()=>[d(b(o),{path:e.path,"project-id":e.projectId,content:e.content,editable:e.editable,line:e.line,"end-line":e.endLine,column:e.column,onChange:n[7]||=e=>l(`change`,e),onSave:n[8]||=e=>l(`save`)},null,8,[`path`,`project-id`,`content`,`editable`,`line`,`end-line`,`column`])]),_:1},8,[`reveal`,`initial`,`solo`]),d(re,{menu:b(Y),label:`Параметры SVG`,width:320},{default:u(()=>[d(L,{color:j.value,"onUpdate:color":n[9]||=e=>j.value=e,size:M.value,"onUpdate:size":n[10]||=e=>M.value=e,background:I.value,"onUpdate:background":n[11]||=e=>I.value=e,"background-color":U.value,"onUpdate:backgroundColor":n[12]||=e=>U.value=e,variant:`sheet`,onReset:X},null,8,[`color`,`size`,`background`,`background-color`])]),_:1},8,[`menu`])]),_:1},8,[`class`]))}}),[[`__scopeId`,`data-v-265971d7`]]);export{U as default};