diffity 0.1.0 → 0.1.2

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 (478) hide show
  1. package/dist/index.js +1081 -0
  2. package/dist/ui/assets/abap-BdImnpbu.js +1 -0
  3. package/dist/ui/assets/actionscript-3-CoDkCxhg.js +1 -0
  4. package/dist/ui/assets/ada-bCR0ucgS.js +1 -0
  5. package/dist/ui/assets/andromeeda-C4gqWexZ.js +1 -0
  6. package/dist/ui/assets/angular-html-DA-rfuFy.js +1 -0
  7. package/dist/ui/assets/angular-ts-BrjP3tb8.js +1 -0
  8. package/dist/ui/assets/apache-Pmp26Uib.js +1 -0
  9. package/dist/ui/assets/apex-D8_7TLub.js +1 -0
  10. package/dist/ui/assets/apl-CORt7UWP.js +1 -0
  11. package/dist/ui/assets/applescript-Co6uUVPk.js +1 -0
  12. package/dist/ui/assets/ara-BRHolxvo.js +1 -0
  13. package/dist/ui/assets/asciidoc-Ve4PFQV2.js +1 -0
  14. package/dist/ui/assets/asm-D_Q5rh1f.js +1 -0
  15. package/dist/ui/assets/astro-HNnZUWAn.js +1 -0
  16. package/dist/ui/assets/aurora-x-D-2ljcwZ.js +1 -0
  17. package/dist/ui/assets/awk-DMzUqQB5.js +1 -0
  18. package/dist/ui/assets/ayu-dark-DYE7WIF3.js +1 -0
  19. package/dist/ui/assets/ayu-light-BA47KaF1.js +1 -0
  20. package/dist/ui/assets/ayu-mirage-32ctXXKs.js +1 -0
  21. package/dist/ui/assets/ballerina-BFfxhgS-.js +1 -0
  22. package/dist/ui/assets/bat-BkioyH1T.js +1 -0
  23. package/dist/ui/assets/beancount-k_qm7-4y.js +1 -0
  24. package/dist/ui/assets/berry-uYugtg8r.js +1 -0
  25. package/dist/ui/assets/bibtex-CHM0blh-.js +1 -0
  26. package/dist/ui/assets/bicep-Bmn6On1c.js +1 -0
  27. package/dist/ui/assets/bird2-BIv1doCn.js +1 -0
  28. package/dist/ui/assets/blade-BjGOyj-B.js +1 -0
  29. package/dist/ui/assets/bsl-BO_Y6i37.js +1 -0
  30. package/dist/ui/assets/c-BIGW1oBm.js +1 -0
  31. package/dist/ui/assets/c3-eo99z4R2.js +1 -0
  32. package/dist/ui/assets/cadence-Bv_4Rxtq.js +1 -0
  33. package/dist/ui/assets/cairo-KRGpt6FW.js +1 -0
  34. package/dist/ui/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  35. package/dist/ui/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  36. package/dist/ui/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  37. package/dist/ui/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  38. package/dist/ui/assets/clarity-D53aC0YG.js +1 -0
  39. package/dist/ui/assets/clojure-P80f7IUj.js +1 -0
  40. package/dist/ui/assets/cmake-D1j8_8rp.js +1 -0
  41. package/dist/ui/assets/cobol-nBiQ_Alo.js +1 -0
  42. package/dist/ui/assets/codeowners-Bp6g37R7.js +1 -0
  43. package/dist/ui/assets/codeql-DsOJ9woJ.js +1 -0
  44. package/dist/ui/assets/coffee-Ch7k5sss.js +1 -0
  45. package/dist/ui/assets/common-lisp-Cg-RD9OK.js +1 -0
  46. package/dist/ui/assets/coq-DkFqJrB1.js +1 -0
  47. package/dist/ui/assets/cpp-CofmeUqb.js +1 -0
  48. package/dist/ui/assets/crystal-DNxU26gB.js +1 -0
  49. package/dist/ui/assets/csharp-COcwbKMJ.js +1 -0
  50. package/dist/ui/assets/css-CLj8gQPS.js +1 -0
  51. package/dist/ui/assets/csv-fuZLfV_i.js +1 -0
  52. package/dist/ui/assets/cue-D82EKSYY.js +1 -0
  53. package/dist/ui/assets/cypher-COkxafJQ.js +1 -0
  54. package/dist/ui/assets/d-85-TOEBH.js +1 -0
  55. package/dist/ui/assets/dark-plus-C3mMm8J8.js +1 -0
  56. package/dist/ui/assets/dart-bE4Kk8sk.js +1 -0
  57. package/dist/ui/assets/dax-CEL-wOlO.js +1 -0
  58. package/dist/ui/assets/desktop-BmXAJ9_W.js +1 -0
  59. package/dist/ui/assets/diff-D97Zzqfu.js +1 -0
  60. package/dist/ui/assets/docker-BcOcwvcX.js +1 -0
  61. package/dist/ui/assets/dotenv-Da5cRb03.js +1 -0
  62. package/dist/ui/assets/dracula-BzJJZx-M.js +1 -0
  63. package/dist/ui/assets/dracula-soft-BXkSAIEj.js +1 -0
  64. package/dist/ui/assets/dream-maker-BtqSS_iP.js +1 -0
  65. package/dist/ui/assets/edge-FbVlp4U3.js +1 -0
  66. package/dist/ui/assets/elixir-CkH2-t6x.js +1 -0
  67. package/dist/ui/assets/elm-DbKCFpqz.js +1 -0
  68. package/dist/ui/assets/emacs-lisp-CXvaQtF9.js +1 -0
  69. package/dist/ui/assets/erb-BYCe7drp.js +1 -0
  70. package/dist/ui/assets/erlang-DsQrWhSR.js +1 -0
  71. package/dist/ui/assets/everforest-dark-BgDCqdQA.js +1 -0
  72. package/dist/ui/assets/everforest-light-C8M2exoo.js +1 -0
  73. package/dist/ui/assets/fennel-BYunw83y.js +1 -0
  74. package/dist/ui/assets/fish-BvzEVeQv.js +1 -0
  75. package/dist/ui/assets/fluent-C4IJs8-o.js +1 -0
  76. package/dist/ui/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  77. package/dist/ui/assets/fortran-free-form-BxgE0vQu.js +1 -0
  78. package/dist/ui/assets/fsharp-CXgrBDvD.js +1 -0
  79. package/dist/ui/assets/gdresource-BOOCDP_w.js +1 -0
  80. package/dist/ui/assets/gdscript-C5YyOfLZ.js +1 -0
  81. package/dist/ui/assets/gdshader-DkwncUOv.js +1 -0
  82. package/dist/ui/assets/genie-D0YGMca9.js +1 -0
  83. package/dist/ui/assets/gherkin-DyxjwDmM.js +1 -0
  84. package/dist/ui/assets/git-commit-F4YmCXRG.js +1 -0
  85. package/dist/ui/assets/git-rebase-r7XF79zn.js +1 -0
  86. package/dist/ui/assets/github-dark-DHJKELXO.js +1 -0
  87. package/dist/ui/assets/github-dark-default-Cuk6v7N8.js +1 -0
  88. package/dist/ui/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  89. package/dist/ui/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  90. package/dist/ui/assets/github-light-DAi9KRSo.js +1 -0
  91. package/dist/ui/assets/github-light-default-D7oLnXFd.js +1 -0
  92. package/dist/ui/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  93. package/dist/ui/assets/gleam-BspZqrRM.js +1 -0
  94. package/dist/ui/assets/glimmer-js-ByusRIyA.js +1 -0
  95. package/dist/ui/assets/glimmer-ts-BfAWNZQY.js +1 -0
  96. package/dist/ui/assets/glsl-DplSGwfg.js +1 -0
  97. package/dist/ui/assets/gn-n2N0HUVH.js +1 -0
  98. package/dist/ui/assets/gnuplot-DdkO51Og.js +1 -0
  99. package/dist/ui/assets/go-C27-OAKa.js +1 -0
  100. package/dist/ui/assets/graphql-ChdNCCLP.js +1 -0
  101. package/dist/ui/assets/groovy-gcz8RCvz.js +1 -0
  102. package/dist/ui/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  103. package/dist/ui/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  104. package/dist/ui/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  105. package/dist/ui/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  106. package/dist/ui/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  107. package/dist/ui/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  108. package/dist/ui/assets/hack-i7_Ulhet.js +1 -0
  109. package/dist/ui/assets/haml-D5jkg6IW.js +1 -0
  110. package/dist/ui/assets/handlebars-BpdQsYii.js +1 -0
  111. package/dist/ui/assets/haskell-Df6bDoY_.js +1 -0
  112. package/dist/ui/assets/haxe-CzTSHFRz.js +1 -0
  113. package/dist/ui/assets/hcl-BWvSN4gD.js +1 -0
  114. package/dist/ui/assets/hjson-D5-asLiD.js +1 -0
  115. package/dist/ui/assets/hlsl-D3lLCCz7.js +1 -0
  116. package/dist/ui/assets/horizon-BUw7H-hv.js +1 -0
  117. package/dist/ui/assets/horizon-bright-CUuTKBJd.js +1 -0
  118. package/dist/ui/assets/houston-DnULxvSX.js +1 -0
  119. package/dist/ui/assets/html-derivative-DlHx6ybY.js +1 -0
  120. package/dist/ui/assets/html-pp8916En.js +1 -0
  121. package/dist/ui/assets/http-jrhK8wxY.js +1 -0
  122. package/dist/ui/assets/hurl-irOxFIW8.js +1 -0
  123. package/dist/ui/assets/hxml-Bvhsp5Yf.js +1 -0
  124. package/dist/ui/assets/hy-DFXneXwc.js +1 -0
  125. package/dist/ui/assets/imba-DGztddWO.js +1 -0
  126. package/dist/ui/assets/index-B2RHRT_g.css +1 -0
  127. package/dist/ui/assets/index-BUq0B-nJ.js +198 -0
  128. package/dist/ui/assets/ini-BEwlwnbL.js +1 -0
  129. package/dist/ui/assets/java-CylS5w8V.js +1 -0
  130. package/dist/ui/assets/javascript-wDzz0qaB.js +1 -0
  131. package/dist/ui/assets/jinja-f2NsQr07.js +1 -0
  132. package/dist/ui/assets/jison-wvAkD_A8.js +1 -0
  133. package/dist/ui/assets/json-Cp-IABpG.js +1 -0
  134. package/dist/ui/assets/json5-C9tS-k6U.js +1 -0
  135. package/dist/ui/assets/jsonc-Des-eS-w.js +1 -0
  136. package/dist/ui/assets/jsonl-DcaNXYhu.js +1 -0
  137. package/dist/ui/assets/jsonnet-DFQXde-d.js +1 -0
  138. package/dist/ui/assets/jssm-C2t-YnRu.js +1 -0
  139. package/dist/ui/assets/jsx-g9-lgVsj.js +1 -0
  140. package/dist/ui/assets/julia-CxzCAyBv.js +1 -0
  141. package/dist/ui/assets/just-VxiPbLrw.js +1 -0
  142. package/dist/ui/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  143. package/dist/ui/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  144. package/dist/ui/assets/kanagawa-wave-DWedfzmr.js +1 -0
  145. package/dist/ui/assets/kdl-DV7GczEv.js +1 -0
  146. package/dist/ui/assets/kotlin-BdnUsdx6.js +1 -0
  147. package/dist/ui/assets/kusto-wEQ09or8.js +1 -0
  148. package/dist/ui/assets/laserwave-DUszq2jm.js +1 -0
  149. package/dist/ui/assets/latex-CWtU0Tv5.js +1 -0
  150. package/dist/ui/assets/lean-BZvkOJ9d.js +1 -0
  151. package/dist/ui/assets/less-B1dDrJ26.js +1 -0
  152. package/dist/ui/assets/light-plus-B7mTdjB0.js +1 -0
  153. package/dist/ui/assets/liquid-C0sCDyMI.js +1 -0
  154. package/dist/ui/assets/llvm-DjAJT7YJ.js +1 -0
  155. package/dist/ui/assets/log-2UxHyX5q.js +1 -0
  156. package/dist/ui/assets/logo-BtOb2qkB.js +1 -0
  157. package/dist/ui/assets/lua-BaeVxFsk.js +1 -0
  158. package/dist/ui/assets/luau-C-HG3fhB.js +1 -0
  159. package/dist/ui/assets/make-CHLpvVh8.js +1 -0
  160. package/dist/ui/assets/markdown-Cvjx9yec.js +1 -0
  161. package/dist/ui/assets/marko-DjSrsDqO.js +1 -0
  162. package/dist/ui/assets/material-theme-D5KoaKCx.js +1 -0
  163. package/dist/ui/assets/material-theme-darker-BfHTSMKl.js +1 -0
  164. package/dist/ui/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  165. package/dist/ui/assets/material-theme-ocean-CyktbL80.js +1 -0
  166. package/dist/ui/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  167. package/dist/ui/assets/matlab-D7o27uSR.js +1 -0
  168. package/dist/ui/assets/mdc-DTYItulj.js +1 -0
  169. package/dist/ui/assets/mdx-Cmh6b_Ma.js +1 -0
  170. package/dist/ui/assets/mermaid-mWjccvbQ.js +1 -0
  171. package/dist/ui/assets/min-dark-CafNBF8u.js +1 -0
  172. package/dist/ui/assets/min-light-CTRr51gU.js +1 -0
  173. package/dist/ui/assets/mipsasm-CKIfxQSi.js +1 -0
  174. package/dist/ui/assets/mojo-rZm6bMo-.js +1 -0
  175. package/dist/ui/assets/monokai-D4h5O-jR.js +1 -0
  176. package/dist/ui/assets/moonbit-_H4v1dQx.js +1 -0
  177. package/dist/ui/assets/move-IF9eRakj.js +1 -0
  178. package/dist/ui/assets/narrat-DRg8JJMk.js +1 -0
  179. package/dist/ui/assets/nextflow-C-mBbutL.js +1 -0
  180. package/dist/ui/assets/nextflow-groovy-vE_lwT2v.js +1 -0
  181. package/dist/ui/assets/nginx-BpAMiNFr.js +1 -0
  182. package/dist/ui/assets/night-owl-C39BiMTA.js +1 -0
  183. package/dist/ui/assets/night-owl-light-CMTm3GFP.js +1 -0
  184. package/dist/ui/assets/nim-BIad80T-.js +1 -0
  185. package/dist/ui/assets/nix-CwoSXNpI.js +1 -0
  186. package/dist/ui/assets/nord-Ddv68eIx.js +1 -0
  187. package/dist/ui/assets/nushell-Cz2AlsmD.js +1 -0
  188. package/dist/ui/assets/objective-c-DXmwc3jG.js +1 -0
  189. package/dist/ui/assets/objective-cpp-CLxacb5B.js +1 -0
  190. package/dist/ui/assets/ocaml-C0hk2d4L.js +1 -0
  191. package/dist/ui/assets/odin-BBf5iR-q.js +1 -0
  192. package/dist/ui/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  193. package/dist/ui/assets/one-light-C3Wv6jpd.js +1 -0
  194. package/dist/ui/assets/openscad-C4EeE6gA.js +1 -0
  195. package/dist/ui/assets/pascal-D93ZcfNL.js +1 -0
  196. package/dist/ui/assets/perl-NvoQZIq0.js +1 -0
  197. package/dist/ui/assets/php-R6g_5hLQ.js +1 -0
  198. package/dist/ui/assets/pkl-u5AG7uiY.js +1 -0
  199. package/dist/ui/assets/plastic-3e1v2bzS.js +1 -0
  200. package/dist/ui/assets/plsql-ChMvpjG-.js +1 -0
  201. package/dist/ui/assets/po-BTJTHyun.js +1 -0
  202. package/dist/ui/assets/poimandres-CS3Unz2-.js +1 -0
  203. package/dist/ui/assets/polar-C0HS_06l.js +1 -0
  204. package/dist/ui/assets/postcss-CXtECtnM.js +1 -0
  205. package/dist/ui/assets/powerquery-CEu0bR-o.js +1 -0
  206. package/dist/ui/assets/powershell-Dpen1YoG.js +1 -0
  207. package/dist/ui/assets/prisma-Dd19v3D-.js +1 -0
  208. package/dist/ui/assets/prolog-CbFg5uaA.js +1 -0
  209. package/dist/ui/assets/proto-C7zT0LnQ.js +1 -0
  210. package/dist/ui/assets/pug-DKIMFp6K.js +1 -0
  211. package/dist/ui/assets/puppet-BMWR74SV.js +1 -0
  212. package/dist/ui/assets/purescript-CklMAg4u.js +1 -0
  213. package/dist/ui/assets/python-B6aJPvgy.js +1 -0
  214. package/dist/ui/assets/qml-3beO22l8.js +1 -0
  215. package/dist/ui/assets/qmldir-C8lEn-DE.js +1 -0
  216. package/dist/ui/assets/qss-IeuSbFQv.js +1 -0
  217. package/dist/ui/assets/r-Dspwwk_N.js +1 -0
  218. package/dist/ui/assets/racket-BqYA7rlc.js +1 -0
  219. package/dist/ui/assets/raku-DXvB9xmW.js +1 -0
  220. package/dist/ui/assets/razor-BDqjjVU7.js +1 -0
  221. package/dist/ui/assets/red-bN70gL4F.js +1 -0
  222. package/dist/ui/assets/reg-C-SQnVFl.js +1 -0
  223. package/dist/ui/assets/regexp-CDVJQ6XC.js +1 -0
  224. package/dist/ui/assets/rel-C3B-1QV4.js +1 -0
  225. package/dist/ui/assets/riscv-BM1_JUlF.js +1 -0
  226. package/dist/ui/assets/ron-D8l8udqQ.js +1 -0
  227. package/dist/ui/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  228. package/dist/ui/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  229. package/dist/ui/assets/rose-pine-qdsjHGoJ.js +1 -0
  230. package/dist/ui/assets/rosmsg-BJDFO7_C.js +1 -0
  231. package/dist/ui/assets/rst-CRjBmOyv.js +1 -0
  232. package/dist/ui/assets/ruby-Wjq7vjNf.js +1 -0
  233. package/dist/ui/assets/rust-B1yitclQ.js +1 -0
  234. package/dist/ui/assets/sas-cz2c8ADy.js +1 -0
  235. package/dist/ui/assets/sass-Cj5Yp3dK.js +1 -0
  236. package/dist/ui/assets/scala-C151Ov-r.js +1 -0
  237. package/dist/ui/assets/scheme-C98Dy4si.js +1 -0
  238. package/dist/ui/assets/scss-D5BDwBP9.js +1 -0
  239. package/dist/ui/assets/sdbl-DVxCFoDh.js +1 -0
  240. package/dist/ui/assets/shaderlab-Dg9Lc6iA.js +1 -0
  241. package/dist/ui/assets/shellscript-Yzrsuije.js +1 -0
  242. package/dist/ui/assets/shellsession-BADoaaVG.js +1 -0
  243. package/dist/ui/assets/slack-dark-BthQWCQV.js +1 -0
  244. package/dist/ui/assets/slack-ochin-DqwNpetd.js +1 -0
  245. package/dist/ui/assets/smalltalk-BERRCDM3.js +1 -0
  246. package/dist/ui/assets/snazzy-light-Bw305WKR.js +1 -0
  247. package/dist/ui/assets/solarized-dark-DXbdFlpD.js +1 -0
  248. package/dist/ui/assets/solarized-light-L9t79GZl.js +1 -0
  249. package/dist/ui/assets/solidity-rGO070M0.js +1 -0
  250. package/dist/ui/assets/soy-8wufbnw4.js +1 -0
  251. package/dist/ui/assets/sparql-rVzFXLq3.js +1 -0
  252. package/dist/ui/assets/splunk-BtCnVYZw.js +1 -0
  253. package/dist/ui/assets/sql-BLtJtn59.js +1 -0
  254. package/dist/ui/assets/ssh-config-_ykCGR6B.js +1 -0
  255. package/dist/ui/assets/stata-BH5u7GGu.js +1 -0
  256. package/dist/ui/assets/stylus-BEDo0Tqx.js +1 -0
  257. package/dist/ui/assets/surrealql-Bq5Q-fJD.js +1 -0
  258. package/dist/ui/assets/svelte-Cy7k_4gC.js +1 -0
  259. package/dist/ui/assets/swift-D82vCrfD.js +1 -0
  260. package/dist/ui/assets/synthwave-84-CbfX1IO0.js +1 -0
  261. package/dist/ui/assets/system-verilog-CnnmHF94.js +1 -0
  262. package/dist/ui/assets/systemd-4A_iFExJ.js +1 -0
  263. package/dist/ui/assets/talonscript-CkByrt1z.js +1 -0
  264. package/dist/ui/assets/tasl-QIJgUcNo.js +1 -0
  265. package/dist/ui/assets/tcl-dwOrl1Do.js +1 -0
  266. package/dist/ui/assets/templ-DhtptRzy.js +1 -0
  267. package/dist/ui/assets/terraform-BETggiCN.js +1 -0
  268. package/dist/ui/assets/tex-idrVyKtj.js +1 -0
  269. package/dist/ui/assets/tokyo-night-hegEt444.js +1 -0
  270. package/dist/ui/assets/toml-vGWfd6FD.js +1 -0
  271. package/dist/ui/assets/ts-tags-DQrlYJgV.js +1 -0
  272. package/dist/ui/assets/tsv-B_m7g4N7.js +1 -0
  273. package/dist/ui/assets/tsx-COt5Ahok.js +1 -0
  274. package/dist/ui/assets/turtle-BsS91CYL.js +1 -0
  275. package/dist/ui/assets/twig-xg9kU7Mw.js +1 -0
  276. package/dist/ui/assets/typescript-BPQ3VLAy.js +1 -0
  277. package/dist/ui/assets/typespec-CAFt9gP4.js +1 -0
  278. package/dist/ui/assets/typst-DHCkPAjA.js +1 -0
  279. package/dist/ui/assets/v-BcVCzyr7.js +1 -0
  280. package/dist/ui/assets/vala-CsfeWuGM.js +1 -0
  281. package/dist/ui/assets/vb-D17OF-Vu.js +1 -0
  282. package/dist/ui/assets/verilog-BQ8w6xss.js +1 -0
  283. package/dist/ui/assets/vesper-DU1UobuO.js +1 -0
  284. package/dist/ui/assets/vhdl-CeAyd5Ju.js +1 -0
  285. package/dist/ui/assets/viml-CJc9bBzg.js +1 -0
  286. package/dist/ui/assets/vitesse-black-Bkuqu6BP.js +1 -0
  287. package/dist/ui/assets/vitesse-dark-D0r3Knsf.js +1 -0
  288. package/dist/ui/assets/vitesse-light-CVO1_9PV.js +1 -0
  289. package/dist/ui/assets/vue-D2xRrEX4.js +1 -0
  290. package/dist/ui/assets/vue-html-AaS7Mt5G.js +1 -0
  291. package/dist/ui/assets/vue-vine-BoDAl6tE.js +1 -0
  292. package/dist/ui/assets/vyper-CDx5xZoG.js +1 -0
  293. package/dist/ui/assets/wasm-CG6Dc4jp.js +1 -0
  294. package/dist/ui/assets/wasm-MzD3tlZU.js +1 -0
  295. package/dist/ui/assets/wenyan-BV7otONQ.js +1 -0
  296. package/dist/ui/assets/wgsl-Dx-B1_4e.js +1 -0
  297. package/dist/ui/assets/wikitext-BhOHFoWU.js +1 -0
  298. package/dist/ui/assets/wit-5i3qLPDT.js +1 -0
  299. package/dist/ui/assets/wolfram-lXgVvXCa.js +1 -0
  300. package/dist/ui/assets/xml-sdJ4AIDG.js +1 -0
  301. package/dist/ui/assets/xsl-CtQFsRM5.js +1 -0
  302. package/dist/ui/assets/yaml-Buea-lGh.js +1 -0
  303. package/dist/ui/assets/zenscript-DVFEvuxE.js +1 -0
  304. package/dist/ui/assets/zig-VOosw3JB.js +1 -0
  305. package/{packages → dist}/ui/index.html +2 -1
  306. package/package.json +37 -18
  307. package/.claude/settings.local.json +0 -11
  308. package/LICENSE +0 -21
  309. package/README.md +0 -71
  310. package/development.md +0 -156
  311. package/packages/cli/build.js +0 -38
  312. package/packages/cli/package.json +0 -51
  313. package/packages/cli/src/agent.ts +0 -187
  314. package/packages/cli/src/db.ts +0 -58
  315. package/packages/cli/src/index.ts +0 -196
  316. package/packages/cli/src/review-routes.ts +0 -150
  317. package/packages/cli/src/server.ts +0 -370
  318. package/packages/cli/src/session.ts +0 -48
  319. package/packages/cli/src/threads.ts +0 -238
  320. package/packages/cli/tsconfig.json +0 -13
  321. package/packages/git/package.json +0 -24
  322. package/packages/git/src/commits.ts +0 -28
  323. package/packages/git/src/diff.ts +0 -97
  324. package/packages/git/src/exec.ts +0 -35
  325. package/packages/git/src/index.ts +0 -5
  326. package/packages/git/src/repo.ts +0 -63
  327. package/packages/git/src/status.ts +0 -9
  328. package/packages/git/src/types.ts +0 -12
  329. package/packages/git/tsconfig.json +0 -9
  330. package/packages/parser/package.json +0 -26
  331. package/packages/parser/src/index.ts +0 -12
  332. package/packages/parser/src/parse.ts +0 -299
  333. package/packages/parser/src/types.ts +0 -52
  334. package/packages/parser/src/word-diff.ts +0 -155
  335. package/packages/parser/tests/fixtures/binary-deleted.diff +0 -4
  336. package/packages/parser/tests/fixtures/binary-file.diff +0 -4
  337. package/packages/parser/tests/fixtures/binary-modified.diff +0 -3
  338. package/packages/parser/tests/fixtures/copied-file.diff +0 -12
  339. package/packages/parser/tests/fixtures/deleted-file.diff +0 -9
  340. package/packages/parser/tests/fixtures/empty.diff +0 -0
  341. package/packages/parser/tests/fixtures/hunk-with-context.diff +0 -12
  342. package/packages/parser/tests/fixtures/mode-change-with-content.diff +0 -10
  343. package/packages/parser/tests/fixtures/mode-change.diff +0 -3
  344. package/packages/parser/tests/fixtures/multi-file.diff +0 -22
  345. package/packages/parser/tests/fixtures/new-file.diff +0 -9
  346. package/packages/parser/tests/fixtures/no-newline.diff +0 -10
  347. package/packages/parser/tests/fixtures/renamed-file.diff +0 -12
  348. package/packages/parser/tests/fixtures/single-file-additions.diff +0 -11
  349. package/packages/parser/tests/fixtures/single-file-deletions.diff +0 -11
  350. package/packages/parser/tests/fixtures/single-file-mixed.diff +0 -15
  351. package/packages/parser/tests/fixtures/single-file-multi-hunk.diff +0 -22
  352. package/packages/parser/tests/fixtures/spaces-in-path.diff +0 -9
  353. package/packages/parser/tests/fixtures/submodule.diff +0 -7
  354. package/packages/parser/tests/fixtures/unicode-content.diff +0 -11
  355. package/packages/parser/tests/parse.test.ts +0 -312
  356. package/packages/parser/tests/word-diff-integration.test.ts +0 -52
  357. package/packages/parser/tests/word-diff.test.ts +0 -121
  358. package/packages/parser/tsconfig.json +0 -10
  359. package/packages/skills/diffity-resolve/SKILL.md +0 -55
  360. package/packages/skills/diffity-review/SKILL.md +0 -74
  361. package/packages/skills/diffity-start/SKILL.md +0 -25
  362. package/packages/ui/package.json +0 -35
  363. package/packages/ui/src/app.tsx +0 -14
  364. package/packages/ui/src/components/comment-bubble.tsx +0 -78
  365. package/packages/ui/src/components/comment-form-row.tsx +0 -58
  366. package/packages/ui/src/components/comment-form.tsx +0 -78
  367. package/packages/ui/src/components/comment-line-number.tsx +0 -60
  368. package/packages/ui/src/components/comment-thread.tsx +0 -209
  369. package/packages/ui/src/components/commit-list.tsx +0 -100
  370. package/packages/ui/src/components/dashboard.tsx +0 -84
  371. package/packages/ui/src/components/diff-line.tsx +0 -90
  372. package/packages/ui/src/components/diff-page.tsx +0 -332
  373. package/packages/ui/src/components/diff-stats.tsx +0 -20
  374. package/packages/ui/src/components/diff-view.tsx +0 -278
  375. package/packages/ui/src/components/expand-row.tsx +0 -45
  376. package/packages/ui/src/components/file-block.tsx +0 -536
  377. package/packages/ui/src/components/file-tree-item.tsx +0 -84
  378. package/packages/ui/src/components/file-tree.tsx +0 -72
  379. package/packages/ui/src/components/general-comments.tsx +0 -174
  380. package/packages/ui/src/components/hunk-block-split.tsx +0 -357
  381. package/packages/ui/src/components/hunk-block.tsx +0 -161
  382. package/packages/ui/src/components/hunk-header.tsx +0 -144
  383. package/packages/ui/src/components/hunk-with-gap.tsx +0 -113
  384. package/packages/ui/src/components/icons/arrow-down-icon.tsx +0 -7
  385. package/packages/ui/src/components/icons/arrow-up-icon.tsx +0 -7
  386. package/packages/ui/src/components/icons/check-circle-icon.tsx +0 -8
  387. package/packages/ui/src/components/icons/check-icon.tsx +0 -9
  388. package/packages/ui/src/components/icons/chevron-down-icon.tsx +0 -11
  389. package/packages/ui/src/components/icons/chevron-icon.tsx +0 -20
  390. package/packages/ui/src/components/icons/chevron-up-down-icon.tsx +0 -7
  391. package/packages/ui/src/components/icons/chevron-up-icon.tsx +0 -11
  392. package/packages/ui/src/components/icons/comment-icon.tsx +0 -9
  393. package/packages/ui/src/components/icons/copy-icon.tsx +0 -10
  394. package/packages/ui/src/components/icons/eye-icon.tsx +0 -10
  395. package/packages/ui/src/components/icons/eye-off-icon.tsx +0 -12
  396. package/packages/ui/src/components/icons/file-icon.tsx +0 -7
  397. package/packages/ui/src/components/icons/folder-icon.tsx +0 -19
  398. package/packages/ui/src/components/icons/git-branch-icon.tsx +0 -13
  399. package/packages/ui/src/components/icons/keyboard-icon.tsx +0 -13
  400. package/packages/ui/src/components/icons/moon-icon.tsx +0 -9
  401. package/packages/ui/src/components/icons/plus-icon.tsx +0 -9
  402. package/packages/ui/src/components/icons/search-icon.tsx +0 -10
  403. package/packages/ui/src/components/icons/sidebar-icon.tsx +0 -10
  404. package/packages/ui/src/components/icons/spinner.tsx +0 -7
  405. package/packages/ui/src/components/icons/split-view-icon.tsx +0 -10
  406. package/packages/ui/src/components/icons/sun-icon.tsx +0 -17
  407. package/packages/ui/src/components/icons/trash-icon.tsx +0 -11
  408. package/packages/ui/src/components/icons/undo-icon.tsx +0 -9
  409. package/packages/ui/src/components/icons/unified-view-icon.tsx +0 -12
  410. package/packages/ui/src/components/icons/x-icon.tsx +0 -10
  411. package/packages/ui/src/components/line-number-cell.tsx +0 -18
  412. package/packages/ui/src/components/markdown-content.tsx +0 -139
  413. package/packages/ui/src/components/orphaned-threads.tsx +0 -80
  414. package/packages/ui/src/components/overview-file-list.tsx +0 -57
  415. package/packages/ui/src/components/render-expansion-rows.tsx +0 -47
  416. package/packages/ui/src/components/shortcut-modal.tsx +0 -93
  417. package/packages/ui/src/components/sidebar.tsx +0 -80
  418. package/packages/ui/src/components/skeleton.tsx +0 -9
  419. package/packages/ui/src/components/stale-diff-banner.tsx +0 -21
  420. package/packages/ui/src/components/summary-bar.tsx +0 -39
  421. package/packages/ui/src/components/toolbar.tsx +0 -246
  422. package/packages/ui/src/components/ui/badge.tsx +0 -17
  423. package/packages/ui/src/components/ui/confirm-dialog.tsx +0 -52
  424. package/packages/ui/src/components/ui/icon-button.tsx +0 -23
  425. package/packages/ui/src/components/ui/status-badge.tsx +0 -57
  426. package/packages/ui/src/components/ui/thread-badge.tsx +0 -35
  427. package/packages/ui/src/components/word-diff.tsx +0 -126
  428. package/packages/ui/src/hooks/use-comment-actions.ts +0 -97
  429. package/packages/ui/src/hooks/use-commits.ts +0 -12
  430. package/packages/ui/src/hooks/use-copy.ts +0 -18
  431. package/packages/ui/src/hooks/use-diff-staleness.ts +0 -58
  432. package/packages/ui/src/hooks/use-diff.ts +0 -12
  433. package/packages/ui/src/hooks/use-highlighter.ts +0 -190
  434. package/packages/ui/src/hooks/use-info.ts +0 -12
  435. package/packages/ui/src/hooks/use-keyboard.ts +0 -55
  436. package/packages/ui/src/hooks/use-line-selection.ts +0 -157
  437. package/packages/ui/src/hooks/use-overview.ts +0 -12
  438. package/packages/ui/src/hooks/use-review-threads.ts +0 -12
  439. package/packages/ui/src/hooks/use-search-params.ts +0 -26
  440. package/packages/ui/src/hooks/use-theme.ts +0 -34
  441. package/packages/ui/src/hooks/use-thread-navigation.ts +0 -43
  442. package/packages/ui/src/lib/api.ts +0 -232
  443. package/packages/ui/src/lib/cn.ts +0 -6
  444. package/packages/ui/src/lib/context-expansion.ts +0 -122
  445. package/packages/ui/src/lib/diff-utils.ts +0 -268
  446. package/packages/ui/src/lib/dom-utils.ts +0 -13
  447. package/packages/ui/src/lib/file-tree.ts +0 -122
  448. package/packages/ui/src/lib/query-client.ts +0 -10
  449. package/packages/ui/src/lib/render-content.tsx +0 -23
  450. package/packages/ui/src/lib/syntax-token.ts +0 -4
  451. package/packages/ui/src/main.tsx +0 -14
  452. package/packages/ui/src/queries/commits.ts +0 -9
  453. package/packages/ui/src/queries/diff.ts +0 -9
  454. package/packages/ui/src/queries/file.ts +0 -10
  455. package/packages/ui/src/queries/info.ts +0 -9
  456. package/packages/ui/src/queries/overview.ts +0 -9
  457. package/packages/ui/src/styles/app.css +0 -178
  458. package/packages/ui/src/types/comment.ts +0 -61
  459. package/packages/ui/src/vite-env.d.ts +0 -1
  460. package/packages/ui/tests/context-expansion.test.ts +0 -279
  461. package/packages/ui/tests/diff-utils.test.ts +0 -409
  462. package/packages/ui/tsconfig.json +0 -14
  463. package/packages/ui/vite.config.ts +0 -23
  464. package/scripts/build-skills.ts +0 -26
  465. package/scripts/build.ts +0 -15
  466. package/scripts/dev.ts +0 -32
  467. package/scripts/lib/transformers/claude-code.ts +0 -11
  468. package/scripts/lib/transformers/codex.ts +0 -17
  469. package/scripts/lib/transformers/cursor.ts +0 -17
  470. package/scripts/lib/transformers/index.ts +0 -3
  471. package/scripts/lib/utils.ts +0 -70
  472. package/scripts/link-dev.ts +0 -54
  473. package/skills/diffity-resolve/SKILL.md +0 -55
  474. package/skills/diffity-review/SKILL.md +0 -74
  475. package/skills/diffity-start/SKILL.md +0 -27
  476. package/tsconfig.json +0 -22
  477. /package/{packages/ui/public → dist/ui}/brand.svg +0 -0
  478. /package/{packages/ui/public → dist/ui}/favicon.svg +0 -0
@@ -1,139 +0,0 @@
1
- import { useMemo } from 'react';
2
- import ReactMarkdown from 'react-markdown';
3
- import remarkGfm from 'remark-gfm';
4
- import type { Components } from 'react-markdown';
5
- import { useHighlighter } from '../hooks/use-highlighter';
6
- import { getTheme } from '../hooks/use-theme';
7
-
8
- interface MarkdownContentProps {
9
- content: string;
10
- }
11
-
12
- export function MarkdownContent(props: MarkdownContentProps) {
13
- const { content } = props;
14
- const { highlight, ready } = useHighlighter();
15
-
16
- const components = useMemo<Components>(() => ({
17
- p({ children }) {
18
- return <p className="mb-1.5 last:mb-0">{children}</p>;
19
- },
20
- strong({ children }) {
21
- return <strong className="font-semibold text-text">{children}</strong>;
22
- },
23
- em({ children }) {
24
- return <em>{children}</em>;
25
- },
26
- a({ href, children }) {
27
- return (
28
- <a href={href} className="text-accent hover:underline" target="_blank" rel="noopener noreferrer">
29
- {children}
30
- </a>
31
- );
32
- },
33
- ul({ children }) {
34
- return <ul className="list-disc pl-4 mb-1.5 last:mb-0">{children}</ul>;
35
- },
36
- ol({ children }) {
37
- return <ol className="list-decimal pl-4 mb-1.5 last:mb-0">{children}</ol>;
38
- },
39
- li({ children }) {
40
- return <li className="mb-0.5">{children}</li>;
41
- },
42
- blockquote({ children }) {
43
- return (
44
- <blockquote className="border-l-2 border-border pl-3 text-text-muted mb-1.5 last:mb-0">
45
- {children}
46
- </blockquote>
47
- );
48
- },
49
- pre({ children }) {
50
- return <div className="mb-1.5 last:mb-0">{children}</div>;
51
- },
52
- code({ className, children }) {
53
- const match = /language-(\w+)/.exec(className || '');
54
- const lang = match ? match[1] : null;
55
- const codeString = String(children).replace(/\n$/, '');
56
-
57
- if (!lang) {
58
- return (
59
- <code className="px-1 py-0.5 rounded bg-bg-tertiary text-[0.9em] font-mono">
60
- {children}
61
- </code>
62
- );
63
- }
64
-
65
- let highlighted: { text: string; color?: string }[][] | null = null;
66
- if (ready && lang) {
67
- const result = highlight(codeString, `file.${lang}`, getTheme());
68
- if (result) {
69
- highlighted = result.map((line) => line.tokens);
70
- }
71
- }
72
-
73
- return (
74
- <div className="rounded-md border border-border overflow-hidden">
75
- <div className="bg-bg-secondary px-3 py-1 border-b border-border">
76
- <span className="text-[10px] text-text-muted font-mono">{lang}</span>
77
- </div>
78
- <pre className="px-3 py-2 overflow-x-auto bg-bg text-xs leading-5 font-mono">
79
- {highlighted ? (
80
- highlighted.map((tokens, lineIdx) => (
81
- <div key={lineIdx}>
82
- {tokens.map((token, tokenIdx) => (
83
- <span key={tokenIdx} style={token.color ? { color: token.color } : undefined}>
84
- {token.text}
85
- </span>
86
- ))}
87
- </div>
88
- ))
89
- ) : (
90
- <code>{codeString}</code>
91
- )}
92
- </pre>
93
- </div>
94
- );
95
- },
96
- hr() {
97
- return <hr className="border-border my-2" />;
98
- },
99
- h1({ children }) {
100
- return <p className="font-semibold text-text mb-1">{children}</p>;
101
- },
102
- h2({ children }) {
103
- return <p className="font-semibold text-text mb-1">{children}</p>;
104
- },
105
- h3({ children }) {
106
- return <p className="font-semibold text-text mb-1">{children}</p>;
107
- },
108
- del({ children }) {
109
- return <del className="text-text-muted">{children}</del>;
110
- },
111
- table({ children }) {
112
- return (
113
- <table className="border-collapse border border-border text-xs my-1.5">
114
- {children}
115
- </table>
116
- );
117
- },
118
- th({ children }) {
119
- return (
120
- <th className="border border-border px-2 py-1 bg-bg-secondary text-left font-medium">
121
- {children}
122
- </th>
123
- );
124
- },
125
- td({ children }) {
126
- return (
127
- <td className="border border-border px-2 py-1">{children}</td>
128
- );
129
- },
130
- }), [highlight, ready]);
131
-
132
- return (
133
- <div className="markdown-body">
134
- <ReactMarkdown remarkPlugins={[remarkGfm]} components={components}>
135
- {content}
136
- </ReactMarkdown>
137
- </div>
138
- );
139
- }
@@ -1,80 +0,0 @@
1
- import { useState } from 'react';
2
- import type { CommentThread as CommentThreadType } from '../types/comment';
3
- import { CommentBubble } from './comment-bubble';
4
- import { CommentIcon } from './icons/comment-icon';
5
- import { ChevronIcon } from './icons/chevron-icon';
6
- import { TrashIcon } from './icons/trash-icon';
7
- import { ThreadBadge } from './ui/thread-badge';
8
-
9
- interface OrphanedThreadsProps {
10
- threads: CommentThreadType[];
11
- onDeleteComment: (threadId: string, commentId: string) => void;
12
- onDeleteThread: (threadId: string) => void;
13
- }
14
-
15
- export function OrphanedThreads(props: OrphanedThreadsProps) {
16
- const { threads, onDeleteComment, onDeleteThread } = props;
17
- const [isExpanded, setIsExpanded] = useState(false);
18
-
19
- if (threads.length === 0) {
20
- return null;
21
- }
22
-
23
- return (
24
- <div className="border-b border-border bg-bg-secondary/50">
25
- <button
26
- onClick={() => setIsExpanded(!isExpanded)}
27
- className="flex items-center gap-2 w-full px-4 py-2 text-xs text-text-muted hover:text-text-secondary transition-colors cursor-pointer"
28
- >
29
- <ChevronIcon expanded={isExpanded} />
30
- <CommentIcon className="w-3.5 h-3.5" />
31
- <span>
32
- {threads.length} outdated comment{threads.length !== 1 ? 's' : ''}
33
- </span>
34
- <ThreadBadge variant="outdated" />
35
- </button>
36
- {isExpanded && (
37
- <div className="px-4 pb-3 space-y-2">
38
- {threads.map((thread) => {
39
- const lineLabel = thread.startLine === thread.endLine
40
- ? `Line ${thread.startLine}`
41
- : `Lines ${thread.startLine}–${thread.endLine}`;
42
-
43
- return (
44
- <div key={thread.id} className="border border-border rounded-lg overflow-hidden max-w-[700px]">
45
- <div className="flex items-center justify-between px-3 py-1.5 bg-bg-secondary border-b border-border">
46
- <div className="flex items-center gap-2">
47
- <span className="text-[11px] text-text-muted font-mono">{lineLabel}</span>
48
- <ThreadBadge variant="outdated" />
49
- {(thread.status === 'resolved' || thread.status === 'dismissed') && (
50
- <ThreadBadge variant={thread.status} />
51
- )}
52
- </div>
53
- <button
54
- onClick={() => onDeleteThread(thread.id)}
55
- className="text-text-muted hover:text-deleted transition-colors cursor-pointer"
56
- title="Delete thread"
57
- >
58
- <TrashIcon className="w-3.5 h-3.5" />
59
- </button>
60
- </div>
61
- {thread.anchorContent && (
62
- <pre className="px-3 py-2 text-xs font-mono text-text-muted bg-bg-tertiary/50 border-b border-border overflow-x-auto whitespace-pre max-h-24 overflow-y-auto">{thread.anchorContent}</pre>
63
- )}
64
- <div>
65
- {thread.comments.map((comment) => (
66
- <CommentBubble
67
- key={comment.id}
68
- comment={comment}
69
- onDelete={() => onDeleteComment(thread.id, comment.id)}
70
- />
71
- ))}
72
- </div>
73
- </div>
74
- );
75
- })}
76
- </div>
77
- )}
78
- </div>
79
- );
80
- }
@@ -1,57 +0,0 @@
1
- import type { OverviewFile } from '../lib/api';
2
-
3
- interface OverviewFileListProps {
4
- files: OverviewFile[];
5
- onViewAll: () => void;
6
- }
7
-
8
- const STATUS_COLORS: Record<string, string> = {
9
- staged: 'text-added',
10
- modified: 'text-changed',
11
- added: 'text-added',
12
- };
13
-
14
- const STATUS_LABELS: Record<string, string> = {
15
- staged: 'S',
16
- modified: 'M',
17
- added: 'A',
18
- };
19
-
20
- export function OverviewFileList(props: OverviewFileListProps) {
21
- const { files, onViewAll } = props;
22
-
23
- if (files.length === 0) {
24
- return null;
25
- }
26
-
27
- return (
28
- <div className="border border-border rounded-lg bg-bg-secondary overflow-hidden">
29
- <div className="flex items-center justify-between px-4 py-3 border-b border-border">
30
- <div className="flex items-center gap-2">
31
- <h3 className="font-medium text-text">Changed files</h3>
32
- <span className="px-2 py-0.5 text-xs font-mono rounded-full bg-bg-tertiary text-text-secondary">
33
- {files.length}
34
- </span>
35
- </div>
36
- <button
37
- onClick={onViewAll}
38
- className="text-xs font-medium text-accent hover:text-accent/80 transition-colors"
39
- >
40
- View diff
41
- </button>
42
- </div>
43
- <ul className="divide-y divide-border">
44
- {files.map((file) => (
45
- <li key={file.path} className="flex items-center gap-3 px-4 py-2">
46
- <span className={`text-xs font-mono font-bold w-4 shrink-0 ${STATUS_COLORS[file.status]}`}>
47
- {STATUS_LABELS[file.status]}
48
- </span>
49
- <span className="text-sm font-mono text-text-secondary truncate">
50
- {file.path}
51
- </span>
52
- </li>
53
- ))}
54
- </ul>
55
- </div>
56
- );
57
- }
@@ -1,47 +0,0 @@
1
- import type { DiffLine as DiffLineType } from '@diffity/parser';
2
- import type { HighlightedTokens } from '../hooks/use-highlighter';
3
- import type { SyntaxToken } from '../lib/syntax-token';
4
- import type { ViewMode } from '../lib/diff-utils';
5
- import type { LineRenderProps } from '../types/comment';
6
- import { renderLineWithComments } from './hunk-block';
7
- import { renderSplitRows } from './hunk-block-split';
8
-
9
- export function buildExpansionSyntaxMap(
10
- lines: DiffLineType[],
11
- highlightLine?: (code: string) => HighlightedTokens[] | null,
12
- ): Map<string, SyntaxToken[]> {
13
- const map = new Map<string, SyntaxToken[]>();
14
- if (!highlightLine) {
15
- return map;
16
- }
17
- for (const line of lines) {
18
- if (!line.content) {
19
- continue;
20
- }
21
- const highlighted = highlightLine(line.content);
22
- if (!highlighted || highlighted.length === 0) {
23
- continue;
24
- }
25
- const key = `${line.type}-${line.type === 'delete' ? line.oldLineNumber : line.newLineNumber}`;
26
- map.set(key, highlighted[0].tokens);
27
- }
28
- return map;
29
- }
30
-
31
- export function renderExpansionRows(
32
- lines: DiffLineType[],
33
- viewMode: ViewMode,
34
- keyPrefix: string,
35
- syntaxMap: Map<string, SyntaxToken[]> | undefined,
36
- props: LineRenderProps,
37
- ): React.ReactNode[] {
38
- if (viewMode === 'split') {
39
- return renderSplitRows(lines, true, syntaxMap, keyPrefix, props);
40
- }
41
-
42
- const result: React.ReactNode[] = [];
43
- for (let i = 0; i < lines.length; i++) {
44
- result.push(...renderLineWithComments(lines[i], i, true, syntaxMap, props));
45
- }
46
- return result;
47
- }
@@ -1,93 +0,0 @@
1
- import { useEffect, useRef } from 'react';
2
- import { XIcon } from './icons/x-icon';
3
-
4
- interface ShortcutModalProps {
5
- onClose: () => void;
6
- }
7
-
8
- const shortcuts = [
9
- {
10
- category: 'Navigation',
11
- items: [
12
- { key: 'j', description: 'Next file' },
13
- { key: 'k', description: 'Previous file' },
14
- { key: 'n', description: 'Next changed hunk' },
15
- { key: 'p', description: 'Previous changed hunk' },
16
- ],
17
- },
18
- {
19
- category: 'View',
20
- items: [
21
- { key: 'u', description: 'Unified view' },
22
- { key: 's', description: 'Split view' },
23
- { key: 'x', description: 'Collapse/expand file' },
24
- { key: 'Shift+x', description: 'Collapse/expand all files' },
25
- { key: 'r', description: 'Toggle file as viewed' },
26
- ],
27
- },
28
- {
29
- category: 'Other',
30
- items: [
31
- { key: '/', description: 'Focus search' },
32
- { key: '?', description: 'Show shortcuts' },
33
- { key: 'Esc', description: 'Close modal / clear' },
34
- ],
35
- },
36
- ];
37
-
38
- export function ShortcutModal(props: ShortcutModalProps) {
39
- const { onClose } = props;
40
- const dialogRef = useRef<HTMLDialogElement>(null);
41
-
42
- useEffect(() => {
43
- const dialog = dialogRef.current;
44
- if (!dialog) {
45
- return;
46
- }
47
-
48
- dialog.showModal();
49
- return () => dialog.close();
50
- }, []);
51
-
52
- return (
53
- <dialog
54
- ref={dialogRef}
55
- className="bg-bg text-text border border-border rounded-xl shadow-md w-[420px] max-w-[90vw] max-h-[80vh] overflow-y-auto backdrop:bg-black/60 backdrop:backdrop-blur-sm p-0 m-auto fixed inset-0 h-fit"
56
- onClose={onClose}
57
- onClick={(e) => {
58
- if (e.target === dialogRef.current) {
59
- onClose();
60
- }
61
- }}
62
- >
63
- <div className="flex items-center justify-between px-5 py-3.5 border-b border-border">
64
- <h2 className="text-sm font-semibold">Keyboard shortcuts</h2>
65
- <button
66
- className="p-1 rounded-md text-text-muted hover:text-text hover:bg-hover cursor-pointer"
67
- onClick={onClose}
68
- >
69
- <XIcon className="w-4 h-4" />
70
- </button>
71
- </div>
72
- <div className="px-5 py-4">
73
- {shortcuts.map(group => (
74
- <div key={group.category} className="mb-5 last:mb-0">
75
- <h3 className="text-[10px] font-semibold text-text-muted mb-2.5 uppercase tracking-widest">
76
- {group.category}
77
- </h3>
78
- <div className="flex flex-col gap-1.5">
79
- {group.items.map(item => (
80
- <div key={item.key} className="flex items-center justify-between py-0.5">
81
- <span className="text-xs text-text-secondary">{item.description}</span>
82
- <kbd className="inline-flex items-center justify-center min-w-6 h-5 px-1.5 bg-bg-secondary border border-border rounded font-mono text-[11px] text-text-muted shadow-[inset_0_-1px_0_var(--color-border)]">
83
- {item.key}
84
- </kbd>
85
- </div>
86
- ))}
87
- </div>
88
- </div>
89
- ))}
90
- </div>
91
- </dialog>
92
- );
93
- }
@@ -1,80 +0,0 @@
1
- import { useState } from 'react';
2
- import type { DiffFile } from '@diffity/parser';
3
- import { FileTree } from './file-tree';
4
- import { SidebarIcon } from './icons/sidebar-icon';
5
- import { SearchIcon } from './icons/search-icon';
6
- import { XIcon } from './icons/x-icon';
7
-
8
- interface SidebarProps {
9
- files: DiffFile[];
10
- activeFile: string | null;
11
- reviewedFiles: Set<string>;
12
- filesWithComments: Set<string>;
13
- onFileClick: (path: string) => void;
14
- }
15
-
16
- export function Sidebar(props: SidebarProps) {
17
- const { files, activeFile, reviewedFiles, filesWithComments, onFileClick } = props;
18
- const [search, setSearch] = useState('');
19
- const [collapsed, setCollapsed] = useState(false);
20
-
21
- if (collapsed) {
22
- return (
23
- <div className="w-10 min-w-10 border-r border-border bg-bg-secondary flex items-start justify-center pt-3">
24
- <button
25
- className="p-1.5 rounded-md text-text-muted hover:text-text hover:bg-hover cursor-pointer"
26
- onClick={() => setCollapsed(false)}
27
- title="Show sidebar"
28
- >
29
- <SidebarIcon className="w-4 h-4" />
30
- </button>
31
- </div>
32
- );
33
- }
34
-
35
- return (
36
- <aside className="w-72 min-w-72 border-r border-border bg-bg-secondary flex flex-col overflow-hidden">
37
- <div className="flex items-center justify-between px-3 py-2.5 border-b border-border">
38
- <span className="text-xs font-medium text-text-secondary flex items-center gap-2 uppercase tracking-wider">
39
- Files
40
- <span className="inline-flex items-center justify-center min-w-5 h-5 px-1.5 bg-bg-tertiary rounded-full text-[10px] font-semibold text-text-muted">
41
- {reviewedFiles.size > 0 ? `${reviewedFiles.size}/${files.length}` : files.length}
42
- </span>
43
- </span>
44
- <button
45
- className="p-1 rounded-md text-text-muted hover:text-text hover:bg-hover cursor-pointer"
46
- onClick={() => setCollapsed(true)}
47
- title="Hide sidebar"
48
- >
49
- <SidebarIcon className="w-3.5 h-3.5" />
50
- </button>
51
- </div>
52
- <div className="relative px-3 py-2">
53
- <SearchIcon className="absolute left-5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-text-muted pointer-events-none" />
54
- <input
55
- className="w-full pl-7 pr-7 py-1.5 border border-border rounded-md bg-bg text-xs outline-none focus:border-accent focus:ring-1 focus:ring-accent/20 placeholder:text-text-muted"
56
- type="text"
57
- placeholder="Filter files..."
58
- value={search}
59
- onChange={e => setSearch(e.target.value)}
60
- />
61
- {search && (
62
- <button
63
- className="absolute right-5 top-1/2 -translate-y-1/2 text-text-muted hover:text-text cursor-pointer"
64
- onClick={() => setSearch('')}
65
- >
66
- <XIcon className="w-3 h-3" />
67
- </button>
68
- )}
69
- </div>
70
- <FileTree
71
- files={files}
72
- search={search}
73
- activeFile={activeFile}
74
- reviewedFiles={reviewedFiles}
75
- filesWithComments={filesWithComments}
76
- onFileClick={onFileClick}
77
- />
78
- </aside>
79
- );
80
- }
@@ -1,9 +0,0 @@
1
- import { Spinner } from './icons/spinner';
2
-
3
- export function PageLoader() {
4
- return (
5
- <div className="fixed inset-0 z-50 flex items-center justify-center bg-bg/60 backdrop-blur-sm">
6
- <Spinner className="w-8 h-8" />
7
- </div>
8
- );
9
- }
@@ -1,21 +0,0 @@
1
- interface StaleDiffBannerProps {
2
- onRefresh: () => void;
3
- }
4
-
5
- export function StaleDiffBanner(props: StaleDiffBannerProps) {
6
- const { onRefresh } = props;
7
-
8
- return (
9
- <div className="sticky top-0 z-30 flex items-center justify-center gap-3 px-4 py-1.5 bg-accent/10 border-b border-accent/20 text-xs animate-slide-down">
10
- <span className="text-accent font-medium">
11
- Files have changed since this diff was loaded
12
- </span>
13
- <button
14
- onClick={onRefresh}
15
- className="px-2.5 py-0.5 bg-accent text-white rounded-md text-[11px] font-medium hover:bg-accent-hover transition-colors cursor-pointer"
16
- >
17
- Refresh
18
- </button>
19
- </div>
20
- );
21
- }
@@ -1,39 +0,0 @@
1
- import type { ParsedDiff } from '@diffity/parser';
2
- import { DiffStats } from './diff-stats';
3
- import { GitBranchIcon } from './icons/git-branch-icon';
4
-
5
- interface SummaryBarProps {
6
- diff: ParsedDiff | null;
7
- repoName: string | null;
8
- branch: string | null;
9
- description: string | null;
10
- }
11
-
12
- export function SummaryBar(props: SummaryBarProps) {
13
- const { diff, repoName, branch, description } = props;
14
-
15
- return (
16
- <div className="flex items-center justify-between px-4 py-2.5 bg-bg-secondary border-b border-border font-sans text-sm">
17
- <div className="flex items-center gap-2.5">
18
- {repoName && <span className="font-semibold text-text">{repoName}</span>}
19
- {branch && (
20
- <span className="inline-flex items-center gap-1 px-2 py-0.5 bg-diff-hunk-bg text-diff-hunk-text rounded-md font-mono text-xs">
21
- <GitBranchIcon className="w-3 h-3" />
22
- {branch}
23
- </span>
24
- )}
25
- {description && <span className="text-text-secondary">{description}</span>}
26
- </div>
27
- {diff ? (
28
- <div className="flex items-center gap-3">
29
- <span className="text-text-muted text-xs">
30
- {diff.stats.filesChanged} file{diff.stats.filesChanged !== 1 ? 's' : ''}
31
- </span>
32
- <DiffStats additions={diff.stats.totalAdditions} deletions={diff.stats.totalDeletions} />
33
- </div>
34
- ) : (
35
- <div className="w-48 h-4 bg-bg-tertiary rounded animate-pulse" />
36
- )}
37
- </div>
38
- );
39
- }