@phake/lanework 0.1.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 (370) hide show
  1. package/cli.mjs +58 -0
  2. package/dist-local/client/android-chrome-192x192.png +0 -0
  3. package/dist-local/client/android-chrome-512x512.png +0 -0
  4. package/dist-local/client/apple-touch-icon.png +0 -0
  5. package/dist-local/client/assets/Tag01Icon-DNgtGZ3r.js +1 -0
  6. package/dist-local/client/assets/abap-CLvhMVsD.js +1 -0
  7. package/dist-local/client/assets/actionscript-3--17pq3dv.js +1 -0
  8. package/dist-local/client/assets/ada-C5qYipkI.js +1 -0
  9. package/dist-local/client/assets/andromeeda-vGVdxbeo.js +1 -0
  10. package/dist-local/client/assets/angular-html-DrvEcI8G.js +1 -0
  11. package/dist-local/client/assets/angular-ts-D8CUV3s9.js +1 -0
  12. package/dist-local/client/assets/apache-U0d_L8uA.js +1 -0
  13. package/dist-local/client/assets/apex-VAyPSnFM.js +1 -0
  14. package/dist-local/client/assets/apl-PcM4Dp7k.js +1 -0
  15. package/dist-local/client/assets/app-DMYVKfjU.css +2 -0
  16. package/dist-local/client/assets/applescript-CCn79oCD.js +1 -0
  17. package/dist-local/client/assets/ara-4CJ0cIlV.js +1 -0
  18. package/dist-local/client/assets/asciidoc-DE70LPWp.js +1 -0
  19. package/dist-local/client/assets/asm-Cmm7eHzH.js +1 -0
  20. package/dist-local/client/assets/astro-DcteBnKj.js +1 -0
  21. package/dist-local/client/assets/aurora-x-CDeNXAV0.js +1 -0
  22. package/dist-local/client/assets/awk-BWXHIvNe.js +1 -0
  23. package/dist-local/client/assets/ayu-dark-DluEY0Gj.js +1 -0
  24. package/dist-local/client/assets/ayu-light-C3h-C4tm.js +1 -0
  25. package/dist-local/client/assets/ayu-mirage-Bqwy1Gya.js +1 -0
  26. package/dist-local/client/assets/ballerina-B7ZEbQpA.js +1 -0
  27. package/dist-local/client/assets/bat-Bo4NYOV-.js +1 -0
  28. package/dist-local/client/assets/beancount-D-usSTwE.js +1 -0
  29. package/dist-local/client/assets/berry-DKpUyyne.js +1 -0
  30. package/dist-local/client/assets/bibtex-Ci_nEsc7.js +1 -0
  31. package/dist-local/client/assets/bicep-CUHmPFLl.js +1 -0
  32. package/dist-local/client/assets/bird2-C6vDhewU.js +1 -0
  33. package/dist-local/client/assets/blade-6YnoPBU8.js +1 -0
  34. package/dist-local/client/assets/board._owner._repo-DyrvTwhk.js +1 -0
  35. package/dist-local/client/assets/board._owner._repo-hvj6B94q.js +38 -0
  36. package/dist-local/client/assets/bsl-BkkzgIyY.js +1 -0
  37. package/dist-local/client/assets/c-PpPxyn8g.js +1 -0
  38. package/dist-local/client/assets/c3-BFHwR3_K.js +1 -0
  39. package/dist-local/client/assets/cadence-CQ2zXKGN.js +1 -0
  40. package/dist-local/client/assets/cairo-DLTphjLi.js +1 -0
  41. package/dist-local/client/assets/catppuccin-frappe-3VR1Za6u.js +1 -0
  42. package/dist-local/client/assets/catppuccin-latte-DwIHMF0Q.js +1 -0
  43. package/dist-local/client/assets/catppuccin-macchiato-DYnBP6_5.js +1 -0
  44. package/dist-local/client/assets/catppuccin-mocha-DYhrFGRu.js +1 -0
  45. package/dist-local/client/assets/chunk-Cyuzqnbw.js +1 -0
  46. package/dist-local/client/assets/clarity-SemFz856.js +1 -0
  47. package/dist-local/client/assets/clojure-DqKBuwfJ.js +1 -0
  48. package/dist-local/client/assets/cmake-Bj61d0ZC.js +1 -0
  49. package/dist-local/client/assets/cobol-IOjEjPmG.js +1 -0
  50. package/dist-local/client/assets/codeowners-C8r90Shi.js +1 -0
  51. package/dist-local/client/assets/codeql-oeQT6MSM.js +1 -0
  52. package/dist-local/client/assets/coffee-B5TREocO.js +1 -0
  53. package/dist-local/client/assets/common-lisp-Cv5bFMCO.js +1 -0
  54. package/dist-local/client/assets/coq-BrsZFFmf.js +1 -0
  55. package/dist-local/client/assets/cpp-C4ceAJBi.js +1 -0
  56. package/dist-local/client/assets/crystal-CgtjlE18.js +1 -0
  57. package/dist-local/client/assets/csharp-oqKa8noW.js +1 -0
  58. package/dist-local/client/assets/css-Dflf0SUa.js +1 -0
  59. package/dist-local/client/assets/csv-Dx-8-gkx.js +1 -0
  60. package/dist-local/client/assets/cue-CE9AQfxI.js +1 -0
  61. package/dist-local/client/assets/cypher-ClKdZ_lG.js +1 -0
  62. package/dist-local/client/assets/d-qD-0Kul2.js +1 -0
  63. package/dist-local/client/assets/dark-plus-Cs2F2srj.js +1 -0
  64. package/dist-local/client/assets/dart-CnvKMtbv.js +1 -0
  65. package/dist-local/client/assets/dax-BkyTk9wS.js +1 -0
  66. package/dist-local/client/assets/desktop-Dlh5hvp9.js +1 -0
  67. package/dist-local/client/assets/diff-woXpYk--.js +1 -0
  68. package/dist-local/client/assets/dist-DZ2bn-Z6.js +153 -0
  69. package/dist-local/client/assets/docker-IyjqRm3v.js +1 -0
  70. package/dist-local/client/assets/dotenv-_5a1GRtc.js +1 -0
  71. package/dist-local/client/assets/dracula-BHWKrbxM.js +1 -0
  72. package/dist-local/client/assets/dracula-soft-5eyTD99u.js +1 -0
  73. package/dist-local/client/assets/dream-maker-DW3nJb8Q.js +1 -0
  74. package/dist-local/client/assets/edge-DoVTVjme.js +1 -0
  75. package/dist-local/client/assets/elixir-CzgPtVDf.js +1 -0
  76. package/dist-local/client/assets/elm-Cm7sFdI1.js +1 -0
  77. package/dist-local/client/assets/emacs-lisp-B4R74twV.js +1 -0
  78. package/dist-local/client/assets/erb-p0q977En.js +1 -0
  79. package/dist-local/client/assets/erlang-Cphh6RMH.js +1 -0
  80. package/dist-local/client/assets/everforest-dark-sB-x3p7T.js +1 -0
  81. package/dist-local/client/assets/everforest-light-Df2xbC6M.js +1 -0
  82. package/dist-local/client/assets/fennel-DQxkIbk2.js +1 -0
  83. package/dist-local/client/assets/fish-BJitypiv.js +1 -0
  84. package/dist-local/client/assets/fluent-C03EYrpw.js +1 -0
  85. package/dist-local/client/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
  86. package/dist-local/client/assets/fortran-free-form-CYNrtFtB.js +1 -0
  87. package/dist-local/client/assets/fsharp-D13ZGOAj.js +1 -0
  88. package/dist-local/client/assets/gdresource-C0sCabJj.js +1 -0
  89. package/dist-local/client/assets/gdscript-Cp2uCuqX.js +1 -0
  90. package/dist-local/client/assets/gdshader-CBce3t8t.js +1 -0
  91. package/dist-local/client/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  92. package/dist-local/client/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  93. package/dist-local/client/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  94. package/dist-local/client/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  95. package/dist-local/client/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
  96. package/dist-local/client/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
  97. package/dist-local/client/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
  98. package/dist-local/client/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
  99. package/dist-local/client/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
  100. package/dist-local/client/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
  101. package/dist-local/client/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  102. package/dist-local/client/assets/gemini-2_FJD5P-.js +1 -0
  103. package/dist-local/client/assets/genie-CV2tkWYe.js +1 -0
  104. package/dist-local/client/assets/gherkin-DExj1W_8.js +1 -0
  105. package/dist-local/client/assets/git-commit-BSykSTBG.js +1 -0
  106. package/dist-local/client/assets/git-rebase-D2tSwjJb.js +1 -0
  107. package/dist-local/client/assets/github-dark-C-LZuMrd.js +1 -0
  108. package/dist-local/client/assets/github-dark-default-DXG-b-1a.js +1 -0
  109. package/dist-local/client/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
  110. package/dist-local/client/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
  111. package/dist-local/client/assets/github-light-EUqPIrTm.js +1 -0
  112. package/dist-local/client/assets/github-light-default-BXViO-2h.js +1 -0
  113. package/dist-local/client/assets/github-light-high-contrast-B68TUdTA.js +1 -0
  114. package/dist-local/client/assets/gleam-CSRkHgEL.js +1 -0
  115. package/dist-local/client/assets/glimmer-js-JMWzPMQ2.js +1 -0
  116. package/dist-local/client/assets/glimmer-ts-DG5GCT78.js +1 -0
  117. package/dist-local/client/assets/glsl-MPwHyiXQ.js +1 -0
  118. package/dist-local/client/assets/gn-ilITqXS6.js +1 -0
  119. package/dist-local/client/assets/gnuplot-7GGW24-e.js +1 -0
  120. package/dist-local/client/assets/go-rLFTqkRN.js +1 -0
  121. package/dist-local/client/assets/graphql-NW854Khs.js +1 -0
  122. package/dist-local/client/assets/groovy-CacY0gHj.js +1 -0
  123. package/dist-local/client/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
  124. package/dist-local/client/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
  125. package/dist-local/client/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
  126. package/dist-local/client/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
  127. package/dist-local/client/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
  128. package/dist-local/client/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
  129. package/dist-local/client/assets/guide-BXJBZbQA.js +115 -0
  130. package/dist-local/client/assets/hack-C4J_0T1S.js +1 -0
  131. package/dist-local/client/assets/haml-qGg_91I2.js +1 -0
  132. package/dist-local/client/assets/handlebars-BU7OV8YS.js +1 -0
  133. package/dist-local/client/assets/haskell-D8IpX4py.js +1 -0
  134. package/dist-local/client/assets/haxe-OTjmBuCE.js +1 -0
  135. package/dist-local/client/assets/hcl-Dh228itO.js +1 -0
  136. package/dist-local/client/assets/hjson-CxZEssPk.js +1 -0
  137. package/dist-local/client/assets/hlsl-Cvrh5tZx.js +1 -0
  138. package/dist-local/client/assets/horizon-CE9ld1lL.js +1 -0
  139. package/dist-local/client/assets/horizon-bright-DSNQnXHK.js +1 -0
  140. package/dist-local/client/assets/houston-CsvMBhTu.js +1 -0
  141. package/dist-local/client/assets/html-derivative-CWPAmHEG.js +1 -0
  142. package/dist-local/client/assets/html-x4KE3xEi.js +1 -0
  143. package/dist-local/client/assets/http-HvMG3K54.js +1 -0
  144. package/dist-local/client/assets/hurl-CLh1t2ES.js +1 -0
  145. package/dist-local/client/assets/hxml-B0Qn7Nwc.js +1 -0
  146. package/dist-local/client/assets/hy-CZbG8q4J.js +1 -0
  147. package/dist-local/client/assets/imba-DsUTQ-LC.js +1 -0
  148. package/dist-local/client/assets/index-TbIMjf2L.js +12 -0
  149. package/dist-local/client/assets/ini-B5eOa1yu.js +1 -0
  150. package/dist-local/client/assets/java-Cst_eZTE.js +1 -0
  151. package/dist-local/client/assets/javascript-i_rUTyCW.js +1 -0
  152. package/dist-local/client/assets/jinja-ISwn25cN.js +1 -0
  153. package/dist-local/client/assets/jison-D9Fg2JgN.js +1 -0
  154. package/dist-local/client/assets/json-DS5j4FfK.js +1 -0
  155. package/dist-local/client/assets/json5-BR5RXkoi.js +1 -0
  156. package/dist-local/client/assets/jsonc-CYpm1nAK.js +1 -0
  157. package/dist-local/client/assets/jsonl-CmCQp5Yx.js +1 -0
  158. package/dist-local/client/assets/jsonnet-CJTPZ8u_.js +1 -0
  159. package/dist-local/client/assets/jssm-DXw9l8Rf.js +1 -0
  160. package/dist-local/client/assets/jsx-CFyhNHav.js +1 -0
  161. package/dist-local/client/assets/julia-BRnC1exM.js +1 -0
  162. package/dist-local/client/assets/just-BWbKChh7.js +1 -0
  163. package/dist-local/client/assets/kanagawa-dragon-CXtmUGW6.js +1 -0
  164. package/dist-local/client/assets/kanagawa-lotus-BN08jTvb.js +1 -0
  165. package/dist-local/client/assets/kanagawa-wave-CTweb8Dz.js +1 -0
  166. package/dist-local/client/assets/kdl-CsD5j6eV.js +1 -0
  167. package/dist-local/client/assets/kotlin-DhhofPvG.js +1 -0
  168. package/dist-local/client/assets/kusto-C7mF5XQf.js +1 -0
  169. package/dist-local/client/assets/laserwave-C_8bwKvT.js +1 -0
  170. package/dist-local/client/assets/latex-DoFV6f5B.js +1 -0
  171. package/dist-local/client/assets/lean-CewbzKMR.js +1 -0
  172. package/dist-local/client/assets/less-DVTAwKKz.js +1 -0
  173. package/dist-local/client/assets/light-plus-DVQuIRkW.js +1 -0
  174. package/dist-local/client/assets/link-CUk1Z0N6.js +1 -0
  175. package/dist-local/client/assets/liquid-BGxpJKqJ.js +1 -0
  176. package/dist-local/client/assets/llvm-Cm23YOpf.js +1 -0
  177. package/dist-local/client/assets/log-BNLmms1o.js +1 -0
  178. package/dist-local/client/assets/logo-Cluzi2Zq.js +1 -0
  179. package/dist-local/client/assets/lua-VoGSg0xb.js +1 -0
  180. package/dist-local/client/assets/luau-FMPmPwt6.js +1 -0
  181. package/dist-local/client/assets/make-Dixweg8N.js +1 -0
  182. package/dist-local/client/assets/markdown-BYOwaDjH.js +1 -0
  183. package/dist-local/client/assets/marko-E8KxKzjy.js +1 -0
  184. package/dist-local/client/assets/material-theme-Bm3Qr25_.js +1 -0
  185. package/dist-local/client/assets/material-theme-darker-2IIEA8gg.js +1 -0
  186. package/dist-local/client/assets/material-theme-lighter-uhdI0v04.js +1 -0
  187. package/dist-local/client/assets/material-theme-ocean-CHQ94UKr.js +1 -0
  188. package/dist-local/client/assets/material-theme-palenight-B5W6OYN7.js +1 -0
  189. package/dist-local/client/assets/matlab-D7qyCx1q.js +1 -0
  190. package/dist-local/client/assets/mdc-ytrN0-8H.js +1 -0
  191. package/dist-local/client/assets/mdx-DQZ5AkYe.js +1 -0
  192. package/dist-local/client/assets/mermaid-Bk4SNUv9.js +1 -0
  193. package/dist-local/client/assets/min-dark-BSWPekZh.js +1 -0
  194. package/dist-local/client/assets/min-light-DDpmG2fV.js +1 -0
  195. package/dist-local/client/assets/mipsasm-BMqwQI7S.js +1 -0
  196. package/dist-local/client/assets/mojo-BgCJLMeH.js +1 -0
  197. package/dist-local/client/assets/monokai-CdkpiU2Y.js +1 -0
  198. package/dist-local/client/assets/moonbit-CaWjb8XO.js +1 -0
  199. package/dist-local/client/assets/move-B1IS1UjX.js +1 -0
  200. package/dist-local/client/assets/narrat-_X_XdTYD.js +1 -0
  201. package/dist-local/client/assets/nextflow-BJtWHP5T.js +1 -0
  202. package/dist-local/client/assets/nextflow-groovy-DJMQeKeT.js +1 -0
  203. package/dist-local/client/assets/nginx-CgHaWcsO.js +1 -0
  204. package/dist-local/client/assets/night-owl-DhmEMT88.js +1 -0
  205. package/dist-local/client/assets/night-owl-light-eJ-hLW7d.js +1 -0
  206. package/dist-local/client/assets/nim-xKCzf2o0.js +1 -0
  207. package/dist-local/client/assets/nix-IvuFDN5E.js +1 -0
  208. package/dist-local/client/assets/nord-Cb4Vim4T.js +1 -0
  209. package/dist-local/client/assets/nushell-DcLAeLz5.js +1 -0
  210. package/dist-local/client/assets/objective-c-D1A_Heim.js +1 -0
  211. package/dist-local/client/assets/objective-cpp-BsSzOQcm.js +1 -0
  212. package/dist-local/client/assets/ocaml-O90oeIOV.js +1 -0
  213. package/dist-local/client/assets/odin-B1RWQWA5.js +1 -0
  214. package/dist-local/client/assets/one-dark-pro-CLwyXe_n.js +1 -0
  215. package/dist-local/client/assets/one-light-D7Lr4KcI.js +1 -0
  216. package/dist-local/client/assets/openscad-BUDT5pXO.js +1 -0
  217. package/dist-local/client/assets/pascal-4ZHwLPI5.js +1 -0
  218. package/dist-local/client/assets/perl-CAUsHq6V.js +1 -0
  219. package/dist-local/client/assets/php-Cn4rjz2P.js +1 -0
  220. package/dist-local/client/assets/pkl-ot-7Btpt.js +1 -0
  221. package/dist-local/client/assets/plastic-DQwYfKfQ.js +1 -0
  222. package/dist-local/client/assets/plsql-DGHpHOYJ.js +1 -0
  223. package/dist-local/client/assets/po-BiJDBrnU.js +1 -0
  224. package/dist-local/client/assets/poimandres-DRFjx7u4.js +1 -0
  225. package/dist-local/client/assets/polar-C7UOKdEL.js +1 -0
  226. package/dist-local/client/assets/postcss-BXeXVLqQ.js +1 -0
  227. package/dist-local/client/assets/powerquery-DNMTfnFr.js +1 -0
  228. package/dist-local/client/assets/powershell-DshXNtvi.js +1 -0
  229. package/dist-local/client/assets/prisma-BsRQq5mF.js +1 -0
  230. package/dist-local/client/assets/prolog-iXnhIJG7.js +1 -0
  231. package/dist-local/client/assets/proto-DB4EqR-F.js +1 -0
  232. package/dist-local/client/assets/pug-DD9HHTGS.js +1 -0
  233. package/dist-local/client/assets/puppet-CDv2pdJW.js +1 -0
  234. package/dist-local/client/assets/purescript-9MfHhQsQ.js +1 -0
  235. package/dist-local/client/assets/python-gzcpVVnB.js +1 -0
  236. package/dist-local/client/assets/qml-DcW_sT3t.js +1 -0
  237. package/dist-local/client/assets/qmldir-DCQb3MpD.js +1 -0
  238. package/dist-local/client/assets/qss-Fe1Jh2GI.js +1 -0
  239. package/dist-local/client/assets/r-D2d3McyU.js +1 -0
  240. package/dist-local/client/assets/racket-DcIDlBhZ.js +1 -0
  241. package/dist-local/client/assets/raku-B3gFvitq.js +1 -0
  242. package/dist-local/client/assets/razor-30Cugjh2.js +1 -0
  243. package/dist-local/client/assets/red-CJ3rzSJv.js +1 -0
  244. package/dist-local/client/assets/reg-CRGYupPL.js +1 -0
  245. package/dist-local/client/assets/regexp-Bu0flJgP.js +1 -0
  246. package/dist-local/client/assets/rel-BtDbiS_P.js +1 -0
  247. package/dist-local/client/assets/review-status-RAnd_eAC.js +43 -0
  248. package/dist-local/client/assets/reviews-core-BKrjFeCa.js +1 -0
  249. package/dist-local/client/assets/riscv-Ckw8ddFX.js +1 -0
  250. package/dist-local/client/assets/ron-VUp2lXgN.js +1 -0
  251. package/dist-local/client/assets/rose-pine-BthvhNj6.js +1 -0
  252. package/dist-local/client/assets/rose-pine-dawn-Dg85fqjY.js +1 -0
  253. package/dist-local/client/assets/rose-pine-moon-hon4tzzS.js +1 -0
  254. package/dist-local/client/assets/rosmsg-CAekHB0j.js +1 -0
  255. package/dist-local/client/assets/routes-DhFdKFMi.js +12 -0
  256. package/dist-local/client/assets/rst-BIOjc2k6.js +1 -0
  257. package/dist-local/client/assets/ruby-BA7kcl5p.js +1 -0
  258. package/dist-local/client/assets/rust-Cfkwpbl8.js +1 -0
  259. package/dist-local/client/assets/sas-BHVT2N5I.js +1 -0
  260. package/dist-local/client/assets/sass-DXrisJhu.js +1 -0
  261. package/dist-local/client/assets/scala-DKOlJaKm.js +1 -0
  262. package/dist-local/client/assets/scheme-DQCgrYNe.js +1 -0
  263. package/dist-local/client/assets/scss-DdIrFDxD.js +1 -0
  264. package/dist-local/client/assets/sdbl-bTVj8UrX.js +1 -0
  265. package/dist-local/client/assets/shaderlab-TOUzSsQk.js +1 -0
  266. package/dist-local/client/assets/shellscript-BbTp1yjG.js +1 -0
  267. package/dist-local/client/assets/shellsession-BmAC8SMF.js +1 -0
  268. package/dist-local/client/assets/slack-dark-DnToyrRv.js +1 -0
  269. package/dist-local/client/assets/slack-ochin-B2OO5cIa.js +1 -0
  270. package/dist-local/client/assets/smalltalk-B16xEiuN.js +1 -0
  271. package/dist-local/client/assets/snazzy-light-4G7pJPwS.js +1 -0
  272. package/dist-local/client/assets/solarized-dark-DV17i1UV.js +1 -0
  273. package/dist-local/client/assets/solarized-light-DSh2HLQt.js +1 -0
  274. package/dist-local/client/assets/solidity-CKzVLygQ.js +1 -0
  275. package/dist-local/client/assets/soy-B5vCsGAN.js +1 -0
  276. package/dist-local/client/assets/sparql-D_iOobhT.js +1 -0
  277. package/dist-local/client/assets/splunk-BC2Px7Mm.js +1 -0
  278. package/dist-local/client/assets/sql-DCFvu5RM.js +1 -0
  279. package/dist-local/client/assets/ssh-config-BgfXC-Er.js +1 -0
  280. package/dist-local/client/assets/stata-h02h04e7.js +1 -0
  281. package/dist-local/client/assets/stylus-B6D30XZt.js +1 -0
  282. package/dist-local/client/assets/surrealql-DxccxuMd.js +1 -0
  283. package/dist-local/client/assets/svelte-CsxBlEum.js +1 -0
  284. package/dist-local/client/assets/swift-DonLKvLd.js +1 -0
  285. package/dist-local/client/assets/synthwave-84-nFMaYfgc.js +1 -0
  286. package/dist-local/client/assets/system-verilog-DJ5XKQeo.js +1 -0
  287. package/dist-local/client/assets/systemd-BxMlprV5.js +1 -0
  288. package/dist-local/client/assets/talonscript-CohzipZa.js +1 -0
  289. package/dist-local/client/assets/tasl-DMoTqEGO.js +1 -0
  290. package/dist-local/client/assets/tcl-CZd0xW_V.js +1 -0
  291. package/dist-local/client/assets/templ-DmkwoHql.js +1 -0
  292. package/dist-local/client/assets/terraform-DswuEJGm.js +1 -0
  293. package/dist-local/client/assets/tex-B0f_hYr8.js +1 -0
  294. package/dist-local/client/assets/tokyo-night-oM2G3aXe.js +1 -0
  295. package/dist-local/client/assets/toml-CcmNWLt0.js +1 -0
  296. package/dist-local/client/assets/ts-tags-CTs7_HT0.js +1 -0
  297. package/dist-local/client/assets/tsv-sltzmVWM.js +1 -0
  298. package/dist-local/client/assets/tsx-DFvk7AwW.js +1 -0
  299. package/dist-local/client/assets/turtle-ByJddavk.js +1 -0
  300. package/dist-local/client/assets/twig-DgtEA5Er.js +1 -0
  301. package/dist-local/client/assets/typescript-DHTLvXzV.js +1 -0
  302. package/dist-local/client/assets/typespec-BRdr0IET.js +1 -0
  303. package/dist-local/client/assets/typst-DI99ib-x.js +1 -0
  304. package/dist-local/client/assets/v-DETTlOr0.js +1 -0
  305. package/dist-local/client/assets/vala-zf12oZj6.js +1 -0
  306. package/dist-local/client/assets/vb-Djn5o6TS.js +1 -0
  307. package/dist-local/client/assets/verilog-CiiDBU1e.js +1 -0
  308. package/dist-local/client/assets/vesper-DdrHHSXu.js +1 -0
  309. package/dist-local/client/assets/vhdl-BroJfC0k.js +1 -0
  310. package/dist-local/client/assets/viml-DvXPmvsu.js +1 -0
  311. package/dist-local/client/assets/vitesse-black-fwtXNY1n.js +1 -0
  312. package/dist-local/client/assets/vitesse-dark-BZCL-v6S.js +1 -0
  313. package/dist-local/client/assets/vitesse-light-VbXTXTou.js +1 -0
  314. package/dist-local/client/assets/vue-CUpaeZ-j.js +1 -0
  315. package/dist-local/client/assets/vue-html-DQch_7VQ.js +1 -0
  316. package/dist-local/client/assets/vue-vine-BCPDker4.js +1 -0
  317. package/dist-local/client/assets/vyper-CgoNMtux.js +1 -0
  318. package/dist-local/client/assets/wasm-BnjxR4X6.js +1 -0
  319. package/dist-local/client/assets/wasm-ByWQv1Qj.js +1 -0
  320. package/dist-local/client/assets/wenyan-C8pVoKbM.js +1 -0
  321. package/dist-local/client/assets/wgsl-BsKzXJz4.js +1 -0
  322. package/dist-local/client/assets/wikitext-ClFFjSW2.js +1 -0
  323. package/dist-local/client/assets/wit-DdvCle-K.js +1 -0
  324. package/dist-local/client/assets/wolfram-DLL8P-h_.js +1 -0
  325. package/dist-local/client/assets/xml-C33zriiW.js +1 -0
  326. package/dist-local/client/assets/xsl-BFS2wyMt.js +1 -0
  327. package/dist-local/client/assets/yaml-w0rMsuN4.js +1 -0
  328. package/dist-local/client/assets/zenscript-BnlCZFoB.js +1 -0
  329. package/dist-local/client/assets/zig-CMLA9XwU.js +1 -0
  330. package/dist-local/client/favicon-16x16.png +0 -0
  331. package/dist-local/client/favicon-32x32.png +0 -0
  332. package/dist-local/client/favicon.ico +0 -0
  333. package/dist-local/client/logo.png +0 -0
  334. package/dist-local/client/og.png +0 -0
  335. package/dist-local/client/og.svg +46 -0
  336. package/dist-local/client/robots.txt +4 -0
  337. package/dist-local/client/site.webmanifest +11 -0
  338. package/dist-local/client/sitemap.xml +13 -0
  339. package/dist-local/server/assets/__root-DimVnCpV.js +17 -0
  340. package/dist-local/server/assets/_tanstack-start-manifest_v-CNDxZb5c.js +56 -0
  341. package/dist-local/server/assets/auth-CtuIV0ur.js +40490 -0
  342. package/dist-local/server/assets/board._owner._repo-BgLMPzjG.js +832 -0
  343. package/dist-local/server/assets/board._owner._repo-BxCYRjn3.js +25 -0
  344. package/dist-local/server/assets/board._owner._repo-WPs_mhzX.js +128 -0
  345. package/dist-local/server/assets/bun-sqlite-dialect-BW9W1_Ps-C3nGW4Q3.js +163 -0
  346. package/dist-local/server/assets/core-RrmWoKne.js +5 -0
  347. package/dist-local/server/assets/createServerRpc-CpE5MlHa.js +12 -0
  348. package/dist-local/server/assets/d1-sqlite-dialect-BLC8LXE6-DXI0R5Oj.js +112 -0
  349. package/dist-local/server/assets/default-query-compiler-PEcjLdrv.js +1719 -0
  350. package/dist-local/server/assets/dist-CMO4nMbf.js +342 -0
  351. package/dist-local/server/assets/empty-plugin-adapters-CrnNP3b2.js +5 -0
  352. package/dist-local/server/assets/env-impl-DoaQIVbP.js +297 -0
  353. package/dist-local/server/assets/gemini-DkmTawm4.js +514 -0
  354. package/dist-local/server/assets/github-cUIlMgs7.js +251 -0
  355. package/dist-local/server/assets/guide--QQ0qbuz.js +534 -0
  356. package/dist-local/server/assets/guide-DZLtOn4o.js +49 -0
  357. package/dist-local/server/assets/kysely-adapter-RaEPPBf_.js +2 -0
  358. package/dist-local/server/assets/kysely-migration-tables-JkVUjPF_-DAJvukps.js +19 -0
  359. package/dist-local/server/assets/local-fs-BDgGK9ve.js +61 -0
  360. package/dist-local/server/assets/node-sqlite-dialect-COyVl62m.js +163 -0
  361. package/dist-local/server/assets/review-status-CdlhgE_Y.js +1501 -0
  362. package/dist-local/server/assets/reviews-BOK_eOYa.js +194 -0
  363. package/dist-local/server/assets/router-CaG3M3Zu.js +188 -0
  364. package/dist-local/server/assets/routes-BBbg2JyL.js +1036 -0
  365. package/dist-local/server/assets/routes-BlJSk7OV.js +27 -0
  366. package/dist-local/server/assets/skeleton-Cpl83ip3.js +93 -0
  367. package/dist-local/server/assets/start-BJllm2D8.js +4 -0
  368. package/dist-local/server/server.js +5778 -0
  369. package/package.json +62 -0
  370. package/server.mjs +160 -0
@@ -0,0 +1,832 @@
1
+ import { a as REVIEW_COLUMNS, c as progressPercent } from "./github-cUIlMgs7.js";
2
+ import { i as getCardContent, r as getBoard, s as cn, t as Skeleton } from "./skeleton-Cpl83ip3.js";
3
+ import { t as Route } from "./board._owner._repo-WPs_mhzX.js";
4
+ import { a as Dialog, c as DialogHeader, l as DialogTitle, n as AppShell, o as DialogContent, r as tagPill, s as DialogDescription, t as STATUS_META } from "./review-status-CdlhgE_Y.js";
5
+ import { useEffect, useMemo, useState } from "react";
6
+ import { useRouter } from "@tanstack/react-router";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { AnimatePresence, motion } from "motion/react";
9
+ import { HugeiconsIcon } from "@hugeicons/react";
10
+ import { Calendar03Icon, CheckmarkSquare02Icon, CircleIcon, Clock01Icon, Comment01Icon, Flag02Icon, FolderLibraryIcon, LinkSquare01Icon, Note01Icon, RefreshIcon, Tag01Icon, Tick02Icon, UserGroupIcon } from "@hugeicons/core-free-icons";
11
+ import { create } from "zustand";
12
+ import { MarkdownHooks } from "react-markdown";
13
+ import remarkGfm from "remark-gfm";
14
+ import rehypeShiki from "@shikijs/rehype";
15
+ import { Checkbox } from "@base-ui/react/checkbox";
16
+ //#region ../../packages/shared/src/stores/board-store.ts
17
+ var useBoardStore = create((set) => ({
18
+ activeCard: null,
19
+ openCard: (card) => set({ activeCard: card }),
20
+ closeCard: () => set({ activeCard: null })
21
+ }));
22
+ //#endregion
23
+ //#region ../../packages/shared/src/lib/format.ts
24
+ var MONTHS = [
25
+ "Jan",
26
+ "Feb",
27
+ "Mar",
28
+ "Apr",
29
+ "May",
30
+ "Jun",
31
+ "Jul",
32
+ "Aug",
33
+ "Sep",
34
+ "Oct",
35
+ "Nov",
36
+ "Dec"
37
+ ];
38
+ /** "2026-06-21" → "21 Jun 2026". Falls back to the raw string. */
39
+ function formatDate(iso) {
40
+ if (!iso) return "No date";
41
+ const m = iso.match(/^(\d{4})-(\d{2})-(\d{2})/);
42
+ if (!m) return iso;
43
+ const [, y, mo, d] = m;
44
+ return `${Number(d)} ${MONTHS[Number(mo) - 1] ?? mo} ${y}`;
45
+ }
46
+ /** Human relative age, e.g. "today", "4d ago", "3w ago". */
47
+ function relativeAge(iso) {
48
+ if (!iso) return null;
49
+ const then = new Date(iso).getTime();
50
+ if (Number.isNaN(then)) return null;
51
+ const days = Math.floor((Date.now() - then) / 864e5);
52
+ if (days <= 0) return "today";
53
+ if (days === 1) return "1d ago";
54
+ if (days < 7) return `${days}d ago`;
55
+ if (days < 30) return `${Math.floor(days / 7)}w ago`;
56
+ if (days < 365) return `${Math.floor(days / 30)}mo ago`;
57
+ return `${Math.floor(days / 365)}y ago`;
58
+ }
59
+ //#endregion
60
+ //#region ../../packages/shared/src/components/kanban/kanban-card.tsx
61
+ function KanbanCard({ card }) {
62
+ const openCard = useBoardStore((s) => s.openCard);
63
+ const pct = progressPercent(card.stats);
64
+ return /* @__PURE__ */ jsxs("div", {
65
+ role: "button",
66
+ tabIndex: 0,
67
+ onClick: () => openCard(card),
68
+ onKeyDown: (e) => {
69
+ if (e.key === "Enter" || e.key === " ") {
70
+ e.preventDefault();
71
+ openCard(card);
72
+ }
73
+ },
74
+ className: "group cursor-pointer rounded-xl border bg-card p-3.5 shadow-xs transition-shadow duration-200 hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",
75
+ children: [
76
+ /* @__PURE__ */ jsx("h3", {
77
+ className: "line-clamp-2 text-sm font-medium leading-snug text-card-foreground",
78
+ children: card.title
79
+ }),
80
+ card.assignees.length > 0 ? /* @__PURE__ */ jsxs("div", {
81
+ className: "mt-2.5 flex items-center gap-2 text-xs text-muted-foreground",
82
+ children: [/* @__PURE__ */ jsx("span", { children: "Assignees:" }), /* @__PURE__ */ jsx(Assignees, { logins: card.assignees })]
83
+ }) : null,
84
+ /* @__PURE__ */ jsxs("div", {
85
+ className: "mt-2.5 flex items-center gap-2 text-xs text-muted-foreground",
86
+ children: [
87
+ /* @__PURE__ */ jsx(HugeiconsIcon, {
88
+ icon: Flag02Icon,
89
+ className: "size-3.5"
90
+ }),
91
+ /* @__PURE__ */ jsx("span", { children: formatDate(card.date) }),
92
+ card.priority ? /* @__PURE__ */ jsx(PriorityBadge, { priority: card.priority }) : null
93
+ ]
94
+ }),
95
+ /* @__PURE__ */ jsxs("div", {
96
+ className: "mt-3 flex items-center gap-3 border-t pt-2.5 text-xs text-muted-foreground",
97
+ children: [
98
+ /* @__PURE__ */ jsxs("span", {
99
+ className: "inline-flex items-center gap-1",
100
+ title: "Checklist items done",
101
+ children: [
102
+ /* @__PURE__ */ jsx(HugeiconsIcon, {
103
+ icon: CheckmarkSquare02Icon,
104
+ className: "size-3.5"
105
+ }),
106
+ card.stats.done,
107
+ "/",
108
+ card.stats.total
109
+ ]
110
+ }),
111
+ /* @__PURE__ */ jsxs("span", {
112
+ className: "inline-flex items-center gap-1",
113
+ title: "Reviewer notes",
114
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
115
+ icon: Comment01Icon,
116
+ className: "size-3.5"
117
+ }), card.stats.notes]
118
+ }),
119
+ pct !== null ? /* @__PURE__ */ jsxs("span", {
120
+ className: cn("ml-auto rounded-md px-1.5 py-0.5 text-[11px] font-medium", pct === 100 ? "bg-emerald-100 text-emerald-700 dark:bg-emerald-950 dark:text-emerald-300" : pct === 0 ? "bg-muted text-muted-foreground" : "bg-amber-100 text-amber-700 dark:bg-amber-950 dark:text-amber-300"),
121
+ children: [pct, "%"]
122
+ }) : null
123
+ ]
124
+ })
125
+ ]
126
+ });
127
+ }
128
+ function Assignees({ logins }) {
129
+ const shown = logins.slice(0, 3);
130
+ const extra = logins.length - shown.length;
131
+ return /* @__PURE__ */ jsxs("div", {
132
+ className: "flex items-center",
133
+ children: [/* @__PURE__ */ jsx("div", {
134
+ className: "flex -space-x-1.5",
135
+ children: shown.map((login) => /* @__PURE__ */ jsx("img", {
136
+ src: `https://github.com/${login}.png?size=40`,
137
+ alt: login,
138
+ title: login,
139
+ className: "size-5 rounded-full ring-2 ring-card"
140
+ }, login))
141
+ }), extra > 0 ? /* @__PURE__ */ jsxs("span", {
142
+ className: "ml-1 text-[11px]",
143
+ children: [extra, "+"]
144
+ }) : null]
145
+ });
146
+ }
147
+ var PRIORITY_STYLE$1 = {
148
+ high: "bg-rose-100 text-rose-700 dark:bg-rose-950 dark:text-rose-300",
149
+ medium: "bg-amber-100 text-amber-700 dark:bg-amber-950 dark:text-amber-300",
150
+ low: "bg-muted text-muted-foreground"
151
+ };
152
+ function PriorityBadge({ priority }) {
153
+ return /* @__PURE__ */ jsx("span", {
154
+ className: cn("ml-auto rounded-md px-1.5 py-0.5 text-[11px] font-medium capitalize", PRIORITY_STYLE$1[priority]),
155
+ children: priority
156
+ });
157
+ }
158
+ //#endregion
159
+ //#region ../../packages/shared/src/components/kanban/kanban-column.tsx
160
+ function KanbanColumn({ meta, cards, index = 0 }) {
161
+ return /* @__PURE__ */ jsxs(motion.div, {
162
+ initial: {
163
+ opacity: 0,
164
+ y: 14
165
+ },
166
+ animate: {
167
+ opacity: 1,
168
+ y: 0
169
+ },
170
+ transition: {
171
+ duration: .4,
172
+ delay: index * .07,
173
+ ease: [
174
+ .22,
175
+ 1,
176
+ .36,
177
+ 1
178
+ ]
179
+ },
180
+ className: "flex h-full w-80 shrink-0 flex-col rounded-2xl bg-muted/40",
181
+ children: [/* @__PURE__ */ jsxs("div", {
182
+ className: "flex items-center gap-2 px-4 py-3",
183
+ children: [
184
+ /* @__PURE__ */ jsx(HugeiconsIcon, {
185
+ icon: meta.icon,
186
+ className: cn("size-4", meta.color)
187
+ }),
188
+ /* @__PURE__ */ jsx("h2", {
189
+ className: "text-sm font-medium text-foreground",
190
+ children: meta.label
191
+ }),
192
+ /* @__PURE__ */ jsx("span", {
193
+ className: "text-sm text-muted-foreground",
194
+ children: cards.length
195
+ })
196
+ ]
197
+ }), /* @__PURE__ */ jsx("div", {
198
+ className: "flex min-h-0 flex-1 flex-col gap-2.5 overflow-y-auto px-2.5 pb-2.5 pt-0.5",
199
+ children: cards.length === 0 ? /* @__PURE__ */ jsx("p", {
200
+ className: "rounded-xl border border-dashed py-8 text-center text-xs text-muted-foreground",
201
+ children: "No reviews"
202
+ }) : /* @__PURE__ */ jsx(AnimatePresence, {
203
+ mode: "popLayout",
204
+ children: cards.map((card) => /* @__PURE__ */ jsx(motion.div, {
205
+ layout: true,
206
+ initial: {
207
+ opacity: 0,
208
+ y: 8
209
+ },
210
+ animate: {
211
+ opacity: 1,
212
+ y: 0
213
+ },
214
+ exit: {
215
+ opacity: 0,
216
+ scale: .96
217
+ },
218
+ transition: {
219
+ duration: .2,
220
+ ease: "easeOut"
221
+ },
222
+ whileHover: { y: -3 },
223
+ children: /* @__PURE__ */ jsx(KanbanCard, { card })
224
+ }, card.path))
225
+ })
226
+ })]
227
+ });
228
+ }
229
+ //#endregion
230
+ //#region ../../packages/shared/src/components/kanban/kanban-board.tsx
231
+ function KanbanBoard({ cards }) {
232
+ const columns = useMemo(() => {
233
+ const byColumn = {
234
+ todo: [],
235
+ processing: [],
236
+ done: [],
237
+ dropped: []
238
+ };
239
+ for (const card of cards) byColumn[card.column].push(card);
240
+ for (const col of REVIEW_COLUMNS) byColumn[col].sort((a, b) => (b.date ?? "").localeCompare(a.date ?? ""));
241
+ return byColumn;
242
+ }, [cards]);
243
+ return /* @__PURE__ */ jsx("div", {
244
+ className: "flex h-full gap-4 overflow-x-auto px-6 pb-6",
245
+ children: REVIEW_COLUMNS.map((col, i) => /* @__PURE__ */ jsx(KanbanColumn, {
246
+ meta: STATUS_META[col],
247
+ cards: columns[col],
248
+ index: i
249
+ }, col))
250
+ });
251
+ }
252
+ //#endregion
253
+ //#region ../../packages/shared/src/components/kanban/review-list.tsx
254
+ function ReviewList({ cards }) {
255
+ const grouped = useMemo(() => {
256
+ const by = {
257
+ todo: [],
258
+ processing: [],
259
+ done: [],
260
+ dropped: []
261
+ };
262
+ for (const c of cards) by[c.column].push(c);
263
+ for (const col of REVIEW_COLUMNS) by[col].sort((a, b) => (b.date ?? "").localeCompare(a.date ?? ""));
264
+ return by;
265
+ }, [cards]);
266
+ return /* @__PURE__ */ jsx("div", {
267
+ className: "h-full overflow-y-auto px-6 pb-6",
268
+ children: /* @__PURE__ */ jsx("div", {
269
+ className: "flex flex-col gap-6",
270
+ children: REVIEW_COLUMNS.map((col) => grouped[col].length === 0 ? null : /* @__PURE__ */ jsxs("section", { children: [/* @__PURE__ */ jsxs("div", {
271
+ className: "mb-2 flex items-center gap-2",
272
+ children: [
273
+ /* @__PURE__ */ jsx(HugeiconsIcon, {
274
+ icon: STATUS_META[col].icon,
275
+ className: cn("size-4", STATUS_META[col].color)
276
+ }),
277
+ /* @__PURE__ */ jsx("h2", {
278
+ className: "text-sm font-medium",
279
+ children: STATUS_META[col].label
280
+ }),
281
+ /* @__PURE__ */ jsx("span", {
282
+ className: "text-sm text-muted-foreground",
283
+ children: grouped[col].length
284
+ })
285
+ ]
286
+ }), /* @__PURE__ */ jsx("div", {
287
+ className: "overflow-hidden rounded-xl border",
288
+ children: grouped[col].map((card, i) => /* @__PURE__ */ jsx(ListRow, {
289
+ card,
290
+ first: i === 0
291
+ }, card.path))
292
+ })] }, col))
293
+ })
294
+ });
295
+ }
296
+ function ListRow({ card, first }) {
297
+ const openCard = useBoardStore((s) => s.openCard);
298
+ const pct = progressPercent(card.stats);
299
+ return /* @__PURE__ */ jsxs("div", {
300
+ role: "button",
301
+ tabIndex: 0,
302
+ onClick: () => openCard(card),
303
+ onKeyDown: (e) => {
304
+ if (e.key === "Enter" || e.key === " ") {
305
+ e.preventDefault();
306
+ openCard(card);
307
+ }
308
+ },
309
+ className: cn("flex cursor-pointer items-center gap-4 px-4 py-2.5 text-sm transition-colors hover:bg-muted/50 focus-visible:bg-muted/50 focus-visible:outline-none", !first && "border-t"),
310
+ children: [
311
+ /* @__PURE__ */ jsx("span", {
312
+ className: "min-w-0 flex-1 truncate font-medium",
313
+ children: card.title
314
+ }),
315
+ /* @__PURE__ */ jsxs("span", {
316
+ className: "hidden items-center gap-1.5 text-xs text-muted-foreground sm:inline-flex",
317
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
318
+ icon: Flag02Icon,
319
+ className: "size-3.5"
320
+ }), formatDate(card.date)]
321
+ }),
322
+ /* @__PURE__ */ jsxs("span", {
323
+ className: "w-16 text-right text-xs text-muted-foreground",
324
+ children: [
325
+ card.stats.done,
326
+ "/",
327
+ card.stats.total
328
+ ]
329
+ }),
330
+ /* @__PURE__ */ jsx("span", {
331
+ className: "w-12 text-right text-xs text-muted-foreground",
332
+ children: pct !== null ? `${pct}%` : ""
333
+ })
334
+ ]
335
+ });
336
+ }
337
+ //#endregion
338
+ //#region ../../packages/shared/src/components/ui/checkbox.tsx
339
+ function Checkbox$1({ className, ...props }) {
340
+ return /* @__PURE__ */ jsx(Checkbox.Root, {
341
+ "data-slot": "checkbox",
342
+ className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-[5px] border border-transparent bg-input/90 transition-shadow outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary", className),
343
+ ...props,
344
+ children: /* @__PURE__ */ jsx(Checkbox.Indicator, {
345
+ "data-slot": "checkbox-indicator",
346
+ className: "grid place-content-center text-current transition-none [&>svg]:size-3.5",
347
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
348
+ icon: Tick02Icon,
349
+ strokeWidth: 2
350
+ })
351
+ })
352
+ });
353
+ }
354
+ //#endregion
355
+ //#region ../../packages/shared/src/components/kanban/review-dialog.tsx
356
+ var markdownComponents = {
357
+ input({ type, checked, ...props }) {
358
+ if (type === "checkbox") return /* @__PURE__ */ jsx(Checkbox$1, {
359
+ checked: !!checked,
360
+ disabled: true,
361
+ className: "relative top-px mr-0.5 inline-grid align-text-bottom disabled:opacity-100 data-checked:bg-primary"
362
+ });
363
+ return /* @__PURE__ */ jsx("input", {
364
+ type,
365
+ ...props
366
+ });
367
+ },
368
+ li({ className, children, ...props }) {
369
+ const isTask = className?.includes("task-list-item");
370
+ return /* @__PURE__ */ jsx("li", {
371
+ className: cn(className, isTask && "list-none marker:content-none"),
372
+ ...props,
373
+ children
374
+ });
375
+ }
376
+ };
377
+ function ReviewDialog({ owner, repo, branch }) {
378
+ const activeCard = useBoardStore((s) => s.activeCard);
379
+ const closeCard = useBoardStore((s) => s.closeCard);
380
+ const [content, setContent] = useState(null);
381
+ const [error, setError] = useState(null);
382
+ useEffect(() => {
383
+ if (!activeCard) return;
384
+ let cancelled = false;
385
+ setContent(null);
386
+ setError(null);
387
+ getCardContent({ data: {
388
+ owner,
389
+ repo,
390
+ path: activeCard.path,
391
+ ref: branch
392
+ } }).then((md) => {
393
+ if (!cancelled) setContent(md);
394
+ }).catch((e) => {
395
+ if (!cancelled) setError(e instanceof Error ? e.message : "Failed to load review.");
396
+ });
397
+ return () => {
398
+ cancelled = true;
399
+ };
400
+ }, [
401
+ activeCard,
402
+ owner,
403
+ repo,
404
+ branch
405
+ ]);
406
+ const githubUrl = activeCard ? `https://github.com/${owner}/${repo}/blob/${branch}/${activeCard.path}` : "#";
407
+ return /* @__PURE__ */ jsx(Dialog, {
408
+ open: !!activeCard,
409
+ onOpenChange: (open) => !open && closeCard(),
410
+ children: /* @__PURE__ */ jsxs(DialogContent, {
411
+ className: "flex h-screen max-h-screen w-screen max-w-none flex-col gap-0 overflow-hidden rounded-none border-0 p-0 sm:max-w-none",
412
+ children: [/* @__PURE__ */ jsx(DialogHeader, {
413
+ className: "shrink-0 px-6 pt-6 pb-4",
414
+ children: /* @__PURE__ */ jsxs("div", {
415
+ className: "mx-auto w-full max-w-3xl",
416
+ children: [/* @__PURE__ */ jsx(DialogTitle, {
417
+ className: "pr-8 text-left text-lg",
418
+ children: activeCard?.title
419
+ }), /* @__PURE__ */ jsx(DialogDescription, {
420
+ className: "text-left",
421
+ children: /* @__PURE__ */ jsxs("a", {
422
+ href: githubUrl,
423
+ target: "_blank",
424
+ rel: "noreferrer",
425
+ className: "inline-flex items-center gap-1 hover:text-foreground",
426
+ children: [activeCard?.path, /* @__PURE__ */ jsx(HugeiconsIcon, {
427
+ icon: LinkSquare01Icon,
428
+ className: "size-3"
429
+ })]
430
+ })
431
+ })]
432
+ })
433
+ }), /* @__PURE__ */ jsx("div", {
434
+ className: "flex-1 overflow-y-auto",
435
+ children: /* @__PURE__ */ jsxs("div", {
436
+ className: "mx-auto w-full max-w-3xl px-6 py-5",
437
+ children: [
438
+ activeCard ? /* @__PURE__ */ jsx(MetaPanel, { card: activeCard }) : null,
439
+ /* @__PURE__ */ jsx("hr", { className: "my-6 border-border" }),
440
+ error ? /* @__PURE__ */ jsx("p", {
441
+ className: "text-sm text-destructive",
442
+ children: error
443
+ }) : content === null ? /* @__PURE__ */ jsxs("div", {
444
+ className: "space-y-3",
445
+ children: [
446
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-2/3" }),
447
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" }),
448
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" }),
449
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-4/5" }),
450
+ /* @__PURE__ */ jsx(Skeleton, { className: "mt-6 h-4 w-1/2" }),
451
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" })
452
+ ]
453
+ }) : /* @__PURE__ */ jsx("article", {
454
+ className: "prose prose-sm prose-neutral max-w-none dark:prose-invert prose-code:before:content-none prose-code:after:content-none",
455
+ children: /* @__PURE__ */ jsx(MarkdownHooks, {
456
+ components: markdownComponents,
457
+ remarkPlugins: [remarkGfm],
458
+ rehypePlugins: [[rehypeShiki, { themes: {
459
+ light: "github-light",
460
+ dark: "github-dark"
461
+ } }]],
462
+ fallback: /* @__PURE__ */ jsxs("div", {
463
+ className: "space-y-3",
464
+ children: [
465
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" }),
466
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-5/6" }),
467
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-2/3" })
468
+ ]
469
+ }),
470
+ children: stripFrontmatter(content)
471
+ })
472
+ })
473
+ ]
474
+ })
475
+ })]
476
+ })
477
+ });
478
+ }
479
+ var PRIORITY_STYLE = {
480
+ high: "bg-rose-100 text-rose-700 dark:bg-rose-950/60 dark:text-rose-300",
481
+ medium: "bg-amber-100 text-amber-700 dark:bg-amber-950/60 dark:text-amber-300",
482
+ low: "bg-muted text-muted-foreground"
483
+ };
484
+ function MetaPanel({ card }) {
485
+ const col = STATUS_META[card.column];
486
+ const pct = progressPercent(card.stats);
487
+ const age = relativeAge(card.date);
488
+ return /* @__PURE__ */ jsxs("div", {
489
+ className: "flex flex-col",
490
+ children: [
491
+ /* @__PURE__ */ jsx(Row, {
492
+ icon: CircleIcon,
493
+ label: "Status",
494
+ children: /* @__PURE__ */ jsxs("span", {
495
+ className: "inline-flex items-center gap-1.5 rounded-full bg-muted px-2.5 py-1 text-xs font-medium",
496
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
497
+ icon: col.icon,
498
+ className: cn("size-3.5", col.color)
499
+ }), col.label]
500
+ })
501
+ }),
502
+ /* @__PURE__ */ jsx(Row, {
503
+ icon: Flag02Icon,
504
+ label: "Priority",
505
+ children: card.priority ? /* @__PURE__ */ jsx("span", {
506
+ className: cn("rounded-full px-2.5 py-1 text-xs font-medium capitalize", PRIORITY_STYLE[card.priority]),
507
+ children: card.priority
508
+ }) : /* @__PURE__ */ jsx("span", {
509
+ className: "text-muted-foreground",
510
+ children: "—"
511
+ })
512
+ }),
513
+ /* @__PURE__ */ jsx(Row, {
514
+ icon: UserGroupIcon,
515
+ label: "Assignees",
516
+ children: card.assignees.length > 0 ? card.assignees.map((login) => /* @__PURE__ */ jsxs("span", {
517
+ className: "inline-flex items-center gap-1.5 rounded-full bg-secondary py-0.5 pr-2.5 pl-0.5 text-xs font-medium",
518
+ children: [/* @__PURE__ */ jsx("img", {
519
+ src: `https://github.com/${login}.png?size=40`,
520
+ alt: login,
521
+ className: "size-5 rounded-full"
522
+ }), login]
523
+ }, login)) : /* @__PURE__ */ jsx("span", {
524
+ className: "text-muted-foreground",
525
+ children: "Unassigned"
526
+ })
527
+ }),
528
+ /* @__PURE__ */ jsx(Row, {
529
+ icon: Calendar03Icon,
530
+ label: "Created",
531
+ children: /* @__PURE__ */ jsxs("span", { children: [formatDate(card.date), age ? /* @__PURE__ */ jsxs("span", {
532
+ className: "text-muted-foreground",
533
+ children: [
534
+ " (",
535
+ age,
536
+ ")"
537
+ ]
538
+ }) : null] })
539
+ }),
540
+ /* @__PURE__ */ jsx(Row, {
541
+ icon: CheckmarkSquare02Icon,
542
+ label: "Progress",
543
+ children: card.stats.total > 0 ? /* @__PURE__ */ jsxs("span", {
544
+ className: "inline-flex items-center gap-2",
545
+ children: [/* @__PURE__ */ jsx("span", {
546
+ className: "h-1.5 w-24 overflow-hidden rounded-full bg-muted",
547
+ children: /* @__PURE__ */ jsx("span", {
548
+ className: "block h-full rounded-full bg-primary",
549
+ style: { width: `${pct}%` }
550
+ })
551
+ }), /* @__PURE__ */ jsxs("span", {
552
+ className: "text-muted-foreground",
553
+ children: [
554
+ card.stats.done,
555
+ "/",
556
+ card.stats.total,
557
+ " · ",
558
+ pct,
559
+ "%"
560
+ ]
561
+ })]
562
+ }) : /* @__PURE__ */ jsx("span", {
563
+ className: "text-muted-foreground",
564
+ children: "—"
565
+ })
566
+ }),
567
+ /* @__PURE__ */ jsx(Row, {
568
+ icon: Tag01Icon,
569
+ label: "Tags",
570
+ children: card.tags.length > 0 ? card.tags.map((tag) => /* @__PURE__ */ jsx("span", {
571
+ className: cn("rounded-full px-2.5 py-1 text-xs font-medium", tagPill(tag)),
572
+ children: tag
573
+ }, tag)) : /* @__PURE__ */ jsx("span", {
574
+ className: "text-muted-foreground",
575
+ children: "No tags"
576
+ })
577
+ })
578
+ ]
579
+ });
580
+ }
581
+ function Row({ icon, label, children }) {
582
+ return /* @__PURE__ */ jsxs("div", {
583
+ className: "flex items-start gap-4 py-2",
584
+ children: [/* @__PURE__ */ jsxs("div", {
585
+ className: "flex w-32 shrink-0 items-center gap-2 pt-1 text-sm text-muted-foreground",
586
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
587
+ icon,
588
+ className: "size-4"
589
+ }), label]
590
+ }), /* @__PURE__ */ jsx("div", {
591
+ className: "flex min-w-0 flex-1 flex-wrap items-center gap-2 text-sm",
592
+ children
593
+ })]
594
+ });
595
+ }
596
+ /** Remove the leading YAML frontmatter block so it isn't rendered in the body. */
597
+ function stripFrontmatter(md) {
598
+ return md.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/, "");
599
+ }
600
+ //#endregion
601
+ //#region ../../packages/shared/src/hooks/use-local-live.ts
602
+ /**
603
+ * Local-mode live reload: subscribe to the launcher's `/_local/events` SSE
604
+ * stream and re-run route loaders whenever a `.agents/reviews` file changes, so
605
+ * the board updates as your agent writes review files. No-op (and fully
606
+ * dead-code-eliminated) in the Cloudflare build, where `__LANEWORK_LOCAL__` is
607
+ * statically false and there is no watcher.
608
+ */
609
+ function useLocalLiveReload() {
610
+ const router = useRouter();
611
+ useEffect(() => {
612
+ if (typeof window === "undefined") return;
613
+ const es = new EventSource("/_local/events");
614
+ let timer;
615
+ const onChange = () => {
616
+ clearTimeout(timer);
617
+ timer = setTimeout(() => router.invalidate(), 100);
618
+ };
619
+ es.addEventListener("change", onChange);
620
+ return () => {
621
+ clearTimeout(timer);
622
+ es.close();
623
+ };
624
+ }, [router]);
625
+ }
626
+ //#endregion
627
+ //#region ../../packages/shared/src/routes/board.$owner.$repo.tsx?tsr-split=component
628
+ var TABS = [
629
+ {
630
+ key: "board",
631
+ label: "Board",
632
+ enabled: true
633
+ },
634
+ {
635
+ key: "list",
636
+ label: "List",
637
+ enabled: true
638
+ },
639
+ {
640
+ key: "timeline",
641
+ label: "Timeline",
642
+ enabled: false
643
+ },
644
+ {
645
+ key: "due",
646
+ label: "Due Tasks",
647
+ enabled: false
648
+ }
649
+ ];
650
+ function BoardPage() {
651
+ const { user } = Route.useRouteContext();
652
+ const { board } = Route.useLoaderData();
653
+ const { mine, tag } = Route.useSearch();
654
+ Route.useNavigate();
655
+ const [view, setView] = useState("board");
656
+ useLocalLiveReload();
657
+ const { filtered, nav } = useMemo(() => {
658
+ const tagCounts = /* @__PURE__ */ new Map();
659
+ let myCount = 0;
660
+ for (const c of board.cards) {
661
+ if (c.assignees.includes(board.viewer)) myCount++;
662
+ for (const t of c.tags) tagCounts.set(t, (tagCounts.get(t) ?? 0) + 1);
663
+ }
664
+ const tags = [...tagCounts.entries()].map(([name, count]) => ({
665
+ name,
666
+ count
667
+ })).sort((a, b) => b.count - a.count || a.name.localeCompare(b.name));
668
+ return {
669
+ filtered: board.cards.filter((c) => (!mine || c.assignees.includes(board.viewer)) && (!tag || c.tags.includes(tag))),
670
+ nav: {
671
+ owner: board.owner,
672
+ repo: board.repo,
673
+ mine: !!mine,
674
+ tag,
675
+ totalCount: board.cards.length,
676
+ myCount,
677
+ tags
678
+ }
679
+ };
680
+ }, [
681
+ board,
682
+ mine,
683
+ tag
684
+ ]);
685
+ const heading = mine ? "My tasks" : tag ? `#${tag}` : board.repo;
686
+ return /* @__PURE__ */ jsxs(AppShell, {
687
+ user,
688
+ active: {
689
+ owner: board.owner,
690
+ repo: board.repo
691
+ },
692
+ nav,
693
+ children: [
694
+ /* @__PURE__ */ jsxs("div", {
695
+ className: "px-6 pt-5",
696
+ children: [
697
+ /* @__PURE__ */ jsx("div", {
698
+ className: "text-sm text-muted-foreground",
699
+ children: board.owner
700
+ }),
701
+ /* @__PURE__ */ jsxs("div", {
702
+ className: "mt-1 flex items-end justify-between gap-4",
703
+ children: [/* @__PURE__ */ jsx("h1", {
704
+ className: "font-heading text-2xl font-semibold tracking-tight",
705
+ children: heading
706
+ }), /* @__PURE__ */ jsxs("div", {
707
+ className: "flex shrink-0 items-center gap-1.5 pb-1",
708
+ children: [
709
+ /* @__PURE__ */ jsx(MetaPill, {
710
+ icon: FolderLibraryIcon,
711
+ children: /* @__PURE__ */ jsx("span", {
712
+ className: "font-mono",
713
+ children: ".agents/reviews"
714
+ })
715
+ }),
716
+ false,
717
+ /* @__PURE__ */ jsxs(MetaPill, {
718
+ icon: Note01Icon,
719
+ accent: true,
720
+ children: [
721
+ /* @__PURE__ */ jsx("span", {
722
+ className: "font-semibold text-foreground tabular-nums",
723
+ children: filtered.length
724
+ }),
725
+ filtered.length !== board.cards.length ? /* @__PURE__ */ jsxs("span", {
726
+ className: "tabular-nums",
727
+ children: ["/", board.cards.length]
728
+ }) : null,
729
+ /* @__PURE__ */ jsx("span", { children: "reviews" })
730
+ ]
731
+ }),
732
+ /* @__PURE__ */ jsx(RefreshControl, {
733
+ owner: board.owner,
734
+ repo: board.repo,
735
+ branch: board.branch,
736
+ fetchedAt: board.fetchedAt
737
+ })
738
+ ]
739
+ })]
740
+ }),
741
+ /* @__PURE__ */ jsx("div", {
742
+ className: "mt-4 flex items-center gap-1 border-b",
743
+ children: TABS.map((t) => /* @__PURE__ */ jsx("button", {
744
+ disabled: !t.enabled,
745
+ onClick: () => t.enabled && setView(t.key),
746
+ title: t.enabled ? void 0 : "Coming soon",
747
+ className: cn("relative -mb-px rounded-t-lg px-3.5 py-2 text-sm transition-colors", view === t.key ? "border border-b-background bg-background font-medium text-foreground" : "text-muted-foreground hover:text-foreground", !t.enabled && "cursor-not-allowed opacity-40 hover:text-muted-foreground"),
748
+ children: t.label
749
+ }, t.key))
750
+ })
751
+ ]
752
+ }),
753
+ /* @__PURE__ */ jsx("div", {
754
+ className: "min-h-0 flex-1 pt-5",
755
+ children: view === "list" ? /* @__PURE__ */ jsx(ReviewList, { cards: filtered }) : /* @__PURE__ */ jsx(KanbanBoard, { cards: filtered })
756
+ }),
757
+ /* @__PURE__ */ jsx(ReviewDialog, {
758
+ owner: board.owner,
759
+ repo: board.repo,
760
+ branch: board.branch
761
+ })
762
+ ]
763
+ });
764
+ }
765
+ function formatRelativeTime(epochMs) {
766
+ const secs = Math.max(0, Math.round((Date.now() - epochMs) / 1e3));
767
+ if (secs < 10) return "just now";
768
+ if (secs < 60) return `${secs}s ago`;
769
+ const mins = Math.round(secs / 60);
770
+ if (mins < 60) return `${mins}m ago`;
771
+ const hrs = Math.round(mins / 60);
772
+ if (hrs < 24) return `${hrs}h ago`;
773
+ return `${Math.round(hrs / 24)}d ago`;
774
+ }
775
+ /** "Updated Xm ago" badge + a button to force-refresh the board from GitHub. */
776
+ function RefreshControl({ owner, repo, branch, fetchedAt }) {
777
+ const router = useRouter();
778
+ const [refreshing, setRefreshing] = useState(false);
779
+ const [, setTick] = useState(0);
780
+ useEffect(() => {
781
+ const id = setInterval(() => setTick((t) => t + 1), 3e4);
782
+ return () => clearInterval(id);
783
+ }, []);
784
+ const onRefresh = async () => {
785
+ if (refreshing) return;
786
+ setRefreshing(true);
787
+ try {
788
+ await getBoard({ data: {
789
+ owner,
790
+ repo,
791
+ branch,
792
+ refresh: true
793
+ } });
794
+ await router.invalidate();
795
+ } finally {
796
+ setRefreshing(false);
797
+ }
798
+ };
799
+ return /* @__PURE__ */ jsxs("div", {
800
+ className: "inline-flex items-center gap-1.5",
801
+ children: [/* @__PURE__ */ jsx(MetaPill, {
802
+ icon: Clock01Icon,
803
+ children: /* @__PURE__ */ jsxs("span", {
804
+ className: "tabular-nums",
805
+ children: ["Updated ", formatRelativeTime(fetchedAt)]
806
+ })
807
+ }), /* @__PURE__ */ jsx("button", {
808
+ type: "button",
809
+ onClick: onRefresh,
810
+ disabled: refreshing,
811
+ title: "Refresh from GitHub",
812
+ "aria-label": "Refresh from GitHub",
813
+ className: "inline-flex size-7 shrink-0 items-center justify-center rounded-full border border-transparent bg-muted/60 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-60",
814
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
815
+ icon: RefreshIcon,
816
+ className: cn("size-3.5", refreshing && "animate-spin")
817
+ })
818
+ })]
819
+ });
820
+ }
821
+ /** A small metadata pill in the board header (path / branch / review count). */
822
+ function MetaPill({ icon, accent, children }) {
823
+ return /* @__PURE__ */ jsxs("span", {
824
+ className: cn("inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs text-muted-foreground transition-colors", accent ? "border-primary/20 bg-primary/5" : "border-transparent bg-muted/60 hover:bg-muted"),
825
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
826
+ icon,
827
+ className: cn("size-3.5 shrink-0", accent ? "text-primary" : "text-muted-foreground/70")
828
+ }), children]
829
+ });
830
+ }
831
+ //#endregion
832
+ export { BoardPage as component };