@bud.sh/app 0.1.0 → 0.2.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 (348) hide show
  1. package/dist/hosted/hosted.js +121 -35
  2. package/dist/node-host/assets/abap-LtYK6g-v.js +3 -0
  3. package/dist/node-host/assets/actionscript-3-CfsDl31I.js +3 -0
  4. package/dist/node-host/assets/ada-CvTdxb4T.js +3 -0
  5. package/dist/node-host/assets/ahk-HN_I_y_3.js +3 -0
  6. package/dist/node-host/assets/ahk2-bJ5Wm9-K.js +3 -0
  7. package/dist/node-host/assets/andromeeda-BASpqCeJ.js +4 -0
  8. package/dist/node-host/assets/angular-html-C4SmZqv0.js +33 -0
  9. package/dist/node-host/assets/angular-ts-X1i_WOxI.js +27 -0
  10. package/dist/node-host/assets/apache-BIl2qPOf.js +3 -0
  11. package/dist/node-host/assets/apex-CybrBQ0z.js +3 -0
  12. package/dist/node-host/assets/api_vite-DSBC5Nzy.js +5 -0
  13. package/dist/node-host/assets/apl-CDTyNgE2.js +17 -0
  14. package/dist/node-host/assets/applescript-CJ80B5XJ.js +3 -0
  15. package/dist/node-host/assets/ara-IxnQjO6j.js +3 -0
  16. package/dist/node-host/assets/asciidoc-xKuVlNk6.js +3 -0
  17. package/dist/node-host/assets/asm-wBDSgBbA.js +3 -0
  18. package/dist/node-host/assets/astro-BiZFCPSt.js +19 -0
  19. package/dist/node-host/assets/aurora-x-DugsLcii.js +4 -0
  20. package/dist/node-host/assets/awk-D6dA05Ye.js +3 -0
  21. package/dist/node-host/assets/ayu-dark-BT3qdi3o.js +4 -0
  22. package/dist/node-host/assets/ayu-light-BVZyHoh9.js +4 -0
  23. package/dist/node-host/assets/ayu-mirage-XFwUVZQZ.js +4 -0
  24. package/dist/node-host/assets/ballerina-DIdXD2KH.js +3 -0
  25. package/dist/node-host/assets/bat-Dx8nnxXE.js +3 -0
  26. package/dist/node-host/assets/beancount-BG2UQN2D.js +3 -0
  27. package/dist/node-host/assets/berry-CgA2ea0_.js +3 -0
  28. package/dist/node-host/assets/bibtex-BzgdqG3s.js +3 -0
  29. package/dist/node-host/assets/bicep-CZ338dSk.js +3 -0
  30. package/dist/node-host/assets/bird2-BMprQDNV.js +3 -0
  31. package/dist/node-host/assets/blade-cZjv4Qad.js +21 -0
  32. package/dist/node-host/assets/bsl-Bh8bzcoy.js +6 -0
  33. package/dist/node-host/assets/build-Dn-L17Oj.js +5372 -0
  34. package/dist/node-host/assets/c-BXsbGxlp.js +6 -0
  35. package/dist/node-host/assets/c3-u0qNrniV.js +3 -0
  36. package/dist/node-host/assets/cadence-B1ELWULD.js +3 -0
  37. package/dist/node-host/assets/cairo-BsQhEq3R.js +6 -0
  38. package/dist/node-host/assets/canvas-BZhzizzt.js +1066 -0
  39. package/dist/node-host/assets/catppuccin-frappe-D20KODDN.js +4 -0
  40. package/dist/node-host/assets/catppuccin-latte-eGLVHIUJ.js +4 -0
  41. package/dist/node-host/assets/catppuccin-macchiato-bQGch4PY.js +4 -0
  42. package/dist/node-host/assets/catppuccin-mocha-Bes8-0Mr.js +4 -0
  43. package/dist/node-host/assets/chapel-cEZNBFmv.js +6 -0
  44. package/dist/node-host/assets/clarity-BkOxTQMf.js +3 -0
  45. package/dist/node-host/assets/clojure-DDsQ0FaV.js +3 -0
  46. package/dist/node-host/assets/cloneFileDiffMetadata-C1BcNpxN.js +3075 -0
  47. package/dist/node-host/assets/cmake-DPsCB_V6.js +3 -0
  48. package/dist/node-host/assets/cobol-BpMD18Rr.js +11 -0
  49. package/dist/node-host/assets/codeowners-CxEKPWu0.js +3 -0
  50. package/dist/node-host/assets/codeql-BwdvwJnv.js +3 -0
  51. package/dist/node-host/assets/coffee-BX_u-2R1.js +6 -0
  52. package/dist/node-host/assets/comment-data-nUlI0szN.js +92501 -0
  53. package/dist/node-host/assets/common-lisp-DJtwvW4V.js +3 -0
  54. package/dist/node-host/assets/coq-Byd42hNw.js +3 -0
  55. package/dist/node-host/assets/cpp-DjJRL98I.js +22 -0
  56. package/dist/node-host/assets/crystal-Cz-dKioR.js +19 -0
  57. package/dist/node-host/assets/csharp-Cx443ZdC.js +3 -0
  58. package/dist/node-host/assets/css-CWNyyZRg.js +6 -0
  59. package/dist/node-host/assets/csv-DqIVFkK7.js +3 -0
  60. package/dist/node-host/assets/cue-B5KneM5p.js +3 -0
  61. package/dist/node-host/assets/cypher-D8Bb8Cq2.js +3 -0
  62. package/dist/node-host/assets/d-BQY8TDgQ.js +3 -0
  63. package/dist/node-host/assets/dark-plus-BGuiqa1B.js +4 -0
  64. package/dist/node-host/assets/dart-BZ3YsgDB.js +3 -0
  65. package/dist/node-host/assets/dax-S-Noo-ku.js +3 -0
  66. package/dist/node-host/assets/desktop-BgOb7Aj4.js +3 -0
  67. package/dist/node-host/assets/diff-Blb4MjsC.js +3 -0
  68. package/dist/node-host/assets/dist-CVXhIZqO.js +6659 -0
  69. package/dist/node-host/assets/docker-PC1tuYpa.js +3 -0
  70. package/dist/node-host/assets/dotenv-BNWDqzYB.js +3 -0
  71. package/dist/node-host/assets/dracula-0CVA2XY5.js +4 -0
  72. package/dist/node-host/assets/dracula-soft-Dk9bpbVU.js +4 -0
  73. package/dist/node-host/assets/dream-maker-CngiPd8U.js +3 -0
  74. package/dist/node-host/assets/edge-D1_nghia.js +13 -0
  75. package/dist/node-host/assets/edit-DjpTbnEc.js +9788 -0
  76. package/dist/node-host/assets/elixir-x6BMZ6zW.js +6 -0
  77. package/dist/node-host/assets/elm-CiAjb3qf.js +6 -0
  78. package/dist/node-host/assets/emacs-lisp-DPCJASlD.js +3 -0
  79. package/dist/node-host/assets/erb-DzXTnEFa.js +11 -0
  80. package/dist/node-host/assets/erlang-DALBVNgL.js +6 -0
  81. package/dist/node-host/assets/everforest-dark-CRjTbhh5.js +4 -0
  82. package/dist/node-host/assets/everforest-light-CEeYFLn8.js +4 -0
  83. package/dist/node-host/assets/fennel-B3wtZRne.js +3 -0
  84. package/dist/node-host/assets/files-CTzcWGjb.js +3771 -0
  85. package/dist/node-host/assets/fish-D7qAeWQz.js +3 -0
  86. package/dist/node-host/assets/fluent-BjfpB34g.js +3 -0
  87. package/dist/node-host/assets/fortran-fixed-form-BbzsUHx4.js +6 -0
  88. package/dist/node-host/assets/fortran-free-form-yxJ7igsv.js +3 -0
  89. package/dist/node-host/assets/fsharp-D2o1Vyx0.js +6 -0
  90. package/dist/node-host/assets/gdresource-aTcOcjSd.js +11 -0
  91. package/dist/node-host/assets/gdscript-CSSSWtkL.js +3 -0
  92. package/dist/node-host/assets/gdshader-D7JfdFV3.js +3 -0
  93. package/dist/node-host/assets/genie-DnK2KWIP.js +3 -0
  94. package/dist/node-host/assets/gherkin-D6Lr12YQ.js +3 -0
  95. package/dist/node-host/assets/git-commit-BU1ZeqU-.js +6 -0
  96. package/dist/node-host/assets/git-rebase-BBwLmuqc.js +6 -0
  97. package/dist/node-host/assets/github-dark-BXgKmOw_.js +4 -0
  98. package/dist/node-host/assets/github-dark-default-DzJQXksd.js +4 -0
  99. package/dist/node-host/assets/github-dark-dimmed-B1pEmGtS.js +4 -0
  100. package/dist/node-host/assets/github-dark-high-contrast-BkHIa6jc.js +4 -0
  101. package/dist/node-host/assets/github-light-BKRlUbaB.js +4 -0
  102. package/dist/node-host/assets/github-light-default-BU3eYkzs.js +4 -0
  103. package/dist/node-host/assets/github-light-high-contrast-B3MumDcI.js +4 -0
  104. package/dist/node-host/assets/gleam-CTllUdfC.js +3 -0
  105. package/dist/node-host/assets/glimmer-js-Cr4KUylv.js +15 -0
  106. package/dist/node-host/assets/glimmer-ts-W_3bhuUU.js +15 -0
  107. package/dist/node-host/assets/glsl-CV8OarLe.js +8 -0
  108. package/dist/node-host/assets/gn-CpIn4Dcw.js +3 -0
  109. package/dist/node-host/assets/gnuplot-DgWvVXI8.js +3 -0
  110. package/dist/node-host/assets/go-aXtTCanQ.js +3 -0
  111. package/dist/node-host/assets/graphql-BzQEBhBd.js +17 -0
  112. package/dist/node-host/assets/groovy-Bw2Ku4bU.js +3 -0
  113. package/dist/node-host/assets/gruvbox-dark-hard-B0ecF443.js +4 -0
  114. package/dist/node-host/assets/gruvbox-dark-medium-BQnpC39k.js +4 -0
  115. package/dist/node-host/assets/gruvbox-dark-soft-DFZUgESr.js +4 -0
  116. package/dist/node-host/assets/gruvbox-light-hard-CuB_LOJr.js +4 -0
  117. package/dist/node-host/assets/gruvbox-light-medium-idDHgxjs.js +4 -0
  118. package/dist/node-host/assets/gruvbox-light-soft-CfWH49MY.js +4 -0
  119. package/dist/node-host/assets/hack-DhYZEMlu.js +11 -0
  120. package/dist/node-host/assets/haml-CRid5kR3.js +13 -0
  121. package/dist/node-host/assets/handlebars-Sm6kCGmL.js +15 -0
  122. package/dist/node-host/assets/haskell-CfGsE1Cf.js +3 -0
  123. package/dist/node-host/assets/haxe-QaqXWmIB.js +3 -0
  124. package/dist/node-host/assets/hcl-DHg_Osgo.js +3 -0
  125. package/dist/node-host/assets/hjson-Cuaphql8.js +3 -0
  126. package/dist/node-host/assets/hlsl-BJLUNfne.js +3 -0
  127. package/dist/node-host/assets/horizon-bright-Ba6M8QSV.js +4 -0
  128. package/dist/node-host/assets/horizon-h92C5OlZ.js +4 -0
  129. package/dist/node-host/assets/houston-EQnPegWq.js +4 -0
  130. package/dist/node-host/assets/html-derivative-Cm8plTfc.js +6 -0
  131. package/dist/node-host/assets/html-j1vihRKA.js +13 -0
  132. package/dist/node-host/assets/http-BZNc4yhO.js +15 -0
  133. package/dist/node-host/assets/hurl-O8ckTHPH.js +13 -0
  134. package/dist/node-host/assets/hxml-9hvSHCPQ.js +6 -0
  135. package/dist/node-host/assets/hy-CJKxDzbh.js +3 -0
  136. package/dist/node-host/assets/imba-96qKoJCa.js +3 -0
  137. package/dist/node-host/assets/ini-C24lZfdM.js +3 -0
  138. package/dist/node-host/assets/java-CFxSaKyu.js +6 -0
  139. package/dist/node-host/assets/javascript-D44WgUBn.js +6 -0
  140. package/dist/node-host/assets/jinja-BkVH86If.js +10 -0
  141. package/dist/node-host/assets/jison-DOInKsmT.js +6 -0
  142. package/dist/node-host/assets/jiti-CjBwKumX.js +5461 -0
  143. package/dist/node-host/assets/json-CnGl9idC.js +6 -0
  144. package/dist/node-host/assets/json5-xULSgPQI.js +3 -0
  145. package/dist/node-host/assets/jsonc-Cu6rqcrJ.js +3 -0
  146. package/dist/node-host/assets/jsonl-Bp0qqr10.js +3 -0
  147. package/dist/node-host/assets/jsonnet-BafgE6cE.js +3 -0
  148. package/dist/node-host/assets/jssm-Dx5A5sBR.js +3 -0
  149. package/dist/node-host/assets/jsx-Dv6553c2.js +6 -0
  150. package/dist/node-host/assets/julia-CnoY-eZu.js +17 -0
  151. package/dist/node-host/assets/just-rCgUmVkD.js +19 -0
  152. package/dist/node-host/assets/kanagawa-dragon-DgDvwi3B.js +4 -0
  153. package/dist/node-host/assets/kanagawa-lotus-BgoQro20.js +4 -0
  154. package/dist/node-host/assets/kanagawa-wave-DgXEowHs.js +4 -0
  155. package/dist/node-host/assets/kdl-DkTyxPcj.js +3 -0
  156. package/dist/node-host/assets/kotlin-BHE8CoV9.js +3 -0
  157. package/dist/node-host/assets/kusto-6FdaWTzR.js +3 -0
  158. package/dist/node-host/assets/laserwave-IxBH_3yW.js +4 -0
  159. package/dist/node-host/assets/latex-DTvJHHg_.js +6 -0
  160. package/dist/node-host/assets/lean-BwOKScIt.js +3 -0
  161. package/dist/node-host/assets/less-BzbdhFUi.js +3 -0
  162. package/dist/node-host/assets/lib-BzDu3tbz.js +17484 -0
  163. package/dist/node-host/assets/light-plus-S8JBx6is.js +4 -0
  164. package/dist/node-host/assets/liquid-praBF2DO.js +15 -0
  165. package/dist/node-host/assets/llvm-ZNG_yAr9.js +3 -0
  166. package/dist/node-host/assets/log-Dad54gsi.js +3 -0
  167. package/dist/node-host/assets/logo-DTXV8SKw.js +3 -0
  168. package/dist/node-host/assets/lru-C0_oUet4.js +134 -0
  169. package/dist/node-host/assets/lua-CiYoSQn2.js +8 -0
  170. package/dist/node-host/assets/luau-DlImmvOM.js +3 -0
  171. package/dist/node-host/assets/main-D0ab5M4V.js +2353 -0
  172. package/dist/node-host/assets/make-B2ukzWs3.js +3 -0
  173. package/dist/node-host/assets/markdown-CkmxmzqY.js +3 -0
  174. package/dist/node-host/assets/marko-Din1W3ot.js +15 -0
  175. package/dist/node-host/assets/material-theme-D1f3HBq-.js +4 -0
  176. package/dist/node-host/assets/material-theme-darker-ExzYhT0j.js +4 -0
  177. package/dist/node-host/assets/material-theme-lighter-D6gH9nnA.js +4 -0
  178. package/dist/node-host/assets/material-theme-ocean-D1w5BPAa.js +4 -0
  179. package/dist/node-host/assets/material-theme-palenight-CkqWmVpF.js +4 -0
  180. package/dist/node-host/assets/matlab-CfRK6IMC.js +3 -0
  181. package/dist/node-host/assets/mdc-DrUS0kOP.js +13 -0
  182. package/dist/node-host/assets/mdx-BK9ZufRc.js +3 -0
  183. package/dist/node-host/assets/mermaid-ItFqCK9s.js +3 -0
  184. package/dist/node-host/assets/min-dark-npsJH98j.js +4 -0
  185. package/dist/node-host/assets/min-light-DUk1XsVt.js +4 -0
  186. package/dist/node-host/assets/mipsasm-EL46Y4Xg.js +3 -0
  187. package/dist/node-host/assets/mojo-CsUSYzsu.js +3 -0
  188. package/dist/node-host/assets/monokai-CfFRWUNl.js +4 -0
  189. package/dist/node-host/assets/moonbit-BuY4M1CG.js +3 -0
  190. package/dist/node-host/assets/move-B-o8dn0N.js +3 -0
  191. package/dist/node-host/assets/narrat-D9rrR0H5.js +3 -0
  192. package/dist/node-host/assets/nextflow-ByPelpfh.js +6 -0
  193. package/dist/node-host/assets/nextflow-groovy-kiH-pxwE.js +3 -0
  194. package/dist/node-host/assets/nginx-CqxQjy7t.js +6 -0
  195. package/dist/node-host/assets/night-owl-BS7V-av_.js +4 -0
  196. package/dist/node-host/assets/night-owl-light-CZtRawYE.js +4 -0
  197. package/dist/node-host/assets/nim-BJfyW_Eo.js +21 -0
  198. package/dist/node-host/assets/nix-NHxlegoK.js +7 -0
  199. package/dist/node-host/assets/node-CaLaDAar.js +783 -0
  200. package/dist/node-host/assets/nord-BFh54Nqz.js +4 -0
  201. package/dist/node-host/assets/nsis-C3tUpeAt.js +3 -0
  202. package/dist/node-host/assets/nushell-Dx3871HW.js +3 -0
  203. package/dist/node-host/assets/objective-c-6dJF64Dt.js +3 -0
  204. package/dist/node-host/assets/objective-cpp-_ooRQ-PY.js +3 -0
  205. package/dist/node-host/assets/ocaml-vm1Y8An6.js +3 -0
  206. package/dist/node-host/assets/odin-vjOJSyfV.js +3 -0
  207. package/dist/node-host/assets/one-dark-pro-zDovGosB.js +4 -0
  208. package/dist/node-host/assets/one-light-gmHK3iK6.js +4 -0
  209. package/dist/node-host/assets/openscad-jn-f1Ocl.js +3 -0
  210. package/dist/node-host/assets/org-kbyZnkNe.js +101 -0
  211. package/dist/node-host/assets/pages-0aWH7z1j.js +578 -0
  212. package/dist/node-host/assets/pascal-D8-gNZ2I.js +3 -0
  213. package/dist/node-host/assets/perl-Ck21ZEIA.js +17 -0
  214. package/dist/node-host/assets/php-BI2xxNig.js +19 -0
  215. package/dist/node-host/assets/pierre-dark-DDWDl8g6.js +4 -0
  216. package/dist/node-host/assets/pierre-dark-protanopia-deuteranopia-C35UMuvO.js +4 -0
  217. package/dist/node-host/assets/pierre-dark-soft-Bb-4-biO.js +4 -0
  218. package/dist/node-host/assets/pierre-dark-tritanopia-CIJISGWF.js +4 -0
  219. package/dist/node-host/assets/pierre-dark-vibrant-8oZzB3gw.js +4 -0
  220. package/dist/node-host/assets/pierre-light-CWhW4NrH.js +4 -0
  221. package/dist/node-host/assets/pierre-light-protanopia-deuteranopia-u0U7N4Hn.js +4 -0
  222. package/dist/node-host/assets/pierre-light-soft-BCU6fuhO.js +4 -0
  223. package/dist/node-host/assets/pierre-light-tritanopia-3c8Yx3co.js +4 -0
  224. package/dist/node-host/assets/pierre-light-vibrant-Cwh332o_.js +4 -0
  225. package/dist/node-host/assets/pkl-C7lWzykI.js +3 -0
  226. package/dist/node-host/assets/plastic-DtdaCjub.js +4 -0
  227. package/dist/node-host/assets/plsql-DCNXypXO.js +3 -0
  228. package/dist/node-host/assets/po-IjpR1yHO.js +3 -0
  229. package/dist/node-host/assets/poimandres-Hdda6aHK.js +4 -0
  230. package/dist/node-host/assets/polar-4pN1JrJ8.js +3 -0
  231. package/dist/node-host/assets/postcss-0FnF2XR3.js +5833 -0
  232. package/dist/node-host/assets/postcss-D1gKt4z_.js +3 -0
  233. package/dist/node-host/assets/postcss-import-D5DErX4i.js +445 -0
  234. package/dist/node-host/assets/powerquery-SrvS_NBM.js +3 -0
  235. package/dist/node-host/assets/powershell-DvPkO2jl.js +3 -0
  236. package/dist/node-host/assets/prisma-4G_BaF_i.js +3 -0
  237. package/dist/node-host/assets/project-branches-1zs_0J_y.js +600 -0
  238. package/dist/node-host/assets/project-thread-links-LpUAGcDr.js +241 -0
  239. package/dist/node-host/assets/prolog-Bacii3Ue.js +3 -0
  240. package/dist/node-host/assets/prompt-CH6TK0bC-ZEO69UbU.js +885 -0
  241. package/dist/node-host/assets/proto-ClkOcAW0.js +3 -0
  242. package/dist/node-host/assets/pug-Du-dOfS3.js +13 -0
  243. package/dist/node-host/assets/puppet-CQlPp728.js +3 -0
  244. package/dist/node-host/assets/purescript-CLpaGMbw.js +3 -0
  245. package/dist/node-host/assets/python-BjnOIxPe.js +3 -0
  246. package/dist/node-host/assets/qml-BcFatdsQ.js +6 -0
  247. package/dist/node-host/assets/qmldir-Dz8ttxjf.js +3 -0
  248. package/dist/node-host/assets/qss-Iltvkn1C.js +3 -0
  249. package/dist/node-host/assets/r-DvDYa_8Q.js +6 -0
  250. package/dist/node-host/assets/racket-DRv7j6nv.js +3 -0
  251. package/dist/node-host/assets/raku-DI9yGpeW.js +3 -0
  252. package/dist/node-host/assets/razor-vGjCiVYw.js +11 -0
  253. package/dist/node-host/assets/rbs-D_4FkXDS.js +3 -0
  254. package/dist/node-host/assets/red-VqZFRByZ.js +4 -0
  255. package/dist/node-host/assets/reg-DpJf71oO.js +3 -0
  256. package/dist/node-host/assets/regexp-CE_3vZDh.js +6 -0
  257. package/dist/node-host/assets/rel-BT0iIKKw.js +3 -0
  258. package/dist/node-host/assets/riscv-CvzikGLb.js +3 -0
  259. package/dist/node-host/assets/rolldown-runtime-DktXgydw.js +35 -0
  260. package/dist/node-host/assets/ron-DzAo6FTJ.js +3 -0
  261. package/dist/node-host/assets/rose-pine-DiTkEueR.js +4 -0
  262. package/dist/node-host/assets/rose-pine-dawn-tfo5y2X0.js +4 -0
  263. package/dist/node-host/assets/rose-pine-moon-C0gON9XN.js +4 -0
  264. package/dist/node-host/assets/rosmsg-CyYq6XdT.js +3 -0
  265. package/dist/node-host/assets/rst-BqrTc4by.js +23 -0
  266. package/dist/node-host/assets/ruby-DLXfYriJ.js +31 -0
  267. package/dist/node-host/assets/rust-CaJo2YYS.js +3 -0
  268. package/dist/node-host/assets/sas-DJAJgMrq.js +6 -0
  269. package/dist/node-host/assets/sass-DI2zJwx7.js +3 -0
  270. package/dist/node-host/assets/scala-pMGZAs9j.js +3 -0
  271. package/dist/node-host/assets/scheme-D3A2QBtM.js +3 -0
  272. package/dist/node-host/assets/screen-DQoTOWYR.js +494 -0
  273. package/dist/node-host/assets/scss-n4nz8dJI.js +8 -0
  274. package/dist/node-host/assets/sdbl-CdQg5gu1.js +3 -0
  275. package/dist/node-host/assets/shaderlab-5KHT7nQ3.js +6 -0
  276. package/dist/node-host/assets/shellscript-BfuVOb-a.js +6 -0
  277. package/dist/node-host/assets/shellsession-hT9eQUDu.js +6 -0
  278. package/dist/node-host/assets/slack-dark-v8P_eXr6.js +4 -0
  279. package/dist/node-host/assets/slack-ochin-D8SyEdKz.js +4 -0
  280. package/dist/node-host/assets/smalltalk-D4IpSogw.js +3 -0
  281. package/dist/node-host/assets/smithy-BRyN83Yn.js +3 -0
  282. package/dist/node-host/assets/snazzy-light-BtkQkvXb.js +4 -0
  283. package/dist/node-host/assets/solarized-dark-B8nAdMfM.js +4 -0
  284. package/dist/node-host/assets/solarized-light-B-3F1INj.js +4 -0
  285. package/dist/node-host/assets/solidity-DPVu0wkJ.js +3 -0
  286. package/dist/node-host/assets/soy-Cbnz3v4z.js +6 -0
  287. package/dist/node-host/assets/sparql-cTZV4yOr.js +6 -0
  288. package/dist/node-host/assets/splunk-xP_ZjUH2.js +3 -0
  289. package/dist/node-host/assets/sql-DEvbt_rU.js +6 -0
  290. package/dist/node-host/assets/ssh-config-DXFPABYp.js +3 -0
  291. package/dist/node-host/assets/stata-0wnAnxv2.js +6 -0
  292. package/dist/node-host/assets/stylus-ZZDn1yUO.js +3 -0
  293. package/dist/node-host/assets/surrealql-70--UPGf.js +6 -0
  294. package/dist/node-host/assets/svelte-COI8WXVC.js +15 -0
  295. package/dist/node-host/assets/swift-DWmMn3lF.js +3 -0
  296. package/dist/node-host/assets/synthwave-84-DcsXCF_c.js +4 -0
  297. package/dist/node-host/assets/system-verilog-DW0KSMVO.js +3 -0
  298. package/dist/node-host/assets/systemd-DFbUltlW.js +3 -0
  299. package/dist/node-host/assets/talonscript-CLxaFu-b.js +3 -0
  300. package/dist/node-host/assets/tasks-C0WqnM7Q.js +644 -0
  301. package/dist/node-host/assets/tasks-request-Bwky5ORf.js +114 -0
  302. package/dist/node-host/assets/tasl-_AAbKiWM.js +3 -0
  303. package/dist/node-host/assets/tcl-DLe0Tsfm.js +3 -0
  304. package/dist/node-host/assets/templ-Bd0jzThC.js +13 -0
  305. package/dist/node-host/assets/terraform-v0KN9QQh.js +3 -0
  306. package/dist/node-host/assets/tex-C1Wtngrr.js +8 -0
  307. package/dist/node-host/assets/tokyo-night-Bvpqduda.js +4 -0
  308. package/dist/node-host/assets/toml-B7BHZIqX.js +3 -0
  309. package/dist/node-host/assets/ts-tags-BSGaPI18.js +59 -0
  310. package/dist/node-host/assets/tsv-BorGVq2Z.js +3 -0
  311. package/dist/node-host/assets/tsx-BxnCmyTp.js +6 -0
  312. package/dist/node-host/assets/turtle-BEG5g_eT.js +3 -0
  313. package/dist/node-host/assets/twig-BJG2k0MA.js +19 -0
  314. package/dist/node-host/assets/typescript-Cr5OHcug.js +6 -0
  315. package/dist/node-host/assets/typespec--jp0a8Qj.js +3 -0
  316. package/dist/node-host/assets/typst-BAvHLpwp.js +121 -0
  317. package/dist/node-host/assets/v-DBTjbKF9.js +3 -0
  318. package/dist/node-host/assets/vala-BnnASFsX.js +3 -0
  319. package/dist/node-host/assets/vb-eGVhCUXq.js +3 -0
  320. package/dist/node-host/assets/verilog-Ma7yBE30.js +3 -0
  321. package/dist/node-host/assets/vesper-CfxmMOy3.js +4 -0
  322. package/dist/node-host/assets/vhdl-Co2XFKY7.js +3 -0
  323. package/dist/node-host/assets/viml-BReTXeDA.js +3 -0
  324. package/dist/node-host/assets/vitesse-black-D9-_1mjV.js +4 -0
  325. package/dist/node-host/assets/vitesse-dark-DlSMLlr9.js +4 -0
  326. package/dist/node-host/assets/vitesse-light-KRWWWztf.js +4 -0
  327. package/dist/node-host/assets/vue-C3fWU2fi.js +31 -0
  328. package/dist/node-host/assets/vue-html-DxOM9wex.js +6 -0
  329. package/dist/node-host/assets/vue-vine-OKzSGBlX.js +19 -0
  330. package/dist/node-host/assets/vyper-C6KGx0YU.js +3 -0
  331. package/dist/node-host/assets/wasm-CvHAs-FG.js +7 -0
  332. package/dist/node-host/assets/wasm-gNIKwGlD.js +3 -0
  333. package/dist/node-host/assets/wenyan-BeysbCrW.js +3 -0
  334. package/dist/node-host/assets/wgsl-1s5rV5xS.js +3 -0
  335. package/dist/node-host/assets/wikitext-wjhjmmzD.js +3 -0
  336. package/dist/node-host/assets/wit-CeQiCbz_.js +3 -0
  337. package/dist/node-host/assets/wolfram-CcZPfnLd.js +3 -0
  338. package/dist/node-host/assets/worker-factory-C80HGMWf.js +14 -0
  339. package/dist/node-host/assets/xml-BsBjJrlv.js +8 -0
  340. package/dist/node-host/assets/xsl-BYwWzvT_.js +6 -0
  341. package/dist/node-host/assets/yaml-BRgACZP0.js +6 -0
  342. package/dist/node-host/assets/zenscript-BoijL7rl.js +3 -0
  343. package/dist/node-host/assets/zig-lTQvxhLD.js +3 -0
  344. package/dist/node-host/node-host.js +41395 -0
  345. package/dist/types/assets/contract-jA5pqK6h.d.ts +111 -0
  346. package/dist/types/hosted.d.ts +2 -98
  347. package/dist/types/node-host.d.ts +40 -0
  348. package/package.json +6 -2
@@ -0,0 +1,3 @@
1
+ var talonscript_default = [Object.freeze(JSON.parse("{\"displayName\":\"TalonScript\",\"name\":\"talonscript\",\"patterns\":[{\"include\":\"#body-header\"},{\"include\":\"#header\"},{\"include\":\"#body-noheader\"},{\"include\":\"#comment\"},{\"include\":\"#settings\"}],\"repository\":{\"action\":{\"begin\":\"([.0-9A-Z_a-z]+)(\\\\()\",\"beginCaptures\":{\"1\":{\"name\":\"entity.name.function.talon\",\"patterns\":[{\"match\":\"\\\\.\",\"name\":\"punctuation.separator.talon\"}]},\"2\":{\"name\":\"punctuation.definition.parameters.begin.talon\"}},\"end\":\"(\\\\))\",\"endCaptures\":{\"1\":{\"name\":\"punctuation.definition.parameters.end.talon\"}},\"name\":\"variable.parameter.talon\",\"patterns\":[{\"include\":\"#action\"},{\"include\":\"#qstring-long\"},{\"include\":\"#qstring\"},{\"include\":\"#argsep\"},{\"include\":\"#number\"},{\"include\":\"#operator\"},{\"include\":\"#varname\"}]},\"action-gamepad\":{\"captures\":{\"2\":{\"name\":\"punctuation.definition.parameters.begin.talon\"},\"3\":{\"name\":\"variable.parameter.talon\",\"patterns\":[{\"include\":\"#key-mods\"}]},\"4\":{\"name\":\"punctuation.definition.parameters.key.talon\"}},\"match\":\"(deck|gamepad|action|face|parrot)(\\\\()(.*)(\\\\))\",\"name\":\"entity.name.function.talon\"},\"action-key\":{\"captures\":{\"1\":{\"name\":\"punctuation.definition.parameters.begin.talon\"},\"2\":{\"name\":\"variable.parameter.talon\",\"patterns\":[{\"include\":\"#key-prefixes\"},{\"include\":\"#key-mods\"},{\"include\":\"#keystring\"}]},\"3\":{\"name\":\"punctuation.definition.parameters.key.talon\"}},\"match\":\"key(\\\\()(.*)(\\\\))\",\"name\":\"entity.name.function.talon\"},\"argsep\":{\"match\":\",\",\"name\":\"punctuation.separator.talon\"},\"assignment\":{\"begin\":\"(\\\\S*)(\\\\s?=\\\\s?)\",\"beginCaptures\":{\"1\":{\"name\":\"variable.other.talon\"},\"2\":{\"name\":\"keyword.operator.talon\"}},\"end\":\"\\\\n\",\"patterns\":[{\"include\":\"#comment\"},{\"include\":\"#comment-invalid\"},{\"include\":\"#expression\"}]},\"body-header\":{\"begin\":\"^-$\",\"end\":\"(?=not)possible\",\"patterns\":[{\"include\":\"#body-noheader\"}]},\"body-noheader\":{\"patterns\":[{\"include\":\"#comment\"},{\"include\":\"#comment-invalid\"},{\"include\":\"#other-rule-definition\"},{\"include\":\"#speech-rule-definition\"}]},\"capture\":{\"match\":\"(<[.0-9A-Z_a-z]+>)\",\"name\":\"variable.parameter.talon\"},\"comment\":{\"match\":\"^\\\\s*(#.*)$\",\"name\":\"comment.line.number-sign.talon\"},\"comment-invalid\":{\"match\":\"(\\\\s*#.*)$\",\"name\":\"invalid.illegal\"},\"context\":{\"captures\":{\"1\":{\"name\":\"entity.name.tag.talon\",\"patterns\":[{\"match\":\"(and |or )\",\"name\":\"keyword.operator.talon\"}]},\"2\":{\"name\":\"entity.name.type.talon\",\"patterns\":[{\"include\":\"#comment\"},{\"include\":\"#comment-invalid\"},{\"include\":\"#regexp\"}]}},\"match\":\"(.*): (.*)\"},\"expression\":{\"patterns\":[{\"include\":\"#qstring-long\"},{\"include\":\"#action-key\"},{\"include\":\"#action\"},{\"include\":\"#operator\"},{\"include\":\"#number\"},{\"include\":\"#qstring\"},{\"include\":\"#varname\"}]},\"fstring\":{\"captures\":{\"1\":{\"patterns\":[{\"include\":\"#action\"},{\"include\":\"#operator\"},{\"include\":\"#number\"},{\"include\":\"#varname\"},{\"include\":\"#qstring\"}]}},\"match\":\"\\\\{(.+?)}\",\"name\":\"constant.character.format.placeholder.talon\"},\"header\":{\"begin\":\"(?=(?:^app|title|os|tag|list|language):)\",\"end\":\"(?=^-$)\",\"patterns\":[{\"include\":\"#comment\"},{\"include\":\"#context\"}]},\"key-mods\":{\"captures\":{\"1\":{\"name\":\"keyword.operator.talon\"},\"2\":{\"name\":\"keyword.control.talon\"}},\"match\":\"(:)(up|down|change|repeat|start|stop|\\\\d+)\",\"name\":\"keyword.operator.talon\"},\"key-prefixes\":{\"captures\":{\"1\":{\"name\":\"keyword.control.talon\"},\"2\":{\"name\":\"keyword.operator.talon\"}},\"match\":\"(ctrl|shift|cmd|alt|win|super)(-)\"},\"keystring\":{\"begin\":\"([\\\"'])\",\"beginCaptures\":{\"1\":{\"name\":\"punctuation.definition.string.begin.talon\"}},\"end\":\"(\\\\1)|$\",\"endCaptures\":{\"1\":{\"name\":\"punctuation.definition.string.end.talon\"}},\"name\":\"string.quoted.double.talon\",\"patterns\":[{\"include\":\"#string-body\"},{\"include\":\"#key-mods\"},{\"include\":\"#key-prefixes\"}]},\"list\":{\"match\":\"(\\\\{[.0-9A-Z_a-z]+?})\",\"name\":\"string.interpolated.talon\"},\"number\":{\"match\":\"(?<=\\\\b)\\\\d+(\\\\.\\\\d+)?\",\"name\":\"constant.numeric.talon\"},\"operator\":{\"match\":\"\\\\s([-*+/]|or)\\\\s\",\"name\":\"keyword.operator.talon\"},\"other-rule-definition\":{\"begin\":\"^([a-z]+\\\\(.*[^-]\\\\)|[a-z]+\\\\(.*--\\\\)|[a-z]+\\\\(-\\\\)|[a-z]+\\\\(\\\\)):\",\"beginCaptures\":{\"1\":{\"name\":\"entity.name.tag.talon\",\"patterns\":[{\"include\":\"#action-key\"},{\"include\":\"#action-gamepad\"},{\"include\":\"#rule-specials\"}]}},\"end\":\"(?=^[^#\\\\s])\",\"patterns\":[{\"include\":\"#statement\"}]},\"qstring\":{\"begin\":\"([\\\"'])\",\"beginCaptures\":{\"1\":{\"name\":\"punctuation.definition.string.begin.talon\"}},\"end\":\"(\\\\1)|$\",\"endCaptures\":{\"1\":{\"name\":\"punctuation.definition.string.end.talon\"}},\"name\":\"string.quoted.double.talon\",\"patterns\":[{\"include\":\"#string-body\"}]},\"qstring-long\":{\"begin\":\"(\\\"\\\"\\\"|''')\",\"beginCaptures\":{\"1\":{\"name\":\"punctuation.definition.string.begin.talon\"}},\"end\":\"(\\\\1)\",\"endCaptures\":{\"1\":{\"name\":\"punctuation.definition.string.end.talon\"}},\"name\":\"string.quoted.triple.talon\",\"patterns\":[{\"include\":\"#string-body\"}]},\"regexp\":{\"begin\":\"(/)\",\"end\":\"(/)\",\"name\":\"string.regexp.talon\",\"patterns\":[{\"match\":\"\\\\.\",\"name\":\"support.other.match.any.regexp\"},{\"match\":\"\\\\$\",\"name\":\"support.other.match.end.regexp\"},{\"match\":\"\\\\^\",\"name\":\"support.other.match.begin.regexp\"},{\"match\":\"\\\\\\\\[$*+.?^]\",\"name\":\"constant.character.escape.talon\"},{\"match\":\"\\\\[(\\\\\\\\]|[^]])*]\",\"name\":\"constant.other.set.regexp\"},{\"match\":\"[*+?]\",\"name\":\"keyword.operator.quantifier.regexp\"}]},\"rule-specials\":{\"captures\":{\"1\":{\"name\":\"entity.name.function.talon\"},\"2\":{\"name\":\"punctuation.definition.parameters.begin.talon\"},\"3\":{\"name\":\"punctuation.definition.parameters.end.talon\"}},\"match\":\"(settings|tag)(\\\\()(\\\\))\"},\"speech-rule-definition\":{\"begin\":\"^(.*?):\",\"beginCaptures\":{\"1\":{\"name\":\"entity.name.tag.talon\",\"patterns\":[{\"match\":\"^\\\\^\",\"name\":\"string.regexp.talon\"},{\"match\":\"\\\\$$\",\"name\":\"string.regexp.talon\"},{\"match\":\"\\\\(\",\"name\":\"punctuation.definition.parameters.begin.talon\"},{\"match\":\"\\\\)\",\"name\":\"punctuation.definition.parameters.end.talon\"},{\"match\":\"\\\\|\",\"name\":\"punctuation.separator.talon\"},{\"include\":\"#capture\"},{\"include\":\"#list\"}]}},\"end\":\"(?=^[^#\\\\s])\",\"patterns\":[{\"include\":\"#statement\"}]},\"statement\":{\"patterns\":[{\"include\":\"#comment\"},{\"include\":\"#comment-invalid\"},{\"include\":\"#qstring-long\"},{\"include\":\"#action-key\"},{\"include\":\"#action\"},{\"include\":\"#qstring\"},{\"include\":\"#assignment\"}]},\"string-body\":{\"patterns\":[{\"match\":\"\\\\{\\\\{|}}\",\"name\":\"string.quoted.double.talon\"},{\"match\":\"\\\\\\\\[\\\"'\\\\\\\\nrt]\",\"name\":\"constant.character.escape.python\"},{\"include\":\"#fstring\"}]},\"varname\":{\"captures\":{\"2\":{\"name\":\"constant.numeric.talon\",\"patterns\":[{\"match\":\"_\",\"name\":\"keyword.operator.talon\"}]}},\"match\":\"([.0-9A-Z_a-z])(_(list|\\\\d+)(?=[^.0-9A-Z_a-z]))?\",\"name\":\"variable.parameter.talon\"}},\"scopeName\":\"source.talon\",\"aliases\":[\"talon\"]}"))];
2
+ //#endregion
3
+ export { talonscript_default as default };
@@ -0,0 +1,644 @@
1
+ import { $t as Button, Ar as parseWorkDetail, B as TaskWorkspace, C as ThreadTaskLinks, Dt as taskHref, Et as selectedTask, Jt as CommentThreadDetail, Lr as parseWorkSyncResult, Nr as parseWorkMutationResult, Ot as taskRole, S as writeRows, T as ItemDiscussion, Tr as parseSectionData, Tt as readConversationLocation, Xt as CommentComposer, Yt as CommentThreadItem, b as plainRow, cn as toast, dn as Text, h as storedWorkspace, l as projectStore, nt as CommentThreadHeading, qt as taskRoutes, t as commentsUnavailable, x as writeOptimistically, xt as conversationLabel, y as routes } from "./comment-data-nUlI0szN.js";
2
+ import { a as predictWorkAction, i as loadItemComments, n as createProjectComments, o as predictWorkCreate, s as predictWorkUpdate, t as defineScreen } from "./screen-DQoTOWYR.js";
3
+ import { n as requestTasks, t as TaskRequestError } from "./tasks-request-Bwky5ORf.js";
4
+ import { r as projectWork } from "../node-host.js";
5
+ import { n as ProjectTaskPicker, t as ProjectThreadLinks } from "./project-thread-links-LpUAGcDr.js";
6
+ import { on, ref } from "remix/component";
7
+ import { Fragment, jsx, jsxs } from "remix/component/jsx-runtime";
8
+ //#region app/client/task-discussion.tsx
9
+ /**
10
+ * Owns a task's filtered discussions and lazy detail requests within its mounted lifetime.
11
+ * @param handle - The trusted project capability and currently displayed work-item ID.
12
+ * @returns The discussion block supplied to the task design.
13
+ */
14
+ function TaskDiscussion(handle) {
15
+ let requested = handle.props.conversationId;
16
+ let selected = requested;
17
+ let explicit = Boolean(requested);
18
+ let creating = false;
19
+ let picking = false;
20
+ let draftItemIds = [handle.props.itemId];
21
+ let comments = createProjectComments({
22
+ store: projectStore(handle.props.project),
23
+ token: handle.props.project.token,
24
+ signal: handle.signal,
25
+ filter: { itemId: handle.props.itemId },
26
+ initial: handle.props.initial,
27
+ onChange() {
28
+ if (!handle.signal.aborted) handle.update();
29
+ }
30
+ });
31
+ if (comments.loaded) selected ??= comments.snapshot.threads[0]?.id;
32
+ let mount = ref(() => {
33
+ if (comments.loaded) return;
34
+ comments.load().then(() => {
35
+ selected ??= comments.snapshot.threads[0]?.id;
36
+ if (!handle.signal.aborted) handle.update();
37
+ });
38
+ });
39
+ async function write(change) {
40
+ let result = await comments.write(change);
41
+ await handle.props.onChange?.();
42
+ return result;
43
+ }
44
+ function threadLinks(thread) {
45
+ return {
46
+ project: handle.props.project,
47
+ thread,
48
+ items: handle.props.items,
49
+ canLink: comments.snapshot.capabilities.link,
50
+ busy: comments.busy,
51
+ onChange: async () => {
52
+ await comments.load();
53
+ if (comments.snapshot.threads.some((item) => item.id === thread.id)) await comments.loadThread(thread.id, true);
54
+ await handle.props.onChange?.();
55
+ }
56
+ };
57
+ }
58
+ function links(thread) {
59
+ return /* @__PURE__ */ jsxs("div", {
60
+ class: "flex items-start justify-between gap-2",
61
+ children: [handle.props.renderThreadLinks ? handle.props.renderThreadLinks(thread) : /* @__PURE__ */ jsx(ProjectThreadLinks, {
62
+ part: thread.anchor ? "links" : void 0,
63
+ ...threadLinks(thread)
64
+ }), !thread.anchor && comments.snapshot.capabilities.reply && comments.snapshot.threads.length > 1 ? /* @__PURE__ */ jsx(Button, {
65
+ variant: "ghost",
66
+ size: "small",
67
+ disabled: comments.busy,
68
+ "aria-pressed": !creating && selected === thread.id,
69
+ mix: on("click", () => {
70
+ selected = thread.id;
71
+ explicit = true;
72
+ creating = false;
73
+ handle.update();
74
+ }),
75
+ children: "Reply"
76
+ }) : null]
77
+ });
78
+ }
79
+ function heading(thread) {
80
+ return /* @__PURE__ */ jsx(CommentThreadHeading, {
81
+ location: thread.anchor ? conversationLabel(thread) : "Discussion",
82
+ actions: handle.props.renderThreadLinks ? void 0 : /* @__PURE__ */ jsx(ProjectThreadLinks, {
83
+ part: "action",
84
+ ...threadLinks(thread)
85
+ }),
86
+ status: thread.status,
87
+ busy: comments.busy,
88
+ onStatusChange: comments.snapshot.capabilities.status ? (status) => {
89
+ write({
90
+ id: thread.id,
91
+ status
92
+ }).catch(() => {});
93
+ } : void 0
94
+ });
95
+ }
96
+ return () => {
97
+ if (requested !== handle.props.conversationId) {
98
+ requested = handle.props.conversationId;
99
+ explicit = Boolean(requested);
100
+ if (requested) {
101
+ selected = requested;
102
+ creating = false;
103
+ }
104
+ }
105
+ let { threads, capabilities } = comments.snapshot;
106
+ let reply = creating ? void 0 : threads.find((thread) => thread.id === selected && !thread.anchor) ?? (explicit ? void 0 : threads.find((thread) => !thread.anchor && thread.status !== "resolved") ?? (!capabilities.create ? threads.find((thread) => !thread.anchor) : void 0));
107
+ let replyPending = !creating && (explicit && (!reply || !capabilities.reply) || Boolean(reply && !reply.messagesLoaded));
108
+ if (comments.ready && !comments.busy && !comments.loading) handle.queueTask(() => {
109
+ if (explicit && selected) comments.loadThread(selected);
110
+ for (let thread of comments.snapshot.threads) if (!thread.messagesLoaded && (!thread.anchor || thread.id === selected)) comments.loadThread(thread.id);
111
+ });
112
+ let count = threads.reduce((sum, thread) => sum + thread.messageCount, 0);
113
+ return /* @__PURE__ */ jsxs("section", {
114
+ class: "flex min-w-0 flex-col gap-3",
115
+ "aria-label": "Task discussion",
116
+ mix: mount,
117
+ children: [
118
+ /* @__PURE__ */ jsxs("div", {
119
+ class: "flex items-center gap-2",
120
+ children: [
121
+ /* @__PURE__ */ jsx(Text, {
122
+ as: "h3",
123
+ variant: "ui",
124
+ weight: "medium",
125
+ children: "Discussion"
126
+ }),
127
+ count ? /* @__PURE__ */ jsx(Text, {
128
+ variant: "ui-caption",
129
+ tone: "muted",
130
+ children: count
131
+ }) : null,
132
+ comments.ready && capabilities.create && threads.length ? /* @__PURE__ */ jsx(Button, {
133
+ variant: "ghost",
134
+ size: "small",
135
+ class: "ms-auto",
136
+ disabled: comments.busy || creating,
137
+ mix: on("click", () => {
138
+ creating = true;
139
+ handle.update();
140
+ }),
141
+ children: "New discussion"
142
+ }) : null
143
+ ]
144
+ }),
145
+ comments.error ? /* @__PURE__ */ jsxs("div", {
146
+ class: "flex flex-col items-start gap-2",
147
+ children: [/* @__PURE__ */ jsx(Text, {
148
+ variant: "ui-caption",
149
+ role: "alert",
150
+ children: comments.error
151
+ }), /* @__PURE__ */ jsx(Button, {
152
+ variant: "secondary",
153
+ size: "small",
154
+ mix: on("click", () => {
155
+ comments.load().then(() => selected ? comments.loadThread(selected, true) : void 0);
156
+ }),
157
+ children: "Reload comments"
158
+ })]
159
+ }) : null,
160
+ !comments.loaded ? /* @__PURE__ */ jsx(Text, {
161
+ variant: "ui-caption",
162
+ tone: "muted",
163
+ role: "status",
164
+ children: "Loading discussion…"
165
+ }) : !comments.ready ? /* @__PURE__ */ jsx(Text, {
166
+ variant: "ui-caption",
167
+ tone: "muted",
168
+ children: commentsUnavailable
169
+ }) : /* @__PURE__ */ jsxs(Fragment, { children: [threads.length ? threads.map((thread) => !thread.anchor ? /* @__PURE__ */ jsx(ItemDiscussion, {
170
+ thread,
171
+ links: links(thread)
172
+ }, thread.id) : /* @__PURE__ */ jsx(CommentThreadItem, {
173
+ id: thread.id,
174
+ expanded: selected === thread.id,
175
+ heading: heading(thread),
176
+ messages: thread.messages,
177
+ messageCount: thread.messageCount,
178
+ now: comments.now,
179
+ onExpand: () => {
180
+ selected = thread.id;
181
+ explicit = false;
182
+ comments.loadThread(thread.id);
183
+ handle.update();
184
+ },
185
+ renderDetail: () => /* @__PURE__ */ jsx(CommentThreadDetail, {
186
+ heading: heading(thread),
187
+ messages: thread.messages,
188
+ messageCount: thread.messageCount,
189
+ messagesLoaded: thread.messagesLoaded,
190
+ messagesTruncated: thread.messagesTruncated,
191
+ now: comments.now,
192
+ busy: comments.busy,
193
+ links: links(thread),
194
+ onReply: capabilities.reply ? (body, parentId) => write({
195
+ id: thread.id,
196
+ body,
197
+ parentId
198
+ }) : void 0
199
+ })
200
+ }, thread.id)) : /* @__PURE__ */ jsx(Text, {
201
+ variant: "ui-caption",
202
+ tone: "muted",
203
+ children: "No discussion yet."
204
+ }), capabilities.create || capabilities.reply && (explicit || threads.some((thread) => !thread.anchor)) ? /* @__PURE__ */ jsxs("div", {
205
+ class: "flex min-w-0 flex-col gap-2",
206
+ children: [capabilities.create && (creating || !explicit && !threads.length) ? /* @__PURE__ */ jsxs("div", {
207
+ class: "flex items-start justify-between gap-2",
208
+ "aria-label": "New discussion tasks",
209
+ children: [/* @__PURE__ */ jsx(ThreadTaskLinks, {
210
+ itemIds: draftItemIds,
211
+ items: handle.props.items ?? [],
212
+ href: taskHref,
213
+ busy: comments.busy,
214
+ onEdit: capabilities.link ? () => {
215
+ picking = true;
216
+ handle.update();
217
+ } : void 0
218
+ }), creating ? /* @__PURE__ */ jsx(Button, {
219
+ variant: "ghost",
220
+ size: "small",
221
+ disabled: comments.busy,
222
+ mix: on("click", () => {
223
+ creating = false;
224
+ handle.update();
225
+ }),
226
+ children: "Cancel"
227
+ }) : null]
228
+ }) : threads.length > 1 ? /* @__PURE__ */ jsxs(Text, {
229
+ variant: "ui-caption",
230
+ tone: "muted",
231
+ children: ["Replying to ", reply?.messages[0]?.author.name ?? "the discussion"]
232
+ }) : null, /* @__PURE__ */ jsx(CommentComposer, {
233
+ label: "Add task comment",
234
+ placeholder: "Add context for your team…",
235
+ busy: comments.busy || replyPending,
236
+ class: "w-full",
237
+ onSubmit: async (body) => {
238
+ if (replyPending) throw new Error("Load the selected discussion before replying.");
239
+ if (reply && capabilities.reply) {
240
+ await write({
241
+ id: reply.id,
242
+ body
243
+ });
244
+ return;
245
+ }
246
+ selected = (await write({
247
+ anchor: null,
248
+ itemIds: draftItemIds,
249
+ body
250
+ })).thread.id;
251
+ explicit = Boolean(selected);
252
+ creating = false;
253
+ draftItemIds = [handle.props.itemId];
254
+ handle.update();
255
+ }
256
+ }, "task-composer")]
257
+ }) : null] }),
258
+ picking ? /* @__PURE__ */ jsx(ProjectTaskPicker, {
259
+ project: handle.props.project,
260
+ selected: draftItemIds,
261
+ required: [handle.props.itemId],
262
+ onSave: async (itemIds) => {
263
+ draftItemIds = itemIds;
264
+ handle.update();
265
+ },
266
+ onClose: () => {
267
+ picking = false;
268
+ handle.update();
269
+ }
270
+ }) : null
271
+ ]
272
+ });
273
+ };
274
+ }
275
+ //#endregion
276
+ //#region app/client/project-tasks.tsx
277
+ function changedSince(row, item) {
278
+ if (row.revision !== null) return row.revision !== item.revision;
279
+ return Object.entries(row.values).some(([field, value]) => JSON.stringify(value) !== JSON.stringify(item.values[field]));
280
+ }
281
+ async function loadTask(token, id, schema, signal, conversationId) {
282
+ let [value, discussion, resolved] = await Promise.all([
283
+ requestTasks(routes.tasksApi.show.href({ id }), token, signal, (value) => value),
284
+ loadItemComments(token, id, signal, conversationId),
285
+ schema
286
+ ]);
287
+ let detail = parseWorkDetail(value, resolved);
288
+ if (detail.item.id !== id) throw new Error("The task service returned a different task. Refresh and try again.");
289
+ return {
290
+ detail,
291
+ discussion
292
+ };
293
+ }
294
+ /**
295
+ * Opens the project's stored board, reading it from the companion only when this browser has
296
+ * none yet, and reads the task the URL opens with its discussions in parallel. An adapter
297
+ * failure is kept as data for the board.
298
+ * @param project - The project whose store and companion to read.
299
+ * @param signal - The screen's lifetime.
300
+ * @param href - The screen's location; a task page also reads that task.
301
+ * @param conversationId - A discussion the URL selects on that task page.
302
+ * @returns The store, or the error the board shows until a refresh succeeds.
303
+ */
304
+ async function loadTasks(project, signal, href, conversationId) {
305
+ let store = await projectStore(project);
306
+ let stored = storedWorkspace(store);
307
+ let workspace = stored ? Promise.resolve(stored) : projectWork(project).refresh(signal);
308
+ let id = href ? selectedTask(href) : null;
309
+ let open = (schema) => loadTask(project.token, id, schema, signal, conversationId);
310
+ let taskError = "";
311
+ let task = id ? open(workspace.then((value) => value.schema)).catch((cause) => {
312
+ if (!stored || cause instanceof TaskRequestError) throw cause;
313
+ return open(projectWork(project).refresh(signal).then((value) => value.schema));
314
+ }).catch((cause) => {
315
+ taskError = cause instanceof Error ? cause.message : "Could not load this task.";
316
+ return null;
317
+ }) : null;
318
+ try {
319
+ await workspace;
320
+ let opened = await task;
321
+ return {
322
+ store,
323
+ stored: Boolean(stored),
324
+ error: "",
325
+ task: opened,
326
+ taskError
327
+ };
328
+ } catch (cause) {
329
+ signal.throwIfAborted();
330
+ return {
331
+ store,
332
+ stored: false,
333
+ error: cause instanceof Error ? cause.message : "Could not load tasks."
334
+ };
335
+ }
336
+ }
337
+ /**
338
+ * The project's work board, its task details and task writes.
339
+ * @param handle - The project and its first board.
340
+ * @returns The board render function.
341
+ */
342
+ function ProjectTasks(handle) {
343
+ let project = handle.props.project;
344
+ let store = handle.props.initial.store;
345
+ let work = projectWork(project);
346
+ let workspace = storedWorkspace(store);
347
+ let stored = () => {
348
+ let version = workspace?.snapshot.schemaVersion;
349
+ workspace = storedWorkspace(store);
350
+ let row = detail ? store.work.get(detail.item.id) : void 0;
351
+ if (row && !row.$hasPendingWrites && changedSince(plainRow(row), detail.item)) loadDetail();
352
+ else if (!detail && detailError && workspace?.snapshot.schemaVersion !== version) loadDetail();
353
+ changed();
354
+ };
355
+ let subscriptions = [store.boards.subscribeChanges(stored), store.work.subscribeChanges(stored)];
356
+ let selectedId = selectedTask(handle.props.href);
357
+ let opened = handle.props.initial.task;
358
+ let detail = opened?.detail.item.id === selectedId ? opened.detail : null;
359
+ let discussion = detail ? opened.discussion : void 0;
360
+ let loading = false;
361
+ let detailError = handle.props.initial.task ? "" : handle.props.initial.taskError ?? "";
362
+ let detailLoading = selectedId !== null && !detail && !detailError;
363
+ let error = handle.props.initial.error;
364
+ let listRequest = null;
365
+ let detailRequest = null;
366
+ let writeRequests = /* @__PURE__ */ new Set();
367
+ let renderedHref = handle.props.href;
368
+ let pendingHref;
369
+ let deferredLocation = false;
370
+ let mounted = false;
371
+ function pending(open) {
372
+ let row = open ? store.work.get(open.item.id) : void 0;
373
+ if (!open || !row?.$hasPendingWrites) return open;
374
+ let values = {
375
+ ...open.item.values,
376
+ ...plainRow(row).values
377
+ };
378
+ return {
379
+ ...open,
380
+ item: {
381
+ ...open.item,
382
+ values
383
+ }
384
+ };
385
+ }
386
+ function currentSchema() {
387
+ if (!workspace) throw new Error("Refresh tasks before making changes.");
388
+ return workspace.schema;
389
+ }
390
+ async function write(url, body, parse) {
391
+ let controller = new AbortController();
392
+ writeRequests.add(controller);
393
+ try {
394
+ return await requestTasks(url, project.token, AbortSignal.any([handle.signal, controller.signal]), parse, fetch, { body });
395
+ } finally {
396
+ writeRequests.delete(controller);
397
+ }
398
+ }
399
+ async function accepted(issue) {
400
+ await writeRows(store.work, { upsert: [issue] });
401
+ if (detail?.item.id === issue.id) detail = {
402
+ ...detail,
403
+ item: issue
404
+ };
405
+ changed();
406
+ }
407
+ async function refreshAfterWrite() {
408
+ await load();
409
+ if (selectedId) await loadDetail();
410
+ }
411
+ let queues = /* @__PURE__ */ new Map();
412
+ async function save(url, body, predict, id) {
413
+ let previous = id ? queues.get(id) : void 0;
414
+ let settled = Promise.withResolvers();
415
+ if (id) queues.set(id, settled.promise);
416
+ try {
417
+ let item = await writeOptimistically(predict, async () => {
418
+ let prior = await previous;
419
+ let from = "expectedRevision" in body ? body.expectedRevision : void 0;
420
+ let result = await write(url, prior && from === prior.from && prior.to ? {
421
+ ...body,
422
+ expectedRevision: prior.to
423
+ } : body, (value) => parseWorkMutationResult(value, currentSchema()));
424
+ if (id && result.item.id !== id) throw new Error("The task service returned a different task. Refresh before retrying.");
425
+ await accepted(result.item);
426
+ settled.resolve(from ? {
427
+ from,
428
+ to: result.item.revision
429
+ } : null);
430
+ return result.item;
431
+ });
432
+ if (selectedId) await loadDetail();
433
+ return item;
434
+ } catch (cause) {
435
+ settled.resolve(null);
436
+ if (!handle.signal.aborted) toast.error("Bud undid a task change", { description: cause instanceof Error ? cause.message : "The write was not confirmed." });
437
+ refreshAfterWrite();
438
+ throw cause;
439
+ } finally {
440
+ if (id && queues.get(id) === settled.promise) queues.delete(id);
441
+ }
442
+ }
443
+ function predicted(id, next) {
444
+ return () => {
445
+ let row = store.work.get(id);
446
+ if (!row) return;
447
+ let { values } = next(plainRow(row));
448
+ store.work.update(id, (draft) => {
449
+ draft.values = values;
450
+ });
451
+ };
452
+ }
453
+ let operations = {
454
+ create: (draft) => save(routes.tasksApi.create.href(), draft, () => {
455
+ store.work.insert(predictWorkCreate(currentSchema(), `pending-${crypto.randomUUID()}`, draft));
456
+ }),
457
+ update: (id, action) => save(routes.tasksApi.update.href({ id }), action, predicted(id, (item) => predictWorkUpdate(item, action)), id),
458
+ act: (id, action) => save(routes.tasksApi.mutate.href({ id }), action, predicted(id, (item) => predictWorkAction(currentSchema(), item, action)), id),
459
+ get: async (id) => {
460
+ let next = await requestTasks(routes.tasksApi.show.href({ id }), project.token, handle.signal, (value) => parseWorkDetail(value, currentSchema()));
461
+ if (next.item.id !== id) throw new Error("The task service returned a different task. Refresh and try again.");
462
+ return next.item;
463
+ },
464
+ section: (id, section, signal = handle.signal) => requestTasks(routes.tasksApi.section.href({
465
+ id,
466
+ section
467
+ }), project.token, AbortSignal.any([handle.signal, signal]), (value) => parseSectionData(value, currentSchema())),
468
+ sync: async (action) => {
469
+ try {
470
+ let result = await write(routes.tasksApi.sync.href(), action, parseWorkSyncResult);
471
+ await refreshAfterWrite();
472
+ return result;
473
+ } catch (cause) {
474
+ refreshAfterWrite();
475
+ throw cause;
476
+ }
477
+ }
478
+ };
479
+ function changed() {
480
+ if (!handle.signal.aborted) handle.update();
481
+ }
482
+ async function load() {
483
+ listRequest?.abort();
484
+ let controller = new AbortController();
485
+ listRequest = controller;
486
+ loading = true;
487
+ error = "";
488
+ changed();
489
+ try {
490
+ await work.refresh(AbortSignal.any([handle.signal, controller.signal]));
491
+ } catch (cause) {
492
+ if (!controller.signal.aborted && !handle.signal.aborted) error = cause instanceof Error ? cause.message : "Could not load tasks.";
493
+ } finally {
494
+ if (listRequest === controller) {
495
+ loading = false;
496
+ changed();
497
+ }
498
+ }
499
+ }
500
+ async function loadDetail() {
501
+ detailRequest?.abort();
502
+ if (!selectedId) {
503
+ detail = null;
504
+ detailLoading = false;
505
+ detailError = "";
506
+ changed();
507
+ return;
508
+ }
509
+ let id = selectedId;
510
+ let controller = new AbortController();
511
+ detailRequest = controller;
512
+ let reopening = detail?.item.id !== id;
513
+ if (reopening) detail = null;
514
+ detailLoading = true;
515
+ detailError = "";
516
+ changed();
517
+ try {
518
+ let signal = AbortSignal.any([handle.signal, controller.signal]);
519
+ if (reopening) {
520
+ let next = await loadTask(project.token, id, currentSchema(), signal, handle.props.conversationId);
521
+ if (controller.signal.aborted || id !== selectedId) return;
522
+ detail = next.detail;
523
+ discussion = next.discussion;
524
+ return;
525
+ }
526
+ let next = await requestTasks(routes.tasksApi.show.href({ id }), project.token, signal, (value) => parseWorkDetail(value, currentSchema()));
527
+ if (controller.signal.aborted || id !== selectedId) return;
528
+ if (next.item.id !== id) throw new Error("The task service returned a different task. Refresh and try again.");
529
+ detail = next;
530
+ } catch (cause) {
531
+ if (!controller.signal.aborted && !handle.signal.aborted && id === selectedId) detailError = cause instanceof Error ? cause.message : "Could not load this task.";
532
+ } finally {
533
+ if (detailRequest === controller) {
534
+ detailLoading = false;
535
+ changed();
536
+ }
537
+ }
538
+ }
539
+ function select(id, history = true) {
540
+ if (id === selectedId) return;
541
+ selectedId = id;
542
+ if (history) location(false);
543
+ loadDetail();
544
+ changed();
545
+ }
546
+ function location(replace) {
547
+ let root = taskHref(null);
548
+ if (!handle.props.active || !readConversationLocation(window.location.href) && window.location.pathname !== root && !window.location.pathname.startsWith(`${root}/`)) {
549
+ deferredLocation = true;
550
+ return;
551
+ }
552
+ deferredLocation = false;
553
+ let href = taskHref(selectedId);
554
+ if (window.location.pathname + window.location.search + window.location.hash === href) return;
555
+ pendingHref = new URL(href, window.location.origin).href;
556
+ window.history[replace ? "replaceState" : "pushState"]({
557
+ ...window.history.state,
558
+ budTask: selectedId
559
+ }, "", href);
560
+ }
561
+ let mount = ref((_node, signal) => {
562
+ mounted = true;
563
+ let loaded = selectedId;
564
+ selectedId = selectedTask(handle.props.href);
565
+ if (detail?.item.id !== selectedId && !(detailError && loaded === selectedId)) loadDetail();
566
+ if (handle.props.initial.stored) load();
567
+ signal.addEventListener("abort", () => {
568
+ for (let subscription of subscriptions) subscription.unsubscribe();
569
+ listRequest?.abort();
570
+ detailRequest?.abort();
571
+ for (let controller of writeRequests) controller.abort();
572
+ }, { once: true });
573
+ });
574
+ return () => {
575
+ if (mounted && renderedHref !== handle.props.href) {
576
+ renderedHref = handle.props.href;
577
+ if (pendingHref !== renderedHref) {
578
+ deferredLocation = false;
579
+ let id = selectedTask(renderedHref);
580
+ if (id !== selectedId) handle.queueTask(() => select(id, false));
581
+ }
582
+ pendingHref = void 0;
583
+ }
584
+ if (deferredLocation && handle.props.active) handle.queueTask(() => location(true));
585
+ let current = workspace;
586
+ let linked = current?.snapshot.items.map((item) => ({
587
+ id: item.id,
588
+ title: taskRole(item, current.schema, "title") || void 0
589
+ }));
590
+ return /* @__PURE__ */ jsx("div", {
591
+ class: "h-full min-h-0",
592
+ mix: mount,
593
+ children: /* @__PURE__ */ jsx(TaskWorkspace, {
594
+ projectName: project.name,
595
+ project: {
596
+ id: project.id,
597
+ name: project.name
598
+ },
599
+ design: handle.props.design,
600
+ storageKey: `bud:tasks:${project.id}:v1`,
601
+ snapshot: current?.snapshot ?? null,
602
+ schema: current?.schema ?? null,
603
+ loading,
604
+ error,
605
+ selectedId,
606
+ detail: pending(detail),
607
+ discussion: detail ? /* @__PURE__ */ jsx(TaskDiscussion, {
608
+ project,
609
+ itemId: detail.item.id,
610
+ initial: discussion,
611
+ items: linked,
612
+ conversationId: handle.props.conversationId,
613
+ onChange: refreshAfterWrite
614
+ }, detail.item.id) : void 0,
615
+ detailLoading,
616
+ detailError,
617
+ operations,
618
+ onSelect: select,
619
+ onReload: () => {
620
+ load();
621
+ },
622
+ onReloadDetail: () => {
623
+ loadDetail();
624
+ }
625
+ })
626
+ });
627
+ };
628
+ }
629
+ //#endregion
630
+ //#region app/screens/tasks.tsx
631
+ var tasks_default = defineScreen({
632
+ routes: taskRoutes,
633
+ load: ({ project, signal, url, conversation }) => loadTasks(project, signal, url.href, conversation?.id),
634
+ render: (tasks, { project, url, active, taskDesign, conversation }) => /* @__PURE__ */ jsx(ProjectTasks, {
635
+ project,
636
+ initial: tasks,
637
+ design: taskDesign,
638
+ href: url.href,
639
+ active,
640
+ conversationId: conversation?.id
641
+ })
642
+ });
643
+ //#endregion
644
+ export { tasks_default as default };