folderview 0.0.0-stage → 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 (450) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +270 -2
  3. package/dist/cli.js +115 -0
  4. package/dist/client/assets/app.css +1 -0
  5. package/dist/client/assets/chunks/abap-EINPUMCJ.js +1 -0
  6. package/dist/client/assets/chunks/abnfDiagram-S7VZAUFO-W2CM2W6D.js +1 -0
  7. package/dist/client/assets/chunks/actionscript-3-O776AQUO.js +1 -0
  8. package/dist/client/assets/chunks/ada-WLOTXRTV.js +1 -0
  9. package/dist/client/assets/chunks/ahk-EF37A2DY.js +1 -0
  10. package/dist/client/assets/chunks/ahk2-FH4K3CKT.js +1 -0
  11. package/dist/client/assets/chunks/angular-html-ZALQFV2H.js +1 -0
  12. package/dist/client/assets/chunks/angular-ts-4IWMF7QO.js +1 -0
  13. package/dist/client/assets/chunks/apache-44AYOEWM.js +1 -0
  14. package/dist/client/assets/chunks/apex-XRYPID42.js +1 -0
  15. package/dist/client/assets/chunks/apl-5HBALFOI.js +1 -0
  16. package/dist/client/assets/chunks/applescript-2DZEHZEC.js +1 -0
  17. package/dist/client/assets/chunks/ara-ZGZQBLXL.js +1 -0
  18. package/dist/client/assets/chunks/architecture-WOLXFQ4H-EJGENNRL.js +1 -0
  19. package/dist/client/assets/chunks/architectureDiagram-YGSQEFNW-2VHWSKO6.js +36 -0
  20. package/dist/client/assets/chunks/asciidoc-GSQAKCPO.js +1 -0
  21. package/dist/client/assets/chunks/asm-BFURM5BK.js +1 -0
  22. package/dist/client/assets/chunks/astro-VJORWDZJ.js +1 -0
  23. package/dist/client/assets/chunks/awk-BSHTWXXX.js +1 -0
  24. package/dist/client/assets/chunks/ballerina-HAOQJ4B2.js +1 -0
  25. package/dist/client/assets/chunks/bat-OSH45EOF.js +1 -0
  26. package/dist/client/assets/chunks/beancount-RBATIHOV.js +1 -0
  27. package/dist/client/assets/chunks/berry-CZUIOUM4.js +1 -0
  28. package/dist/client/assets/chunks/bibtex-KCL2UWHE.js +1 -0
  29. package/dist/client/assets/chunks/bicep-SZJZB3SG.js +1 -0
  30. package/dist/client/assets/chunks/bird2-XBF5YQQV.js +1 -0
  31. package/dist/client/assets/chunks/blade-Q24LEVFC.js +1 -0
  32. package/dist/client/assets/chunks/blockDiagram-APKKGZFW-53LXSOOT.js +140 -0
  33. package/dist/client/assets/chunks/bpmnIcons-APHXDYXF-FMBRQNTY.js +1 -0
  34. package/dist/client/assets/chunks/bsl-TI44NWFB.js +1 -0
  35. package/dist/client/assets/chunks/c-NLHY4Y4N.js +1 -0
  36. package/dist/client/assets/chunks/c3-BUTEM6PO.js +1 -0
  37. package/dist/client/assets/chunks/c4Diagram-KJ2TOQU5-O53G4GQH.js +38 -0
  38. package/dist/client/assets/chunks/cadence-JIRTEU64.js +1 -0
  39. package/dist/client/assets/chunks/cairo-3W6NVDNW.js +1 -0
  40. package/dist/client/assets/chunks/chapel-BPBJ2E7K.js +1 -0
  41. package/dist/client/assets/chunks/chunk-25KVF5ZE.js +1 -0
  42. package/dist/client/assets/chunks/chunk-2CJKSQOI.js +1 -0
  43. package/dist/client/assets/chunks/chunk-2QIJRTWR.js +1 -0
  44. package/dist/client/assets/chunks/chunk-2ZCRJZGF.js +2 -0
  45. package/dist/client/assets/chunks/chunk-3ILNDZNY.js +213 -0
  46. package/dist/client/assets/chunks/chunk-3M2OOQ7S.js +1 -0
  47. package/dist/client/assets/chunks/chunk-3M57NTNK.js +1 -0
  48. package/dist/client/assets/chunks/chunk-3MR6DCZJ.js +1 -0
  49. package/dist/client/assets/chunks/chunk-3WGHS7F7.js +1 -0
  50. package/dist/client/assets/chunks/chunk-4JK75V33.js +1 -0
  51. package/dist/client/assets/chunks/chunk-4NXNVEWK.js +1 -0
  52. package/dist/client/assets/chunks/chunk-4RNNBDFQ.js +1 -0
  53. package/dist/client/assets/chunks/chunk-4T4NVH7V.js +1 -0
  54. package/dist/client/assets/chunks/chunk-4TFFBC35.js +1 -0
  55. package/dist/client/assets/chunks/chunk-4WYBE67P.js +1 -0
  56. package/dist/client/assets/chunks/chunk-56ITEUFA.js +1 -0
  57. package/dist/client/assets/chunks/chunk-5DXRE7IH.js +1 -0
  58. package/dist/client/assets/chunks/chunk-5IMADCNU.js +1 -0
  59. package/dist/client/assets/chunks/chunk-5XZPGKN4.js +1 -0
  60. package/dist/client/assets/chunks/chunk-6O32UKSP.js +1 -0
  61. package/dist/client/assets/chunks/chunk-7BAEB64Q.js +1 -0
  62. package/dist/client/assets/chunks/chunk-7FMWBHZO.js +1 -0
  63. package/dist/client/assets/chunks/chunk-7GFDITUT.js +1 -0
  64. package/dist/client/assets/chunks/chunk-7H4MLBHI.js +1 -0
  65. package/dist/client/assets/chunks/chunk-7OJ4MEEB.js +1 -0
  66. package/dist/client/assets/chunks/chunk-7RSEISFE.js +1 -0
  67. package/dist/client/assets/chunks/chunk-7YNZZQVT.js +1 -0
  68. package/dist/client/assets/chunks/chunk-AB7TIL2G.js +1 -0
  69. package/dist/client/assets/chunks/chunk-ADDF76FL.js +1 -0
  70. package/dist/client/assets/chunks/chunk-AF6UTCD4.js +321 -0
  71. package/dist/client/assets/chunks/chunk-AJ2K6ASU.js +1 -0
  72. package/dist/client/assets/chunks/chunk-AUBAENQZ.js +1 -0
  73. package/dist/client/assets/chunks/chunk-BJEYVZ65.js +1 -0
  74. package/dist/client/assets/chunks/chunk-BLRM6LXA.js +1 -0
  75. package/dist/client/assets/chunks/chunk-BOCTYCDZ.js +1 -0
  76. package/dist/client/assets/chunks/chunk-BU4VRYN7.js +1 -0
  77. package/dist/client/assets/chunks/chunk-CALYHV7D.js +1 -0
  78. package/dist/client/assets/chunks/chunk-CF4W3RZ4.js +1 -0
  79. package/dist/client/assets/chunks/chunk-DCZ2OBSL.js +1 -0
  80. package/dist/client/assets/chunks/chunk-DUFPBTHD.js +1 -0
  81. package/dist/client/assets/chunks/chunk-DUICIQBC.js +88 -0
  82. package/dist/client/assets/chunks/chunk-EH2N475V.js +1 -0
  83. package/dist/client/assets/chunks/chunk-EHLLNPZT.js +1 -0
  84. package/dist/client/assets/chunks/chunk-EIBFAW37.js +1 -0
  85. package/dist/client/assets/chunks/chunk-EO3ER3GN.js +1 -0
  86. package/dist/client/assets/chunks/chunk-FH24BIIA.js +1 -0
  87. package/dist/client/assets/chunks/chunk-FNOXGAL5.js +2 -0
  88. package/dist/client/assets/chunks/chunk-FTY6WLQF.js +3 -0
  89. package/dist/client/assets/chunks/chunk-FZFME6UK.js +1 -0
  90. package/dist/client/assets/chunks/chunk-FZJZZYYO.js +1 -0
  91. package/dist/client/assets/chunks/chunk-G4Z6L7OO.js +1 -0
  92. package/dist/client/assets/chunks/chunk-GNCEAN2B.js +1 -0
  93. package/dist/client/assets/chunks/chunk-GQJIKV3T.js +1 -0
  94. package/dist/client/assets/chunks/chunk-GUMNOKT2.js +1 -0
  95. package/dist/client/assets/chunks/chunk-GXRORAF3.js +1 -0
  96. package/dist/client/assets/chunks/chunk-H36ABDKY.js +1 -0
  97. package/dist/client/assets/chunks/chunk-HAR5NYVW.js +1 -0
  98. package/dist/client/assets/chunks/chunk-HIGPS4L2.js +1 -0
  99. package/dist/client/assets/chunks/chunk-HMOBGTME.js +1 -0
  100. package/dist/client/assets/chunks/chunk-HNO6SQ7M.js +1 -0
  101. package/dist/client/assets/chunks/chunk-HYVZ3GYN.js +1 -0
  102. package/dist/client/assets/chunks/chunk-I6TGFOQS.js +1 -0
  103. package/dist/client/assets/chunks/chunk-IHIOJK7I.js +1 -0
  104. package/dist/client/assets/chunks/chunk-IHJNUMSC.js +1 -0
  105. package/dist/client/assets/chunks/chunk-IP7PB2OC.js +1 -0
  106. package/dist/client/assets/chunks/chunk-ISDTMH2Y.js +1 -0
  107. package/dist/client/assets/chunks/chunk-J65M2LNT.js +1 -0
  108. package/dist/client/assets/chunks/chunk-JCWYZ7X2.js +62 -0
  109. package/dist/client/assets/chunks/chunk-JENWYTLI.js +1 -0
  110. package/dist/client/assets/chunks/chunk-JJ6YWJQS.js +1 -0
  111. package/dist/client/assets/chunks/chunk-JMUVGGX7.js +32 -0
  112. package/dist/client/assets/chunks/chunk-JNQUFMM4.js +1 -0
  113. package/dist/client/assets/chunks/chunk-JPTECOAL.js +1 -0
  114. package/dist/client/assets/chunks/chunk-JZNK4LKS.js +1 -0
  115. package/dist/client/assets/chunks/chunk-KPNXJBIW.js +1 -0
  116. package/dist/client/assets/chunks/chunk-KZO2GZL7.js +1 -0
  117. package/dist/client/assets/chunks/chunk-L2REESOQ.js +1 -0
  118. package/dist/client/assets/chunks/chunk-LJPJXR7R.js +1 -0
  119. package/dist/client/assets/chunks/chunk-LOEZMLCI.js +1 -0
  120. package/dist/client/assets/chunks/chunk-MLYC6FSE.js +1 -0
  121. package/dist/client/assets/chunks/chunk-MMDGEZYU.js +1 -0
  122. package/dist/client/assets/chunks/chunk-MYXE7CGE.js +1 -0
  123. package/dist/client/assets/chunks/chunk-NBH7YOBD.js +15 -0
  124. package/dist/client/assets/chunks/chunk-NCOVM3YF.js +1 -0
  125. package/dist/client/assets/chunks/chunk-NCWOBVU7.js +1 -0
  126. package/dist/client/assets/chunks/chunk-NLRIHHEH.js +1 -0
  127. package/dist/client/assets/chunks/chunk-NUPEOYK6.js +1 -0
  128. package/dist/client/assets/chunks/chunk-O4MVOA7X.js +1 -0
  129. package/dist/client/assets/chunks/chunk-OBHQQZ4H.js +1 -0
  130. package/dist/client/assets/chunks/chunk-OKPNJIIR.js +1 -0
  131. package/dist/client/assets/chunks/chunk-OLMPB57R.js +1 -0
  132. package/dist/client/assets/chunks/chunk-P2FYOAEV.js +1 -0
  133. package/dist/client/assets/chunks/chunk-PI3SNP4C.js +1 -0
  134. package/dist/client/assets/chunks/chunk-PRDTEROB.js +1 -0
  135. package/dist/client/assets/chunks/chunk-PZELHD2H.js +136 -0
  136. package/dist/client/assets/chunks/chunk-QR2Q34LM.js +1 -0
  137. package/dist/client/assets/chunks/chunk-R4GIXL6S.js +1 -0
  138. package/dist/client/assets/chunks/chunk-RORF4F5V.js +1 -0
  139. package/dist/client/assets/chunks/chunk-S73BYTLL.js +1 -0
  140. package/dist/client/assets/chunks/chunk-SFC5MRYR.js +1 -0
  141. package/dist/client/assets/chunks/chunk-SVM2H22K.js +2 -0
  142. package/dist/client/assets/chunks/chunk-SZ6UCGVD.js +1 -0
  143. package/dist/client/assets/chunks/chunk-SZYM6GIJ.js +127 -0
  144. package/dist/client/assets/chunks/chunk-TT5KJZKM.js +1 -0
  145. package/dist/client/assets/chunks/chunk-UFBKUYNH.js +1 -0
  146. package/dist/client/assets/chunks/chunk-UL57AD4T.js +1 -0
  147. package/dist/client/assets/chunks/chunk-UNEI7LMM.js +1 -0
  148. package/dist/client/assets/chunks/chunk-VNQBBFIY.js +1 -0
  149. package/dist/client/assets/chunks/chunk-WGVITPII.js +1 -0
  150. package/dist/client/assets/chunks/chunk-WRA6KJHX.js +10 -0
  151. package/dist/client/assets/chunks/chunk-WS5EHW43.js +1 -0
  152. package/dist/client/assets/chunks/chunk-XE6SLBBE.js +3 -0
  153. package/dist/client/assets/chunks/chunk-XF5T2P7U.js +72 -0
  154. package/dist/client/assets/chunks/chunk-XFRY5WKO.js +1 -0
  155. package/dist/client/assets/chunks/chunk-XWYV4OPA.js +1 -0
  156. package/dist/client/assets/chunks/chunk-YCE5ECKY.js +1 -0
  157. package/dist/client/assets/chunks/chunk-YIN5CSIF.js +1 -0
  158. package/dist/client/assets/chunks/chunk-YLFUX6XH.js +1 -0
  159. package/dist/client/assets/chunks/chunk-YNXJICZM.js +1 -0
  160. package/dist/client/assets/chunks/chunk-YOHF7NGD.js +1 -0
  161. package/dist/client/assets/chunks/chunk-YORIST7Z.js +1 -0
  162. package/dist/client/assets/chunks/chunk-YUL7CG4R.js +1 -0
  163. package/dist/client/assets/chunks/chunk-YUN7JSFJ.js +2 -0
  164. package/dist/client/assets/chunks/chunk-YZ7D2IT7.js +1 -0
  165. package/dist/client/assets/chunks/chunk-Z7LAPMFJ.js +1 -0
  166. package/dist/client/assets/chunks/chunk-ZE325LPC.js +1 -0
  167. package/dist/client/assets/chunks/chunk-ZN7TN6PO.js +1 -0
  168. package/dist/client/assets/chunks/chunk-ZST3EVPO.js +1 -0
  169. package/dist/client/assets/chunks/chunk-ZZHMDDZN.js +1 -0
  170. package/dist/client/assets/chunks/clarity-RKRYQ7WF.js +1 -0
  171. package/dist/client/assets/chunks/classDiagram-v2-L25IHNXF-Y67HVDZV.js +217 -0
  172. package/dist/client/assets/chunks/clojure-2X2DQECJ.js +1 -0
  173. package/dist/client/assets/chunks/cmake-LH5524XE.js +1 -0
  174. package/dist/client/assets/chunks/cobol-7DALQF3W.js +1 -0
  175. package/dist/client/assets/chunks/codeowners-52SZU5P5.js +1 -0
  176. package/dist/client/assets/chunks/codeql-EISH3KUP.js +1 -0
  177. package/dist/client/assets/chunks/coffee-VAWSGA7Y.js +1 -0
  178. package/dist/client/assets/chunks/common-lisp-4MVK2AN6.js +1 -0
  179. package/dist/client/assets/chunks/coq-4VRYZRZV.js +1 -0
  180. package/dist/client/assets/chunks/core-BRBMZSD2.js +12 -0
  181. package/dist/client/assets/chunks/cose-bilkent-JH36ORCC-BIOOHSAA.js +1 -0
  182. package/dist/client/assets/chunks/cpp-RFECMSKD.js +1 -0
  183. package/dist/client/assets/chunks/crystal-ZBGGFAOI.js +1 -0
  184. package/dist/client/assets/chunks/csharp-BZDPMKKW.js +1 -0
  185. package/dist/client/assets/chunks/css-3WWGM6UD.js +1 -0
  186. package/dist/client/assets/chunks/csv-AB4GNWSB.js +1 -0
  187. package/dist/client/assets/chunks/cue-2E46MZP2.js +1 -0
  188. package/dist/client/assets/chunks/cynefin-EF2NZ3EQ-TLFQLWUN.js +1 -0
  189. package/dist/client/assets/chunks/cynefinDiagram-L36ESFBY-FLPXCSSG.js +62 -0
  190. package/dist/client/assets/chunks/cypher-HR3ILFOL.js +1 -0
  191. package/dist/client/assets/chunks/d-TARSZPOL.js +1 -0
  192. package/dist/client/assets/chunks/dagre-SPEB5RXH-7EGEINJ2.js +4 -0
  193. package/dist/client/assets/chunks/dart-SALLJHVI.js +1 -0
  194. package/dist/client/assets/chunks/dax-WYMRGMXC.js +1 -0
  195. package/dist/client/assets/chunks/desktop-ND5CGLLJ.js +1 -0
  196. package/dist/client/assets/chunks/diagram-3B7GL73J-6USY4HZX.js +200 -0
  197. package/dist/client/assets/chunks/diagram-DNEMPZML-BNSOC4VW.js +24 -0
  198. package/dist/client/assets/chunks/diagram-L3MUGCDN-5V5FZYIG.js +41 -0
  199. package/dist/client/assets/chunks/diagram-LA4NIPWU-25VLY2CO.js +24 -0
  200. package/dist/client/assets/chunks/diagram-MHCOC4E2-G2LFP3JU.js +3 -0
  201. package/dist/client/assets/chunks/diagram-XPFHEONP-E6HBBIBV.js +30 -0
  202. package/dist/client/assets/chunks/diff-PWYGPM7B.js +1 -0
  203. package/dist/client/assets/chunks/docker-A4D7DT7W.js +1 -0
  204. package/dist/client/assets/chunks/dotenv-VWQWV2DY.js +1 -0
  205. package/dist/client/assets/chunks/dream-maker-M5YDQS35.js +1 -0
  206. package/dist/client/assets/chunks/ebnfDiagram-UZSYDL2S-BMXXZZPI.js +1 -0
  207. package/dist/client/assets/chunks/edge-3QXIDJHI.js +1 -0
  208. package/dist/client/assets/chunks/elixir-3OX2UHIZ.js +1 -0
  209. package/dist/client/assets/chunks/elk-XV6XMXQE-IPR65FON.js +27 -0
  210. package/dist/client/assets/chunks/elm-CTS65NCT.js +1 -0
  211. package/dist/client/assets/chunks/emacs-lisp-HHS2IDO7.js +1 -0
  212. package/dist/client/assets/chunks/engine-javascript-DNHSF67B.js +141 -0
  213. package/dist/client/assets/chunks/erDiagram-EYBAPDEH-3GEHFWHG.js +99 -0
  214. package/dist/client/assets/chunks/erb-ICYWK6HS.js +1 -0
  215. package/dist/client/assets/chunks/erlang-BDQPNCKX.js +1 -0
  216. package/dist/client/assets/chunks/eventmodeling-K75KTNOO-B27BJTZL.js +1 -0
  217. package/dist/client/assets/chunks/fennel-4ONBA2PH.js +1 -0
  218. package/dist/client/assets/chunks/fish-ATLPBZSD.js +1 -0
  219. package/dist/client/assets/chunks/flowDiagram-MALGAFMO-5PCLR4AE.js +1 -0
  220. package/dist/client/assets/chunks/fluent-GGMONBVW.js +1 -0
  221. package/dist/client/assets/chunks/fortran-fixed-form-5MSBDRWQ.js +1 -0
  222. package/dist/client/assets/chunks/fortran-free-form-TT3RBL75.js +1 -0
  223. package/dist/client/assets/chunks/fsharp-PAGHNW4O.js +1 -0
  224. package/dist/client/assets/chunks/ganttDiagram-23REXITY-VE5MVBTO.js +292 -0
  225. package/dist/client/assets/chunks/gdresource-5OTP326D.js +1 -0
  226. package/dist/client/assets/chunks/gdscript-VPWHSCLF.js +1 -0
  227. package/dist/client/assets/chunks/gdshader-FYLPXFE5.js +1 -0
  228. package/dist/client/assets/chunks/genie-UYMEEMA2.js +1 -0
  229. package/dist/client/assets/chunks/gherkin-SU7D5DMY.js +1 -0
  230. package/dist/client/assets/chunks/git-commit-5CF5QAG7.js +1 -0
  231. package/dist/client/assets/chunks/git-rebase-X72BAUZI.js +1 -0
  232. package/dist/client/assets/chunks/gitGraph-VSP46ZUC-J6CJ5YZF.js +1 -0
  233. package/dist/client/assets/chunks/gitGraphDiagram-STJD7YCW-7YJGT6ZP.js +106 -0
  234. package/dist/client/assets/chunks/gleam-LR42YRKO.js +1 -0
  235. package/dist/client/assets/chunks/glimmer-js-JPF67FJU.js +1 -0
  236. package/dist/client/assets/chunks/glimmer-ts-BYPAVIZT.js +1 -0
  237. package/dist/client/assets/chunks/glsl-GTGUULBN.js +1 -0
  238. package/dist/client/assets/chunks/gn-NMDQA4K3.js +1 -0
  239. package/dist/client/assets/chunks/gnuplot-UUAMYBCZ.js +1 -0
  240. package/dist/client/assets/chunks/go-4RERSTNP.js +1 -0
  241. package/dist/client/assets/chunks/graphql-5A6RK6YF.js +1 -0
  242. package/dist/client/assets/chunks/groovy-O7BJONCU.js +1 -0
  243. package/dist/client/assets/chunks/hack-7QGTNPDP.js +1 -0
  244. package/dist/client/assets/chunks/haml-ON5GAWN4.js +1 -0
  245. package/dist/client/assets/chunks/handlebars-6UOQSUBP.js +1 -0
  246. package/dist/client/assets/chunks/haskell-OIZXZ26Y.js +1 -0
  247. package/dist/client/assets/chunks/haxe-7FFVS4FO.js +1 -0
  248. package/dist/client/assets/chunks/hcl-XFUFQJHV.js +1 -0
  249. package/dist/client/assets/chunks/hjson-QDBHMTD5.js +1 -0
  250. package/dist/client/assets/chunks/hlsl-4LP25FFN.js +1 -0
  251. package/dist/client/assets/chunks/html-7RNQXAAV.js +1 -0
  252. package/dist/client/assets/chunks/html-derivative-ESOY72Q2.js +1 -0
  253. package/dist/client/assets/chunks/http-SAD4PMBD.js +1 -0
  254. package/dist/client/assets/chunks/hurl-ZSJJXPQH.js +1 -0
  255. package/dist/client/assets/chunks/hxml-HJCC37RK.js +1 -0
  256. package/dist/client/assets/chunks/hy-CLDE3P4K.js +1 -0
  257. package/dist/client/assets/chunks/imba-REB34U5V.js +1 -0
  258. package/dist/client/assets/chunks/info-OHQRW6UA-EQQKXR77.js +1 -0
  259. package/dist/client/assets/chunks/infoDiagram-KBXO4MBG-F6KGZCGS.js +2 -0
  260. package/dist/client/assets/chunks/ini-PDFEMGRA.js +1 -0
  261. package/dist/client/assets/chunks/ishikawaDiagram-M35NCXHK-5D6ZOZ34.js +70 -0
  262. package/dist/client/assets/chunks/java-KB6XENAD.js +1 -0
  263. package/dist/client/assets/chunks/javascript-3JX5T423.js +1 -0
  264. package/dist/client/assets/chunks/jinja-V4UNU6K4.js +1 -0
  265. package/dist/client/assets/chunks/jison-KH5XNLJP.js +1 -0
  266. package/dist/client/assets/chunks/journeyDiagram-OPLOXDXO-ANDOJZKW.js +139 -0
  267. package/dist/client/assets/chunks/json-HPXFRRPY.js +1 -0
  268. package/dist/client/assets/chunks/json5-LJM6TXWM.js +1 -0
  269. package/dist/client/assets/chunks/jsonc-UZWRU3JV.js +1 -0
  270. package/dist/client/assets/chunks/jsonl-RFZD5UN4.js +1 -0
  271. package/dist/client/assets/chunks/jsonnet-GFZABBL6.js +1 -0
  272. package/dist/client/assets/chunks/jssm-2YIGBISJ.js +1 -0
  273. package/dist/client/assets/chunks/jsx-KLV2ZWUT.js +1 -0
  274. package/dist/client/assets/chunks/julia-3TZDIPPO.js +1 -0
  275. package/dist/client/assets/chunks/just-UHCONBQS.js +1 -0
  276. package/dist/client/assets/chunks/kanban-definition-BZKZHSQY-GF5I5NVD.js +89 -0
  277. package/dist/client/assets/chunks/katex-PIN72PQZ.js +257 -0
  278. package/dist/client/assets/chunks/kdl-DARTFOCL.js +1 -0
  279. package/dist/client/assets/chunks/kotlin-7KT5DW6Y.js +1 -0
  280. package/dist/client/assets/chunks/kusto-EKYXZTC5.js +1 -0
  281. package/dist/client/assets/chunks/langs-GO3UQR4H.js +1 -0
  282. package/dist/client/assets/chunks/latex-T57MIHR5.js +1 -0
  283. package/dist/client/assets/chunks/lean-5QVPRMV6.js +1 -0
  284. package/dist/client/assets/chunks/less-K6QEH5TN.js +1 -0
  285. package/dist/client/assets/chunks/liquid-3LCNNEIV.js +1 -0
  286. package/dist/client/assets/chunks/llvm-O32ZIVRF.js +1 -0
  287. package/dist/client/assets/chunks/log-C4YPJ5BB.js +1 -0
  288. package/dist/client/assets/chunks/logo-JPMO43A6.js +1 -0
  289. package/dist/client/assets/chunks/lua-YKVSOG7K.js +1 -0
  290. package/dist/client/assets/chunks/luau-K4EECYSO.js +1 -0
  291. package/dist/client/assets/chunks/make-VHSYMHHW.js +1 -0
  292. package/dist/client/assets/chunks/markdown-GC5J46H4.js +1 -0
  293. package/dist/client/assets/chunks/marko-U45YFADC.js +1 -0
  294. package/dist/client/assets/chunks/matlab-AMOKC4LU.js +1 -0
  295. package/dist/client/assets/chunks/mdc-DIGA2UXP.js +1 -0
  296. package/dist/client/assets/chunks/mdx-BZUGCKQA.js +1 -0
  297. package/dist/client/assets/chunks/mermaid-WHDP6ZPA.js +1 -0
  298. package/dist/client/assets/chunks/mermaid.core-SQMPMUDN.js +10 -0
  299. package/dist/client/assets/chunks/mindmap-definition-I2QAS2VK-4NH5S56C.js +98 -0
  300. package/dist/client/assets/chunks/mipsasm-2S4CUGQV.js +1 -0
  301. package/dist/client/assets/chunks/mojo-ZOL2PNKT.js +1 -0
  302. package/dist/client/assets/chunks/moonbit-U3BDAIFE.js +1 -0
  303. package/dist/client/assets/chunks/move-YSXALBWA.js +1 -0
  304. package/dist/client/assets/chunks/narrat-DHFIAUJH.js +1 -0
  305. package/dist/client/assets/chunks/nextflow-ESAKNTI3.js +1 -0
  306. package/dist/client/assets/chunks/nextflow-groovy-FKDSPJUI.js +1 -0
  307. package/dist/client/assets/chunks/nginx-XYAYERLO.js +1 -0
  308. package/dist/client/assets/chunks/nim-XOWBVFDH.js +1 -0
  309. package/dist/client/assets/chunks/nix-RVSTQSHC.js +1 -0
  310. package/dist/client/assets/chunks/nsis-KMDUKQRL.js +1 -0
  311. package/dist/client/assets/chunks/nushell-SKJHHZ7U.js +1 -0
  312. package/dist/client/assets/chunks/objective-c-3B3KXQ7Q.js +1 -0
  313. package/dist/client/assets/chunks/objective-cpp-6JDULPJS.js +1 -0
  314. package/dist/client/assets/chunks/ocaml-TMRFXBVO.js +1 -0
  315. package/dist/client/assets/chunks/odin-IN3PLCK7.js +1 -0
  316. package/dist/client/assets/chunks/openscad-P52IKPNH.js +1 -0
  317. package/dist/client/assets/chunks/org-N3SJ2PIA.js +1 -0
  318. package/dist/client/assets/chunks/packet-JDAUHWVQ-4SWIKSKP.js +1 -0
  319. package/dist/client/assets/chunks/pascal-T7CUWCQ4.js +1 -0
  320. package/dist/client/assets/chunks/pegDiagram-FD4XPPHP-WDKZSEGN.js +1 -0
  321. package/dist/client/assets/chunks/perl-LCZ4KODH.js +1 -0
  322. package/dist/client/assets/chunks/php-4XHMBVR5.js +1 -0
  323. package/dist/client/assets/chunks/pie-XZMESJXO-PSSWOWGV.js +1 -0
  324. package/dist/client/assets/chunks/pieDiagram-J4AKIIQI-BDW5I5ON.js +39 -0
  325. package/dist/client/assets/chunks/pkl-OACG5B67.js +1 -0
  326. package/dist/client/assets/chunks/plsql-7E5C7CJX.js +1 -0
  327. package/dist/client/assets/chunks/po-ZSREFRRP.js +1 -0
  328. package/dist/client/assets/chunks/polar-4GBINVA7.js +1 -0
  329. package/dist/client/assets/chunks/postcss-B7RPVGFW.js +1 -0
  330. package/dist/client/assets/chunks/powerquery-6UFMTY4G.js +1 -0
  331. package/dist/client/assets/chunks/powershell-3STRPCNT.js +1 -0
  332. package/dist/client/assets/chunks/prisma-4TPSPIZ5.js +1 -0
  333. package/dist/client/assets/chunks/prolog-HEAYPKQW.js +1 -0
  334. package/dist/client/assets/chunks/proto-Y3Y3VKXM.js +1 -0
  335. package/dist/client/assets/chunks/pug-7PBPMG3M.js +1 -0
  336. package/dist/client/assets/chunks/puppet-FR35R4OI.js +1 -0
  337. package/dist/client/assets/chunks/purescript-OUHXQAOW.js +1 -0
  338. package/dist/client/assets/chunks/python-SNDG7FNU.js +1 -0
  339. package/dist/client/assets/chunks/qml-UVIOSWP4.js +1 -0
  340. package/dist/client/assets/chunks/qmldir-6JGUNYL5.js +1 -0
  341. package/dist/client/assets/chunks/qss-ZCC466IZ.js +1 -0
  342. package/dist/client/assets/chunks/quadrantDiagram-XTYBLID2-5VKXWVJ6.js +7 -0
  343. package/dist/client/assets/chunks/r-4XW4O3ZF.js +1 -0
  344. package/dist/client/assets/chunks/racket-YJAYXOOG.js +1 -0
  345. package/dist/client/assets/chunks/radar-ABXABTNO-3AXZCEY2.js +1 -0
  346. package/dist/client/assets/chunks/railroad-I3PHUGI6-2PLXYPOT.js +1 -0
  347. package/dist/client/assets/chunks/railroad-abnf-LNEFI6M7-M4DGICQX.js +1 -0
  348. package/dist/client/assets/chunks/railroad-ebnf-DWYD2UWJ-UEIHQMSZ.js +1 -0
  349. package/dist/client/assets/chunks/railroad-peg-JR7BVNR7-I7VLIBXM.js +1 -0
  350. package/dist/client/assets/chunks/railroadDiagram-MRQ6NCDL-Y6IYWEFL.js +1 -0
  351. package/dist/client/assets/chunks/raku-63NEL5JK.js +1 -0
  352. package/dist/client/assets/chunks/razor-J3CJP523.js +1 -0
  353. package/dist/client/assets/chunks/rbs-6GQLT7NW.js +1 -0
  354. package/dist/client/assets/chunks/reg-6Q3OEC2C.js +1 -0
  355. package/dist/client/assets/chunks/regexp-LPIMILT3.js +1 -0
  356. package/dist/client/assets/chunks/rel-TOQGUTHB.js +1 -0
  357. package/dist/client/assets/chunks/requirementDiagram-Y7LWUY3S-CIWXVVWJ.js +84 -0
  358. package/dist/client/assets/chunks/riscv-UELGBOXE.js +1 -0
  359. package/dist/client/assets/chunks/ron-FW7LCJJH.js +1 -0
  360. package/dist/client/assets/chunks/rosmsg-O63VHE3L.js +1 -0
  361. package/dist/client/assets/chunks/rst-3WJXGLA7.js +1 -0
  362. package/dist/client/assets/chunks/ruby-7S7L6JTH.js +1 -0
  363. package/dist/client/assets/chunks/rust-LIK4HRRI.js +1 -0
  364. package/dist/client/assets/chunks/sankeyDiagram-WGJFYUXA-OGNQPX5V.js +40 -0
  365. package/dist/client/assets/chunks/sas-FHDPZ2JH.js +1 -0
  366. package/dist/client/assets/chunks/sass-UI4HW2FN.js +1 -0
  367. package/dist/client/assets/chunks/scala-KN7RQSUJ.js +1 -0
  368. package/dist/client/assets/chunks/scheme-5R527YZ5.js +1 -0
  369. package/dist/client/assets/chunks/scss-KZ6DRE4A.js +1 -0
  370. package/dist/client/assets/chunks/sdbl-FHOCL5SL.js +1 -0
  371. package/dist/client/assets/chunks/sequenceDiagram-5NDRBG5M-QX2V24ZU.js +169 -0
  372. package/dist/client/assets/chunks/shaderlab-2TLHUS2H.js +1 -0
  373. package/dist/client/assets/chunks/shellscript-PIB6ZBDM.js +1 -0
  374. package/dist/client/assets/chunks/shellsession-5KL7NFNN.js +1 -0
  375. package/dist/client/assets/chunks/sizeCapture-INFHLROL-LCS2PIHM.js +1 -0
  376. package/dist/client/assets/chunks/smalltalk-JFLFU247.js +1 -0
  377. package/dist/client/assets/chunks/smithy-HONEXZAM.js +1 -0
  378. package/dist/client/assets/chunks/solidity-SJ3INJFZ.js +1 -0
  379. package/dist/client/assets/chunks/soy-ND4SWTM2.js +1 -0
  380. package/dist/client/assets/chunks/sparql-YB2JQBZD.js +1 -0
  381. package/dist/client/assets/chunks/splunk-UXIDDAWL.js +1 -0
  382. package/dist/client/assets/chunks/sql-K6OMG7SQ.js +1 -0
  383. package/dist/client/assets/chunks/ssh-config-I7KJY3KQ.js +1 -0
  384. package/dist/client/assets/chunks/stata-DNZ3DTFJ.js +1 -0
  385. package/dist/client/assets/chunks/stateDiagram-v2-FJ4FJNEA-LVAUWF3A.js +291 -0
  386. package/dist/client/assets/chunks/stylus-GWPR6IQY.js +1 -0
  387. package/dist/client/assets/chunks/surrealql-KQNHBWLC.js +1 -0
  388. package/dist/client/assets/chunks/svelte-YQKF25S4.js +1 -0
  389. package/dist/client/assets/chunks/swift-ZCIZUJXA.js +1 -0
  390. package/dist/client/assets/chunks/swimlanes-UMQ2AFYF-B3RQOARQ.js +1 -0
  391. package/dist/client/assets/chunks/swimlanesDiagram-OMPLPG4O-JOE33EOV.js +8 -0
  392. package/dist/client/assets/chunks/system-verilog-Y7E6FIO3.js +1 -0
  393. package/dist/client/assets/chunks/systemd-WHC7NBZP.js +1 -0
  394. package/dist/client/assets/chunks/talonscript-WC7SODAH.js +1 -0
  395. package/dist/client/assets/chunks/tasl-QHY2GTCB.js +1 -0
  396. package/dist/client/assets/chunks/tcl-VAMIL5PJ.js +1 -0
  397. package/dist/client/assets/chunks/temml-ISNSX3VV.js +96 -0
  398. package/dist/client/assets/chunks/templ-B3BHKWV4.js +1 -0
  399. package/dist/client/assets/chunks/terraform-Q4UEK6FK.js +1 -0
  400. package/dist/client/assets/chunks/tex-63OWCYAB.js +1 -0
  401. package/dist/client/assets/chunks/timeline-definition-SEUHKTQE-FDFTVAJG.js +120 -0
  402. package/dist/client/assets/chunks/toml-7Z4IPGES.js +1 -0
  403. package/dist/client/assets/chunks/treeView-D4JQ5SDB-ABSGRAGI.js +1 -0
  404. package/dist/client/assets/chunks/treemap-SAJKECNS-MYX2CBJN.js +1 -0
  405. package/dist/client/assets/chunks/ts-tags-DT62HE52.js +1 -0
  406. package/dist/client/assets/chunks/tsv-RTXHWADP.js +1 -0
  407. package/dist/client/assets/chunks/tsx-UANUBOC7.js +1 -0
  408. package/dist/client/assets/chunks/turtle-QVOUNUUL.js +1 -0
  409. package/dist/client/assets/chunks/twig-ZPC4BPDA.js +1 -0
  410. package/dist/client/assets/chunks/typescript-WGWKIMMW.js +1 -0
  411. package/dist/client/assets/chunks/typespec-TYCVR32J.js +1 -0
  412. package/dist/client/assets/chunks/typst-PIBFYUO6.js +1 -0
  413. package/dist/client/assets/chunks/usecaseDiagram-AFA6YXN4-KW7ADINR.js +370 -0
  414. package/dist/client/assets/chunks/v-3ERNWBSP.js +1 -0
  415. package/dist/client/assets/chunks/vala-UCBCT2GS.js +1 -0
  416. package/dist/client/assets/chunks/vb-DGI3VTPA.js +1 -0
  417. package/dist/client/assets/chunks/vennDiagram-NNMJR3RB-RDGLGOGM.js +34 -0
  418. package/dist/client/assets/chunks/verilog-G72NZROS.js +1 -0
  419. package/dist/client/assets/chunks/vhdl-PYGA77XE.js +1 -0
  420. package/dist/client/assets/chunks/viml-OOC5B5UU.js +1 -0
  421. package/dist/client/assets/chunks/vue-GTNHIOPG.js +1 -0
  422. package/dist/client/assets/chunks/vue-html-DKAMJV55.js +1 -0
  423. package/dist/client/assets/chunks/vue-vine-WTM5HREV.js +1 -0
  424. package/dist/client/assets/chunks/vyper-RHYEHOJM.js +1 -0
  425. package/dist/client/assets/chunks/wardley-7MLQ67FV-QJL2HSBT.js +1 -0
  426. package/dist/client/assets/chunks/wardleyDiagram-S7YFUSEH-A4XX3UJR.js +78 -0
  427. package/dist/client/assets/chunks/wasm-ZMM2Z5XV.js +1 -0
  428. package/dist/client/assets/chunks/wenyan-HF5UTKSJ.js +1 -0
  429. package/dist/client/assets/chunks/wgsl-O7D7OPO7.js +1 -0
  430. package/dist/client/assets/chunks/wikitext-T7BSWSKQ.js +1 -0
  431. package/dist/client/assets/chunks/wit-TKCHPPT6.js +1 -0
  432. package/dist/client/assets/chunks/wolfram-7MN66A7N.js +1 -0
  433. package/dist/client/assets/chunks/xml-NLTLAWOD.js +1 -0
  434. package/dist/client/assets/chunks/xsl-NZ4ECK3P.js +1 -0
  435. package/dist/client/assets/chunks/xychartDiagram-GGNKY7IX-OXJILWHR.js +7 -0
  436. package/dist/client/assets/chunks/yaml-HRJLEV3V.js +1 -0
  437. package/dist/client/assets/chunks/zenscript-4LLRSLPI.js +1 -0
  438. package/dist/client/assets/chunks/zig-Y7MUQFUO.js +1 -0
  439. package/dist/client/assets/main.js +169 -0
  440. package/dist/client/index.html +48 -0
  441. package/dist/config.js +322 -0
  442. package/dist/files.js +178 -0
  443. package/dist/git.js +232 -0
  444. package/dist/glob.js +89 -0
  445. package/dist/review.js +261 -0
  446. package/dist/search.js +136 -0
  447. package/dist/server.js +420 -0
  448. package/dist/watch.js +69 -0
  449. package/dist/zip.js +100 -0
  450. package/package.json +61 -4
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ClickerMonkey
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,271 @@
1
- # Temporary Holding Version
1
+ # folderview
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Browse, search and review any folder in your browser, on your computer or your phone.
4
+
5
+ ```sh
6
+ npx folderview # the current folder, on http://localhost:4190
7
+ npx folderview ~/my-app --lan --open # another folder, reachable from your phone too
8
+ ```
9
+
10
+ Or install it once with `npm i -g folderview`, then run `folderview`.
11
+
12
+ You get:
13
+
14
+ - **Code**, highlighted by Shiki, with line numbers and git change bars.
15
+ - **Markdown**, rendered the way GitHub renders it, plus **Mermaid diagrams** and **math**.
16
+ - **Previews** for images, audio, video, PDF, CSV, JSON, notebooks and fonts.
17
+ - **Git:** status colours, diffs and history.
18
+ - **Search** across files, and a fuzzy **Go to file**.
19
+ - **Downloads**, for single files and for whole folders as a zip.
20
+ - A **review mode**. Your comments on lines are saved to a file that an LLM agent can read and work through. Its
21
+ replies show up in your browser as it works.
22
+
23
+ The screenshots show folderview at phone size, open on a small demo repository (`npm run screenshots` builds it).
24
+
25
+ | | | |
26
+ |:-:|:-:|:-:|
27
+ | ![A folder: git colours on changed folders, comment counts](docs/screenshots/folder.png) | ![Code highlighted by Shiki, a selected line and its actions](docs/screenshots/code.png) | ![A file's changes since the last commit](docs/screenshots/diff.png) |
28
+ | **Folders** with git colours | **Code**, with change bars | **Changes** for one file |
29
+ | ![Review comments inline under the lines, with an agent's reply](docs/screenshots/review.png) | ![The Review page: every comment, open and resolved](docs/screenshots/review-page.png) | ![Markdown rendered](docs/screenshots/markdown.png) |
30
+ | **Review** comments on lines | Every comment, for an **agent** | **Markdown** |
31
+ | ![Mermaid diagrams drawn in the page's colours](docs/screenshots/diagrams.png) | ![Math and a code block in dark mode](docs/screenshots/math-code.png) | ![Every changed file](docs/screenshots/changes.png) |
32
+ | **Mermaid** diagrams | **Math** and code, dark mode | **All changes** |
33
+ | ![Search results with highlighted matches](docs/screenshots/search.png) | ![Go to file: fuzzy matching](docs/screenshots/quick-open.png) | ![A folder of screenshots as thumbnails](docs/screenshots/thumbnails.png) |
34
+ | **Search** in files | **Go to file** | **Thumbnails** |
35
+ | ![An image that changed: the last commit and now](docs/screenshots/image.png) | ![A file's history: a commit's diff](docs/screenshots/history.png) | ![JSON as a tree](docs/screenshots/json.png) |
36
+ | **Images**: before and after | **History** | **JSON** tree |
37
+ | ![A CSV file as a table](docs/screenshots/table.png) | ![Code in dark mode](docs/screenshots/dark-code.png) | ![Settings](docs/screenshots/settings.png) |
38
+ | **CSV** as a table | **Dark mode** | **Settings** |
39
+
40
+ [docs/examples/markdown.md](docs/examples/markdown.md) shows everything the markdown view can draw.
41
+
42
+ ## Viewing files
43
+
44
+ Each kind of file gets its own view. Files with source text also get a **Source** tab:
45
+
46
+ | Files | Shown as |
47
+ |---|---|
48
+ | Code and text (200+ languages) | Highlighted, with line numbers, change bars from git, wrap, copy, download, and links to a line (`#…&line=12` or `12-20`). |
49
+ | Markdown | Rendered GitHub-style: tables, task lists, `> [!NOTE]` alerts, footnotes, heading anchors, front matter, sanitised inline HTML, Mermaid (` ```mermaid `), math (`$…$`, `$$…$$`, ` ```math `). Relative links open in the viewer, and relative images load from the folder. |
50
+ | `.mmd`, `.mermaid` | The diagram |
51
+ | Images, SVG | The image and its size. Tap for full size. |
52
+ | Audio, video | A player that can seek |
53
+ | PDF | The browser's PDF viewer |
54
+ | HTML | A sandboxed preview where scripts don't run |
55
+ | CSV, TSV | A table you can sort and filter |
56
+ | JSON | A collapsible tree |
57
+ | Jupyter notebooks | Cells, outputs and plots |
58
+ | Fonts | Samples at several sizes, in your own text |
59
+ | Anything else | A hex dump of the first bytes |
60
+
61
+ Every file has a **Download** button. Every folder has one too, which downloads the folder as a `.zip` of what the
62
+ listing shows.
63
+
64
+ ## Git
65
+
66
+ When the folder is in a git repository:
67
+
68
+ - **Colours:** names are coloured by state. Green is new or added, orange is changed, red is deleted, blue is
69
+ renamed, purple is a conflict. Ignored files are dimmed, or hidden if you choose.
70
+ - **Folders:** each folder has a dot for the most important change inside it.
71
+ - **Deleted files** still show, struck through, so you can open what they were.
72
+ - **Branch:** the top bar shows the branch, its commit, and how far it is ahead of or behind its upstream.
73
+ - **Changes:** lists every changed file with lines added and removed, and whether it's staged. It can also show
74
+ every diff on one page.
75
+ - **Each file** has **Changes** (its diff against the last commit) and **History** (its commits; tap one to see what
76
+ it changed). Images also get **Compare**: before and after, side by side.
77
+
78
+ ## Search
79
+
80
+ - **Search in files:** press <kbd>/</kbd> or tap the search bar.
81
+ - Search everywhere, or only in the open folder.
82
+ - Turn on match case, whole word, or regular expression.
83
+ - Narrow it to some files with patterns like `*.ts, src/**, !*.test.ts`.
84
+ - In a git repository it uses `git grep` to find candidate files first, so it's quick on big repositories.
85
+ - It skips ignored files, excluded files, secrets and binaries.
86
+ - **Go to file:** press <kbd>Ctrl</kbd> <kbd>P</kbd> (or <kbd>Ctrl</kbd> <kbd>K</kbd>), or tap the file icon. Type
87
+ any part of a file or folder name. Start with `?` to search inside files instead.
88
+
89
+ ## Live
90
+
91
+ When a file changes on disk, open pages update by themselves: the listing, the git colours, and the open file.
92
+
93
+ ## Review mode: comments an agent can work through
94
+
95
+ 1. **Comment.** Tap a line number (Shift-click for a range), then **Comment**. The comment button in a file's header
96
+ comments on the whole file. You can comment on diff lines too. Turn on **Review mode** in Settings and a single
97
+ tap on any line starts a comment.
98
+ 2. **Saved.** Comments are saved to `.review/comments.json`. Each one keeps the quoted lines and the commit it was
99
+ left on. The same comments are written to `.review/REVIEW.md`, grouped by file, with instructions for an agent.
100
+ 3. **Hand it to your agent.** The Review page has **Copy prompt for an agent**. Paste it into Claude Code (or any
101
+ coding agent). The agent reads `REVIEW.md`, makes the changes, then sets each comment to `"resolved"` in
102
+ `comments.json` and adds a reply.
103
+ 4. **Watch it work.** folderview watches `comments.json`, so the agent's replies and resolutions appear in your
104
+ browser as they happen.
105
+
106
+ ### Where to look for feedback
107
+
108
+ folderview points you, or your agent, at the feedback in three places:
109
+
110
+ - **When it starts:** the terminal shows where comments are saved, plus an instruction you can paste into an agent:
111
+
112
+ ```
113
+ Review feedback is saved to .review/REVIEW.md (and .review/comments.json).
114
+ For an agent: "Read .review/REVIEW.md. It lists review comments on files in this folder ..."
115
+ There are 2 open comments waiting: npx folderview review
116
+ ```
117
+
118
+ - **While it runs:** each time the comments change, it prints a line. An agent that started folderview in the
119
+ background sees these in its output:
120
+
121
+ ```
122
+ [9:16:04 PM] review: 2 open comments (of 2) → .review/REVIEW.md (or run: npx folderview review)
123
+ [9:16:24 PM] review: no open comments (2 resolved)
124
+ ```
125
+
126
+ - **Any time:** `folderview review` prints the open comments in the folder (the same text as `REVIEW.md`), even when
127
+ folderview isn't running. Add `--all` to include resolved ones, or `--json` for a script.
128
+
129
+ ```sh
130
+ npx folderview review # what's open, with instructions for an agent
131
+ npx folderview review ../app --all --json
132
+ ```
133
+
134
+ To make an agent check on its own, add a line to its instructions file (`CLAUDE.md`, `AGENTS.md`, …):
135
+
136
+ ```md
137
+ Before finishing a task, run `npx folderview review` and work through any open review comments.
138
+ ```
139
+
140
+ Comments have replies, editing, resolve and reopen, and delete. Agents and scripts can also use the
141
+ [API](#the-api) directly.
142
+
143
+ ## Options
144
+
145
+ ```
146
+ folderview [folder] [options]
147
+ ```
148
+
149
+ | Option | Environment variable | Default | |
150
+ |---|---|---|---|
151
+ | `folder` | `FOLDERVIEW_ROOT` | the current folder | The folder to serve |
152
+ | `-p, --port <n>` | `FOLDERVIEW_PORT` | `4190` | The port to try first; the next free one is used |
153
+ | `-H, --host <addr>` | `FOLDERVIEW_HOST` | `127.0.0.1` | The address to listen on |
154
+ | `--lan` | | | Same as `--host 0.0.0.0`: reachable from your phone and other devices |
155
+ | `--base <path>` | `FOLDERVIEW_BASE` | `/` | Serve under a URL path, such as `/code/`, behind a reverse proxy |
156
+ | `-o, --open` | `FOLDERVIEW_OPEN` | off | Open it in your browser |
157
+ | `-x, --exclude <globs>` | `FOLDERVIEW_EXCLUDE` | | Never show, serve, search or zip these. Comma-separated and repeatable. See [Excluding files](#excluding-files). |
158
+ | `--hide <names>` | `FOLDERVIEW_HIDE` | | Exact names to hide everywhere (`.git` always is) |
159
+ | `--show-secrets` | `FOLDERVIEW_SHOW_SECRETS` | off | Show `.env*`, `*.key`, `*.pem` and `id_rsa`-style files |
160
+ | `--token <t>` | `FOLDERVIEW_TOKEN` | | Require a token. Open `?token=…` once and it's kept as a cookie. |
161
+ | `--allow-host <h>` | `FOLDERVIEW_ALLOW_HOSTS` | | Also accept this host name, such as a tunnel's (`*` for any) |
162
+ | `--review-dir <dir>` | `FOLDERVIEW_REVIEW_DIR` | `.review` | Where comments are saved |
163
+ | `--title <name>` | `FOLDERVIEW_TITLE` | the folder's name | The name at the top of the page |
164
+ | `--author <name>` | `FOLDERVIEW_AUTHOR` | git `user.name` | The default name on comments |
165
+ | `--max-file-mb <n>` | `FOLDERVIEW_MAX_FILE_MB` | `5` | Larger files aren't shown as text or searched (download still works) |
166
+ | `--read-only` | `FOLDERVIEW_READ_ONLY` | off | Nobody can add comments |
167
+ | `--no-git` | `FOLDERVIEW_GIT=false` | git on | Don't use git |
168
+ | `--no-watch` | `FOLDERVIEW_WATCH=false` | watch on | No live updates |
169
+ | `--print-config` | | | Print the settings and where each came from, then exit |
170
+
171
+ Settings come from these places, highest first:
172
+
173
+ 1. **Flags** on the command line.
174
+ 2. **Environment variables.**
175
+ 3. **`.folderviewrc.json`** in the folder.
176
+ 4. **Your config file**, `~/.config/folderview/config.json`. `$XDG_CONFIG_HOME` moves it, or set `FOLDERVIEW_CONFIG` to
177
+ any path.
178
+ 5. **The defaults.**
179
+
180
+ For true/false variables, `0`, `false`, `no` and `off` all mean off.
181
+
182
+ Both config files use the option names in camelCase:
183
+
184
+ ```json
185
+ {
186
+ "port": 4300,
187
+ "exclude": ["*.log", "coverage/", "**/*.min.js"],
188
+ "title": "My app",
189
+ "readOnly": false
190
+ }
191
+ ```
192
+
193
+ ## Excluding files
194
+
195
+ Exclude patterns add up from every source: your config file, `.folderviewrc.json`, `FOLDERVIEW_EXCLUDE`, `--exclude`,
196
+ and a **`.folderviewignore`** file in the folder (one pattern per line, `#` for comments). They use `.gitignore`
197
+ syntax:
198
+
199
+ | Pattern | Excludes |
200
+ |---|---|
201
+ | `*.log` | Any `.log` file, in any folder |
202
+ | `dist/` | Any folder named `dist`, and everything in it |
203
+ | `/secrets` | Only `secrets` at the top of the folder |
204
+ | `docs/**/*.tmp` | `.tmp` files anywhere under `docs` |
205
+ | `!keep.log` | An exception to an earlier pattern |
206
+
207
+ An excluded file can't be listed, opened, downloaded, searched or zipped, even by URL.
208
+
209
+ These are hidden even without any patterns:
210
+
211
+ - `.git`.
212
+ - **Secrets:** `.env*` (except `.env.example` and `.env.sample`), `*.key`, `*.pem`, `*.p12`, `*.pfx` and `id_rsa`-style
213
+ keys. `--show-secrets` shows these.
214
+
215
+ Git-ignored files (like `node_modules`) are shown dimmed, and search skips them.
216
+
217
+ ## Safety
218
+
219
+ - **Local by default.** It listens on `127.0.0.1` unless you pass `--lan` or `--host`. Anyone who can reach the port
220
+ can read every file that isn't hidden or excluded. On a shared network, add `--token` (or `FOLDERVIEW_TOKEN`).
221
+ - **Nothing outside the folder** is served, even through symlinks.
222
+ - **DNS rebinding:** requests for unknown host names are refused. Use `--allow-host` for a tunnel or proxy name.
223
+ - **Writes** (comments) must come from the page itself. Posts from other sites are refused.
224
+ - **No scripts from your files:**
225
+ - Files are served with a strict Content-Security-Policy, so an SVG or HTML file can't run script.
226
+ - HTML previews are sandboxed.
227
+ - Markdown is sanitised.
228
+ - Mermaid runs in strict mode and is drawn as an image.
229
+ - **Writes nothing else.** The only files folderview writes are in the review folder.
230
+
231
+ ## The API
232
+
233
+ Everything the page does goes through a small JSON API (under `--base`, if set):
234
+
235
+ | Request | Gives |
236
+ |---|---|
237
+ | `GET api/info` | The folder's name, git, the review files, settings the page needs |
238
+ | `GET api/list?p=<folder>` | A folder's entries |
239
+ | `GET raw/<path>` | A file (supports `Range`). Add `?download=1` to download it. |
240
+ | `GET api/zip?p=<folder>` | A folder as a `.zip` |
241
+ | `GET api/files` | Every file (git-aware) |
242
+ | `GET api/search?q=&scope=&regex=1&case=1&word=1&include=` | Matches by file and line |
243
+ | `GET api/git/status` | Branch, ahead/behind, each change with +/− |
244
+ | `GET api/git/diff?p=` | A file's diff against the last commit |
245
+ | `GET api/git/log?p=` | A file's history |
246
+ | `GET api/git/show?p=&rev=` | A file at a commit |
247
+ | `GET api/comments` | Every comment |
248
+ | `POST api/comments` | Add one: `{ path, line?, endLine?, body, author? }` |
249
+ | `PATCH api/comments/<id>` | `{ status: "resolved" }` or `{ body }` |
250
+ | `POST api/comments/<id>/replies` | `{ body, author }` |
251
+ | `DELETE api/comments/<id>` | Delete one |
252
+ | `GET api/review.md` | The agent-ready summary |
253
+ | `GET api/events` | Server-sent events: `change` (files, git) and `comments` |
254
+
255
+ With a token set, send `Authorization: Bearer <token>`.
256
+
257
+ ## Develop
258
+
259
+ ```sh
260
+ npm install
261
+ npm run dev -- ../some-folder # build everything and serve a folder
262
+ npm run watch:client # rebuild the page as you edit client/ (run the server separately)
263
+ npm test # build, then run the tests
264
+ npm run screenshots # retake docs/screenshots at phone size, on a fresh demo repository
265
+ # (needs: npx playwright install chromium)
266
+ ```
267
+
268
+ - **The server** is TypeScript in `src/`. It needs Node 20 or newer and has no runtime dependencies.
269
+ - **The page** is plain JavaScript in `client/`. esbuild bundles it into `dist/client` and splits out what loads
270
+ only when needed: Shiki's grammars, Mermaid and the math renderer.
271
+ - **The look** is one set of design tokens: one indigo accent, calm neutrals, and light and dark modes.
package/dist/cli.js ADDED
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env node
2
+ // folderview [folder] [options]: browse, search and review a folder in the browser.
3
+ // folderview review [folder] [--all] [--json]: print the review comments left in it (for you, or for an agent).
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import fs from 'node:fs';
7
+ import { spawn } from 'node:child_process';
8
+ import { ConfigError, HELP, describe, resolve } from './config.js';
9
+ import { start } from './server.js';
10
+ import { Review, agentPrompt, toMarkdown } from './review.js';
11
+ function fail(msg) {
12
+ console.error(`folderview: ${msg}`);
13
+ process.exit(1);
14
+ }
15
+ const argv = process.argv.slice(2);
16
+ const reviewCommand = argv[0] === 'review';
17
+ const all = reviewCommand && argv.includes('--all');
18
+ const asJson = reviewCommand && argv.includes('--json');
19
+ const args = reviewCommand ? argv.slice(1).filter((a) => a !== '--all' && a !== '--json') : argv;
20
+ let parsed;
21
+ try {
22
+ parsed = resolve(args);
23
+ }
24
+ catch (e) {
25
+ fail(e instanceof ConfigError ? e.message : String(e));
26
+ }
27
+ if (parsed.help) {
28
+ console.log(HELP);
29
+ process.exit(0);
30
+ }
31
+ if (parsed.version) {
32
+ console.log(JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version);
33
+ process.exit(0);
34
+ }
35
+ const s = parsed.settings;
36
+ if (parsed.printConfig) {
37
+ console.log(describe(s));
38
+ console.log(s.configFiles.length ? ` read: ${s.configFiles.join(', ')}` : ' (no config files)');
39
+ process.exit(0);
40
+ }
41
+ const rel = (p) => {
42
+ const r = path.relative(s.root, p);
43
+ return r && !r.startsWith('..') && !path.isAbsolute(r) ? r.split(path.sep).join('/') : p;
44
+ };
45
+ const reviewDir = path.resolve(s.root, s.reviewDir);
46
+ const mdRel = rel(path.join(reviewDir, 'REVIEW.md'));
47
+ const jsonRel = rel(path.join(reviewDir, 'comments.json'));
48
+ // `folderview review`: the comments, as an agent should read them, and nothing else
49
+ if (reviewCommand) {
50
+ const comments = new Review(reviewDir, s.root).all();
51
+ const shown = all ? comments : comments.filter((c) => c.status === 'open');
52
+ if (asJson)
53
+ console.log(JSON.stringify({ comments: shown, file: jsonRel, instructions: agentPrompt(mdRel, jsonRel) }, null, 2));
54
+ else if (!shown.length)
55
+ console.log(comments.length ? `No open review comments (${comments.length} resolved, in ${jsonRel}).` : 'No review comments yet.');
56
+ else
57
+ console.log(toMarkdown(shown, jsonRel, { openOnly: !all }));
58
+ process.exit(0);
59
+ }
60
+ function lanAddresses() {
61
+ return Object.values(os.networkInterfaces())
62
+ .flat()
63
+ .filter((n) => !!n && n.family === 'IPv4' && !n.internal)
64
+ .map((n) => n.address);
65
+ }
66
+ function openBrowser(url) {
67
+ const cmd = process.platform === 'win32' ? 'cmd' : process.platform === 'darwin' ? 'open' : 'xdg-open';
68
+ const args = process.platform === 'win32' ? ['/c', 'start', '', url.replace(/&/g, '^&')] : [url];
69
+ spawn(cmd, args, { stdio: 'ignore', detached: true, windowsHide: true }).on('error', () => undefined).unref();
70
+ }
71
+ let lastOpen = -1;
72
+ const running = await start({
73
+ ...s,
74
+ // while it runs, say when there's feedback to read: whoever (or whatever) started it sees it here
75
+ onReviewChange: (open, total) => {
76
+ if (open === lastOpen)
77
+ return;
78
+ lastOpen = open;
79
+ const time = new Date().toLocaleTimeString();
80
+ if (open)
81
+ console.log(`[${time}] review: ${open} open comment${open === 1 ? '' : 's'} (of ${total}) → ${mdRel} (or run: npx folderview review)`);
82
+ else
83
+ console.log(`[${time}] review: no open comments (${total} resolved)`);
84
+ },
85
+ }).catch((err) => fail(err instanceof Error ? err.message : String(err)));
86
+ const suffix = s.base + (s.token ? `?token=${encodeURIComponent(s.token)}` : '');
87
+ const everywhere = s.host === '0.0.0.0' || s.host === '::';
88
+ const hostShown = everywhere || s.host === '127.0.0.1' || s.host === '::1' ? 'localhost' : s.host;
89
+ console.log(`folderview ${s.root}`);
90
+ console.log(` http://${hostShown}:${running.port}${suffix}`);
91
+ if (everywhere)
92
+ for (const ip of lanAddresses())
93
+ console.log(` http://${ip}:${running.port}${suffix}`);
94
+ else if (s.host === '127.0.0.1')
95
+ console.log(' (add --lan to open it from other devices)');
96
+ if (s.exclude.length)
97
+ console.log(` excluding: ${s.exclude.join(', ')}`);
98
+ console.log('');
99
+ console.log(` Review feedback is saved to ${mdRel} (and ${jsonRel}).`);
100
+ console.log(' For an agent: "' + agentPrompt(mdRel, jsonRel) + '"');
101
+ {
102
+ const existing = new Review(reviewDir, s.root).all();
103
+ const open = existing.filter((c) => c.status === 'open').length;
104
+ lastOpen = open;
105
+ if (open)
106
+ console.log(` There ${open === 1 ? 'is 1 open comment' : `are ${open} open comments`} waiting: npx folderview review`);
107
+ }
108
+ if (s.open)
109
+ openBrowser(`http://localhost:${running.port}${suffix}`);
110
+ const stop = () => {
111
+ void running.close().finally(() => process.exit(0));
112
+ setTimeout(() => process.exit(0), 1500).unref();
113
+ };
114
+ process.on('SIGINT', stop);
115
+ process.on('SIGTERM', stop);
@@ -0,0 +1 @@
1
+ :root{color-scheme:light dark;--accent: light-dark(oklch(.55 .17 268), oklch(.7 .14 268));--accent-hover: light-dark(oklch(.5 .18 268), oklch(.75 .13 268));--accent-soft: light-dark(oklch(.55 .17 268 / .1), oklch(.7 .14 268 / .16));--accent-soft-strong: light-dark(oklch(.55 .17 268 / .18), oklch(.7 .14 268 / .26));--on-accent: light-dark(#ffffff, oklch(.18 .03 268));--bg: light-dark(oklch(.985 .002 270), oklch(.16 .006 270));--surface: light-dark(#ffffff, oklch(.2 .007 270));--surface-2: light-dark(oklch(.965 .003 270), oklch(.235 .008 270));--surface-3: light-dark(oklch(.935 .004 270), oklch(.28 .009 270));--overlay: light-dark(oklch(.2 .01 270 / .32), oklch(.05 .01 270 / .6));--text: light-dark(oklch(.22 .01 270), oklch(.94 .004 270));--text-dim: light-dark(oklch(.45 .012 270), oklch(.74 .01 270));--text-faint: light-dark(oklch(.58 .01 270), oklch(.6 .01 270));--border: light-dark(oklch(.91 .004 270), oklch(.3 .008 270));--border-strong: light-dark(oklch(.84 .006 270), oklch(.38 .01 270));--ok: light-dark(oklch(.52 .13 155), oklch(.74 .14 155));--ok-soft: light-dark(oklch(.52 .13 155 / .12), oklch(.74 .14 155 / .16));--warn: light-dark(oklch(.55 .13 70), oklch(.8 .13 80));--warn-soft: light-dark(oklch(.7 .14 75 / .16), oklch(.8 .13 80 / .16));--danger: light-dark(oklch(.55 .19 22), oklch(.72 .16 22));--danger-soft: light-dark(oklch(.55 .19 22 / .1), oklch(.72 .16 22 / .16));--code-bg: light-dark(oklch(.97 .004 270), oklch(.18 .007 270));--selection: var(--accent-soft-strong);--g-new: var(--ok);--g-mod: var(--warn);--g-del: var(--danger);--g-ren: light-dark(oklch(.55 .15 240), oklch(.75 .12 240));--g-conf: light-dark(oklch(.55 .18 310), oklch(.75 .14 310));--add-bg: light-dark(oklch(.52 .13 155 / .1), oklch(.74 .14 155 / .1));--del-bg: light-dark(oklch(.55 .19 22 / .08), oklch(.72 .16 22 / .1));--tok-string: light-dark(oklch(.5 .13 150), oklch(.78 .12 150));--tok-number: light-dark(oklch(.55 .15 50), oklch(.8 .12 60));--tok-keyword: var(--accent);--tok-comment: var(--text-faint);--font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;--mono: ui-monospace, "Cascadia Code", "SF Mono", Menlo, Consolas, monospace;--text-xs: 12px;--text-sm: 13px;--text-md: 15px;--text-lg: 17px;--text-xl: 20px;--text-2xl: 26px;--leading: 1.55;--weight-medium: 550;--weight-strong: 650;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--radius-sm: 6px;--radius: 10px;--radius-lg: 14px;--radius-full: 999px;--control-sm: 32px;--control: 40px;--shadow-color: light-dark(oklch(.25 .02 270 / .08), oklch(0 0 0 / .45));--shadow: 0 1px 2px var(--shadow-color), 0 4px 16px var(--shadow-color);--shadow-lg: 0 2px 6px var(--shadow-color), 0 16px 48px var(--shadow-color);--ring: 0 0 0 3px var(--accent-soft-strong);--fast: .12s;--medium: .2s;--ease: cubic-bezier(.2, .8, .2, 1);--bar-h: 57px;--safe-bottom: env(safe-area-inset-bottom, 0px)}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}@media(prefers-reduced-motion:reduce){:root{--fast: 0ms;--medium: 0ms}}*,*:before,*:after{box-sizing:border-box}[hidden]{display:none!important}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}html,body{margin:0}body{background:var(--bg);color:var(--text);font:var(--text-sm) / var(--leading) var(--font);-webkit-font-smoothing:antialiased;overflow-wrap:break-word}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:2px}code,kbd,pre,.code,.qo-item{font-family:var(--mono);font-variant-ligatures:none;font-feature-settings:"calt" 0,"liga" 0}::selection{background:var(--selection)}:focus{outline:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}.i{flex:none;display:block}kbd{font-size:11px;padding:1px 6px;border:1px solid var(--border-strong);border-bottom-width:2px;border-radius:5px;background:var(--surface)}.faint{color:var(--text-faint)}.dim{color:var(--text-dim)}.grow{flex:1}.plus{color:var(--g-new)}.minus{color:var(--g-del)}.bar{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:color-mix(in oklab,var(--bg) 88%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);min-width:0;z-index:20}.brand{display:flex;align-items:center;gap:var(--space-2);border:0;background:none;padding:6px 8px;border-radius:var(--radius-sm);min-width:0;max-width:28ch;font-size:var(--text-md);font-weight:var(--weight-strong)}.brand .logo{display:grid;place-items:center;width:26px;height:26px;border-radius:8px;background:var(--accent);color:var(--on-accent);flex:none}.brand b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.brand:hover{background:var(--surface-2)}.branch{display:inline-flex;align-items:center;gap:6px;font:var(--text-xs) var(--mono);color:var(--text-dim);white-space:nowrap;padding:3px 10px 3px 8px;border:1px solid var(--border);border-radius:var(--radius-full);background:var(--surface)}.branch .sync{color:var(--accent)}.search{flex:1;display:flex;align-items:center;gap:6px;min-width:120px;max-width:560px;height:var(--control-sm);padding:0 4px 0 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text-faint);transition:border-color var(--fast) var(--ease),box-shadow var(--fast) var(--ease)}.search:focus-within{border-color:var(--accent);box-shadow:var(--ring)}.search input{flex:1;min-width:0;border:0;background:none;padding:0;outline:none;color:var(--text);font-size:16px}@media(min-width:760px){.search input{font-size:var(--text-sm)}}.chip{border:0;border-radius:var(--radius-sm);padding:3px 8px;font-size:var(--text-xs);background:var(--surface-2);color:var(--text-dim);white-space:nowrap;max-width:18ch;overflow:hidden;text-overflow:ellipsis}.chip.on{background:var(--accent-soft-strong);color:var(--text)}.bar-acts{display:flex;align-items:center;gap:6px;margin-left:auto}.count{min-width:20px;height:20px;padding:0 6px;border-radius:var(--radius-full);font-size:11px;font-weight:var(--weight-strong);line-height:20px;background:var(--surface-3);color:var(--text);text-align:center}.count.warn{background:var(--accent);color:var(--on-accent)}.live{width:8px;height:8px;border-radius:50%;background:var(--border-strong);flex:none}.live.on{background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}@media(min-width:760px){body{overflow:hidden}.shell{display:grid;grid-template-rows:auto minmax(0,1fr);height:100vh;height:100dvh}.tree,.main,.file{min-height:0;overflow:auto;overscroll-behavior:contain}}.app{display:grid;grid-template-columns:minmax(0,1fr);min-height:0}.app.rail{grid-template-columns:var(--tree, 280px) 6px minmax(0,1fr)}.app.split{grid-template-columns:minmax(0,1fr) minmax(460px,1.35fr)}.app.rail.split{grid-template-columns:var(--tree, 280px) 6px minmax(0,1fr) minmax(460px,1.35fr)}.tree,.main,.file{min-width:0}.tree{background:var(--surface);border-right:1px solid var(--border);padding:var(--space-3) var(--space-2) var(--space-5)}.app:not(.rail) .tree,.app:not(.rail) .splitter-wrap{display:none}.splitter-wrap{display:flex;justify-content:center;min-height:0;margin-left:-6px;position:relative;z-index:2}.splitter{cursor:col-resize;width:6px;height:100%}.splitter:hover{background:var(--accent-soft-strong)}.main{padding:var(--space-4) var(--space-5) var(--space-6);display:grid;grid-template-columns:minmax(0,1fr);align-content:start;gap:var(--space-3)}.file{padding:0 var(--space-5) var(--space-6);border-left:1px solid var(--border);display:grid;grid-template-columns:minmax(0,1fr);align-content:start;gap:var(--space-3);background:var(--bg)}@media(max-width:759px){.bar{background:var(--bg);-webkit-backdrop-filter:none;backdrop-filter:none;position:sticky;top:0;flex-wrap:wrap;padding:var(--space-2);row-gap:var(--space-2)}.search{order:5;flex-basis:100%;max-width:none;height:var(--control)}.hide-sm,#branch{display:none!important}.main{padding:var(--space-3) var(--space-3) calc(var(--space-6) + var(--safe-bottom))}.file{padding:0 var(--space-3) calc(var(--space-6) + var(--safe-bottom));border-left:0}.file-head{top:var(--bar-h)!important;margin:0 calc(-1 * var(--space-3))!important;padding:var(--space-2) var(--space-3)!important}}ul.level,ul.roots{list-style:none;margin:0;padding:0}ul.level{padding-left:12px}.item{display:flex;align-items:center;min-width:0}.twist{width:22px;height:30px;flex:none;display:grid;place-items:center;border:0;background:none;color:var(--text-faint);border-radius:var(--radius-sm);padding:0}.twist .i{transition:transform var(--fast) var(--ease)}.twist[aria-expanded=true] .i{transform:rotate(90deg)}.twist:hover{color:var(--text)}.node{display:flex;align-items:center;gap:7px;flex:1;min-width:0;min-height:30px;padding:0 8px;border:0;border-radius:var(--radius-sm);background:none;color:var(--text-dim);text-align:left}.node .i{color:var(--text-faint)}.node:hover{background:var(--surface-2);color:var(--text)}.node.chosen{background:var(--accent-soft);color:var(--text);font-weight:var(--weight-medium)}.node.chosen .i{color:var(--accent)}.node .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.s-new .nm,.s-added .nm{color:var(--g-new)}.s-modified .nm{color:var(--g-mod)}.s-deleted .nm{color:var(--g-del)}.s-renamed .nm{color:var(--g-ren)}.s-conflict .nm{color:var(--g-conf)}.s-ignored{opacity:.55}.ghost .nm{text-decoration:line-through}.badge{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 4px;border-radius:5px;font:700 10.5px/1 var(--font);flex:none}.badge.s-new,.badge.s-added{color:var(--g-new);background:color-mix(in oklab,var(--g-new) 16%,transparent)}.badge.s-modified{color:var(--g-mod);background:color-mix(in oklab,var(--g-mod) 18%,transparent)}.badge.s-deleted{color:var(--g-del);background:color-mix(in oklab,var(--g-del) 16%,transparent)}.badge.s-renamed{color:var(--g-ren);background:color-mix(in oklab,var(--g-ren) 16%,transparent)}.badge.s-conflict{color:var(--g-conf);background:color-mix(in oklab,var(--g-conf) 16%,transparent)}.badge.s-ignored{color:var(--text-faint);background:var(--surface-2)}.dot{width:7px;height:7px;border-radius:50%;flex:none}.dot.s-new,.dot.s-added{background:var(--g-new)}.dot.s-modified{background:var(--g-mod)}.dot.s-deleted{background:var(--g-del)}.dot.s-renamed{background:var(--g-ren)}.dot.s-conflict{background:var(--g-conf)}.pill{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 8px;border-radius:var(--radius-full);font-size:11.5px;background:var(--surface-2);color:var(--text-dim);white-space:nowrap;text-decoration:none;flex:none}.pill .i{width:12px;height:12px}.pill.warn{background:var(--accent-soft-strong);color:var(--text)}.pill.ok{background:var(--ok-soft);color:var(--ok)}.legend{display:inline-flex;align-items:center;gap:5px;font-size:var(--text-xs);color:var(--text-dim)}.head{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.page-title{display:flex;align-items:center;gap:var(--space-2);margin:0;font-size:var(--text-lg);font-weight:var(--weight-strong)}.lede{margin:0;color:var(--text-dim);max-width:72ch}.crumbs{display:flex;align-items:center;flex-wrap:wrap;gap:2px;flex:1;min-width:0;font-size:var(--text-md)}.crumb{padding:3px 7px;border:0;border-radius:var(--radius-sm);background:none;color:var(--accent);overflow-wrap:anywhere}.crumb:hover{background:var(--surface-2)}.crumb.current{color:var(--text);font-weight:var(--weight-strong);cursor:default;background:none}.sep{color:var(--text-faint)}.tools,.tabs{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--control-sm);padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-dim);text-decoration:none;white-space:nowrap;font-weight:var(--weight-medium);transition:background var(--fast) var(--ease),border-color var(--fast) var(--ease),color var(--fast) var(--ease)}.btn:hover{color:var(--text);border-color:var(--border-strong);background:var(--surface-2);text-decoration:none}.btn.on{color:var(--accent);border-color:color-mix(in oklab,var(--accent) 45%,var(--border));background:var(--accent-soft)}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn.primary:hover{background:var(--accent-hover)}.btn.small{height:28px;padding:0 9px;font-size:var(--text-xs)}.btn:disabled{opacity:.6;cursor:default}select.btn{padding-right:6px}.seg{display:inline-flex;padding:2px;gap:2px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2)}.seg .btn{height:26px;border:0;background:none;padding:0 8px}.seg .btn.on{background:var(--surface);color:var(--text);box-shadow:0 1px 2px var(--shadow-color)}.mini{display:inline-flex;align-items:center;gap:4px;border:0;background:none;color:var(--text-faint);padding:3px 6px;border-radius:5px;font-size:var(--text-xs)}.mini:hover{color:var(--text);background:var(--surface-2)}.icon-btn{width:var(--control-sm);height:var(--control-sm);flex:none;border:1px solid transparent;border-radius:var(--radius-sm);background:none;color:var(--text-dim);display:inline-grid;place-items:center;text-decoration:none;position:relative}.icon-btn:hover{color:var(--text);background:var(--surface-2);text-decoration:none}.icon-btn.on{color:var(--accent);background:var(--accent-soft)}.icon-btn .count{position:absolute;top:-4px;right:-6px;min-width:17px;height:17px;line-height:17px;font-size:10px;padding:0 4px}@media(pointer:coarse){.icon-btn,.btn{min-height:40px;min-width:40px}.btn.small{min-height:34px}}.filter{flex:1 1 180px;min-width:0;max-width:360px;height:var(--control-sm);padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text)}.filter:focus{border-color:var(--accent);box-shadow:var(--ring)}@media(pointer:coarse){.filter{height:var(--control);font-size:16px}}.meta{color:var(--text-faint);font-size:var(--text-xs)}.rows{display:grid;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface)}.row{display:grid;grid-template-columns:22px minmax(0,1fr) auto 72px 92px;align-items:center;gap:10px;min-height:40px;padding:0 var(--space-4);border:0;border-top:1px solid var(--border);background:none;text-align:left;color:var(--text);text-decoration:none}.row:first-child{border-top:0}.row:hover{background:var(--surface-2);text-decoration:none}.row.open{background:var(--accent-soft)}.row .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row .marks{display:flex;gap:6px;align-items:center;justify-content:flex-end}.row .sz,.row .tm{color:var(--text-faint);font-size:var(--text-xs);text-align:right;white-space:nowrap}.ico{width:22px;height:22px;display:grid;place-items:center;border-radius:5px;color:var(--text-faint);overflow:hidden}.ico.folder{color:var(--accent)}.ico img{width:100%;height:100%;object-fit:cover;border-radius:4px}.ico .ext{font:700 8.5px/1 var(--mono);letter-spacing:-.02em;color:var(--text-dim);background:var(--surface-3);border-radius:4px;padding:3px 2px;min-width:20px;text-align:center}.ico.lang-ts .ext,.ico.lang-tsx .ext{color:#fff;background:#3178c6}.ico.lang-js .ext,.ico.lang-mjs .ext,.ico.lang-cjs .ext,.ico.lang-jsx .ext{color:#222;background:#e8c93a}.ico.lang-md .ext,.ico.lang-mdx .ext{color:#fff;background:#3d7a64}.ico.lang-json .ext{color:#fff;background:#8a7535}.ico.lang-css .ext,.ico.lang-scss .ext{color:#fff;background:#6b4bd6}.ico.lang-html .ext,.ico.lang-vue .ext{color:#fff;background:#d2552b}.ico.lang-py .ext{color:#fff;background:#3572a5}.ico.lang-rs .ext{color:#fff;background:#b7410e}.ico.lang-go .ext{color:#fff;background:#00a3cc}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--space-3)}.tile{display:grid;gap:6px;padding:8px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);text-align:left;min-width:0}.tile:hover{border-color:var(--border-strong)}.tile.open{border-color:var(--accent);box-shadow:var(--ring)}.thumb{position:relative;aspect-ratio:4/3;border-radius:var(--radius-sm);display:grid;place-items:center;overflow:hidden;background:repeating-conic-gradient(#0000 0 25%,#8881 0 50%) 0 0/16px 16px,var(--surface-2);color:var(--accent)}.thumb img{width:100%;height:100%;object-fit:contain}.thumb .badge,.thumb .dot{position:absolute;top:6px;right:6px}.thumb .ext{font:700 14px var(--mono);color:var(--text-dim)}.tile .nm{font-size:var(--text-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty,.note{color:var(--text-faint);padding:var(--space-4);text-align:center;margin:0}.hint{margin:0;font-size:var(--text-xs)}.card{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow:hidden}.card-head{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border-bottom:1px solid var(--border);font-weight:var(--weight-medium);font-size:var(--text-xs);color:var(--text-dim)}.readme .md{padding:var(--space-4) var(--space-5) var(--space-5)}.md.card{padding:var(--space-4) var(--space-5);max-width:none}@media(max-width:759px){.row{grid-template-columns:22px minmax(0,1fr) auto 58px;padding:0 var(--space-3);min-height:46px}.row .tm{display:none}.grid{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:var(--space-2)}.readme .md{padding:var(--space-3) var(--space-4) var(--space-4)}}.file-head{display:flex;align-items:center;gap:4px;min-width:0;position:sticky;top:0;margin:0 calc(-1 * var(--space-5));padding:var(--space-2) var(--space-5);background:color-mix(in oklab,var(--bg) 90%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);z-index:6}.split .file-head .back{display:none}.file-name{min-width:0;font-weight:var(--weight-strong);font-size:var(--text-md);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 4px}#file-threads:empty{display:none}#file-threads{display:grid;gap:var(--space-2)}.stage{display:grid;place-items:center;border-radius:var(--radius);border:1px solid var(--border);padding:var(--space-3);background:repeating-conic-gradient(#0000 0 25%,#8881 0 50%) 0 0/20px 20px,var(--surface);min-width:0}.stage img{max-width:100%;max-height:75vh;cursor:zoom-in}.stage.actual{place-items:start;overflow:auto;max-height:80vh}.stage.actual img{max-width:none;max-height:none;cursor:zoom-out}.stage video,.stage audio{max-width:100%}.stage audio{width:100%}.stage iframe{width:100%;height:78vh;border:0;background:#fff;border-radius:var(--radius-sm)}.stage.diagram{background:var(--surface);overflow:auto}.compare{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}.compare figure{margin:0;display:grid;gap:6px}.compare figcaption{font-size:var(--text-xs);color:var(--text-dim)}@media(max-width:759px){.compare{grid-template-columns:1fr}}.ui-code{margin:0;min-width:0;border:1px solid var(--border);border-radius:var(--radius);background:var(--code-bg);overflow:hidden}.ui-code>.cbar{display:flex;align-items:center;gap:var(--space-2);min-height:36px;padding:0 var(--space-1) 0 var(--space-3);border-bottom:1px solid var(--border)}.cbar .caption{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-faint);font:var(--text-xs) var(--mono)}.cbar .ctools{display:flex;gap:2px}.cbar .icon-btn{width:28px;height:28px}.cbar .copied{color:var(--ok)}.code{margin:0;overflow:auto;font:13px/1.6 var(--mono);tab-size:2;padding:var(--space-2) 0;color:var(--text)}.code:focus-visible{outline:none;box-shadow:inset var(--ring)}.ln{display:flex;min-width:max-content}.code.wrap .ln{min-width:0}.gut{flex:none;width:54px;padding-right:var(--space-3);text-align:right;color:var(--text-faint);-webkit-user-select:none;user-select:none;text-decoration:none;position:sticky;left:0;background:var(--code-bg);z-index:1}.gut:hover{color:var(--text);text-decoration:none}.code.review .gut:hover:before{content:"+";position:absolute;left:6px;top:3px;width:16px;height:16px;line-height:16px;text-align:center;border-radius:4px;background:var(--accent);color:var(--on-accent);font-weight:700}.ln.has-c .gut{color:var(--accent);font-weight:700}.ln.has-open .gut:after{content:"";position:absolute;left:8px;top:50%;width:6px;height:6px;margin-top:-3px;border-radius:50%;background:var(--accent)}.mk{flex:none;width:3px;margin-right:var(--space-3);position:sticky;left:54px;z-index:1;background:var(--code-bg)}.mk.add{background:var(--g-new)}.mk.mod{background:var(--g-mod)}.mk.del{background:linear-gradient(var(--g-del) 0 35%,var(--code-bg) 35%)}.src{white-space:pre;padding-right:var(--space-4)}.code.wrap .src{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.ln.sel,.ln.sel .gut,.ln.sel .mk:not(.add):not(.mod):not(.del){background:var(--accent-soft)}.ln.sel .gut{background:color-mix(in oklab,var(--accent) 14%,var(--code-bg));color:var(--accent)}.code.review .ln:hover{background:var(--accent-soft);cursor:pointer}.selbar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:6px var(--space-3) 6px 66px;padding:6px 8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);box-shadow:var(--shadow);font-family:var(--font);position:sticky;left:66px;max-width:calc(100% - 78px);white-space:normal}.tok-comment{color:var(--tok-comment);font-style:italic}.tok-string{color:var(--tok-string)}.tok-number,.tok-literal{color:var(--tok-number)}.tok-keyword{color:var(--tok-keyword)}.code-foot{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-xs)}@media(max-width:759px){.gut{width:42px;padding-right:8px}.mk{left:42px;margin-right:8px}.code{font-size:12.5px}}.diff{padding:0}.dh{display:flex;gap:var(--space-3);padding:4px var(--space-3);background:var(--accent-soft);color:var(--text-dim);min-width:max-content;font-size:var(--text-xs)}.dl{display:flex;min-width:max-content}.dl .on,.dl .nn{flex:none;width:44px;padding-right:8px;text-align:right;color:var(--text-faint);-webkit-user-select:none;user-select:none}.dl .nn .gut{width:auto;padding:0;position:static;background:none}.dl .dsrc{white-space:pre;padding:0 var(--space-4) 0 var(--space-2)}.dl .dsrc i{font-style:normal;color:var(--text-faint);display:inline-block;width:14px}.dl.add{background:var(--add-bg)}.dl.add .dsrc i{color:var(--g-new)}.dl.del{background:var(--del-bg)}.dl.del .dsrc i{color:var(--g-del)}.code.wrap .dl{min-width:0}.code.wrap .dl .dsrc{white-space:pre-wrap;overflow-wrap:anywhere}@media(max-width:759px){.dl .on,.dl .nn{width:32px;padding-right:4px}}.commit-head{margin:0;padding:var(--space-3);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);white-space:pre-wrap;font-size:var(--text-xs)}.commits{display:grid;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface)}.commit{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:8px var(--space-3);border:0;border-top:1px solid var(--border);background:none;text-align:left}.commit:first-child{border-top:0}.commit:hover,.commit.on{background:var(--surface-2)}.commit code{color:var(--accent);font-size:var(--text-xs)}.commit .subj{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commit .faint{font-size:var(--text-xs)}@media(max-width:759px){.commit{grid-template-columns:auto minmax(0,1fr)}.commit .faint{grid-column:2}}.group-title{display:flex;align-items:center;gap:var(--space-2);margin:var(--space-3) 0 var(--space-1);font:var(--weight-strong) var(--text-sm) var(--mono);min-width:0}.group-title a{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.group-title a:hover{color:var(--accent)}.diff-file{display:grid;gap:var(--space-1)}.hex{margin:0;padding:var(--space-3);border:1px solid var(--border);border-radius:var(--radius);background:var(--code-bg);overflow:auto;font-size:12px}.font{display:grid;gap:4px;overflow:hidden}.font p{margin:0;line-height:1.25;overflow-wrap:anywhere}.font-sample{font-family:var(--font);height:var(--control);padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);margin-bottom:var(--space-3);font-size:16px}.tablewrap{overflow:auto;max-height:78vh;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.grid-table{border-collapse:collapse;font-size:var(--text-xs)}.grid-table th,.grid-table td{border-bottom:1px solid var(--border);border-right:1px solid var(--border);padding:6px 10px;text-align:left;white-space:nowrap;max-width:420px;overflow:hidden;text-overflow:ellipsis}.grid-table th{position:sticky;top:0;background:var(--surface-2);font-weight:var(--weight-medium);cursor:pointer}.grid-table th[data-sort]:not([data-sort=""]):after{content:" " attr(data-sort);color:var(--accent)}.grid-table td.num{text-align:right;font-family:var(--mono)}.jtree{font:13px/1.6 var(--mono);padding:var(--space-3) var(--space-4);border:1px solid var(--border);border-radius:var(--radius);background:var(--code-bg);overflow:auto}.jtree details>summary{cursor:pointer;color:var(--text-faint);display:inline;list-style:none}.jtree details>summary:before{content:"\25b8 "}.jtree details[open]>summary:before{content:"\25be "}.jtree details[open]>summary{display:block}.jkids{padding-left:18px;border-left:1px dashed var(--border-strong);margin-left:4px}.jrow{white-space:pre-wrap;overflow-wrap:anywhere}.jrow>details{display:inline}.jrow>details[open]{display:block}.jkey{color:var(--text-dim)}.nb{display:grid;gap:var(--space-3)}.nb-cell{display:grid;grid-template-columns:40px minmax(0,1fr);gap:6px}.nb-n{font:var(--text-xs) var(--mono);padding-top:10px;text-align:right}.nb-out{margin:6px 0 0;padding:var(--space-2) var(--space-3);border:1px dashed var(--border-strong);border-radius:var(--radius-sm);overflow:auto;font-size:var(--text-xs)}.nb-out.err{color:var(--danger)}.nb-img{max-width:100%;margin-top:6px;background:#fff;border-radius:var(--radius-sm)}.nb-md{padding-left:46px}.md{max-width:80ch;min-width:0;overflow-wrap:anywhere;line-height:var(--leading);font-size:var(--text-md)}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md p,.md ul,.md ol,.md blockquote,.md .ui-code,.md .md-table,.md .md-diagram,.md details,.md .md-math-wrap,.md .front{margin:0 0 var(--space-3)}.md h1,.md h2,.md h3,.md h4,.md h5,.md h6{margin:var(--space-5) 0 var(--space-2);font-weight:var(--weight-strong);line-height:1.25;letter-spacing:-.012em;position:relative}.md h1{font-size:var(--text-2xl)}.md h2{font-size:var(--text-xl);padding-bottom:6px;border-bottom:1px solid var(--border)}.md h3{font-size:var(--text-lg)}.md h4,.md h5,.md h6{font-size:var(--text-md)}.md .anchor{margin-left:6px;color:var(--text-faint);opacity:0;text-decoration:none;font-weight:400}.md h1:hover .anchor,.md h2:hover .anchor,.md h3:hover .anchor,.md h4:hover .anchor{opacity:1}.md ul,.md ol{padding-left:1.5em}.md li{margin:2px 0}.md li>p{margin:0}.md li>ul,.md li>ol{margin:2px 0 0}.md li:has(>input[type=checkbox]){list-style:none;margin-left:-1.3em}.md input[type=checkbox]{accent-color:var(--accent);margin:0 6px 0 0;transform:translateY(1px)}.md blockquote{padding:2px 0 2px var(--space-4);border-left:3px solid var(--border-strong);color:var(--text-dim);margin-left:0;margin-right:0}.md blockquote.alert{padding:var(--space-2) var(--space-3);border:1px solid color-mix(in oklab,var(--al) 35%,var(--border));border-left:3px solid var(--al);border-radius:var(--radius-sm);background:color-mix(in oklab,var(--al) 7%,transparent);color:var(--text)}.md blockquote.alert>p:last-child{margin-bottom:0}.md .alert-title{display:flex;align-items:center;gap:6px;font-weight:var(--weight-strong);color:var(--al);margin-bottom:4px}.md .alert.note{--al: var(--accent)}.md .alert.tip{--al: var(--ok)}.md .alert.important{--al: var(--g-conf)}.md .alert.warning{--al: var(--warn)}.md .alert.caution{--al: var(--danger)}.md hr{margin:var(--space-5) 0;border:0;border-top:1px solid var(--border)}.md :not(pre)>code{padding:1px 5px;border-radius:5px;background:var(--surface-3);font-size:.86em}.md a{text-decoration:underline;text-decoration-color:color-mix(in oklab,var(--accent) 40%,transparent);text-underline-offset:2px}.md a:hover{text-decoration-color:var(--accent)}.md img{max-width:100%;height:auto;border-radius:var(--radius-sm)}.md .md-table{max-width:100%;overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius)}.md table{width:100%;border-collapse:collapse;font-size:var(--text-sm);overflow-wrap:normal}.md th,.md td{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.md th{background:var(--surface-2);font-weight:var(--weight-medium);white-space:nowrap}.md tr:last-child td{border-bottom:0}.md details{border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);background:var(--surface)}.md summary{cursor:pointer;font-weight:var(--weight-medium)}.md kbd{font-size:.8em}.md .ui-code .code{font-size:12.5px;padding:var(--space-3) var(--space-4);white-space:pre}.md .ui-code.wrapped .code{white-space:pre-wrap;overflow-wrap:anywhere}.md .md-diagram{display:grid;place-items:center;padding:var(--space-3);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow-x:auto}.md-diagram img,.stage.diagram img{max-width:none;height:auto;cursor:zoom-in;margin:0 auto}.md .md-diagram,.stage.diagram{display:block;overflow-x:auto;text-align:center}.md-diagram .problem{color:var(--danger);font-size:var(--text-xs)}.md .md-math-wrap{max-width:100%;overflow-x:auto;padding:var(--space-2) 0}.md .md-math-block{font-size:1.15em}.md .footnotes{font-size:var(--text-sm);color:var(--text-dim);border-top:1px solid var(--border);margin-top:var(--space-5);padding-top:var(--space-3)}.md .footnotes h2{font-size:var(--text-sm);border:0;margin-top:0}.md sup a{text-decoration:none}.md .front{font-size:var(--text-xs)}.md .front td:first-child{color:var(--text-faint);white-space:nowrap;font-family:var(--mono)}@media(max-width:759px){.md{font-size:15px}.md h1{font-size:23px}.md h2{font-size:19px}}.threads{display:grid;gap:var(--space-2);padding:var(--space-2) var(--space-3) var(--space-2) 66px;font-family:var(--font);font-size:var(--text-sm);line-height:1.5;position:sticky;left:0;max-width:min(100%,860px);white-space:normal}.diff .threads{padding-left:100px}.thread{display:grid;gap:4px}.thread-where{font-size:11.5px;color:var(--text-faint)}.cmt{border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--radius-sm);background:var(--surface);box-shadow:0 1px 2px var(--shadow-color);padding:var(--space-2) var(--space-3);display:grid;gap:4px}.cmt.resolved{border-left-color:var(--ok);opacity:.8}.cmt-head{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;font-size:var(--text-xs)}.cmt-acts{margin-left:auto;display:flex;gap:2px}.cmt-body.md{font-size:var(--text-sm);max-width:none}.cmt-body p{margin:.2em 0}.reply{border-top:1px dashed var(--border);padding-top:6px;margin-top:2px}.reply-form{display:flex;gap:6px;align-items:flex-start;margin-top:4px}.reply-form textarea,.composer textarea,.edit-form textarea{flex:1;width:100%;min-height:32px;resize:vertical;padding:6px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);font:var(--text-sm) / 1.45 var(--font)}@media(pointer:coarse){.reply-form textarea,.composer textarea,.edit-form textarea{font-size:16px}}.reply-form textarea:focus,.composer textarea:focus,.edit-form textarea:focus{border-color:var(--accent);box-shadow:var(--ring)}.composer{display:grid;gap:6px;margin:6px var(--space-3) var(--space-2) 66px;padding:var(--space-3);border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--surface);box-shadow:var(--shadow);font-family:var(--font);position:sticky;left:0;max-width:min(calc(100% - 78px),720px);white-space:normal}#file-threads .composer{margin:0;max-width:none}.composer-head{font-size:var(--text-xs);font-weight:var(--weight-strong)}.composer-acts{display:flex;gap:6px}.edit-form{display:grid;gap:6px}@media(max-width:759px){.threads,.diff .threads{padding-left:var(--space-2);padding-right:var(--space-2)}.composer,.selbar{margin-left:var(--space-2);margin-right:var(--space-2);left:0;max-width:calc(100vw - 2 * var(--space-3) - 2 * var(--space-2) - 2px)}}.switch{display:inline-flex;align-items:center;gap:8px;margin-left:auto;cursor:pointer;color:var(--text-dim)}.switch input{accent-color:var(--accent);width:16px;height:16px}.rgroup{display:grid;gap:var(--space-2)}.rcard{display:grid;gap:6px;padding:var(--space-3);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.rwhere{display:flex;gap:var(--space-2);align-items:center;font-size:var(--text-xs)}.quote{margin:0;padding:6px 10px;border-radius:var(--radius-sm);background:var(--code-bg);border:1px solid var(--border);font-size:var(--text-xs);overflow:auto;max-height:220px}.search-opts .filter{max-width:380px}.sfile{display:grid;gap:2px}.slines{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--code-bg);overflow:hidden}.sline{display:grid;grid-template-columns:48px minmax(0,1fr);gap:10px;padding:3px var(--space-3) 3px 0;border-top:1px solid var(--border);color:var(--text);text-decoration:none;font-size:var(--text-xs)}.sline:first-child{border-top:0}.sline:hover{background:var(--accent-soft);text-decoration:none}.sline .sn{text-align:right;color:var(--text-faint);font:var(--text-xs) var(--mono);padding-top:1px}.sline code{white-space:pre-wrap;overflow-wrap:anywhere}mark{background:light-dark(oklch(.88 .14 95),oklch(.55 .12 85 / .55));color:inherit;border-radius:3px;padding:0 1px}.modal-back{position:fixed;inset:0;background:var(--overlay);z-index:50;display:flex;justify-content:center;align-items:flex-start;padding:10vh var(--space-3) 0;animation:fade var(--medium) var(--ease)}.modal{width:min(680px,100%);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);overflow:hidden;display:grid;animation:pop var(--medium) var(--ease)}@keyframes fade{0%{opacity:0}}@keyframes pop{0%{opacity:0;transform:translateY(-6px) scale(.98)}}.qo-in{display:flex;align-items:center;gap:var(--space-2);padding:0 var(--space-4);border-bottom:1px solid var(--border);color:var(--text-faint)}.qo-in input{flex:1;border:0;background:none;padding:14px 0;font-size:16px;outline:none;color:var(--text)}.qo-list{max-height:56vh;overflow:auto;padding:6px}.qo-item{display:flex;align-items:center;gap:var(--space-2);width:100%;border:0;background:none;text-align:left;padding:7px 10px;border-radius:var(--radius-sm);font-size:var(--text-sm);color:var(--text-dim)}.qo-item .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.qo-item b{color:var(--accent)}.qo-item.on{background:var(--accent-soft);color:var(--text)}.qo-foot{padding:var(--space-2) var(--space-4);border-top:1px solid var(--border);font-size:var(--text-xs)}@media(pointer:coarse){.qo-foot{display:none}.qo-item{min-height:44px}}.pop{position:fixed;top:calc(var(--bar-h) + 6px);right:var(--space-3);z-index:40;width:min(340px,calc(100vw - 24px));max-height:calc(100dvh - var(--bar-h) - 20px);overflow:auto;padding:var(--space-3) var(--space-4) var(--space-4);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:grid;gap:var(--space-3);animation:pop var(--medium) var(--ease)}.pop h3{margin:4px 0 0;font-size:var(--text-xs);color:var(--text-faint);text-transform:uppercase;letter-spacing:.06em}.pop label{display:grid;gap:4px;font-size:var(--text-sm)}.pop label.check{display:flex;align-items:center;gap:8px}.pop label.check input{accent-color:var(--accent)}.pop select,.pop input:not([type=checkbox]){height:var(--control-sm);padding:0 8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg)}.pop p{margin:0;font-size:var(--text-xs);overflow-wrap:anywhere}.keys{display:grid;grid-template-columns:auto 1fr;gap:6px 12px;margin:0;font-size:var(--text-xs)}.keys dd{margin:0;color:var(--text-dim)}.toast{position:fixed;left:50%;bottom:calc(24px + var(--safe-bottom));transform:translate(-50%,20px);padding:8px 16px;border-radius:var(--radius-full);background:var(--text);color:var(--bg);font-size:var(--text-sm);opacity:0;pointer-events:none;transition:opacity var(--medium) var(--ease),transform var(--medium) var(--ease);z-index:60}.toast.show{opacity:1;transform:translate(-50%)}.skeleton{height:14px;border-radius:6px;background:linear-gradient(90deg,var(--surface-2),var(--surface-3),var(--surface-2));background-size:200% 100%;animation:shimmer 1.2s linear infinite}@keyframes shimmer{to{background-position:-200% 0}}@media(max-width:759px){.md.card{padding:var(--space-3) var(--space-4)}}.code,.code *,pre,code,.qo-item{font-variant-ligatures:none!important;font-feature-settings:"calt" 0,"liga" 0!important}
@@ -0,0 +1 @@
1
+ import"./chunk-7FMWBHZO.js";var e=Object.freeze(JSON.parse('{"displayName":"ABAP","fileTypes":["abap","ABAP"],"foldingStartMarker":"/\\\\*\\\\*|\\\\{\\\\s*$","foldingStopMarker":"\\\\*\\\\*/|^\\\\s*}","name":"abap","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.abap"}},"match":"^\\\\*.*\\\\n?","name":"comment.line.full.abap"},{"captures":{"1":{"name":"punctuation.definition.comment.abap"}},"match":"\\".*\\\\n?","name":"comment.line.partial.abap"},{"match":"(?<!\\\\S)##.*?(?=([,.:\\\\s]))","name":"comment.line.pragma.abap"},{"match":"(?i)(?<=[-~\\\\s])(?<=[-=]>)([/_a-z][/-9_a-z]*)(?=\\\\s+(?:|[-*+/]|&&?)=\\\\s+)","name":"variable.other.abap"},{"match":"\\\\b[0-9]+(\\\\b|[,.])","name":"constant.numeric.abap"},{"match":"(?i)(^|\\\\s+)((P(?:UBLIC|RIVATE|ROTECTED))\\\\sSECTION)(?=\\\\s+|[.:])","name":"storage.modifier.class.abap"},{"begin":"(?<!\\\\\\\\)(\\\\|)(.*?)","beginCaptures":{"1":{"name":"constant.character.escape.abap"}},"end":"(?<!\\\\\\\\)(\\\\||(\\\\\\\\\\\\\\\\\\\\|))","endCaptures":{"1":{"name":"constant.character.escape.abap"}},"name":"string.interpolated.abap","patterns":[{"match":"(\\\\{ )|( })","name":"constant.character.escape"},{"match":"\\\\\\\\\\\\|","name":"constant.character.escape.abap"},{"match":"(?i)(?<=\\\\s)(align|alpha|case|country|currency|date|decimals|exponent|number|pad|sign|style|time|timestamp|timezone|width|xsd|zero)(?=\\\\s=)","name":"entity.name.property.stringtemplate.abap"},{"match":"(?i)(?<==\\\\s)(center|engineering|environment|in|iso|left|leftplus|leftspace|lower|no|out|raw|right|rightplus|rightspace|scale_preserving|scale_preserving_scientific|scientific|scientific_with_leading_zero|sign_as_postfix|simple|space|upper|user|yes)(?=\\\\s)","name":"entity.value.property.stringtemplate.abap"}]},{"begin":"\'","end":"\'","name":"string.quoted.single.abap","patterns":[{"match":"\'\'","name":"constant.character.escape.abap"}]},{"begin":"`","end":"`","name":"string.quoted.single.abap","patterns":[{"match":"``","name":"constant.character.escape.abap"}]},{"begin":"(?i)^\\\\s*(class)\\\\s([/_a-z][/-9_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.block.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","name":"meta.block.begin.implementation.abap","patterns":[{"match":"(?i)(^|\\\\s+)(definition|implementation|public|inheriting\\\\s+from|final|deferred|abstract|shared\\\\s+memory\\\\s+enabled|(global|local)*\\\\s*friends|(create\\\\s+(p(?:ublic|rotected|rivate)))|for\\\\s+behavior\\\\s+of|for\\\\s+testing|risk\\\\s+level\\\\s+(critical|dangerous|harmless))|duration\\\\s(short|medium|long)(?=\\\\s+|\\\\.)","name":"storage.modifier.class.abap"},{"begin":"(?=[A-Z_a-z][0-9A-Z_a-z]*)","contentName":"entity.name.type.block.abap","end":"(?![0-9A-Z_a-z])","patterns":[{"include":"#generic_names"}]}]},{"begin":"(?i)^\\\\s*(method)\\\\s(?:([/_a-z][/-9_a-z]*)~)?([/_a-z][/-9_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"},"3":{"name":"entity.name.function.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?i)(?<=^|\\\\s)(BY(?:\\\\s+DATABASE(\\\\s+PROCEDURE|\\\\s+FUNCTION|\\\\s+GRAPH\\\\s+WORKSPACE)|\\\\s+KERNEL\\\\s+MODULE))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?i)(?<=^|\\\\s)(FOR\\\\s+(HDB|LLANG))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?i)(?<=\\\\s)(OPTIONS\\\\s+(READ-ONLY|DETERMINISTIC|SUPPRESS\\\\s+SYNTAX\\\\s+ERRORS))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?i)(?<=^|\\\\s)(LANGUAGE\\\\s+(SQLSCRIPT|SQL|GRAPH))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"captures":{"1":{"name":"storage.modifier.method.abap"}},"match":"(?i)(?<=\\\\s)(USING)\\\\s+([/_a-z][/-9=>_a-z]*)+(?=\\\\s+|\\\\.)"},{"begin":"(?=[A-Z_a-z][0-9A-Z_a-z]*)","end":"(?![0-9A-Z_a-z])","patterns":[{"include":"#generic_names"}]}]},{"begin":"(?i)^\\\\s*(INTERFACE)\\\\s([/_a-z][/-9_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?i)(?<=^|\\\\s)(DEFERRED|PUBLIC)(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"}]},{"begin":"(?i)^\\\\s*(FORM)\\\\s([/_a-z][-/-9?_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?i)(?<=^|\\\\s)(USING|TABLES|CHANGING|RAISING|IMPLEMENTATION|DEFINITION)(?=\\\\s+|\\\\.)","name":"storage.modifier.form.abap"},{"include":"#abaptypes"},{"include":"#keywords_followed_by_braces"}]},{"match":"(?i)(end(?:class|method|form|interface))","name":"storage.type.block.end.abap"},{"match":"(?i)(<[A-Z_a-z][0-9A-Z_a-z]*>)","name":"variable.other.field.symbol.abap"},{"include":"#keywords"},{"include":"#abap_constants"},{"include":"#reserved_names"},{"include":"#operators"},{"include":"#builtin_functions"},{"include":"#abaptypes"},{"include":"#system_fields"},{"include":"#sql_functions"},{"include":"#sql_types"}],"repository":{"abap_constants":{"match":"(?i)(?<=\\\\s)(initial|null|@?space|@?abap_true|@?abap_false|@?abap_undefined|table_line|%_final|%_hints|%_predefined|col_background|col_group|col_heading|col_key|col_negative|col_normal|col_positive|col_total|adabas|as400|db2|db6|hdb|oracle|sybase|mssqlnt|pos_low|pos_high)(?=[,.\\\\s])","name":"constant.language.abap"},"abaptypes":{"patterns":[{"match":"(?i)\\\\s(abap_bool|string|xstring|any|clike|csequence|numeric|xsequence|decfloat|decfloat16|decfloat34|utclong|simple|int8|[cdfinptx])(?=[,.\\\\s])","name":"support.type.abap"},{"match":"(?i)\\\\s(TYPE|REF|TO|LIKE|LINE|OF|STRUCTURE|STANDARD|SORTED|HASHED|INDEX|TABLE|WITH|UNIQUE|NON-UNIQUE|SECONDARY|DEFAULT|KEY)(?=[,.\\\\s])","name":"keyword.control.simple.abap"}]},"arithmetic_operator":{"match":"(?i)(?<=\\\\s)([-*+]|\\\\*\\\\*|[%/]|DIV|MOD|BIT-AND|BIT-OR|BIT-XOR|BIT-NOT)(?=\\\\s)","name":"keyword.control.simple.abap"},"builtin_functions":{"match":"(?i)(?<=\\\\s)(abs|sign|ceil|floor|trunc|frac|acos|asin|atan|cos|sin|tan|cosh|sinh|tanh|exp|log|log10|sqrt|strlen|xstrlen|charlen|lines|numofchar|dbmaxlen|round|rescale|nmax|nmin|cmax|cmin|boolc|boolx|xsdbool|contains|contains_any_of|contains_any_not_of|matches|line_exists|ipow|char_off|count|count_any_of|count_any_not_of|distance|condense|concat_lines_of|escape|find|find_end|find_any_of|find_any_not_of|insert|match|repeat|replace|reverse|segment|shift_left|shift_right|substring|substring_after|substring_from|substring_before|substring_to|to_upper|to_lower|to_mixed|from_mixed|translate|bit-set|line_index)(?=\\\\()","name":"entity.name.function.builtin.abap"},"comparison_operator":{"match":"(?i)(?<=\\\\s)([<>]|<=|>=|=|<>|eq|ne|lt|le|gt|ge|cs|cp|co|cn|ca|na|ns|np|byte-co|byte-cn|byte-ca|byte-na|byte-cs|byte-ns|[moz])(?=\\\\s)","name":"keyword.control.simple.abap"},"control_keywords":{"match":"(?i)(^|\\\\s)(at|case|catch|continue|do|elseif|else|endat|endcase|endcatch|enddo|endif|endloop|endon|endtry|endwhile|if|loop|on|raise|try|while)(?=[.:\\\\s])","name":"keyword.control.flow.abap"},"generic_names":{"match":"[A-Z_a-z][0-9A-Z_a-z]*"},"keywords":{"patterns":[{"include":"#main_keywords"},{"include":"#text_symbols"},{"include":"#control_keywords"},{"include":"#keywords_followed_by_braces"}]},"keywords_followed_by_braces":{"captures":{"1":{"name":"keyword.control.simple.abap"},"2":{"name":"variable.other.abap"}},"match":"(?i)\\\\b(data|value|field-symbol|final|reference|resumable)\\\\((<?[/_a-z][/-9_a-z]*>?)\\\\)"},"logical_operator":{"match":"(?i)(?<=\\\\s)(not|or|and)(?=\\\\s)","name":"keyword.control.simple.abap"},"main_keywords":{"match":"(?i)(?<=^|\\\\s)(abap-source|abstract|accept|accepting|access|according|action|activation|actual|add|add-corresponding|adjacent|after|alias|aliases|all|allocate|amdp|analysis|analyzer|append|appending|application|archive|area|arithmetic|as|ascending|assert|assign|assigned|assigning|association|asynchronous|at|attributes|authority|authority-check|authorization|auto|back|background|backward|badi|base|before|begin|behavior|between|binary|bit|blanks??|blocks??|bound|boundaries|bounds|boxed|break|break-point|buffer|by|bypassing|byte|byte-order|call|calling|cast|casting|cds|centered|change|changing|channels|char-to-hex|character|check|checkbox|cid|circular|class|class-data|class-events|class-methods??|class-pool|cleanup|clear|clients??|clock|clone|close|cnt|code|collect|color|column|comments??|commit|common|communication|comparing|components??|compression|compute|concatenate|cond|condense|condition|connection|constants??|contexts??|controls??|conv|conversion|convert|copy|corresponding|count|country|cover|create|currency|current|cursor|customer-function|data|database|datainfo|dataset|date|daylight|ddl|deallocate|decimals|declarations|deep|default|deferred|define|delete|deleting|demand|descending|describe|destination|detail|determine|dialog|did|directory|discarding|display|display-mode|distance|distinct|divide|divide-corresponding|dummy|duplicates??|duration|during|dynpro|edit|editor-call|empty|enabled|enabling|encoding|end|end-enhancement-section|end-of-definition|end-of-page|end-of-selection|end-test-injection|end-test-seam|endenhancement|endexec|endfunction|endian|ending|endmodule|endprovide|endselect|endwith|enhancement|enhancement-point|enhancement-section|enhancements|entities|entity|entries|entry|enum|equiv|errors|escape|escaping|events??|exact|except|exception|exception-table|exceptions|excluding|exec|execute|exists|exit|exit-command|expanding|explicit|exponent|export|exporting|extended|extension|extract|fail|failed|features|fetch|field|field-groups|field-symbols|fields|file|fill|filters??|final|find|first|first-line|fixed-point|flush|following|for|format|forward|found|frames??|free|from|full|function|function-pool|generate|get|giving|graph|groups??|handler??|hashed|having|headers??|heading|help-id|help-request|hide|hint|hold|hotspot|icon|id|identification|identifier|ignore|ignoring|immediately|implemented|implicit|import|importing|in|inactive|incl|includes??|including|increment|index|index-line|indicators|infotypes|inheriting|init|initial|initialization|inner|input|insert|instances??|intensified|interface|interface-pool|interfaces|internal|intervals|into|inverse|inverted-date|is|job|join|keep|keeping|kernel|keys??|keywords|kind|language|last|late|layout|leading|leave|left|left-justified|legacy|length|let|levels??|like|line|line-count|line-selection|line-size|linefeed|lines|link|list|list-processing|listbox|load|load-of-program|locale??|locks??|log-point|logical|lower|mapped|mapping|margin|mark|mask|match|matchcode|maximum|members|memory|mesh|message|message-id|messages|messaging|methods??|mode|modif|modifier|modify|module|move|move-corresponding|multiply|multiply-corresponding|name|nametab|native|nested|nesting|new|new-line|new-page|new-section|next|no-display|no-extension|no-gaps??|no-grouping|no-heading|no-scrolling|no-sign|no-title|no-zero|nodes|non-unicode|non-unique|number|objects??|objmgr|obligatory|occurences??|occurrences??|occurs|of|offset|on|only|open|optional|options??|order|others|out|outer|output|output-length|overflow|overlay|pack|package|padding|page|parameter|parameter-table|parameters|part|partially|pcre|perform|performing|permissions|pf-status|places|pool|position|pragmas|preceding|precompiled|preferred|preserving|primary|print|print-control|private|privileged|procedure|process|program|property|protected|provide|push|pushbutton|put|query|queue-only|queueonly|quickinfo|radiobutton|raising|ranges??|read|read-only|received??|receiving|redefinition|reduce|ref|reference|refresh|regex|reject|renaming|replace|replacement|replacing|report|reported|request|requested|required|reserve|reset|resolution|respecting|response|restore|results??|resumable|resume|retry|return|returning|right|right-justified|rollback|rows|rp-provide-from-last|run|sap|sap-spool|save|saving|scan|screen|scroll|scroll-boundary|scrolling|search|seconds|section|select|select-options|selection|selection-screen|selection-sets??|selection-table|selections|send|separated??|session|set|shared|shift|shortdump|shortdump-id|sign|simple|simulation|single|size|skip|skipping|smart|some|sort|sortable|sorted|source|specified|split|spool|spots|sql|stable|stamp|standard|start-of-selection|starting|state|statements??|statics??|statusinfo|step|step-loop|stop|structures??|style|subkey|submatches|submit|subroutine|subscreen|substring|subtract|subtract-corresponding|suffix|sum|summary|supplied|supply|suppress|switch|symbol|syntax-check|syntax-trace|system-call|system-exceptions|tab|tabbed|tables??|tableview|tabstrip|target|tasks??|test|test-injection|test-seam|testing|text|textpool|then|throw|times??|title|titlebar|to|tokens|top-lines|top-of-page|trace-file|trace-table|trailing|transaction|transfer|transformation|translate|transporting|trmac|truncate|truncation|type|type-pools??|types|uline|unassign|unbounded|under|unicode|union|unique|unit|unix|unpack|until|unwind|up|update|upper|user|user-command|using|utf-8|uuid|valid|validate|value|value-request|values|vary|varying|version|via|visible|wait|when|where|windows??|with|with-heading|with-title|without|word|work|workspace|write|xml|zone)(?=[,.:\\\\s])","name":"keyword.control.simple.abap"},"operators":{"patterns":[{"include":"#other_operator"},{"include":"#arithmetic_operator"},{"include":"#comparison_operator"},{"include":"#logical_operator"}]},"other_operator":{"match":"(?<=\\\\s)(&&?|\\\\?=|\\\\+=|-=|/=|\\\\*=|&&=|&=)(?=\\\\s)","name":"keyword.control.simple.abap"},"reserved_names":{"match":"(?i)(?<=\\\\s)(me|super)(?=[,.\\\\s]|->)","name":"constant.language.abap"},"sql_functions":{"match":"(?i)(?<=\\\\s)(abap_system_timezone|abap_user_timezone|abs|add_days|add_months|allow_precision_loss|as_geo_json|avg|bintohex|cast|ceil|coalesce|concat_with_space|concat|corr_spearman|corr|count|currency_conversion|datn_add_days|datn_add_months|datn_days_between|dats_add_days|dats_add_months|dats_days_between|dats_from_datn|dats_is_valid|dats_tims_to_tstmp|dats_to_datn|dayname|days_between|dense_rank|division|div|extract_day|extract_hour|extract_minute|extract_month|extract_second|extract_year|first_value|floor|grouping|hextobin|initcap|instr|is_valid|lag|last_value|lead|left|length|like_regexpr|locate_regexpr_after|locate_regexpr|locate|lower|lpad|ltrim|max|median|min|mod|monthname|ntile|occurrences_regexpr|over|product|rank|replace_regexpr|replace|rigth|round|row_number|rpad|rtrim|stddev|string_agg|substring_regexpr|substring|sum|tims_from_timn|tims_is_valid|tims_to_timn|to_blob|to_clob|tstmp_add_seconds|tstmp_current_utctimestamp|tstmp_is_valid|tstmp_seconds_between|tstmp_to_dats|tstmp_to_dst|tstmp_to_tims|tstmpl_from_utcl|tstmpl_to_utcl|unit_conversion|upper|utcl_add_seconds|utcl_current|utcl_seconds_between|uuid|var|weekday)(?=\\\\()","name":"entity.name.function.sql.abap"},"sql_types":{"match":"(?i)(?<=\\\\s)(char|clnt|cuky|curr|datn|dats|dec|decfloat16|decfloat34|fltp|int1|int2|int4|int8|lang|numc|quan|raw|sstring|timn|tims|unit|utclong)(?=[()\\\\s])","name":"entity.name.type.sql.abap"},"system_fields":{"captures":{"1":{"name":"variable.language.abap"},"2":{"name":"variable.language.abap"}},"match":"(?i)\\\\b(sy)-(abcde|batch|binpt|calld|callr|colno|cpage|cprog|cucol|curow|datar|datlo|datum|dayst|dbcnt|dbnam|dbsysc|dyngr|dynnr|fdayw|fdpos|host|index|langu|ldbpg|lilli|linct|linno|linsz|lisel|listi|loopc|lsind|macol|mandt|marow|modno|msgid|msgli|msgno|msgty|msgv[1-4]|opsysc|pagno|pfkey|repid|saprl|scols|slset|spono|srows|staco|staro|stepl|subrc|sysid|tabix|tcode|tfill|timlo|title|tleng|tvar[0-9]|tzone|ucomm|uline|uname|uzeit|vline|wtitl|zonlo)(?=[.\\\\s])"},"text_symbols":{"captures":{"1":{"name":"keyword.control.simple.abap"},"2":{"name":"constant.numeric.abap"}},"match":"(?i)(?<=^|\\\\s)(text)-([0-9A-Z]{1,3})(?=[,.:\\\\s])"}},"scopeName":"source.abap"}')),a=[e];export{a as default};
@@ -0,0 +1 @@
1
+ import{a,b as u,c as f}from"./chunk-DUICIQBC.js";import{a as m}from"./chunk-NCOVM3YF.js";import{b as p}from"./chunk-XE6SLBBE.js";import"./chunk-HNO6SQ7M.js";import"./chunk-4NXNVEWK.js";import"./chunk-P2FYOAEV.js";import"./chunk-FZFME6UK.js";import"./chunk-CALYHV7D.js";import"./chunk-7BAEB64Q.js";import"./chunk-SVM2H22K.js";import"./chunk-YUN7JSFJ.js";import{b as l}from"./chunk-4RNNBDFQ.js";import"./chunk-2ZCRJZGF.js";import"./chunk-ZZHMDDZN.js";import"./chunk-56ITEUFA.js";import"./chunk-RORF4F5V.js";import"./chunk-KPNXJBIW.js";import"./chunk-ADDF76FL.js";import"./chunk-JJ6YWJQS.js";import"./chunk-PZELHD2H.js";import"./chunk-SZYM6GIJ.js";import{b as s}from"./chunk-5XZPGKN4.js";import{a as t}from"./chunk-EIBFAW37.js";import"./chunk-FTY6WLQF.js";import"./chunk-7FMWBHZO.js";var v=l().RailroadAbnf.parser.LangiumParser,i=t(e=>{let r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=t(e=>{let r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=t(e=>{if(e.includes("*")){let[n,o]=e.split("*"),c=n?parseInt(n,10):0,d=o?parseInt(o,10):1/0;return{min:c,max:d}}let r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=t(e=>{let r=A(e.primary);if(!e.repeat)return r;let{min:n,max:o}=b(e.repeat);return n===0&&o===1?{type:"optional",element:r}:{type:"repetition",element:r,min:n,max:o}},"transformElement"),A=t(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=t(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=t(e=>{m(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:t(e=>{a.clear(),s.debug("[ABNF Parser] Starting Langium parse");let r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new p(r);let n=r.value;s.debug("[ABNF Parser] Parsed rules:",n.rules.length),h(n),s.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},I={parser:R,db:a,renderer:f,styles:u};export{I as diagram};
@@ -0,0 +1 @@
1
+ import"./chunk-7FMWBHZO.js";var e=Object.freeze(JSON.parse(`{"displayName":"ActionScript","fileTypes":["as"],"name":"actionscript-3","patterns":[{"include":"#comments"},{"include":"#package"},{"include":"#class"},{"include":"#interface"},{"include":"#namespace_declaration"},{"include":"#import"},{"include":"#mxml"},{"include":"#strings"},{"include":"#regexp"},{"include":"#variable_declaration"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#logical_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#control_keywords"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#functions"},{"include":"#primitive_functions"},{"include":"#function_call"}],"repository":{"arithmetic_operators":{"match":"([-%+/]|(?<!:)\\\\*)","name":"keyword.operator.actionscript.3"},"array_access_operators":{"match":"([]\\\\[])","name":"keyword.operator.actionscript.3"},"class":{"begin":"(^|\\\\s+|;)(\\\\b(dynamic|final|abstract)\\\\b\\\\s+)?(\\\\b(internal|public)\\\\b\\\\s+)?(\\\\b(dynamic|final|abstract)\\\\b\\\\s+)?(?=\\\\bclass\\\\b)","beginCaptures":{"3":{"name":"storage.modifier.actionscript.3"},"5":{"name":"storage.modifier.actionscript.3"},"7":{"name":"storage.modifier.actionscript.3"}},"end":"}","name":"meta.class.actionscript.3","patterns":[{"include":"#class_declaration"},{"include":"#declaration_code_block"},{"include":"#metadata"},{"include":"#method"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#other_operators"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#arithmetic_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#variable_declaration"},{"include":"#object_literal"},{"include":"#conditional_compilation"},{"include":"#primitive_functions"},{"include":"#function_call"}]},"class_declaration":{"begin":"\\\\b(class)\\\\b\\\\s+([$.0-9A-Z_a-z]+|\\\\*)","beginCaptures":{"1":{"name":"storage.type.class.actionscript.3"},"2":{"name":"entity.name.class.actionscript.3"}},"end":"\\\\{","name":"meta.class_declaration.actionscript.3","patterns":[{"include":"#extends"},{"include":"#implements"},{"include":"#comments"}]},"comments":{"patterns":[{"begin":"/\\\\*\\\\*(?!/)","end":"\\\\*/","name":"comment.block.documentation.actionscript.3","patterns":[{"match":"@(copy|default|eventType|example|exampleText|includeExample|inheritDoc|internal|param|private|return|see|since|throws)\\\\b","name":"keyword.other.documentation.actionscript.3.asdoc"}]},{"begin":"/\\\\*","end":"\\\\*/","name":"comment.block.actionscript.3"},{"match":"//.*","name":"comment.line.actionscript.3"}]},"conditional_compilation":{"captures":{"2":{"name":"constant.other.actionscript.3"},"3":{"name":"constant.other.actionscript.3"}},"match":"(^|\\\\s+|;)\\\\b(\\\\w+)\\\\b::\\\\b(\\\\w+)\\\\b","name":"meta.conditional.actionscript.3"},"control_keywords":{"match":"\\\\b(if|else|do|while|for|each|continue|return|switch|case|default|break|try|catch|finally|throw|with)\\\\b","name":"keyword.control.actionscript.3"},"declaration_code_block":{"begin":"\\\\{","end":"}","name":"meta.code_block.actionscript.3","patterns":[{"include":"#method"},{"include":"#variable_declaration"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#logical_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#control_keywords"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#functions"},{"include":"#import"},{"include":"#primitive_functions"},{"include":"#function_call"}]},"dynamic_type":{"captures":{"1":{"name":"support.type.actionscript.3"}},"match":"(?<=:)\\\\s*(\\\\*)"},"escapes":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)","name":"constant.character.escape.actionscript.3"},"extends":{"captures":{"1":{"name":"keyword.other.actionscript.3"},"2":{"name":"entity.other.inherited-class.actionscript.3"},"3":{"name":"entity.other.inherited-class.actionscript.3"}},"match":"\\\\b(extends)\\\\b\\\\s+([$.0-9A-Z_a-z]+)\\\\s*(?:,\\\\s*([$.0-9A-Z_a-z]+))*\\\\s*","name":"meta.extends.actionscript.3"},"function_arguments":{"begin":"\\\\(","end":"\\\\)","name":"meta.function_arguments.actionscript.3","patterns":[{"include":"#parameters"},{"include":"#comments"}]},"function_call":{"captures":{"1":{"name":"entity.name.function.actionscript.3"}},"match":"\\\\b([$0-9A-Z_a-z]+)(?=\\\\s*\\\\()"},"functions":{"begin":"\\\\b(function)\\\\b(?:\\\\s+\\\\b([gs]et)\\\\b\\\\s+)?\\\\s*([$0-9A-Z_a-z]+\\\\b)?","beginCaptures":{"1":{"name":"storage.type.function.actionscript.3"},"2":{"name":"storage.modifier.actionscript.3"},"3":{"name":"entity.name.function.actionscript.3"}},"end":"($|;|(?=\\\\{))","name":"meta.function.actionscript.3","patterns":[{"include":"#function_arguments"},{"include":"#return_type"},{"include":"#comments"}]},"guess_constant":{"captures":{"1":{"name":"constant.other.actionscript.3"}},"match":"\\\\b([$A-Z][0-9A-Z_]+)\\\\b"},"guess_type":{"captures":{"1":{"name":"support.type.actionscript.3"}},"match":"\\\\b((?:[$0-9A-Z_a-z]+\\\\.)*[A-Z][0-9A-Z]*[a-z]+[$0-9A-Z_a-z]*)\\\\b"},"implements":{"captures":{"1":{"name":"keyword.other.actionscript.3"},"2":{"name":"entity.other.inherited-class.actionscript.3"},"3":{"name":"entity.other.inherited-class.actionscript.3"}},"match":"\\\\b(implements)\\\\b\\\\s+([$.0-9A-Z_a-z]+)\\\\s*(?:,\\\\s*([$.0-9A-Z_a-z]+))*\\\\s*","name":"meta.implements.actionscript.3"},"import":{"captures":{"2":{"name":"keyword.control.import.actionscript.3"},"3":{"name":"support.type.actionscript.3"}},"match":"(^|\\\\s+|;)\\\\b(import)\\\\b\\\\s+([$.0-9A-Z_a-z]+(?:\\\\.\\\\*)?)\\\\s*(?=;|$)","name":"meta.import.actionscript.3"},"interface":{"begin":"(^|\\\\s+|;)(\\\\b(internal|public)\\\\b\\\\s+)?(?=\\\\binterface\\\\b)","beginCaptures":{"3":{"name":"storage.modifier.actionscript.3"}},"end":"}","name":"meta.interface.actionscript.3","patterns":[{"include":"#interface_declaration"},{"include":"#metadata"},{"include":"#functions"},{"include":"#comments"}]},"interface_declaration":{"begin":"\\\\b(interface)\\\\b\\\\s+([$.0-9A-Z_a-z]+)","beginCaptures":{"1":{"name":"storage.type.interface.actionscript.3"},"2":{"name":"entity.name.class.actionscript.3"}},"end":"\\\\{","name":"meta.class_declaration.actionscript.3","patterns":[{"include":"#extends"},{"include":"#comments"}]},"language_constants":{"match":"\\\\b(true|false|null|Infinity|-Infinity|NaN|undefined)\\\\b","name":"constant.language.actionscript.3"},"language_variables":{"match":"\\\\b(super|this|arguments)\\\\b","name":"variable.language.actionscript.3"},"local_code_block":{"begin":"\\\\{","end":"}","name":"meta.code_block.actionscript.3","patterns":[{"include":"#local_code_block"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#variable_declaration"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#logical_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#control_keywords"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#functions"},{"include":"#import"},{"include":"#primitive_functions"},{"include":"#function_call"}]},"logical_operators":{"match":"([!\\\\&<>?^|~])","name":"keyword.operator.actionscript.3"},"metadata":{"begin":"(?<=(?:^|[;{}]|\\\\*/)\\\\s*)\\\\[\\\\s*\\\\b([$A-Z_a-z][$0-9A-Z_a-z]+)\\\\b","beginCaptures":{"1":{"name":"keyword.other.actionscript.3"}},"end":"]","name":"meta.metadata_info.actionscript.3","patterns":[{"include":"#metadata_info"}]},"metadata_info":{"begin":"\\\\(","end":"\\\\)","patterns":[{"include":"#strings"},{"captures":{"1":{"name":"variable.parameter.actionscript.3"},"2":{"name":"keyword.operator.actionscript.3"}},"match":"(\\\\w+)\\\\s*(=)"}]},"method":{"begin":"(^|\\\\s+)((\\\\w+)\\\\s+)?((\\\\w+)\\\\s+)?((\\\\w+)\\\\s+)?((\\\\w+)\\\\s+)?(?=\\\\bfunction\\\\b)","beginCaptures":{"3":{"name":"storage.modifier.actionscript.3"},"5":{"name":"storage.modifier.actionscript.3"},"7":{"name":"storage.modifier.actionscript.3"},"8":{"name":"storage.modifier.actionscript.3"}},"end":"(?<=([;}]))","name":"meta.method.actionscript.3","patterns":[{"include":"#functions"},{"include":"#local_code_block"}]},"mxml":{"begin":"<!\\\\[CDATA\\\\[","end":"]]>","name":"meta.cdata.actionscript.3","patterns":[{"include":"#comments"},{"include":"#import"},{"include":"#metadata"},{"include":"#class"},{"include":"#namespace_declaration"},{"include":"#use_namespace"},{"include":"#class_declaration"},{"include":"#method"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#other_keywords"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#variable_declaration"},{"include":"#primitive_functions"},{"include":"#function_call"}]},"namespace_declaration":{"captures":{"2":{"name":"storage.modifier.actionscript.3"},"3":{"name":"storage.modifier.actionscript.3"}},"match":"((\\\\w+)\\\\s+)?(namespace)\\\\s+[$0-9A-Z_a-z]+","name":"meta.namespace_declaration.actionscript.3"},"numbers":{"match":"\\\\b((0([Xx])\\\\h*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))(([Ee])([-+])?[0-9]+)?)([Ll]|UL|ul|[FUfu])?\\\\b","name":"constant.numeric.actionscript.3"},"object_literal":{"begin":"\\\\{","end":"}","name":"meta.object_literal.actionscript.3","patterns":[{"include":"#object_literal"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#functions"},{"include":"#primitive_functions"},{"include":"#function_call"}]},"other_keywords":{"match":"\\\\b(as|delete|in|instanceof|is|native|new|to|typeof)\\\\b","name":"keyword.other.actionscript.3"},"other_operators":{"match":"([.=])","name":"keyword.operator.actionscript.3"},"package":{"begin":"(^|\\\\s+)(package)\\\\b","beginCaptures":{"2":{"name":"keyword.other.actionscript.3"}},"end":"}","name":"meta.package.actionscript.3","patterns":[{"include":"#package_name"},{"include":"#variable_declaration"},{"include":"#method"},{"include":"#comments"},{"include":"#return_type"},{"include":"#import"},{"include":"#use_namespace"},{"include":"#strings"},{"include":"#numbers"},{"include":"#language_constants"},{"include":"#metadata"},{"include":"#class"},{"include":"#interface"},{"include":"#namespace_declaration"}]},"package_name":{"begin":"(?<=package)\\\\s+([._\\\\w]*)\\\\b","end":"\\\\{","name":"meta.package_name.actionscript.3"},"parameters":{"begin":"(\\\\.\\\\.\\\\.)?\\\\s*([$A-Z_a-z][$0-9A-Z_a-z]*)(?:\\\\s*(:)\\\\s*(?:([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)(?:\\\\.<([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)>)?|(\\\\*)))?(?:\\\\s*(=))?","beginCaptures":{"1":{"name":"keyword.operator.actionscript.3"},"2":{"name":"variable.parameter.actionscript.3"},"3":{"name":"keyword.operator.actionscript.3"},"4":{"name":"support.type.actionscript.3"},"5":{"name":"support.type.actionscript.3"},"6":{"name":"support.type.actionscript.3"},"7":{"name":"keyword.operator.actionscript.3"}},"end":",|(?=\\\\))","patterns":[{"include":"#strings"},{"include":"#numbers"},{"include":"#language_constants"},{"include":"#comments"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#guess_type"},{"include":"#guess_constant"}]},"primitive_error_types":{"captures":{"1":{"name":"support.class.error.actionscript.3"}},"match":"\\\\b((Argument|Definition|Eval|Internal|Range|Reference|Security|Syntax|Type|URI|Verify)?Error)\\\\b"},"primitive_functions":{"captures":{"1":{"name":"support.function.actionscript.3"}},"match":"\\\\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|isFinite|isNaN|isXMLName|parseFloat|parseInt|trace|unescape)(?=\\\\s*\\\\()"},"primitive_types":{"captures":{"1":{"name":"support.class.builtin.actionscript.3"}},"match":"\\\\b(Array|Boolean|Class|Date|Function|int|JSON|Math|Namespace|Number|Object|QName|RegExp|String|uint|Vector|XML|XMLList|\\\\*(?<=a))\\\\b"},"regexp":{"begin":"(?<=[(,:=\\\\[]|^|return|&&|\\\\|\\\\||!)\\\\s*(/)(?![*+/?{}])","end":"$|(/)[gim]*","name":"string.regex.actionscript.3","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.actionscript.3"},{"match":"\\\\[(\\\\\\\\]|[^]])*]","name":"constant.character.class.actionscript.3"}]},"return_type":{"captures":{"1":{"name":"keyword.operator.actionscript.3"},"2":{"name":"support.type.actionscript.3"},"3":{"name":"support.type.actionscript.3"},"4":{"name":"support.type.actionscript.3"}},"match":"(:)\\\\s*([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)(?:\\\\.<([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)>)?|(\\\\*)"},"strings":{"patterns":[{"begin":"@\\"","end":"\\"","name":"string.quoted.verbatim.actionscript.3"},{"begin":"\\"","end":"\\"","name":"string.quoted.double.actionscript.3","patterns":[{"include":"#escapes"}]},{"begin":"'","end":"'","name":"string.quoted.single.actionscript.3","patterns":[{"include":"#escapes"}]}]},"use_namespace":{"captures":{"2":{"name":"keyword.other.actionscript.3"},"3":{"name":"keyword.other.actionscript.3"},"4":{"name":"storage.modifier.actionscript.3"}},"match":"(^|\\\\s+|;)(use\\\\s+)?(namespace)\\\\s+(\\\\w+)\\\\s*(;|$)"},"variable_declaration":{"captures":{"2":{"name":"storage.modifier.actionscript.3"},"4":{"name":"storage.modifier.actionscript.3"},"6":{"name":"storage.modifier.actionscript.3"},"7":{"name":"storage.modifier.actionscript.3"},"8":{"name":"keyword.operator.actionscript.3"}},"match":"((static)\\\\s+)?((\\\\w+)\\\\s+)?((static)\\\\s+)?(const|var)\\\\s+[$0-9A-Z_a-z]+(?:\\\\s*(:))?","name":"meta.variable_declaration.actionscript.3"},"vector_creation_operators":{"match":"([<>])","name":"keyword.operator.actionscript.3"}},"scopeName":"source.actionscript.3","aliases":["actionscript","as3"]}`)),t=[e];export{t as default};