@sanurb/ringi 0.2.1 → 0.3.0

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 (417) hide show
  1. package/dist/cli.mjs +505 -114
  2. package/dist/cli.mjs.map +1 -1
  3. package/dist/mcp.mjs +35 -39
  4. package/dist/mcp.mjs.map +1 -1
  5. package/dist/runtime.mjs +569 -428
  6. package/dist/runtime.mjs.map +1 -1
  7. package/package.json +9 -8
  8. package/server/nitro.json +17 -0
  9. package/server/public/assets/ClientOnly-QdfAxyFs.js +1 -0
  10. package/server/public/assets/_reviewId-CmXHvWLn.js +1 -0
  11. package/server/public/assets/_reviewId-DdOpDx4U.js +1 -0
  12. package/server/public/assets/abap-B1dkBSPn.js +1 -0
  13. package/server/public/assets/action-bar-DLRNvLjj.js +45 -0
  14. package/server/public/assets/actionscript-3-BT4ibYlP.js +1 -0
  15. package/server/public/assets/ada-CD92zeps.js +1 -0
  16. package/server/public/assets/andromeeda-DqSmgxi0.js +1 -0
  17. package/server/public/assets/angular-html-BDC0PfKr.js +1 -0
  18. package/server/public/assets/angular-ts-B9yoQMtj.js +1 -0
  19. package/server/public/assets/apache-D5suuoa_.js +1 -0
  20. package/server/public/assets/apex-BL-m4VHy.js +1 -0
  21. package/server/public/assets/apl-CldhY0Pn.js +1 -0
  22. package/server/public/assets/applescript-CLiBqvKT.js +1 -0
  23. package/server/public/assets/ara-LdDF8cmv.js +1 -0
  24. package/server/public/assets/asciidoc-2DZ9hC2N.js +1 -0
  25. package/server/public/assets/asm-0ZPGRSUy.js +1 -0
  26. package/server/public/assets/astro-DR6labZJ.js +1 -0
  27. package/server/public/assets/aurora-x-Da7Zfvbg.js +1 -0
  28. package/server/public/assets/awk-Bn0gn_B_.js +1 -0
  29. package/server/public/assets/ayu-dark-bqYKoqpM.js +1 -0
  30. package/server/public/assets/ayu-light-C45jTIzZ.js +1 -0
  31. package/server/public/assets/ayu-mirage-BV_FCTQi.js +1 -0
  32. package/server/public/assets/ballerina-D2nw_w8Q.js +1 -0
  33. package/server/public/assets/bat-ByUBN5gS.js +1 -0
  34. package/server/public/assets/beancount-BTb2W6Mp.js +1 -0
  35. package/server/public/assets/berry-5SO2uITG.js +1 -0
  36. package/server/public/assets/bibtex-CDBTNfUI.js +1 -0
  37. package/server/public/assets/bicep-fgxG_4rP.js +1 -0
  38. package/server/public/assets/bird2-BCwzDhwX.js +1 -0
  39. package/server/public/assets/blade-BBTRu2-g.js +1 -0
  40. package/server/public/assets/bsl-CG-fq4sc.js +1 -0
  41. package/server/public/assets/c-CEvNj7xl.js +1 -0
  42. package/server/public/assets/c3-Dlaci63_.js +1 -0
  43. package/server/public/assets/cadence-DHbRuEmm.js +1 -0
  44. package/server/public/assets/cairo-Ds0kTeYT.js +1 -0
  45. package/server/public/assets/catppuccin-frappe-DrL1fUuH.js +1 -0
  46. package/server/public/assets/catppuccin-latte-C0REgVjl.js +1 -0
  47. package/server/public/assets/catppuccin-macchiato-ChQpylWO.js +1 -0
  48. package/server/public/assets/catppuccin-mocha-Dd0JU1T0.js +1 -0
  49. package/server/public/assets/clarity-DMoTOm4G.js +1 -0
  50. package/server/public/assets/clojure-DBhE3PpS.js +1 -0
  51. package/server/public/assets/cmake-DwMc40Or.js +1 -0
  52. package/server/public/assets/cobol-BdNJSMRt.js +1 -0
  53. package/server/public/assets/codeowners-1lVr8wqV.js +1 -0
  54. package/server/public/assets/codeql-DWflolvo.js +1 -0
  55. package/server/public/assets/coffee-RA4xA24H.js +1 -0
  56. package/server/public/assets/common-lisp-CrVQ5xT-.js +1 -0
  57. package/server/public/assets/compiler-runtime-DZXZ41-q.js +1 -0
  58. package/server/public/assets/coq-CjfoyYSh.js +1 -0
  59. package/server/public/assets/cpp-BoW7e2Ow.js +1 -0
  60. package/server/public/assets/createServerFn-DTk395iP.js +9 -0
  61. package/server/public/assets/crystal-CYKRo3F9.js +1 -0
  62. package/server/public/assets/csharp-C7bIWP5y.js +1 -0
  63. package/server/public/assets/css-Ck2tii2d.js +1 -0
  64. package/server/public/assets/csv-DsAkDVtA.js +1 -0
  65. package/server/public/assets/cue-BWmQgbOB.js +1 -0
  66. package/server/public/assets/cypher-D-jVC50Q.js +1 -0
  67. package/server/public/assets/d-CaviyOrm.js +1 -0
  68. package/server/public/assets/dark-plus-DIrnwZt9.js +1 -0
  69. package/server/public/assets/dart-CZEi7JgC.js +1 -0
  70. package/server/public/assets/dax-BK-8zffy.js +1 -0
  71. package/server/public/assets/desktop-D3cjbL4D.js +1 -0
  72. package/server/public/assets/diff-sHAzLvlp.js +1 -0
  73. package/server/public/assets/docker--xs2Ng3w.js +1 -0
  74. package/server/public/assets/dotenv-Cm4nwcJ7.js +1 -0
  75. package/server/public/assets/dracula-CAUSusef.js +1 -0
  76. package/server/public/assets/dracula-soft-cjNkMFza.js +1 -0
  77. package/server/public/assets/dream-maker-fjmWTFCO.js +1 -0
  78. package/server/public/assets/edge-DxycC9wl.js +1 -0
  79. package/server/public/assets/elixir-B-50Er3p.js +1 -0
  80. package/server/public/assets/elm-B4-ygIVo.js +1 -0
  81. package/server/public/assets/emacs-lisp-CJzqStIa.js +1 -0
  82. package/server/public/assets/erb-DJvYE1L1.js +1 -0
  83. package/server/public/assets/erlang-C-m_88FN.js +1 -0
  84. package/server/public/assets/everforest-dark-DBpaSMx1.js +1 -0
  85. package/server/public/assets/everforest-light-CiGrXwia.js +1 -0
  86. package/server/public/assets/fennel-DRaXF7k8.js +1 -0
  87. package/server/public/assets/file-tree-CI3Xwwid.js +1907 -0
  88. package/server/public/assets/fish-Bn-Yh3Jj.js +1 -0
  89. package/server/public/assets/fluent-DF5F8Ks_.js +1 -0
  90. package/server/public/assets/fortran-fixed-form-Cx1lv7HN.js +1 -0
  91. package/server/public/assets/fortran-free-form-hCQHRqew.js +1 -0
  92. package/server/public/assets/fsharp-DC5k9sy2.js +1 -0
  93. package/server/public/assets/gdresource-D0EsKdgH.js +1 -0
  94. package/server/public/assets/gdscript-_C9_Hi_w.js +1 -0
  95. package/server/public/assets/gdshader-BW7b1X1Y.js +1 -0
  96. package/server/public/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
  97. package/server/public/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
  98. package/server/public/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
  99. package/server/public/assets/genie-Ch_6TCHd.js +1 -0
  100. package/server/public/assets/gherkin-CaNUsmTq.js +1 -0
  101. package/server/public/assets/git-commit-BcFsuO5E.js +1 -0
  102. package/server/public/assets/git-rebase-ChGA-z50.js +1 -0
  103. package/server/public/assets/github-dark-B9ygjgg6.js +1 -0
  104. package/server/public/assets/github-dark-default-Br2bgYSx.js +1 -0
  105. package/server/public/assets/github-dark-dimmed-CmtqpPJ-.js +1 -0
  106. package/server/public/assets/github-dark-high-contrast-fSfmrZcC.js +1 -0
  107. package/server/public/assets/github-light-BZjUqfZl.js +1 -0
  108. package/server/public/assets/github-light-default-lIytXXhR.js +1 -0
  109. package/server/public/assets/github-light-high-contrast-BRrjFb7n.js +1 -0
  110. package/server/public/assets/gleam-DALMDpNs.js +1 -0
  111. package/server/public/assets/glimmer-js-maLb6ysA.js +1 -0
  112. package/server/public/assets/glimmer-ts-DGNr-OBA.js +1 -0
  113. package/server/public/assets/glsl-CmplqyQ1.js +1 -0
  114. package/server/public/assets/gn-DGjqrYN9.js +1 -0
  115. package/server/public/assets/gnuplot-BYckvgQI.js +1 -0
  116. package/server/public/assets/go-JycvP538.js +1 -0
  117. package/server/public/assets/graphql-VhP7n4--.js +1 -0
  118. package/server/public/assets/groovy-D5qMRONT.js +1 -0
  119. package/server/public/assets/gruvbox-dark-hard-M1dj1e6V.js +1 -0
  120. package/server/public/assets/gruvbox-dark-medium-cqq_ncQu.js +1 -0
  121. package/server/public/assets/gruvbox-dark-soft-B4QwL2a9.js +1 -0
  122. package/server/public/assets/gruvbox-light-hard-DLayMKOQ.js +1 -0
  123. package/server/public/assets/gruvbox-light-medium-D52XgPKf.js +1 -0
  124. package/server/public/assets/gruvbox-light-soft-Dola3KdD.js +1 -0
  125. package/server/public/assets/hack-BVSQ2bxM.js +1 -0
  126. package/server/public/assets/haml-CwTtRHoj.js +1 -0
  127. package/server/public/assets/handlebars-CcO01SVo.js +1 -0
  128. package/server/public/assets/haskell-ys7wPPEd.js +1 -0
  129. package/server/public/assets/haxe-94kiChn7.js +1 -0
  130. package/server/public/assets/hcl-DmHt_-wq.js +1 -0
  131. package/server/public/assets/hjson-xMmoJ0Gx.js +1 -0
  132. package/server/public/assets/hlsl-b-Pskdze.js +1 -0
  133. package/server/public/assets/horizon-BKMqttiR.js +1 -0
  134. package/server/public/assets/horizon-bright-HNkBlnm5.js +1 -0
  135. package/server/public/assets/houston-BkBSBSOQ.js +1 -0
  136. package/server/public/assets/html-derivative-Cz-cKMi2.js +1 -0
  137. package/server/public/assets/html-zQbUS8Is.js +1 -0
  138. package/server/public/assets/http-CaGQ9BgA.js +1 -0
  139. package/server/public/assets/hurl-BBoki9bg.js +1 -0
  140. package/server/public/assets/hxml-iQTOTWpM.js +1 -0
  141. package/server/public/assets/hy-DKl1XhBq.js +1 -0
  142. package/server/public/assets/imba-DPxkOTAg.js +1 -0
  143. package/server/public/assets/ini-lkLGq_1x.js +1 -0
  144. package/server/public/assets/java-LAx6oszV.js +1 -0
  145. package/server/public/assets/javascript-COqx-gKX.js +1 -0
  146. package/server/public/assets/jinja-x-G_qSCP.js +1 -0
  147. package/server/public/assets/jison-7oSeVkKJ.js +1 -0
  148. package/server/public/assets/json-sTLOVXhc.js +1 -0
  149. package/server/public/assets/json5-Cy6ypJuJ.js +1 -0
  150. package/server/public/assets/jsonc-Cw2ugYAK.js +1 -0
  151. package/server/public/assets/jsonl-Dp5_qBVH.js +1 -0
  152. package/server/public/assets/jsonnet-BTbmg_-u.js +1 -0
  153. package/server/public/assets/jssm-CnT7nPea.js +1 -0
  154. package/server/public/assets/jsx-zXeIBQLI.js +1 -0
  155. package/server/public/assets/julia-E-6Xm9nd.js +1 -0
  156. package/server/public/assets/just-D9n74gZy.js +1 -0
  157. package/server/public/assets/kanagawa-dragon-CxsBnuhV.js +1 -0
  158. package/server/public/assets/kanagawa-lotus-vHdxDDOS.js +1 -0
  159. package/server/public/assets/kanagawa-wave-CIkfTKWk.js +1 -0
  160. package/server/public/assets/kdl-BwK60g80.js +1 -0
  161. package/server/public/assets/kotlin-Dbd9Vi-v.js +1 -0
  162. package/server/public/assets/kusto-BuTk9usc.js +1 -0
  163. package/server/public/assets/laserwave-C0wf_d3o.js +1 -0
  164. package/server/public/assets/latex-D0t4RtEU.js +1 -0
  165. package/server/public/assets/lean-CYAW8bRN.js +1 -0
  166. package/server/public/assets/less-D4uen21c.js +1 -0
  167. package/server/public/assets/light-plus-oqYyWKEE.js +1 -0
  168. package/server/public/assets/liquid-BzXN12F6.js +1 -0
  169. package/server/public/assets/llvm-Z1xJzteV.js +1 -0
  170. package/server/public/assets/log-BGUxlsk3.js +1 -0
  171. package/server/public/assets/logo-wVUhvQ1b.js +1 -0
  172. package/server/public/assets/lua-B0Cg8RP4.js +1 -0
  173. package/server/public/assets/luau-rPFZzCmq.js +1 -0
  174. package/server/public/assets/main-FvxVz-kD.js +15 -0
  175. package/server/public/assets/make-BmPf6m0P.js +1 -0
  176. package/server/public/assets/markdown-AseU6zcW.js +1 -0
  177. package/server/public/assets/marko-BlRPXWOe.js +1 -0
  178. package/server/public/assets/material-theme-6_W6rQhR.js +1 -0
  179. package/server/public/assets/material-theme-darker-VPEo3Sem.js +1 -0
  180. package/server/public/assets/material-theme-lighter-CUhzCcZ9.js +1 -0
  181. package/server/public/assets/material-theme-ocean-B2JdsaGb.js +1 -0
  182. package/server/public/assets/material-theme-palenight-DhY-sklA.js +1 -0
  183. package/server/public/assets/matlab-BOj_BDQv.js +1 -0
  184. package/server/public/assets/mdc-FiVDZSZ4.js +1 -0
  185. package/server/public/assets/mdx-Cm6cDkDI.js +1 -0
  186. package/server/public/assets/mermaid-DLO-R4hv.js +1 -0
  187. package/server/public/assets/min-dark-D34a_pX7.js +1 -0
  188. package/server/public/assets/min-light-Cdd4KORE.js +1 -0
  189. package/server/public/assets/mipsasm-DYpHF-GA.js +1 -0
  190. package/server/public/assets/mojo-DqYVFv_G.js +1 -0
  191. package/server/public/assets/monokai-CDR4sQ2n.js +1 -0
  192. package/server/public/assets/moonbit-DRKee9wk.js +1 -0
  193. package/server/public/assets/move-DbRk6Vn9.js +1 -0
  194. package/server/public/assets/narrat-IOfmaXfb.js +1 -0
  195. package/server/public/assets/new-DOyplRwM.js +1 -0
  196. package/server/public/assets/nextflow-D-Ec_bsY.js +1 -0
  197. package/server/public/assets/nextflow-groovy-EYl0c2BQ.js +1 -0
  198. package/server/public/assets/nginx-3JLAqmJa.js +1 -0
  199. package/server/public/assets/night-owl-light-Bedht9b4.js +1 -0
  200. package/server/public/assets/night-owl-yQJ3-I0I.js +1 -0
  201. package/server/public/assets/nim-DyjFVMzT.js +1 -0
  202. package/server/public/assets/nix-C2IovEl2.js +1 -0
  203. package/server/public/assets/nord-BjZ63GNL.js +1 -0
  204. package/server/public/assets/nushell-BflTrRB5.js +1 -0
  205. package/server/public/assets/objective-c-GRClK1S7.js +1 -0
  206. package/server/public/assets/objective-cpp-l3qYw-v5.js +1 -0
  207. package/server/public/assets/ocaml-BBDyhyMH.js +1 -0
  208. package/server/public/assets/odin-jCJ7Js99.js +1 -0
  209. package/server/public/assets/one-dark-pro-PIx2Diul.js +1 -0
  210. package/server/public/assets/one-light-BFMEz49S.js +1 -0
  211. package/server/public/assets/openscad-Drf0LgCX.js +1 -0
  212. package/server/public/assets/pascal-BT2XAUTl.js +1 -0
  213. package/server/public/assets/perl-Dr47G_2Q.js +1 -0
  214. package/server/public/assets/php-BhBDWTJe.js +1 -0
  215. package/server/public/assets/pierre-dark-CTXzTLfO.js +1 -0
  216. package/server/public/assets/pierre-light-C_5rlJRo.js +1 -0
  217. package/server/public/assets/pkl-ML-dWShO.js +1 -0
  218. package/server/public/assets/plastic-BFI-Z5Z2.js +1 -0
  219. package/server/public/assets/plsql-0vd5cLro.js +1 -0
  220. package/server/public/assets/po-CbZ_uqQA.js +1 -0
  221. package/server/public/assets/poimandres-Cayhd01L.js +1 -0
  222. package/server/public/assets/polar-C4hfV8Nc.js +1 -0
  223. package/server/public/assets/postcss-osFUbTLw.js +1 -0
  224. package/server/public/assets/powerquery-CTlGUQPj.js +1 -0
  225. package/server/public/assets/powershell-DyZsOmuq.js +1 -0
  226. package/server/public/assets/preload-helper-D7oT-Xwl.js +20 -0
  227. package/server/public/assets/prisma-SS92PO_I.js +1 -0
  228. package/server/public/assets/prolog-B1O1NNVC.js +1 -0
  229. package/server/public/assets/proto-BWu3eZTs.js +1 -0
  230. package/server/public/assets/pug-Dij_IK5w.js +1 -0
  231. package/server/public/assets/puppet-tvtRVdr6.js +1 -0
  232. package/server/public/assets/purescript-Dtbpb7D-.js +1 -0
  233. package/server/public/assets/python-Dlk0Acio.js +1 -0
  234. package/server/public/assets/qml-qUwk3nhh.js +1 -0
  235. package/server/public/assets/qmldir-B-iEOngH.js +1 -0
  236. package/server/public/assets/qss-Ba0p-aHw.js +1 -0
  237. package/server/public/assets/r-WmtNicKM.js +1 -0
  238. package/server/public/assets/racket-BXDsxf2U.js +1 -0
  239. package/server/public/assets/raku-Dw1WWFXK.js +1 -0
  240. package/server/public/assets/razor-DaqiVx3Q.js +1 -0
  241. package/server/public/assets/red-BC3Ds49b.js +1 -0
  242. package/server/public/assets/reg-DXFHGaM4.js +1 -0
  243. package/server/public/assets/regexp-CiSWN5Ne.js +1 -0
  244. package/server/public/assets/rel-Dc5_Ytx2.js +1 -0
  245. package/server/public/assets/reviews-CJvVXRLH.js +1 -0
  246. package/server/public/assets/reviews-CfbuF6ib.js +1 -0
  247. package/server/public/assets/riscv-ZgswiWij.js +1 -0
  248. package/server/public/assets/ron-YghabWAH.js +1 -0
  249. package/server/public/assets/rose-pine-ByWLnVr3.js +1 -0
  250. package/server/public/assets/rose-pine-dawn-DBmeySrz.js +1 -0
  251. package/server/public/assets/rose-pine-moon-B9J-N3nK.js +1 -0
  252. package/server/public/assets/rosmsg-DTKmAsVH.js +1 -0
  253. package/server/public/assets/routes-DNxq1Fba.js +1 -0
  254. package/server/public/assets/routes-Dp0ODZ55.js +2 -0
  255. package/server/public/assets/rst-CP6xOYlY.js +1 -0
  256. package/server/public/assets/ruby-BXYLc1CM.js +1 -0
  257. package/server/public/assets/rust-nfXwuE6F.js +1 -0
  258. package/server/public/assets/sas-CFdtZutF.js +1 -0
  259. package/server/public/assets/sass-CbRjkld3.js +1 -0
  260. package/server/public/assets/scala-BzD3eypx.js +1 -0
  261. package/server/public/assets/scheme-D4d1PV1y.js +1 -0
  262. package/server/public/assets/scss-D8KhdObH.js +1 -0
  263. package/server/public/assets/sdbl-Cf-Ydnvx.js +1 -0
  264. package/server/public/assets/shaderlab-DGohHMiF.js +1 -0
  265. package/server/public/assets/shellscript-BHdEbumI.js +1 -0
  266. package/server/public/assets/shellsession-Dh-bxrap.js +1 -0
  267. package/server/public/assets/slack-dark-MszIyPZ2.js +1 -0
  268. package/server/public/assets/slack-ochin-tQ3Q0gE9.js +1 -0
  269. package/server/public/assets/smalltalk-_uWoArwn.js +1 -0
  270. package/server/public/assets/snazzy-light-9sniMEk5.js +1 -0
  271. package/server/public/assets/solarized-dark-CdD0Hxzv.js +1 -0
  272. package/server/public/assets/solarized-light-C-nsEdqF.js +1 -0
  273. package/server/public/assets/solidity-D6uC-xwP.js +1 -0
  274. package/server/public/assets/soy-cDuODfbT.js +1 -0
  275. package/server/public/assets/sparql-BgU2QITA.js +1 -0
  276. package/server/public/assets/splunk-LQYHRu14.js +1 -0
  277. package/server/public/assets/sql-CKZpK620.js +1 -0
  278. package/server/public/assets/ssh-config-B7BUl8Rd.js +1 -0
  279. package/server/public/assets/stata-BLJTbKOO.js +1 -0
  280. package/server/public/assets/styles-UDowwF7S.css +2 -0
  281. package/server/public/assets/stylus-Byjxdx_q.js +1 -0
  282. package/server/public/assets/surrealql-C96KvYaj.js +1 -0
  283. package/server/public/assets/svelte-Qnbj2GWx.js +1 -0
  284. package/server/public/assets/swift-BexLlMrU.js +1 -0
  285. package/server/public/assets/synthwave-84-BxMBwQMS.js +1 -0
  286. package/server/public/assets/system-verilog-DVGwm0mw.js +1 -0
  287. package/server/public/assets/systemd-H2IT3-p5.js +1 -0
  288. package/server/public/assets/talonscript-mKZIGM8n.js +1 -0
  289. package/server/public/assets/tasl-B7he_Ugr.js +1 -0
  290. package/server/public/assets/tcl-5mT3RxHH.js +1 -0
  291. package/server/public/assets/templ-CQPDll3D.js +1 -0
  292. package/server/public/assets/terraform-BZP0GLsT.js +1 -0
  293. package/server/public/assets/test-D7JRfog1.js +1 -0
  294. package/server/public/assets/tex-97QNLoBJ.js +1 -0
  295. package/server/public/assets/tokyo-night-CTPVdZt9.js +1 -0
  296. package/server/public/assets/toml-CTFA98he.js +1 -0
  297. package/server/public/assets/ts-tags-B8zlXe2n.js +1 -0
  298. package/server/public/assets/tsv-BayJtYdY.js +1 -0
  299. package/server/public/assets/tsx-VqRU8NCz.js +1 -0
  300. package/server/public/assets/turtle-TVCBh_kY.js +1 -0
  301. package/server/public/assets/twig-FTTF8rVk.js +1 -0
  302. package/server/public/assets/typescript-CuX0hIVY.js +1 -0
  303. package/server/public/assets/typespec-BUvaJDLF.js +1 -0
  304. package/server/public/assets/typst-8NBaY7Ec.js +1 -0
  305. package/server/public/assets/useStore-M3H8PB1v.js +1 -0
  306. package/server/public/assets/utils-DElCu2hq.js +1 -0
  307. package/server/public/assets/v-VihyTigi.js +1 -0
  308. package/server/public/assets/vala-DyFAPyX6.js +1 -0
  309. package/server/public/assets/vb-Dg1Iqi4J.js +1 -0
  310. package/server/public/assets/verilog-D2Xc-vhD.js +1 -0
  311. package/server/public/assets/vesper-DJbtqYNr.js +1 -0
  312. package/server/public/assets/vhdl-CU3BVeE7.js +1 -0
  313. package/server/public/assets/viml-hG2shuOW.js +1 -0
  314. package/server/public/assets/vitesse-black-DbG2gsc0.js +1 -0
  315. package/server/public/assets/vitesse-dark-B6WV4xXH.js +1 -0
  316. package/server/public/assets/vitesse-light-DC1pdD02.js +1 -0
  317. package/server/public/assets/vue-DXwaEU0U.js +1 -0
  318. package/server/public/assets/vue-html-QD7AJ6JJ.js +1 -0
  319. package/server/public/assets/vue-vine-Bh2m1D2Z.js +1 -0
  320. package/server/public/assets/vyper-C1wojIuk.js +1 -0
  321. package/server/public/assets/wasm-C6Y0s02M.js +1 -0
  322. package/server/public/assets/wasm-qTvCOSHz.js +1 -0
  323. package/server/public/assets/wenyan-BG5vPQF0.js +1 -0
  324. package/server/public/assets/wgsl-DrVb-Cub.js +1 -0
  325. package/server/public/assets/wikitext-PRC4s8sH.js +1 -0
  326. package/server/public/assets/wit-ChW5qvg_.js +1 -0
  327. package/server/public/assets/wolfram-B8mKuZSQ.js +1 -0
  328. package/server/public/assets/xml-BK-rcb5a.js +1 -0
  329. package/server/public/assets/xsl-dt-d2R7p.js +1 -0
  330. package/server/public/assets/yaml-UiXU3hGj.js +1 -0
  331. package/server/public/assets/zenscript-C-jEPC9j.js +1 -0
  332. package/server/public/assets/zig-EbnRGjcz.js +1 -0
  333. package/server/public/favicon.ico +0 -0
  334. package/server/public/logo192.png +0 -0
  335. package/server/public/logo512.png +0 -0
  336. package/server/public/manifest.json +25 -0
  337. package/server/public/robots.txt +3 -0
  338. package/server/public/tanstack-circle-logo.png +0 -0
  339. package/server/public/tanstack-word-logo-white.svg +1 -0
  340. package/server/server/_chunks/ssr-renderer.mjs +15 -0
  341. package/server/server/_libs/@floating-ui/core+[...].mjs +698 -0
  342. package/server/server/_libs/@floating-ui/dom+[...].mjs +644 -0
  343. package/server/server/_libs/@floating-ui/react-dom+[...].mjs +839 -0
  344. package/server/server/_libs/@pierre/diffs+[...].mjs +18578 -0
  345. package/server/server/_libs/@radix-ui/react-arrow+[...].mjs +174 -0
  346. package/server/server/_libs/@radix-ui/react-collection+[...].mjs +162 -0
  347. package/server/server/_libs/@radix-ui/react-dialog+[...].mjs +1666 -0
  348. package/server/server/_libs/@radix-ui/react-popper+[...].mjs +289 -0
  349. package/server/server/_libs/@radix-ui/react-radio-group+[...].mjs +420 -0
  350. package/server/server/_libs/@radix-ui/react-select+[...].mjs +990 -0
  351. package/server/server/_libs/@tanstack/react-router+[...].mjs +14113 -0
  352. package/server/server/_libs/_.mjs +2 -0
  353. package/server/server/_libs/chokidar+readdirp.mjs +1599 -0
  354. package/server/server/_libs/class-variance-authority+clsx.mjs +69 -0
  355. package/server/server/_libs/effect+[...].mjs +34047 -0
  356. package/server/server/_libs/h3+rou3+srvx.mjs +1195 -0
  357. package/server/server/_libs/hookable.mjs +41 -0
  358. package/server/server/_libs/lucide-react.mjs +298 -0
  359. package/server/server/_libs/pierre__theme.mjs +2668 -0
  360. package/server/server/_libs/radix-ui__number.mjs +6 -0
  361. package/server/server/_libs/radix-ui__primitive.mjs +9 -0
  362. package/server/server/_libs/radix-ui__react-direction.mjs +11 -0
  363. package/server/server/_libs/shiki.mjs +16 -0
  364. package/server/server/_libs/shikijs__langs.mjs +1355 -0
  365. package/server/server/_libs/shikijs__themes.mjs +262 -0
  366. package/server/server/_libs/tailwind-merge.mjs +1962 -0
  367. package/server/server/_libs/tanstack__history.mjs +342 -0
  368. package/server/server/_libs/tanstack__router-core.mjs +6 -0
  369. package/server/server/_libs/ufo.mjs +64 -0
  370. package/server/server/_reviewId-AWnOGz5k.mjs +33 -0
  371. package/server/server/_reviewId-Com4yOlc.mjs +29 -0
  372. package/server/server/_reviewId-DAhmekJ2.mjs +277 -0
  373. package/server/server/_reviewId-p9mhYVwa.mjs +18 -0
  374. package/server/server/_runtime.mjs +35 -0
  375. package/server/server/_ssr/action-bar-C68xGnWW.mjs +592 -0
  376. package/server/server/_ssr/api-handler-CstW2n82.mjs +189 -0
  377. package/server/server/_ssr/client-runtime-BoPuAEoA.mjs +245 -0
  378. package/server/server/_ssr/createServerRpc--0mcGlWK.mjs +12 -0
  379. package/server/server/_ssr/createSsrRpc-AwdiLXmF.mjs +16 -0
  380. package/server/server/_ssr/domain-rpc-3Ds9DPr0.mjs +287 -0
  381. package/server/server/_ssr/file-tree-CQ5w2GHh.mjs +1951 -0
  382. package/server/server/_ssr/load-scoped-diff-NL2XAcdz.mjs +45 -0
  383. package/server/server/_ssr/new-BKl_G2Ks.mjs +37 -0
  384. package/server/server/_ssr/new-BREdMFAM.mjs +12 -0
  385. package/server/server/_ssr/new-DCz5eHkb.mjs +137 -0
  386. package/server/server/_ssr/reviews-BL5Nsgst.mjs +7 -0
  387. package/server/server/_ssr/reviews-BoaEgGKs.mjs +100 -0
  388. package/server/server/_ssr/reviews-C7_NIhY8.mjs +19 -0
  389. package/server/server/_ssr/reviews-Dd69YBDa.mjs +12 -0
  390. package/server/server/_ssr/router-DLxN8FOm.mjs +415 -0
  391. package/server/server/_ssr/routes-D25G8OuS.mjs +80 -0
  392. package/server/server/_ssr/routes-lz0AN75A.mjs +929 -0
  393. package/server/server/_ssr/runtime-D9IbnMlF.mjs +1401 -0
  394. package/server/server/_ssr/server-runtime-D99qpmma.mjs +12 -0
  395. package/server/server/_ssr/ssr.mjs +5318 -0
  396. package/server/server/_ssr/start-BIQfOZtj.mjs +4 -0
  397. package/server/server/_ssr/test-CQdMYlqa.mjs +6 -0
  398. package/server/server/_ssr/todo-m_uUvxca.mjs +88 -0
  399. package/server/server/_ssr/use-keyboard-shortcuts-D5b1Mxpq.mjs +25 -0
  400. package/server/server/_ssr/utils-BuOt9_LA.mjs +8 -0
  401. package/server/server/_tanstack-start-manifest_v-CnL10NRH.mjs +71 -0
  402. package/server/server/index.mjs +2615 -0
  403. package/server/server/node_modules/detect-libc/lib/detect-libc.js +313 -0
  404. package/server/server/node_modules/detect-libc/lib/elf.js +39 -0
  405. package/server/server/node_modules/detect-libc/lib/filesystem.js +51 -0
  406. package/server/server/node_modules/detect-libc/lib/process.js +24 -0
  407. package/server/server/node_modules/detect-libc/package.json +44 -0
  408. package/server/server/node_modules/msgpackr-extract/index.js +1 -0
  409. package/server/server/node_modules/msgpackr-extract/package.json +50 -0
  410. package/server/server/node_modules/node-gyp-build-optional-packages/index.js +6 -0
  411. package/server/server/node_modules/node-gyp-build-optional-packages/node-gyp-build.js +236 -0
  412. package/server/server/node_modules/node-gyp-build-optional-packages/package.json +32 -0
  413. package/server/server/node_modules/tslib/modules/index.js +70 -0
  414. package/server/server/node_modules/tslib/modules/package.json +3 -0
  415. package/server/server/node_modules/tslib/package.json +47 -0
  416. package/server/server/node_modules/tslib/tslib.js +484 -0
  417. package/server/server/package.json +12 -0
@@ -0,0 +1,592 @@
1
+ import { i as __toESM } from "../_runtime.mjs";
2
+ import { u as require_react } from "../_libs/@floating-ui/react-dom+[...].mjs";
3
+ import { n as require_jsx_runtime } from "../_libs/@pierre/diffs+[...].mjs";
4
+ import { Ct as tap, Ot as void_, St as sync, dt as gen, it as catchCause, vt as promise } from "../_libs/effect+[...].mjs";
5
+ import { i as clientRuntime, n as RINGI_PALETTES, o as useRingiTheme, t as ApiClient } from "./client-runtime-BoPuAEoA.mjs";
6
+ import { t as cn } from "./utils-BuOt9_LA.mjs";
7
+ import { a as Monitor, b as Check, d as Ellipsis, i as Moon, n as Sun, r as Settings2, t as X } from "../_libs/lucide-react.mjs";
8
+ import { a as Portal, i as Overlay, n as Content, o as Root, r as Description, s as Title, t as Close } from "../_libs/@radix-ui/react-dialog+[...].mjs";
9
+ import { n as Root2, t as Item2 } from "../_libs/@radix-ui/react-radio-group+[...].mjs";
10
+ //#region node_modules/.nitro/vite/services/ssr/assets/action-bar-C68xGnWW.js
11
+ var import_react = /* @__PURE__ */ __toESM(require_react());
12
+ var import_jsx_runtime = require_jsx_runtime();
13
+ var Dialog$1 = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Root, {
14
+ "data-slot": "dialog",
15
+ ...props
16
+ });
17
+ var DialogPortal = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Portal, {
18
+ "data-slot": "dialog-portal",
19
+ ...props
20
+ });
21
+ var DialogOverlay = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Overlay, {
22
+ className: cn("fixed inset-0 z-50 bg-black/45 backdrop-blur-[3px] transition-opacity duration-200 data-[state=closed]:opacity-0 data-[state=open]:opacity-100 motion-reduce:transition-none", className),
23
+ "data-slot": "dialog-overlay",
24
+ ...props
25
+ });
26
+ var DialogContent = ({ className, children, showCloseButton = true, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogPortal, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogOverlay, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Content, {
27
+ className: cn("fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-2xl border border-border-default bg-surface-secondary p-0 text-text-primary shadow-lg outline-none transition-[opacity,transform] duration-200 ease-[cubic-bezier(0.23,1,0.32,1)] data-[state=closed]:scale-[0.98] data-[state=closed]:opacity-0 data-[state=open]:scale-100 data-[state=open]:opacity-100 motion-reduce:transition-none sm:max-w-lg", className),
28
+ "data-slot": "dialog-content",
29
+ ...props,
30
+ children: [children, showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Close, {
31
+ className: "absolute top-3 right-3 inline-flex size-8 items-center justify-center rounded-lg text-text-tertiary transition-[color,transform,background-color] duration-150 [transition-timing-function:cubic-bezier(0.23,1,0.32,1)] hover:bg-surface-overlay hover:text-text-primary focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:outline-none active:scale-[0.96] motion-reduce:transform-none",
32
+ type: "button",
33
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(X, { className: "size-4" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
34
+ className: "sr-only",
35
+ children: "Close"
36
+ })]
37
+ }) : null]
38
+ })] });
39
+ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
40
+ className: cn("flex flex-col gap-1 border-b border-border-subtle px-5 py-4 text-left", className),
41
+ "data-slot": "dialog-header",
42
+ ...props
43
+ });
44
+ var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
45
+ className: cn("flex flex-col-reverse gap-2 border-t border-border-subtle px-5 py-4 sm:flex-row sm:justify-end", className),
46
+ "data-slot": "dialog-footer",
47
+ ...props
48
+ });
49
+ var DialogTitle = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Title, {
50
+ className: cn("text-base font-semibold tracking-tight", className),
51
+ "data-slot": "dialog-title",
52
+ ...props
53
+ });
54
+ var DialogDescription = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Description, {
55
+ className: cn("text-muted-foreground text-sm", className),
56
+ "data-slot": "dialog-description",
57
+ ...props
58
+ });
59
+ var SECTIONS = [
60
+ {
61
+ id: "general",
62
+ label: "General"
63
+ },
64
+ {
65
+ id: "theme",
66
+ label: "Theme"
67
+ },
68
+ {
69
+ id: "shortcuts",
70
+ label: "Shortcuts"
71
+ }
72
+ ];
73
+ var APPEARANCE_MODES = [
74
+ {
75
+ icon: Moon,
76
+ id: "dark",
77
+ label: "Dark"
78
+ },
79
+ {
80
+ icon: Sun,
81
+ id: "light",
82
+ label: "Light"
83
+ },
84
+ {
85
+ icon: Monitor,
86
+ id: "system",
87
+ label: "System"
88
+ }
89
+ ];
90
+ var SHORTCUT_ROWS = [
91
+ {
92
+ description: "Toggle Todos panel",
93
+ keys: "T"
94
+ },
95
+ {
96
+ description: "Show keyboard shortcuts (console)",
97
+ keys: "Shift + ?"
98
+ },
99
+ {
100
+ description: "New review (Changes / Reviews)",
101
+ keys: "N"
102
+ },
103
+ {
104
+ description: "Go to Reviews (Changes)",
105
+ keys: "R"
106
+ },
107
+ {
108
+ description: "Go to Changes (Reviews)",
109
+ keys: "C"
110
+ }
111
+ ];
112
+ var SettingsNav = ({ active, onNavClick }) => {
113
+ const navId = (0, import_react.useId)();
114
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("nav", {
115
+ "aria-labelledby": navId,
116
+ className: "flex w-full flex-col gap-0.5 border-border-subtle border-b p-2 md:w-44 md:border-r md:border-b-0 md:p-3",
117
+ onClick: onNavClick,
118
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
119
+ className: "sr-only",
120
+ id: navId,
121
+ children: "Settings sections"
122
+ }), SECTIONS.map((s) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
123
+ type: "button",
124
+ "aria-current": active === s.id ? "page" : void 0,
125
+ className: cn("rounded-lg px-3 py-2 text-left text-xs transition-[background-color,color,transform] duration-150 [transition-timing-function:cubic-bezier(0.23,1,0.32,1)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:outline-none active:scale-[0.99] motion-reduce:transform-none", active === s.id ? "bg-accent-muted font-medium text-text-primary" : "text-text-secondary hover:bg-surface-overlay hover:text-text-primary"),
126
+ "data-ringi-settings-section": s.id,
127
+ children: s.label
128
+ }, s.id))]
129
+ });
130
+ };
131
+ var AppearanceModeControl = ({ onAppearanceClick, value }) => {
132
+ const groupLabelId = (0, import_react.useId)();
133
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
134
+ className: "space-y-2",
135
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
136
+ className: "text-[0.65rem] font-medium text-text-tertiary uppercase tracking-widest",
137
+ id: groupLabelId,
138
+ children: "Mode"
139
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
140
+ "aria-labelledby": groupLabelId,
141
+ className: "inline-flex rounded-lg border border-border-default bg-surface-inset p-0.5",
142
+ onClick: onAppearanceClick,
143
+ role: "radiogroup",
144
+ children: APPEARANCE_MODES.map((m) => {
145
+ const Icon = m.icon;
146
+ const selected = value === m.id;
147
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", {
148
+ type: "button",
149
+ role: "radio",
150
+ "aria-checked": selected,
151
+ className: cn("flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs transition-[background-color,color,transform,box-shadow] duration-150 [transition-timing-function:cubic-bezier(0.23,1,0.32,1)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:outline-none active:scale-[0.98] motion-reduce:transform-none", selected ? "bg-accent-primary text-white shadow-sm" : "text-text-tertiary hover:bg-surface-overlay hover:text-text-secondary"),
152
+ "data-ringi-appearance": m.id,
153
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {
154
+ "aria-hidden": true,
155
+ className: "size-3.5 opacity-90"
156
+ }), m.label]
157
+ }, m.id);
158
+ })
159
+ })]
160
+ });
161
+ };
162
+ var PaletteGrid = ({ onPaletteValueChange, value }) => {
163
+ const labelId = (0, import_react.useId)();
164
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
165
+ className: "space-y-2",
166
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
167
+ className: "text-[0.65rem] font-medium text-text-tertiary uppercase tracking-widest",
168
+ id: labelId,
169
+ children: "Theme"
170
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Root2, {
171
+ "aria-labelledby": labelId,
172
+ className: "grid grid-cols-1 gap-2 sm:grid-cols-2",
173
+ onValueChange: onPaletteValueChange,
174
+ value,
175
+ children: RINGI_PALETTES.map((p) => {
176
+ const selected = value === p.id;
177
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Item2, {
178
+ value: p.id,
179
+ className: cn("group relative flex w-full cursor-pointer flex-col gap-2 rounded-xl border px-3 py-2.5 text-left outline-none transition-[border-color,transform,box-shadow,background-color] duration-200 [transition-timing-function:cubic-bezier(0.23,1,0.32,1)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background active:scale-[0.99] motion-reduce:transform-none", selected ? "border-accent-primary bg-surface-overlay shadow-[0_0_0_1px_color-mix(in_srgb,var(--color-accent-primary)_35%,transparent)]" : "border-border-default bg-surface-inset/40 hover:border-border-strong hover:bg-surface-overlay/80"),
180
+ children: [
181
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
182
+ className: "flex items-center gap-1.5",
183
+ "aria-hidden": true,
184
+ children: p.swatches.map((hex) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
185
+ className: "size-2.5 rounded-full border border-border-subtle shadow-sm",
186
+ style: { backgroundColor: hex }
187
+ }, hex))
188
+ }),
189
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
190
+ className: "text-sm font-medium text-text-primary",
191
+ children: p.label
192
+ }),
193
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
194
+ className: "text-[0.7rem] text-text-tertiary leading-snug",
195
+ children: p.description
196
+ }),
197
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
198
+ className: cn("absolute right-2.5 bottom-2.5 flex size-5 items-center justify-center rounded-full border border-border-default bg-surface-elevated transition-[opacity,transform] duration-200 [transition-timing-function:cubic-bezier(0.23,1,0.32,1)] motion-reduce:transform-none", selected ? "scale-100 border-accent-primary/40 text-accent-primary opacity-100" : "scale-90 opacity-0 group-focus-visible:opacity-100"),
199
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Check, { className: "size-3" })
200
+ })
201
+ ]
202
+ }, p.id);
203
+ })
204
+ })]
205
+ });
206
+ };
207
+ var PanelGeneral = () => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
208
+ className: "space-y-4 px-5 py-4",
209
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", {
210
+ className: "text-sm font-medium text-text-primary",
211
+ children: "About"
212
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
213
+ className: "mt-1 text-xs text-text-secondary leading-relaxed",
214
+ children: "Ringi is a local-first review workbench for AI-assisted changes. Preferences stay on this device."
215
+ })] }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dl", {
216
+ className: "grid gap-2 text-xs",
217
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
218
+ className: "flex justify-between gap-4 border-border-subtle border-b pb-2",
219
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", {
220
+ className: "text-text-tertiary",
221
+ children: "Product"
222
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", {
223
+ className: "font-medium text-text-primary",
224
+ children: "ringi"
225
+ })]
226
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
227
+ className: "flex justify-between gap-4",
228
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", {
229
+ className: "text-text-tertiary",
230
+ children: "Channel"
231
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", {
232
+ className: "text-text-secondary",
233
+ children: "v0.1"
234
+ })]
235
+ })]
236
+ })]
237
+ });
238
+ var PanelShortcuts = () => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
239
+ className: "px-5 py-4",
240
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
241
+ className: "mb-3 text-xs text-text-secondary",
242
+ children: "Global shortcuts (when focus is not in an input)."
243
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", {
244
+ className: "space-y-2",
245
+ children: SHORTCUT_ROWS.map((row) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", {
246
+ className: "flex items-center justify-between gap-3 rounded-lg border border-border-subtle bg-surface-inset/30 px-3 py-2",
247
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
248
+ className: "text-xs text-text-secondary",
249
+ children: row.description
250
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("kbd", {
251
+ className: "shrink-0 rounded border border-border-default bg-surface-elevated px-1.5 py-0.5 font-mono text-[0.65rem] text-text-tertiary",
252
+ children: row.keys
253
+ })]
254
+ }, row.description))
255
+ })]
256
+ });
257
+ var SettingsModal = ({ onOpenChange, open }) => {
258
+ const { appearance, palette, setAppearance, setPalette } = useRingiTheme();
259
+ const [section, setSection] = (0, import_react.useState)("theme");
260
+ const prevOpen = (0, import_react.useRef)(open);
261
+ const onNavClick = (0, import_react.useEffectEvent)((e) => {
262
+ const raw = e.target.closest("[data-ringi-settings-section]")?.dataset.ringiSettingsSection;
263
+ if (raw === "general" || raw === "theme" || raw === "shortcuts") setSection(raw);
264
+ });
265
+ const onAppearanceClick = (0, import_react.useEffectEvent)((e) => {
266
+ const m = e.target.closest("[data-ringi-appearance]")?.dataset.ringiAppearance;
267
+ if (m === "dark" || m === "light" || m === "system") setAppearance(m);
268
+ });
269
+ const onPaletteValueChange = (0, import_react.useEffectEvent)((v) => {
270
+ if (v) setPalette(v);
271
+ });
272
+ (0, import_react.useEffect)(() => {
273
+ if (open && !prevOpen.current) setSection("theme");
274
+ prevOpen.current = open;
275
+ }, [open]);
276
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Dialog$1, {
277
+ onOpenChange,
278
+ open,
279
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogContent, {
280
+ className: "flex max-h-[min(720px,calc(100dvh-2rem))] w-full max-w-[calc(100%-1.5rem)] flex-col gap-0 overflow-hidden border-border-default bg-surface-secondary p-0 sm:max-w-3xl",
281
+ showCloseButton: true,
282
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogHeader, {
283
+ className: "shrink-0",
284
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogTitle, { children: "Settings" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogDescription, {
285
+ className: "sr-only",
286
+ children: "Appearance, theme palette, and keyboard shortcuts for Ringi."
287
+ })]
288
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
289
+ className: "flex min-h-0 min-w-0 flex-1 flex-col md:flex-row",
290
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SettingsNav, {
291
+ active: section,
292
+ onNavClick
293
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
294
+ className: "min-h-0 min-w-0 flex-1 overflow-y-auto",
295
+ children: [
296
+ section === "general" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PanelGeneral, {}) : null,
297
+ section === "theme" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
298
+ className: "space-y-8 px-5 py-4",
299
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(AppearanceModeControl, {
300
+ onAppearanceClick,
301
+ value: appearance
302
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PaletteGrid, {
303
+ onPaletteValueChange,
304
+ value: palette
305
+ })]
306
+ }) : null,
307
+ section === "shortcuts" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PanelShortcuts, {}) : null
308
+ ]
309
+ })]
310
+ })]
311
+ })
312
+ });
313
+ };
314
+ var motion = "transition-[transform,background-color,color,border-color,opacity] duration-150 [transition-timing-function:cubic-bezier(0.23,1,0.32,1)] motion-reduce:transform-none";
315
+ var AppSettingsControl = () => {
316
+ const [open, setOpen] = (0, import_react.useState)(false);
317
+ const openSettings = (0, import_react.useEffectEvent)(() => {
318
+ setOpen(true);
319
+ });
320
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", {
321
+ type: "button",
322
+ "aria-expanded": open,
323
+ "aria-haspopup": "dialog",
324
+ className: cn("inline-flex size-6 items-center justify-center rounded-[5px] text-text-tertiary hover:bg-surface-elevated hover:text-text-secondary active:scale-[0.97]", motion),
325
+ title: "Settings",
326
+ onClick: openSettings,
327
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Settings2, {
328
+ "aria-hidden": true,
329
+ className: "size-3.5"
330
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
331
+ className: "sr-only",
332
+ children: "Open settings"
333
+ })]
334
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SettingsModal, {
335
+ onOpenChange: setOpen,
336
+ open
337
+ })] });
338
+ };
339
+ var EASE_OUT = "[transition-timing-function:cubic-bezier(0.23,1,0.32,1)]";
340
+ var motionBase = `${EASE_OUT} motion-reduce:transform-none`;
341
+ var pressScale = "active:scale-[0.97]";
342
+ var CONTROL = {
343
+ height: "h-6",
344
+ radius: "rounded-[5px]",
345
+ text: "text-[11px]"
346
+ };
347
+ var SegmentedControl = ({ diffMode, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
348
+ role: "radiogroup",
349
+ "aria-label": "Diff view mode",
350
+ className: cn("relative grid grid-cols-2 items-center bg-surface-inset p-0.5", CONTROL.radius),
351
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
352
+ "aria-hidden": true,
353
+ className: cn("pointer-events-none absolute inset-y-0.5 left-0.5 w-[calc(50%-2px)] bg-surface-elevated shadow-[0_1px_2px_rgb(0_0_0/0.06)] transition-transform duration-200", CONTROL.radius, EASE_OUT, "motion-reduce:transition-none", diffMode === "unified" && "translate-x-full")
354
+ }), ["split", "unified"].map((mode) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
355
+ type: "button",
356
+ role: "radio",
357
+ "aria-checked": diffMode === mode,
358
+ onClick: onToggle,
359
+ className: cn("relative z-10 px-2 py-0.5 capitalize transition-colors duration-100", CONTROL.radius, CONTROL.text, pressScale, motionBase, diffMode === mode ? "font-medium text-text-primary" : "text-text-tertiary hover:text-text-secondary"),
360
+ children: mode
361
+ }, mode))]
362
+ });
363
+ var OverflowMenu = ({ items }) => {
364
+ const [open, setOpen] = (0, import_react.useState)(false);
365
+ const triggerRef = (0, import_react.useRef)(null);
366
+ const menuRef = (0, import_react.useRef)(null);
367
+ const close = (0, import_react.useCallback)(() => {
368
+ setOpen(false);
369
+ triggerRef.current?.focus();
370
+ }, []);
371
+ const toggle = (0, import_react.useCallback)(() => setOpen((v) => !v), []);
372
+ (0, import_react.useEffect)(() => {
373
+ if (!open) return;
374
+ const handler = (e) => {
375
+ if (e.key === "Escape") {
376
+ e.stopPropagation();
377
+ close();
378
+ return;
379
+ }
380
+ if (e.key === "ArrowDown" || e.key === "ArrowUp") {
381
+ e.preventDefault();
382
+ const buttons = menuRef.current?.querySelectorAll("button[role=\"menuitem\"]:not(:disabled)");
383
+ if (!buttons?.length) return;
384
+ const focused = document.activeElement;
385
+ const idx = Array.from(buttons).indexOf(focused);
386
+ (e.key === "ArrowDown" ? buttons[(idx + 1) % buttons.length] : buttons[(idx - 1 + buttons.length) % buttons.length])?.focus();
387
+ }
388
+ };
389
+ document.addEventListener("keydown", handler, true);
390
+ return () => document.removeEventListener("keydown", handler, true);
391
+ }, [open, close]);
392
+ (0, import_react.useEffect)(() => {
393
+ if (!open) return;
394
+ const frame = requestAnimationFrame(() => {
395
+ menuRef.current?.querySelector("button[role=\"menuitem\"]:not(:disabled)")?.focus();
396
+ });
397
+ return () => cancelAnimationFrame(frame);
398
+ }, [open]);
399
+ (0, import_react.useEffect)(() => {
400
+ if (!open) return;
401
+ const handler = (e) => {
402
+ const target = e.target;
403
+ if (!menuRef.current?.contains(target) && !triggerRef.current?.contains(target)) setOpen(false);
404
+ };
405
+ document.addEventListener("pointerdown", handler, true);
406
+ return () => document.removeEventListener("pointerdown", handler, true);
407
+ }, [open]);
408
+ if (items.length === 0) return null;
409
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
410
+ className: "relative",
411
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", {
412
+ ref: triggerRef,
413
+ type: "button",
414
+ onClick: toggle,
415
+ "aria-expanded": open,
416
+ "aria-haspopup": "menu",
417
+ className: cn("inline-flex items-center justify-center transition-[transform,background-color,color] duration-100", CONTROL.height, "w-6", CONTROL.radius, pressScale, motionBase, open ? "bg-surface-elevated text-text-secondary" : "text-text-tertiary hover:bg-surface-elevated hover:text-text-secondary"),
418
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Ellipsis, {
419
+ "aria-hidden": true,
420
+ className: "size-3.5"
421
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
422
+ className: "sr-only",
423
+ children: "More actions"
424
+ })]
425
+ }), open ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
426
+ ref: menuRef,
427
+ role: "menu",
428
+ className: "absolute right-0 top-full z-50 mt-1 min-w-[128px] overflow-hidden rounded-md border border-border-default bg-surface-elevated py-0.5 shadow-lg shadow-black/8",
429
+ children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
430
+ role: "menuitem",
431
+ type: "button",
432
+ disabled: item.disabled,
433
+ onClick: () => {
434
+ item.onClick();
435
+ close();
436
+ },
437
+ className: cn("flex w-full items-center px-2.5 py-1 text-left text-[11px] text-text-secondary transition-colors duration-75", item.disabled ? "cursor-default opacity-40" : "hover:bg-surface-overlay hover:text-text-primary"),
438
+ children: item.label
439
+ }, item.label))
440
+ }) : null]
441
+ });
442
+ };
443
+ var REVIEW_STATE_MAP = {
444
+ approved: {
445
+ label: "Approved",
446
+ className: "text-status-success/80"
447
+ },
448
+ changes_requested: {
449
+ label: "Changes requested",
450
+ className: "text-status-error/80"
451
+ },
452
+ in_progress: {
453
+ label: "In review",
454
+ className: "text-text-tertiary"
455
+ }
456
+ };
457
+ var Dot = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
458
+ "aria-hidden": true,
459
+ className: "shrink-0 text-[10px] text-text-tertiary/30 select-none",
460
+ children: "·"
461
+ });
462
+ var ActionBar = ({ repoName, branchName, reviewId, status, onStatusChange, scopeLabel, sourceDescription, diffMode = "split", onToggleDiffMode, reviewedFileCount, totalFileCount, unresolvedCount, isAnnotationsOpen = false, onToggleAnnotations, onExport, onCopyDiff }) => {
463
+ const [copyFeedback, setCopyFeedback] = (0, import_react.useState)(false);
464
+ const handleCopy = (0, import_react.useCallback)(() => {
465
+ if (onCopyDiff) {
466
+ onCopyDiff();
467
+ setCopyFeedback(true);
468
+ setTimeout(() => setCopyFeedback(false), 1400);
469
+ return;
470
+ }
471
+ if (!reviewId) return;
472
+ clientRuntime.runFork(gen(function* copyReviewDiff() {
473
+ const { http } = yield* ApiClient;
474
+ return yield* http.export.markdown({ path: { id: reviewId } });
475
+ }).pipe(tap((md) => promise(() => navigator.clipboard.writeText(md))), tap(() => sync(() => {
476
+ setCopyFeedback(true);
477
+ setTimeout(() => setCopyFeedback(false), 1400);
478
+ })), catchCause(() => void_)));
479
+ }, [onCopyDiff, reviewId]);
480
+ const isApproved = status === "approved";
481
+ const handleRequestChanges = (0, import_react.useCallback)(() => {
482
+ onStatusChange?.("changes_requested");
483
+ }, [onStatusChange]);
484
+ const handleApprove = (0, import_react.useCallback)(() => {
485
+ onStatusChange?.("approved");
486
+ }, [onStatusChange]);
487
+ const overflowItems = [...onCopyDiff || reviewId ? [{
488
+ label: copyFeedback ? "Copied" : "Copy diff",
489
+ onClick: handleCopy,
490
+ disabled: copyFeedback
491
+ }] : [], ...onExport ? [{
492
+ label: "Export feedback",
493
+ onClick: onExport
494
+ }] : []];
495
+ const contextDescription = sourceDescription ?? scopeLabel;
496
+ const reviewState = status ? REVIEW_STATE_MAP[status] : void 0;
497
+ const hasUnresolved = unresolvedCount !== void 0 && unresolvedCount > 0;
498
+ const hasProgress = reviewedFileCount !== void 0 && totalFileCount !== void 0 && totalFileCount > 0;
499
+ const primaryActionLabel = isApproved ? "Approved" : hasUnresolved ? "Complete review" : "Approve";
500
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", {
501
+ className: "flex h-9 shrink-0 items-center border-b border-border-subtle bg-surface-secondary/50",
502
+ role: "banner",
503
+ children: [
504
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
505
+ className: "flex min-w-0 items-center gap-1.5 pl-3 pr-4",
506
+ children: [
507
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
508
+ className: "shrink-0 text-[11px] font-medium text-text-tertiary/60 select-none",
509
+ children: "Ringi"
510
+ }),
511
+ repoName ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Dot, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
512
+ className: "shrink-0 font-mono text-[11px] font-medium text-text-secondary",
513
+ children: repoName
514
+ })] }) : null,
515
+ contextDescription ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Dot, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
516
+ className: "truncate text-[11px] text-text-tertiary",
517
+ children: contextDescription
518
+ })] }) : branchName ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Dot, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
519
+ className: "truncate font-mono text-[11px] text-text-tertiary/70",
520
+ children: branchName
521
+ })] }) : null
522
+ ]
523
+ }),
524
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
525
+ className: "flex flex-1 items-center justify-center",
526
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SegmentedControl, {
527
+ diffMode,
528
+ onToggle: onToggleDiffMode
529
+ })
530
+ }),
531
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
532
+ className: "flex shrink-0 items-center gap-1.5 pr-2.5",
533
+ children: [
534
+ hasProgress ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
535
+ className: cn("text-[11px] tabular-nums", reviewedFileCount === totalFileCount ? "text-status-success/70" : "text-text-tertiary"),
536
+ children: [
537
+ reviewedFileCount,
538
+ "/",
539
+ totalFileCount
540
+ ]
541
+ }) : null,
542
+ hasUnresolved ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
543
+ className: "text-[11px] tabular-nums text-status-warning/80",
544
+ children: [unresolvedCount, " unresolved"]
545
+ }) : reviewId && reviewState && !hasProgress ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
546
+ className: cn("text-[11px]", reviewState.className),
547
+ children: reviewState.label
548
+ }) : null,
549
+ onToggleAnnotations ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", {
550
+ type: "button",
551
+ onClick: onToggleAnnotations,
552
+ "aria-pressed": isAnnotationsOpen,
553
+ "aria-label": hasUnresolved ? `${unresolvedCount} unresolved annotations` : "Toggle annotations",
554
+ className: cn("inline-flex items-center gap-1 px-1.5 transition-[transform,background-color,color] duration-100", CONTROL.height, CONTROL.radius, CONTROL.text, pressScale, motionBase, isAnnotationsOpen ? "bg-accent-muted/50 font-medium text-accent-primary" : "text-text-tertiary hover:bg-surface-elevated hover:text-text-secondary"),
555
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
556
+ "aria-hidden": true,
557
+ viewBox: "0 0 16 16",
558
+ fill: "none",
559
+ stroke: "currentColor",
560
+ strokeWidth: "1.5",
561
+ className: "size-3",
562
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
563
+ d: "M2.5 3.5a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H9l-3 2.5V10.5H3.5a1 1 0 0 1-1-1v-6Z",
564
+ strokeLinecap: "round",
565
+ strokeLinejoin: "round"
566
+ })
567
+ }), hasUnresolved ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
568
+ className: "tabular-nums",
569
+ children: unresolvedCount
570
+ }) : null]
571
+ }) : null,
572
+ reviewId && onStatusChange ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [!isApproved ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
573
+ type: "button",
574
+ onClick: handleRequestChanges,
575
+ className: cn("font-medium transition-[transform,color] duration-100", CONTROL.height, CONTROL.radius, CONTROL.text, pressScale, motionBase, "px-2 text-text-tertiary hover:text-status-error"),
576
+ children: "Request changes"
577
+ }) : null, /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
578
+ type: "button",
579
+ disabled: isApproved,
580
+ onClick: handleApprove,
581
+ className: cn("font-medium transition-[transform,background-color,color] duration-150", CONTROL.height, CONTROL.radius, CONTROL.text, motionBase, isApproved ? "cursor-default bg-status-success/8 px-2 text-status-success/60" : `bg-accent-primary px-2.5 text-white hover:bg-accent-primary-hover ${pressScale}`),
582
+ children: primaryActionLabel
583
+ })] }) : null,
584
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OverflowMenu, { items: overflowItems }),
585
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AppSettingsControl, {})
586
+ ]
587
+ })
588
+ ]
589
+ });
590
+ };
591
+ //#endregion
592
+ export { DialogFooter as a, DialogDescription as i, Dialog$1 as n, DialogHeader as o, DialogContent as r, DialogTitle as s, ActionBar as t };