@react-x11/components 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 (783) hide show
  1. package/README.md +979 -21
  2. package/dist/ansi/cast.d.ts +48 -0
  3. package/dist/ansi/cast.d.ts.map +1 -0
  4. package/dist/ansi/cast.js +135 -0
  5. package/dist/ansi/cast.js.map +1 -0
  6. package/dist/ansi/index.d.ts +10 -0
  7. package/dist/ansi/index.d.ts.map +1 -0
  8. package/dist/ansi/index.js +27 -0
  9. package/dist/ansi/index.js.map +1 -0
  10. package/dist/ansi/palette.d.ts +79 -0
  11. package/dist/ansi/palette.d.ts.map +1 -0
  12. package/dist/ansi/palette.js +155 -0
  13. package/dist/ansi/palette.js.map +1 -0
  14. package/dist/ansi/parse.d.ts +114 -0
  15. package/dist/ansi/parse.d.ts.map +1 -0
  16. package/dist/ansi/parse.js +687 -0
  17. package/dist/ansi/parse.js.map +1 -0
  18. package/dist/ansi/sgr.d.ts +87 -0
  19. package/dist/ansi/sgr.d.ts.map +1 -0
  20. package/dist/ansi/sgr.js +302 -0
  21. package/dist/ansi/sgr.js.map +1 -0
  22. package/dist/ansi/utf8.d.ts +15 -0
  23. package/dist/ansi/utf8.d.ts.map +1 -0
  24. package/dist/ansi/utf8.js +82 -0
  25. package/dist/ansi/utf8.js.map +1 -0
  26. package/dist/calendar/Calendar.d.ts +136 -0
  27. package/dist/calendar/Calendar.d.ts.map +1 -0
  28. package/dist/calendar/Calendar.js +460 -0
  29. package/dist/calendar/Calendar.js.map +1 -0
  30. package/dist/calendar/DatePicker.d.ts +52 -0
  31. package/dist/calendar/DatePicker.d.ts.map +1 -0
  32. package/dist/calendar/DatePicker.js +257 -0
  33. package/dist/calendar/DatePicker.js.map +1 -0
  34. package/dist/calendar/dates.d.ts +90 -0
  35. package/dist/calendar/dates.d.ts.map +1 -0
  36. package/dist/calendar/dates.js +236 -0
  37. package/dist/calendar/dates.js.map +1 -0
  38. package/dist/calendar/index.d.ts +8 -0
  39. package/dist/calendar/index.d.ts.map +1 -0
  40. package/dist/calendar/index.js +15 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/charts/components.d.ts +141 -0
  43. package/dist/charts/components.d.ts.map +1 -0
  44. package/dist/charts/components.js +580 -0
  45. package/dist/charts/components.js.map +1 -0
  46. package/dist/charts/data.d.ts +198 -0
  47. package/dist/charts/data.d.ts.map +1 -0
  48. package/dist/charts/data.js +616 -0
  49. package/dist/charts/data.js.map +1 -0
  50. package/dist/charts/hx.d.ts +21 -0
  51. package/dist/charts/hx.d.ts.map +1 -0
  52. package/dist/charts/hx.js +15 -0
  53. package/dist/charts/hx.js.map +1 -0
  54. package/dist/charts/index.d.ts +27 -0
  55. package/dist/charts/index.d.ts.map +1 -0
  56. package/dist/charts/index.js +38 -0
  57. package/dist/charts/index.js.map +1 -0
  58. package/dist/charts/node.d.ts +96 -0
  59. package/dist/charts/node.d.ts.map +1 -0
  60. package/dist/charts/node.js +720 -0
  61. package/dist/charts/node.js.map +1 -0
  62. package/dist/charts/render.d.ts +153 -0
  63. package/dist/charts/render.d.ts.map +1 -0
  64. package/dist/charts/render.js +762 -0
  65. package/dist/charts/render.js.map +1 -0
  66. package/dist/charts/scale.d.ts +42 -0
  67. package/dist/charts/scale.d.ts.map +1 -0
  68. package/dist/charts/scale.js +173 -0
  69. package/dist/charts/scale.js.map +1 -0
  70. package/dist/charts/spec.d.ts +91 -0
  71. package/dist/charts/spec.d.ts.map +1 -0
  72. package/dist/charts/spec.js +33 -0
  73. package/dist/charts/spec.js.map +1 -0
  74. package/dist/charts/timers.d.ts +6 -0
  75. package/dist/charts/timers.d.ts.map +1 -0
  76. package/dist/charts/timers.js +14 -0
  77. package/dist/charts/timers.js.map +1 -0
  78. package/dist/code/hx.d.ts +24 -0
  79. package/dist/code/hx.d.ts.map +1 -0
  80. package/dist/code/hx.js +25 -0
  81. package/dist/code/hx.js.map +1 -0
  82. package/dist/code/index.d.ts +45 -0
  83. package/dist/code/index.d.ts.map +1 -0
  84. package/dist/code/index.js +93 -0
  85. package/dist/code/index.js.map +1 -0
  86. package/dist/code-editor/completion.d.ts +26 -0
  87. package/dist/code-editor/completion.d.ts.map +1 -0
  88. package/dist/code-editor/completion.js +129 -0
  89. package/dist/code-editor/completion.js.map +1 -0
  90. package/dist/code-editor/doc.d.ts +35 -0
  91. package/dist/code-editor/doc.d.ts.map +1 -0
  92. package/dist/code-editor/doc.js +162 -0
  93. package/dist/code-editor/doc.js.map +1 -0
  94. package/dist/code-editor/hx.d.ts +13 -0
  95. package/dist/code-editor/hx.d.ts.map +1 -0
  96. package/dist/code-editor/hx.js +10 -0
  97. package/dist/code-editor/hx.js.map +1 -0
  98. package/dist/code-editor/index.d.ts +88 -0
  99. package/dist/code-editor/index.d.ts.map +1 -0
  100. package/dist/code-editor/index.js +401 -0
  101. package/dist/code-editor/index.js.map +1 -0
  102. package/dist/code-editor/node.d.ts +343 -0
  103. package/dist/code-editor/node.d.ts.map +1 -0
  104. package/dist/code-editor/node.js +1521 -0
  105. package/dist/code-editor/node.js.map +1 -0
  106. package/dist/code-language/hljs.d.ts +47 -0
  107. package/dist/code-language/hljs.d.ts.map +1 -0
  108. package/dist/code-language/hljs.js +211 -0
  109. package/dist/code-language/hljs.js.map +1 -0
  110. package/dist/code-language/index.d.ts +22 -0
  111. package/dist/code-language/index.d.ts.map +1 -0
  112. package/dist/code-language/index.js +20 -0
  113. package/dist/code-language/index.js.map +1 -0
  114. package/dist/code-language/languages/glsl.d.ts +4 -0
  115. package/dist/code-language/languages/glsl.d.ts.map +1 -0
  116. package/dist/code-language/languages/glsl.js +99 -0
  117. package/dist/code-language/languages/glsl.js.map +1 -0
  118. package/dist/code-language/languages/javascript.d.ts +10 -0
  119. package/dist/code-language/languages/javascript.d.ts.map +1 -0
  120. package/dist/code-language/languages/javascript.js +360 -0
  121. package/dist/code-language/languages/javascript.js.map +1 -0
  122. package/dist/code-language/languages/json.d.ts +4 -0
  123. package/dist/code-language/languages/json.d.ts.map +1 -0
  124. package/dist/code-language/languages/json.js +68 -0
  125. package/dist/code-language/languages/json.js.map +1 -0
  126. package/dist/code-language/languages/shell.d.ts +4 -0
  127. package/dist/code-language/languages/shell.d.ts.map +1 -0
  128. package/dist/code-language/languages/shell.js +189 -0
  129. package/dist/code-language/languages/shell.js.map +1 -0
  130. package/dist/code-language/languages/sql.d.ts +11 -0
  131. package/dist/code-language/languages/sql.d.ts.map +1 -0
  132. package/dist/code-language/languages/sql.js +133 -0
  133. package/dist/code-language/languages/sql.js.map +1 -0
  134. package/dist/code-language/lezer.d.ts +24 -0
  135. package/dist/code-language/lezer.d.ts.map +1 -0
  136. package/dist/code-language/lezer.js +148 -0
  137. package/dist/code-language/lezer.js.map +1 -0
  138. package/dist/code-language/registry.d.ts +19 -0
  139. package/dist/code-language/registry.d.ts.map +1 -0
  140. package/dist/code-language/registry.js +56 -0
  141. package/dist/code-language/registry.js.map +1 -0
  142. package/dist/code-language/runs.d.ts +35 -0
  143. package/dist/code-language/runs.d.ts.map +1 -0
  144. package/dist/code-language/runs.js +88 -0
  145. package/dist/code-language/runs.js.map +1 -0
  146. package/dist/code-language/stream.d.ts +70 -0
  147. package/dist/code-language/stream.d.ts.map +1 -0
  148. package/dist/code-language/stream.js +243 -0
  149. package/dist/code-language/stream.js.map +1 -0
  150. package/dist/code-language/textmate.d.ts +27 -0
  151. package/dist/code-language/textmate.d.ts.map +1 -0
  152. package/dist/code-language/textmate.js +86 -0
  153. package/dist/code-language/textmate.js.map +1 -0
  154. package/dist/code-language/theme.d.ts +26 -0
  155. package/dist/code-language/theme.d.ts.map +1 -0
  156. package/dist/code-language/theme.js +108 -0
  157. package/dist/code-language/theme.js.map +1 -0
  158. package/dist/code-language/timers.d.ts +7 -0
  159. package/dist/code-language/timers.d.ts.map +1 -0
  160. package/dist/code-language/timers.js +22 -0
  161. package/dist/code-language/timers.js.map +1 -0
  162. package/dist/code-language/types.d.ts +173 -0
  163. package/dist/code-language/types.d.ts.map +1 -0
  164. package/dist/code-language/types.js +41 -0
  165. package/dist/code-language/types.js.map +1 -0
  166. package/dist/codeblock/index.d.ts +69 -0
  167. package/dist/codeblock/index.d.ts.map +1 -0
  168. package/dist/codeblock/index.js +85 -0
  169. package/dist/codeblock/index.js.map +1 -0
  170. package/dist/color-picker/ColorField.d.ts +39 -0
  171. package/dist/color-picker/ColorField.d.ts.map +1 -0
  172. package/dist/color-picker/ColorField.js +239 -0
  173. package/dist/color-picker/ColorField.js.map +1 -0
  174. package/dist/color-picker/ColorPicker.d.ts +109 -0
  175. package/dist/color-picker/ColorPicker.d.ts.map +1 -0
  176. package/dist/color-picker/ColorPicker.js +757 -0
  177. package/dist/color-picker/ColorPicker.js.map +1 -0
  178. package/dist/color-picker/color.d.ts +105 -0
  179. package/dist/color-picker/color.d.ts.map +1 -0
  180. package/dist/color-picker/color.js +313 -0
  181. package/dist/color-picker/color.js.map +1 -0
  182. package/dist/color-picker/index.d.ts +8 -0
  183. package/dist/color-picker/index.d.ts.map +1 -0
  184. package/dist/color-picker/index.js +19 -0
  185. package/dist/color-picker/index.js.map +1 -0
  186. package/dist/desktop-calendar/eds.d.ts +102 -0
  187. package/dist/desktop-calendar/eds.d.ts.map +1 -0
  188. package/dist/desktop-calendar/eds.js +356 -0
  189. package/dist/desktop-calendar/eds.js.map +1 -0
  190. package/dist/desktop-calendar/ical.d.ts +63 -0
  191. package/dist/desktop-calendar/ical.d.ts.map +1 -0
  192. package/dist/desktop-calendar/ical.js +57 -0
  193. package/dist/desktop-calendar/ical.js.map +1 -0
  194. package/dist/desktop-calendar/index.d.ts +72 -0
  195. package/dist/desktop-calendar/index.d.ts.map +1 -0
  196. package/dist/desktop-calendar/index.js +213 -0
  197. package/dist/desktop-calendar/index.js.map +1 -0
  198. package/dist/embed/client.d.ts +121 -0
  199. package/dist/embed/client.d.ts.map +1 -0
  200. package/dist/embed/client.js +203 -0
  201. package/dist/embed/client.js.map +1 -0
  202. package/dist/embed/host.d.ts +96 -0
  203. package/dist/embed/host.d.ts.map +1 -0
  204. package/dist/embed/host.js +266 -0
  205. package/dist/embed/host.js.map +1 -0
  206. package/dist/embed/index.d.ts +5 -0
  207. package/dist/embed/index.d.ts.map +1 -0
  208. package/dist/embed/index.js +13 -0
  209. package/dist/embed/index.js.map +1 -0
  210. package/dist/embed/timers.d.ts +6 -0
  211. package/dist/embed/timers.d.ts.map +1 -0
  212. package/dist/embed/timers.js +16 -0
  213. package/dist/embed/timers.js.map +1 -0
  214. package/dist/flow/draw.d.ts +45 -0
  215. package/dist/flow/draw.d.ts.map +1 -0
  216. package/dist/flow/draw.js +295 -0
  217. package/dist/flow/draw.js.map +1 -0
  218. package/dist/flow/index.d.ts +64 -0
  219. package/dist/flow/index.d.ts.map +1 -0
  220. package/dist/flow/index.js +306 -0
  221. package/dist/flow/index.js.map +1 -0
  222. package/dist/flow/model.d.ts +158 -0
  223. package/dist/flow/model.d.ts.map +1 -0
  224. package/dist/flow/model.js +566 -0
  225. package/dist/flow/model.js.map +1 -0
  226. package/dist/flow/node.d.ts +429 -0
  227. package/dist/flow/node.d.ts.map +1 -0
  228. package/dist/flow/node.js +3025 -0
  229. package/dist/flow/node.js.map +1 -0
  230. package/dist/flow/paths.d.ts +43 -0
  231. package/dist/flow/paths.d.ts.map +1 -0
  232. package/dist/flow/paths.js +327 -0
  233. package/dist/flow/paths.js.map +1 -0
  234. package/dist/flow/types.d.ts +561 -0
  235. package/dist/flow/types.d.ts.map +1 -0
  236. package/dist/flow/types.js +2 -0
  237. package/dist/flow/types.js.map +1 -0
  238. package/dist/formula/hx.d.ts +24 -0
  239. package/dist/formula/hx.d.ts.map +1 -0
  240. package/dist/formula/hx.js +25 -0
  241. package/dist/formula/hx.js.map +1 -0
  242. package/dist/formula/index.d.ts +74 -0
  243. package/dist/formula/index.d.ts.map +1 -0
  244. package/dist/formula/index.js +155 -0
  245. package/dist/formula/index.js.map +1 -0
  246. package/dist/formula/katex.d.ts +78 -0
  247. package/dist/formula/katex.d.ts.map +1 -0
  248. package/dist/formula/katex.js +130 -0
  249. package/dist/formula/katex.js.map +1 -0
  250. package/dist/formula/layout.d.ts +103 -0
  251. package/dist/formula/layout.d.ts.map +1 -0
  252. package/dist/formula/layout.js +716 -0
  253. package/dist/formula/layout.js.map +1 -0
  254. package/dist/formula/node.d.ts +50 -0
  255. package/dist/formula/node.d.ts.map +1 -0
  256. package/dist/formula/node.js +351 -0
  257. package/dist/formula/node.js.map +1 -0
  258. package/dist/html/controls.d.ts +48 -0
  259. package/dist/html/controls.d.ts.map +1 -0
  260. package/dist/html/controls.js +195 -0
  261. package/dist/html/controls.js.map +1 -0
  262. package/dist/html/css/cascade.d.ts +51 -0
  263. package/dist/html/css/cascade.d.ts.map +1 -0
  264. package/dist/html/css/cascade.js +552 -0
  265. package/dist/html/css/cascade.js.map +1 -0
  266. package/dist/html/css/parse.d.ts +74 -0
  267. package/dist/html/css/parse.d.ts.map +1 -0
  268. package/dist/html/css/parse.js +464 -0
  269. package/dist/html/css/parse.js.map +1 -0
  270. package/dist/html/css/style.d.ts +142 -0
  271. package/dist/html/css/style.d.ts.map +1 -0
  272. package/dist/html/css/style.js +1145 -0
  273. package/dist/html/css/style.js.map +1 -0
  274. package/dist/html/css/ua.d.ts +5 -0
  275. package/dist/html/css/ua.d.ts.map +1 -0
  276. package/dist/html/css/ua.js +171 -0
  277. package/dist/html/css/ua.js.map +1 -0
  278. package/dist/html/css/values.d.ts +78 -0
  279. package/dist/html/css/values.d.ts.map +1 -0
  280. package/dist/html/css/values.js +330 -0
  281. package/dist/html/css/values.js.map +1 -0
  282. package/dist/html/dom.d.ts +112 -0
  283. package/dist/html/dom.d.ts.map +1 -0
  284. package/dist/html/dom.js +374 -0
  285. package/dist/html/dom.js.map +1 -0
  286. package/dist/html/hx.d.ts +24 -0
  287. package/dist/html/hx.d.ts.map +1 -0
  288. package/dist/html/hx.js +29 -0
  289. package/dist/html/hx.js.map +1 -0
  290. package/dist/html/index.d.ts +137 -0
  291. package/dist/html/index.d.ts.map +1 -0
  292. package/dist/html/index.js +339 -0
  293. package/dist/html/index.js.map +1 -0
  294. package/dist/html/layout/block.d.ts +58 -0
  295. package/dist/html/layout/block.d.ts.map +1 -0
  296. package/dist/html/layout/block.js +724 -0
  297. package/dist/html/layout/block.js.map +1 -0
  298. package/dist/html/layout/boxes.d.ts +261 -0
  299. package/dist/html/layout/boxes.d.ts.map +1 -0
  300. package/dist/html/layout/boxes.js +725 -0
  301. package/dist/html/layout/boxes.js.map +1 -0
  302. package/dist/html/layout/flex.d.ts +16 -0
  303. package/dist/html/layout/flex.d.ts.map +1 -0
  304. package/dist/html/layout/flex.js +242 -0
  305. package/dist/html/layout/flex.js.map +1 -0
  306. package/dist/html/layout/floats.d.ts +50 -0
  307. package/dist/html/layout/floats.d.ts.map +1 -0
  308. package/dist/html/layout/floats.js +110 -0
  309. package/dist/html/layout/floats.js.map +1 -0
  310. package/dist/html/layout/inline.d.ts +44 -0
  311. package/dist/html/layout/inline.d.ts.map +1 -0
  312. package/dist/html/layout/inline.js +700 -0
  313. package/dist/html/layout/inline.js.map +1 -0
  314. package/dist/html/layout/table.d.ts +5 -0
  315. package/dist/html/layout/table.d.ts.map +1 -0
  316. package/dist/html/layout/table.js +340 -0
  317. package/dist/html/layout/table.js.map +1 -0
  318. package/dist/html/node.d.ts +149 -0
  319. package/dist/html/node.d.ts.map +1 -0
  320. package/dist/html/node.js +861 -0
  321. package/dist/html/node.js.map +1 -0
  322. package/dist/html/paint.d.ts +48 -0
  323. package/dist/html/paint.d.ts.map +1 -0
  324. package/dist/html/paint.js +495 -0
  325. package/dist/html/paint.js.map +1 -0
  326. package/dist/html/resources.d.ts +48 -0
  327. package/dist/html/resources.d.ts.map +1 -0
  328. package/dist/html/resources.js +156 -0
  329. package/dist/html/resources.js.map +1 -0
  330. package/dist/index.d.ts +48 -0
  331. package/dist/index.d.ts.map +1 -0
  332. package/dist/index.js +92 -0
  333. package/dist/index.js.map +1 -0
  334. package/dist/internal/heights.d.ts +81 -0
  335. package/dist/internal/heights.d.ts.map +1 -0
  336. package/dist/internal/heights.js +193 -0
  337. package/dist/internal/heights.js.map +1 -0
  338. package/dist/internal/hx.d.ts +24 -0
  339. package/dist/internal/hx.d.ts.map +1 -0
  340. package/dist/internal/hx.js +27 -0
  341. package/dist/internal/hx.js.map +1 -0
  342. package/dist/internal/text.d.ts +6 -0
  343. package/dist/internal/text.d.ts.map +1 -0
  344. package/dist/internal/text.js +44 -0
  345. package/dist/internal/text.js.map +1 -0
  346. package/dist/internal/timers.d.ts +8 -0
  347. package/dist/internal/timers.d.ts.map +1 -0
  348. package/dist/internal/timers.js +22 -0
  349. package/dist/internal/timers.js.map +1 -0
  350. package/dist/internal/widget.d.ts +40 -0
  351. package/dist/internal/widget.d.ts.map +1 -0
  352. package/dist/internal/widget.js +44 -0
  353. package/dist/internal/widget.js.map +1 -0
  354. package/dist/markdown/ast.d.ts +126 -0
  355. package/dist/markdown/ast.d.ts.map +1 -0
  356. package/dist/markdown/ast.js +8 -0
  357. package/dist/markdown/ast.js.map +1 -0
  358. package/dist/markdown/hx.d.ts +24 -0
  359. package/dist/markdown/hx.d.ts.map +1 -0
  360. package/dist/markdown/hx.js +25 -0
  361. package/dist/markdown/hx.js.map +1 -0
  362. package/dist/markdown/index.d.ts +90 -0
  363. package/dist/markdown/index.d.ts.map +1 -0
  364. package/dist/markdown/index.js +413 -0
  365. package/dist/markdown/index.js.map +1 -0
  366. package/dist/markdown/parse.d.ts +8 -0
  367. package/dist/markdown/parse.d.ts.map +1 -0
  368. package/dist/markdown/parse.js +911 -0
  369. package/dist/markdown/parse.js.map +1 -0
  370. package/dist/markdown/spans.d.ts +20 -0
  371. package/dist/markdown/spans.d.ts.map +1 -0
  372. package/dist/markdown/spans.js +96 -0
  373. package/dist/markdown/spans.js.map +1 -0
  374. package/dist/media-player/backends.d.ts +64 -0
  375. package/dist/media-player/backends.d.ts.map +1 -0
  376. package/dist/media-player/backends.js +110 -0
  377. package/dist/media-player/backends.js.map +1 -0
  378. package/dist/media-player/control.d.ts +40 -0
  379. package/dist/media-player/control.d.ts.map +1 -0
  380. package/dist/media-player/control.js +44 -0
  381. package/dist/media-player/control.js.map +1 -0
  382. package/dist/media-player/hx.d.ts +24 -0
  383. package/dist/media-player/hx.d.ts.map +1 -0
  384. package/dist/media-player/hx.js +25 -0
  385. package/dist/media-player/hx.js.map +1 -0
  386. package/dist/media-player/index.d.ts +107 -0
  387. package/dist/media-player/index.d.ts.map +1 -0
  388. package/dist/media-player/index.js +219 -0
  389. package/dist/media-player/index.js.map +1 -0
  390. package/dist/media-player/mpv.d.ts +4 -0
  391. package/dist/media-player/mpv.d.ts.map +1 -0
  392. package/dist/media-player/mpv.js +120 -0
  393. package/dist/media-player/mpv.js.map +1 -0
  394. package/dist/media-player/vlc.d.ts +8 -0
  395. package/dist/media-player/vlc.d.ts.map +1 -0
  396. package/dist/media-player/vlc.js +83 -0
  397. package/dist/media-player/vlc.js.map +1 -0
  398. package/dist/richtext/index.d.ts +19 -0
  399. package/dist/richtext/index.d.ts.map +1 -0
  400. package/dist/richtext/index.js +4 -0
  401. package/dist/richtext/index.js.map +1 -0
  402. package/dist/richtext/links.d.ts +12 -0
  403. package/dist/richtext/links.d.ts.map +1 -0
  404. package/dist/richtext/links.js +64 -0
  405. package/dist/richtext/links.js.map +1 -0
  406. package/dist/richtext/menu.d.ts +11 -0
  407. package/dist/richtext/menu.d.ts.map +1 -0
  408. package/dist/richtext/menu.js +43 -0
  409. package/dist/richtext/menu.js.map +1 -0
  410. package/dist/richtext/node.d.ts +151 -0
  411. package/dist/richtext/node.d.ts.map +1 -0
  412. package/dist/richtext/node.js +255 -0
  413. package/dist/richtext/node.js.map +1 -0
  414. package/dist/richtext/runs.d.ts +92 -0
  415. package/dist/richtext/runs.d.ts.map +1 -0
  416. package/dist/richtext/runs.js +158 -0
  417. package/dist/richtext/runs.js.map +1 -0
  418. package/dist/table/hx.d.ts +24 -0
  419. package/dist/table/hx.d.ts.map +1 -0
  420. package/dist/table/hx.js +25 -0
  421. package/dist/table/hx.js.map +1 -0
  422. package/dist/table/index.d.ts +169 -0
  423. package/dist/table/index.d.ts.map +1 -0
  424. package/dist/table/index.js +844 -0
  425. package/dist/table/index.js.map +1 -0
  426. package/dist/table/rows.d.ts +136 -0
  427. package/dist/table/rows.d.ts.map +1 -0
  428. package/dist/table/rows.js +146 -0
  429. package/dist/table/rows.js.map +1 -0
  430. package/dist/terminal/backends.d.ts +105 -0
  431. package/dist/terminal/backends.d.ts.map +1 -0
  432. package/dist/terminal/backends.js +185 -0
  433. package/dist/terminal/backends.js.map +1 -0
  434. package/dist/terminal/hx.d.ts +24 -0
  435. package/dist/terminal/hx.d.ts.map +1 -0
  436. package/dist/terminal/hx.js +25 -0
  437. package/dist/terminal/hx.js.map +1 -0
  438. package/dist/terminal/index.d.ts +160 -0
  439. package/dist/terminal/index.d.ts.map +1 -0
  440. package/dist/terminal/index.js +344 -0
  441. package/dist/terminal/index.js.map +1 -0
  442. package/dist/terminal/title.d.ts +24 -0
  443. package/dist/terminal/title.d.ts.map +1 -0
  444. package/dist/terminal/title.js +129 -0
  445. package/dist/terminal/title.js.map +1 -0
  446. package/dist/terminal/vt/colors.d.ts +63 -0
  447. package/dist/terminal/vt/colors.d.ts.map +1 -0
  448. package/dist/terminal/vt/colors.js +203 -0
  449. package/dist/terminal/vt/colors.js.map +1 -0
  450. package/dist/terminal/vt/diff.d.ts +117 -0
  451. package/dist/terminal/vt/diff.d.ts.map +1 -0
  452. package/dist/terminal/vt/diff.js +358 -0
  453. package/dist/terminal/vt/diff.js.map +1 -0
  454. package/dist/terminal/vt/fonts.d.ts +92 -0
  455. package/dist/terminal/vt/fonts.d.ts.map +1 -0
  456. package/dist/terminal/vt/fonts.js +178 -0
  457. package/dist/terminal/vt/fonts.js.map +1 -0
  458. package/dist/terminal/vt/index.d.ts +78 -0
  459. package/dist/terminal/vt/index.d.ts.map +1 -0
  460. package/dist/terminal/vt/index.js +312 -0
  461. package/dist/terminal/vt/index.js.map +1 -0
  462. package/dist/terminal/vt/keys.d.ts +74 -0
  463. package/dist/terminal/vt/keys.d.ts.map +1 -0
  464. package/dist/terminal/vt/keys.js +309 -0
  465. package/dist/terminal/vt/keys.js.map +1 -0
  466. package/dist/terminal/vt/mouse.d.ts +44 -0
  467. package/dist/terminal/vt/mouse.d.ts.map +1 -0
  468. package/dist/terminal/vt/mouse.js +106 -0
  469. package/dist/terminal/vt/mouse.js.map +1 -0
  470. package/dist/terminal/vt/node.d.ts +246 -0
  471. package/dist/terminal/vt/node.d.ts.map +1 -0
  472. package/dist/terminal/vt/node.js +1068 -0
  473. package/dist/terminal/vt/node.js.map +1 -0
  474. package/dist/terminal/vt/pty.d.ts +81 -0
  475. package/dist/terminal/vt/pty.d.ts.map +1 -0
  476. package/dist/terminal/vt/pty.js +201 -0
  477. package/dist/terminal/vt/pty.js.map +1 -0
  478. package/dist/terminal/vt/renderer.d.ts +179 -0
  479. package/dist/terminal/vt/renderer.d.ts.map +1 -0
  480. package/dist/terminal/vt/renderer.js +357 -0
  481. package/dist/terminal/vt/renderer.js.map +1 -0
  482. package/dist/terminal/vt/timers.d.ts +6 -0
  483. package/dist/terminal/vt/timers.d.ts.map +1 -0
  484. package/dist/terminal/vt/timers.js +16 -0
  485. package/dist/terminal/vt/timers.js.map +1 -0
  486. package/dist/terminal/vt/xterm.d.ts +142 -0
  487. package/dist/terminal/vt/xterm.d.ts.map +1 -0
  488. package/dist/terminal/vt/xterm.js +32 -0
  489. package/dist/terminal/vt/xterm.js.map +1 -0
  490. package/dist/terminal-output/hx.d.ts +24 -0
  491. package/dist/terminal-output/hx.d.ts.map +1 -0
  492. package/dist/terminal-output/hx.js +25 -0
  493. package/dist/terminal-output/hx.js.map +1 -0
  494. package/dist/terminal-output/index.d.ts +92 -0
  495. package/dist/terminal-output/index.d.ts.map +1 -0
  496. package/dist/terminal-output/index.js +179 -0
  497. package/dist/terminal-output/index.js.map +1 -0
  498. package/dist/terminal-output/runs.d.ts +27 -0
  499. package/dist/terminal-output/runs.d.ts.map +1 -0
  500. package/dist/terminal-output/runs.js +66 -0
  501. package/dist/terminal-output/runs.js.map +1 -0
  502. package/dist/three/canvas.d.ts +46 -0
  503. package/dist/three/canvas.d.ts.map +1 -0
  504. package/dist/three/canvas.js +305 -0
  505. package/dist/three/canvas.js.map +1 -0
  506. package/dist/three/events.d.ts +64 -0
  507. package/dist/three/events.d.ts.map +1 -0
  508. package/dist/three/events.js +146 -0
  509. package/dist/three/events.js.map +1 -0
  510. package/dist/three/geometries.d.ts +89 -0
  511. package/dist/three/geometries.d.ts.map +1 -0
  512. package/dist/three/geometries.js +345 -0
  513. package/dist/three/geometries.js.map +1 -0
  514. package/dist/three/globals.d.ts +7 -0
  515. package/dist/three/globals.d.ts.map +1 -0
  516. package/dist/three/globals.js +20 -0
  517. package/dist/three/globals.js.map +1 -0
  518. package/dist/three/hx.d.ts +9 -0
  519. package/dist/three/hx.d.ts.map +1 -0
  520. package/dist/three/hx.js +10 -0
  521. package/dist/three/hx.js.map +1 -0
  522. package/dist/three/index.d.ts +22 -0
  523. package/dist/three/index.d.ts.map +1 -0
  524. package/dist/three/index.js +24 -0
  525. package/dist/three/index.js.map +1 -0
  526. package/dist/three/jsx-dev-runtime.d.ts +19 -0
  527. package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
  528. package/dist/three/jsx-dev-runtime.js +2 -0
  529. package/dist/three/jsx-dev-runtime.js.map +1 -0
  530. package/dist/three/jsx-runtime.d.ts +19 -0
  531. package/dist/three/jsx-runtime.d.ts.map +1 -0
  532. package/dist/three/jsx-runtime.js +2 -0
  533. package/dist/three/jsx-runtime.js.map +1 -0
  534. package/dist/three/jsx.d.ts +198 -0
  535. package/dist/three/jsx.d.ts.map +1 -0
  536. package/dist/three/jsx.js +2 -0
  537. package/dist/three/jsx.js.map +1 -0
  538. package/dist/three/materials.d.ts +125 -0
  539. package/dist/three/materials.d.ts.map +1 -0
  540. package/dist/three/materials.js +229 -0
  541. package/dist/three/materials.js.map +1 -0
  542. package/dist/three/math.d.ts +146 -0
  543. package/dist/three/math.d.ts.map +1 -0
  544. package/dist/three/math.js +464 -0
  545. package/dist/three/math.js.map +1 -0
  546. package/dist/three/objects.d.ts +185 -0
  547. package/dist/three/objects.d.ts.map +1 -0
  548. package/dist/three/objects.js +309 -0
  549. package/dist/three/objects.js.map +1 -0
  550. package/dist/three/passes.d.ts +54 -0
  551. package/dist/three/passes.d.ts.map +1 -0
  552. package/dist/three/passes.js +78 -0
  553. package/dist/three/passes.js.map +1 -0
  554. package/dist/three/postprocess.d.ts +85 -0
  555. package/dist/three/postprocess.d.ts.map +1 -0
  556. package/dist/three/postprocess.js +503 -0
  557. package/dist/three/postprocess.js.map +1 -0
  558. package/dist/three/raycast.d.ts +24 -0
  559. package/dist/three/raycast.d.ts.map +1 -0
  560. package/dist/three/raycast.js +138 -0
  561. package/dist/three/raycast.js.map +1 -0
  562. package/dist/three/reconciler.d.ts +48 -0
  563. package/dist/three/reconciler.d.ts.map +1 -0
  564. package/dist/three/reconciler.js +416 -0
  565. package/dist/three/reconciler.js.map +1 -0
  566. package/dist/three/renderer-direct.d.ts +102 -0
  567. package/dist/three/renderer-direct.d.ts.map +1 -0
  568. package/dist/three/renderer-direct.js +782 -0
  569. package/dist/three/renderer-direct.js.map +1 -0
  570. package/dist/three/renderer-indirect.d.ts +68 -0
  571. package/dist/three/renderer-indirect.d.ts.map +1 -0
  572. package/dist/three/renderer-indirect.js +438 -0
  573. package/dist/three/renderer-indirect.js.map +1 -0
  574. package/dist/three/store.d.ts +81 -0
  575. package/dist/three/store.d.ts.map +1 -0
  576. package/dist/three/store.js +110 -0
  577. package/dist/three/store.js.map +1 -0
  578. package/dist/timeline/hx.d.ts +18 -0
  579. package/dist/timeline/hx.d.ts.map +1 -0
  580. package/dist/timeline/hx.js +10 -0
  581. package/dist/timeline/hx.js.map +1 -0
  582. package/dist/timeline/index.d.ts +152 -0
  583. package/dist/timeline/index.d.ts.map +1 -0
  584. package/dist/timeline/index.js +383 -0
  585. package/dist/timeline/index.js.map +1 -0
  586. package/dist/tray-host/hx.d.ts +24 -0
  587. package/dist/tray-host/hx.d.ts.map +1 -0
  588. package/dist/tray-host/hx.js +25 -0
  589. package/dist/tray-host/hx.js.map +1 -0
  590. package/dist/tray-host/index.d.ts +110 -0
  591. package/dist/tray-host/index.d.ts.map +1 -0
  592. package/dist/tray-host/index.js +191 -0
  593. package/dist/tray-host/index.js.map +1 -0
  594. package/dist/tray-host/manager.d.ts +137 -0
  595. package/dist/tray-host/manager.d.ts.map +1 -0
  596. package/dist/tray-host/manager.js +462 -0
  597. package/dist/tray-host/manager.js.map +1 -0
  598. package/dist/tray-host/notify.d.ts +22 -0
  599. package/dist/tray-host/notify.d.ts.map +1 -0
  600. package/dist/tray-host/notify.js +74 -0
  601. package/dist/tray-host/notify.js.map +1 -0
  602. package/dist/tray-host/protocol.d.ts +106 -0
  603. package/dist/tray-host/protocol.d.ts.map +1 -0
  604. package/dist/tray-host/protocol.js +191 -0
  605. package/dist/tray-host/protocol.js.map +1 -0
  606. package/dist/tree/hx.d.ts +24 -0
  607. package/dist/tree/hx.d.ts.map +1 -0
  608. package/dist/tree/hx.js +25 -0
  609. package/dist/tree/hx.js.map +1 -0
  610. package/dist/tree/index.d.ts +221 -0
  611. package/dist/tree/index.d.ts.map +1 -0
  612. package/dist/tree/index.js +716 -0
  613. package/dist/tree/index.js.map +1 -0
  614. package/dist/tree/internal.d.ts +18 -0
  615. package/dist/tree/internal.d.ts.map +1 -0
  616. package/dist/tree/internal.js +66 -0
  617. package/dist/tree/internal.js.map +1 -0
  618. package/dist/tree/rows.d.ts +177 -0
  619. package/dist/tree/rows.d.ts.map +1 -0
  620. package/dist/tree/rows.js +179 -0
  621. package/dist/tree/rows.js.map +1 -0
  622. package/package.json +166 -12
  623. package/src/ansi/cast.ts +159 -0
  624. package/src/ansi/index.ts +53 -0
  625. package/src/ansi/palette.ts +226 -0
  626. package/src/ansi/parse.ts +780 -0
  627. package/src/ansi/sgr.ts +380 -0
  628. package/src/ansi/utf8.ts +84 -0
  629. package/src/calendar/Calendar.ts +744 -0
  630. package/src/calendar/DatePicker.ts +368 -0
  631. package/src/calendar/dates.ts +307 -0
  632. package/src/calendar/index.ts +51 -0
  633. package/src/charts/components.ts +864 -0
  634. package/src/charts/data.ts +776 -0
  635. package/src/charts/hx.ts +39 -0
  636. package/src/charts/index.ts +99 -0
  637. package/src/charts/node.ts +932 -0
  638. package/src/charts/render.ts +982 -0
  639. package/src/charts/scale.ts +214 -0
  640. package/src/charts/spec.ts +122 -0
  641. package/src/charts/timers.ts +24 -0
  642. package/src/code/hx.ts +51 -0
  643. package/src/code/index.ts +174 -0
  644. package/src/code-editor/completion.ts +161 -0
  645. package/src/code-editor/doc.ts +198 -0
  646. package/src/code-editor/hx.ts +26 -0
  647. package/src/code-editor/index.ts +615 -0
  648. package/src/code-editor/node.ts +1926 -0
  649. package/src/code-language/hljs.ts +302 -0
  650. package/src/code-language/index.ts +51 -0
  651. package/src/code-language/languages/glsl.ts +120 -0
  652. package/src/code-language/languages/javascript.ts +419 -0
  653. package/src/code-language/languages/json.ts +72 -0
  654. package/src/code-language/languages/shell.ts +221 -0
  655. package/src/code-language/languages/sql.ts +165 -0
  656. package/src/code-language/lezer.ts +190 -0
  657. package/src/code-language/registry.ts +66 -0
  658. package/src/code-language/runs.ts +128 -0
  659. package/src/code-language/stream.ts +306 -0
  660. package/src/code-language/textmate.ts +134 -0
  661. package/src/code-language/theme.ts +124 -0
  662. package/src/code-language/timers.ts +36 -0
  663. package/src/code-language/types.ts +252 -0
  664. package/src/codeblock/index.ts +146 -0
  665. package/src/color-picker/ColorField.ts +333 -0
  666. package/src/color-picker/ColorPicker.ts +1069 -0
  667. package/src/color-picker/color.ts +399 -0
  668. package/src/color-picker/index.ts +50 -0
  669. package/src/desktop-calendar/eds.ts +484 -0
  670. package/src/desktop-calendar/ical.ts +119 -0
  671. package/src/desktop-calendar/index.ts +287 -0
  672. package/src/embed/client.ts +311 -0
  673. package/src/embed/host.ts +432 -0
  674. package/src/embed/index.ts +33 -0
  675. package/src/embed/timers.ts +32 -0
  676. package/src/flow/draw.ts +418 -0
  677. package/src/flow/index.ts +473 -0
  678. package/src/flow/model.ts +687 -0
  679. package/src/flow/node.ts +3694 -0
  680. package/src/flow/paths.ts +403 -0
  681. package/src/flow/types.ts +634 -0
  682. package/src/formula/hx.ts +51 -0
  683. package/src/formula/index.ts +243 -0
  684. package/src/formula/katex.ts +209 -0
  685. package/src/formula/layout.ts +876 -0
  686. package/src/formula/node.ts +467 -0
  687. package/src/html/controls.ts +244 -0
  688. package/src/html/css/cascade.ts +606 -0
  689. package/src/html/css/parse.ts +500 -0
  690. package/src/html/css/style.ts +1371 -0
  691. package/src/html/css/ua.ts +174 -0
  692. package/src/html/css/values.ts +358 -0
  693. package/src/html/dom.ts +410 -0
  694. package/src/html/hx.ts +55 -0
  695. package/src/html/index.ts +545 -0
  696. package/src/html/layout/block.ts +876 -0
  697. package/src/html/layout/boxes.ts +981 -0
  698. package/src/html/layout/flex.ts +297 -0
  699. package/src/html/layout/floats.ts +125 -0
  700. package/src/html/layout/inline.ts +870 -0
  701. package/src/html/layout/table.ts +380 -0
  702. package/src/html/node.ts +967 -0
  703. package/src/html/paint.ts +605 -0
  704. package/src/html/resources.ts +214 -0
  705. package/src/index.ts +638 -0
  706. package/src/internal/heights.ts +211 -0
  707. package/src/internal/hx.ts +53 -0
  708. package/src/internal/text.ts +44 -0
  709. package/src/internal/timers.ts +44 -0
  710. package/src/internal/widget.ts +92 -0
  711. package/src/markdown/ast.ts +163 -0
  712. package/src/markdown/hx.ts +51 -0
  713. package/src/markdown/index.ts +686 -0
  714. package/src/markdown/parse.ts +1037 -0
  715. package/src/markdown/spans.ts +143 -0
  716. package/src/media-player/backends.ts +155 -0
  717. package/src/media-player/control.ts +70 -0
  718. package/src/media-player/hx.ts +51 -0
  719. package/src/media-player/index.ts +378 -0
  720. package/src/media-player/mpv.ts +146 -0
  721. package/src/media-player/vlc.ts +97 -0
  722. package/src/richtext/index.ts +42 -0
  723. package/src/richtext/links.ts +78 -0
  724. package/src/richtext/menu.ts +49 -0
  725. package/src/richtext/node.ts +406 -0
  726. package/src/richtext/runs.ts +253 -0
  727. package/src/table/hx.ts +51 -0
  728. package/src/table/index.ts +1219 -0
  729. package/src/table/rows.ts +275 -0
  730. package/src/terminal/backends.ts +242 -0
  731. package/src/terminal/hx.ts +51 -0
  732. package/src/terminal/index.ts +574 -0
  733. package/src/terminal/title.ts +172 -0
  734. package/src/terminal/vt/colors.ts +247 -0
  735. package/src/terminal/vt/diff.ts +467 -0
  736. package/src/terminal/vt/fonts.ts +233 -0
  737. package/src/terminal/vt/index.ts +443 -0
  738. package/src/terminal/vt/keys.ts +369 -0
  739. package/src/terminal/vt/mouse.ts +144 -0
  740. package/src/terminal/vt/node.ts +1242 -0
  741. package/src/terminal/vt/pty.ts +334 -0
  742. package/src/terminal/vt/renderer.ts +555 -0
  743. package/src/terminal/vt/timers.ts +31 -0
  744. package/src/terminal/vt/xterm.ts +193 -0
  745. package/src/terminal-output/hx.ts +51 -0
  746. package/src/terminal-output/index.ts +340 -0
  747. package/src/terminal-output/runs.ts +79 -0
  748. package/src/three/canvas.ts +451 -0
  749. package/src/three/events.ts +197 -0
  750. package/src/three/geometries.ts +429 -0
  751. package/src/three/globals.ts +34 -0
  752. package/src/three/hx.ts +22 -0
  753. package/src/three/index.ts +98 -0
  754. package/src/three/jsx-dev-runtime.ts +27 -0
  755. package/src/three/jsx-runtime.ts +38 -0
  756. package/src/three/jsx.ts +275 -0
  757. package/src/three/materials.ts +270 -0
  758. package/src/three/math.ts +585 -0
  759. package/src/three/objects.ts +397 -0
  760. package/src/three/passes.ts +90 -0
  761. package/src/three/postprocess.ts +677 -0
  762. package/src/three/raycast.ts +189 -0
  763. package/src/three/react-reconciler.d.ts +50 -0
  764. package/src/three/reconciler.ts +624 -0
  765. package/src/three/renderer-direct.ts +1055 -0
  766. package/src/three/renderer-indirect.ts +570 -0
  767. package/src/three/store.ts +207 -0
  768. package/src/timeline/hx.ts +31 -0
  769. package/src/timeline/index.ts +603 -0
  770. package/src/tray-host/hx.ts +51 -0
  771. package/src/tray-host/index.ts +331 -0
  772. package/src/tray-host/manager.ts +639 -0
  773. package/src/tray-host/notify.ts +102 -0
  774. package/src/tray-host/protocol.ts +235 -0
  775. package/src/tree/hx.ts +51 -0
  776. package/src/tree/index.ts +1087 -0
  777. package/src/tree/internal.ts +87 -0
  778. package/src/tree/rows.ts +334 -0
  779. package/src/index.d.ts +0 -2
  780. package/src/index.js +0 -9
  781. package/src/sparkline/index.d.ts +0 -29
  782. package/src/sparkline/index.js +0 -50
  783. package/src/sparkline/node.js +0 -72
@@ -0,0 +1,780 @@
1
+ // The escape-sequence state machine, and the flow reducer over it.
2
+ //
3
+ // Pure: bytes in, plain arrays out. No X, no node, no React, no
4
+ // `@xterm/headless` — so the whole model is asserted against byte strings in
5
+ // `test/ansi.test.ts`, the posture `../terminal/vt/diff.ts` takes for the
6
+ // live renderer.
7
+ //
8
+ // ### Why a line buffer rather than a grid
9
+ //
10
+ // A log is a *document*: it has lines, not rows, and no column count of its
11
+ // own. So the reducer keeps exactly one row — the line being written — and
12
+ // flushes it to spans when a newline arrives. `\r` rewinds the write head
13
+ // inside that row, `\e[K` truncates it, `\e[nC` moves along it: every
14
+ // sequence a line-oriented program actually emits is exact in this model,
15
+ // while none of them needs a `cols` the capture never had.
16
+ //
17
+ // The sequences that only mean something on a real screen — `CUP`, `ED`,
18
+ // `IL`, a scroll region, the alternate screen — set `needsScreen` and are
19
+ // counted in `dropped`. What this cannot represent, it says so about; see
20
+ // the PRD for why silence would be the worse failure.
21
+ //
22
+ // ### Why a state machine rather than a regular expression
23
+ //
24
+ // A parser that does not understand a sequence's *structure* prints its
25
+ // payload as text the moment it meets one it has no pattern for — the
26
+ // classic garbage-on-screen bug. Everything below is recognised and consumed
27
+ // even when it is then discarded.
28
+ import { PLAIN, Style, param, ABSENT } from './sgr.js';
29
+ import type { AnsiAttrs } from './sgr.js';
30
+ import { Utf8Decoder } from './utf8.js';
31
+
32
+ /** One run of characters sharing every attribute. */
33
+ export type AnsiSpan = AnsiAttrs & { readonly text: string };
34
+
35
+ /** One line of the capture. `text` is the spans concatenated. */
36
+ export interface AnsiLine {
37
+ readonly spans: readonly AnsiSpan[];
38
+ readonly text: string;
39
+ }
40
+
41
+ /** What a capture reduces to. A plain immutable value — snapshot it, keep it,
42
+ * hand it to React. */
43
+ export interface AnsiDocument {
44
+ readonly lines: readonly AnsiLine[];
45
+ /** The last title the capture set, through OSC 0 or OSC 2. */
46
+ readonly title?: string;
47
+ /** The stream addressed the cursor absolutely, scrolled a region, or
48
+ * entered the alternate screen: these bytes wanted a grid. */
49
+ readonly needsScreen: boolean;
50
+ /** What could not be honoured, by name, with counts. */
51
+ readonly dropped: Readonly<Record<string, number>>;
52
+ /** Lines evicted by `maxLines`, oldest first. */
53
+ readonly truncated: number;
54
+ /** The resume point. Pass the document back as `from` to continue. */
55
+ readonly state: AnsiState;
56
+ }
57
+
58
+ export type AnsiInput = string | Uint8Array | readonly (string | Uint8Array)[];
59
+
60
+ export interface ParseAnsiOptions {
61
+ /** Continue a previous parse rather than starting one. A partial escape
62
+ * sequence or a half-arrived UTF-8 character at the boundary is held, not
63
+ * mangled — the same rule `<Markdown>` follows for an unterminated tail. */
64
+ from?: AnsiDocument | AnsiState;
65
+ /** Default 8, the terminal's. */
66
+ tabWidth?: number;
67
+ /** Keep only the last N lines, dropping from the front. Unbounded by
68
+ * default: the app read the file, so the app decided how big it is. */
69
+ maxLines?: number;
70
+ }
71
+
72
+ /**
73
+ * A capture, reduced.
74
+ *
75
+ * ```ts
76
+ * const doc = parseAnsi(await readFile('build.log'));
77
+ * doc.lines.map((line) => line.text);
78
+ * ```
79
+ */
80
+ export function parseAnsi(
81
+ data: AnsiInput,
82
+ options: ParseAnsiOptions = {},
83
+ ): AnsiDocument {
84
+ const state =
85
+ options.from instanceof AnsiState
86
+ ? options.from
87
+ : options.from
88
+ ? options.from.state
89
+ : new AnsiState(options);
90
+ state.write(data);
91
+ return state.snapshot();
92
+ }
93
+
94
+ /** The capture's text with every escape sequence resolved away. What a
95
+ * round-trip test compares against, and what a plain-text export wants. */
96
+ export function stripAnsi(data: AnsiInput, options?: ParseAnsiOptions): string {
97
+ return parseAnsi(data, options)
98
+ .lines.map((line) => line.text)
99
+ .join('\n');
100
+ }
101
+
102
+ // --- the machine ------------------------------------------------------------
103
+
104
+ const GROUND = 0;
105
+ const ESC = 1;
106
+ const CSI = 2;
107
+ const OSC = 3;
108
+ /** DCS, SOS, PM, APC — a string terminated by ST, and never anything we draw. */
109
+ const STR = 4;
110
+ /** `ESC ( B` and friends: one more byte to swallow. */
111
+ const CHARSET = 5;
112
+
113
+ /** A column an escape sequence may ask for. `\e[999999999C` is a corrupt
114
+ * capture rather than a request, and allocating for it is how a renderer
115
+ * turns one bad byte into an out-of-memory. */
116
+ const MAX_COLUMN = 100_000;
117
+ /** An OSC or DCS payload bigger than this is a program misbehaving — the same
118
+ * call `<vtterm>` makes about an oversized OSC 52. */
119
+ const MAX_STRING = 64 * 1024;
120
+
121
+ /** Marks join the cell before them rather than taking one of their own, so a
122
+ * combining accent does not shift every column after it. */
123
+ const MARK = /\p{M}/u;
124
+ const ZWJ = 0x200d;
125
+
126
+ function joinsPrevious(cp: number, ch: string): boolean {
127
+ return cp === ZWJ || (cp >= 0x300 && MARK.test(ch));
128
+ }
129
+
130
+ /** Would a blank cell in these attributes leave a mark on the screen? */
131
+ function paintsBlank(attrs: AnsiAttrs | undefined): boolean {
132
+ if (!attrs || attrs === PLAIN) return false;
133
+ return Boolean(
134
+ attrs.bg ??
135
+ attrs.inverse ??
136
+ attrs.underline ??
137
+ attrs.strike ??
138
+ attrs.overline,
139
+ );
140
+ }
141
+
142
+ /**
143
+ * One row of cells, as spans.
144
+ *
145
+ * Trailing blanks in attributes that paint nothing are dropped: they are
146
+ * invisible on the screen and they would ride along in every copied line. A
147
+ * trailing run that *does* paint — a status bar's background — is kept,
148
+ * because that one is on the screen.
149
+ */
150
+ function flushLine(
151
+ chars: readonly string[],
152
+ attrs: readonly (AnsiAttrs | undefined)[],
153
+ ): AnsiLine {
154
+ let end = chars.length;
155
+ while (
156
+ end > 0 &&
157
+ (chars[end - 1] ?? ' ') === ' ' &&
158
+ !paintsBlank(attrs[end - 1])
159
+ ) {
160
+ end--;
161
+ }
162
+ const spans: AnsiSpan[] = [];
163
+ let text = '';
164
+ let i = 0;
165
+ while (i < end) {
166
+ // Cells written between two SGR sequences share one frozen record, so
167
+ // this is an identity compare rather than twelve field compares.
168
+ const attr = attrs[i] ?? PLAIN;
169
+ let j = i + 1;
170
+ while (j < end && (attrs[j] ?? PLAIN) === attr) j++;
171
+ let run = '';
172
+ for (let k = i; k < j; k++) run += chars[k] ?? ' ';
173
+ spans.push({ ...attr, text: run });
174
+ text += run;
175
+ i = j;
176
+ }
177
+ return { spans, text };
178
+ }
179
+
180
+ /**
181
+ * The reducer's state: the escape machine, the current attributes, the line
182
+ * being written, and the lines already finished.
183
+ *
184
+ * Held across calls so an append costs the appended bytes. Completed lines
185
+ * are never mutated, so an older `AnsiDocument` snapshot stays valid after
186
+ * the next `write()`.
187
+ */
188
+ export class AnsiState {
189
+ private readonly _tabWidth: number;
190
+ private readonly _maxLines: number;
191
+
192
+ private _style = new Style();
193
+ private _decoder = new Utf8Decoder();
194
+
195
+ private _lines: AnsiLine[] = [];
196
+ private _truncated = 0;
197
+
198
+ private _chars: string[] = [];
199
+ private _attrs: (AnsiAttrs | undefined)[] = [];
200
+ private _col = 0;
201
+ private _lastPrinted = '';
202
+ private _joinNext = false;
203
+
204
+ private _title: string | undefined;
205
+ private _needsScreen = false;
206
+ private _dropped: Record<string, number> = {};
207
+
208
+ private _phase = GROUND;
209
+ private _params: number[][] = [];
210
+ private _group: number[] = [];
211
+ private _digits = '';
212
+ private _prefix = '';
213
+ private _string = '';
214
+ private _stringEsc = false;
215
+
216
+ constructor(options: { tabWidth?: number; maxLines?: number } = {}) {
217
+ this._tabWidth = Math.max(1, options.tabWidth ?? 8);
218
+ this._maxLines = Math.max(1, options.maxLines ?? Infinity);
219
+ }
220
+
221
+ /** Feed the next chunk. Bytes are preferred — see `./utf8.ts`. */
222
+ write(data: AnsiInput): void {
223
+ if (typeof data === 'string') {
224
+ this._feed(data);
225
+ return;
226
+ }
227
+ if (data instanceof Uint8Array) {
228
+ this._feed(this._decoder.decode(data));
229
+ return;
230
+ }
231
+ for (const part of data) this.write(part);
232
+ }
233
+
234
+ /** The document as it stands. Cheap: only the line still being written is
235
+ * rebuilt, and the finished ones are shared by reference. */
236
+ snapshot(): AnsiDocument {
237
+ const live = flushLine(this._chars, this._attrs);
238
+ // A capture with no trailing newline still has a last line, and a log
239
+ // being tailed shows its tail. An empty one is not a line at all.
240
+ const hasLive = live.spans.length > 0;
241
+ // The line still being written counts against `maxLines`, because "keep
242
+ // the last hundred lines" means the hundred a reader sees. Eviction in
243
+ // `_pushLine` is what bounds the memory; this is what bounds the answer,
244
+ // and only the two differ by the one live line.
245
+ const room = hasLive ? this._maxLines - 1 : this._maxLines;
246
+ const skipped = Math.max(0, this._lines.length - room);
247
+ const lines =
248
+ skipped > 0 ? this._lines.slice(skipped) : this._lines.slice();
249
+ if (hasLive) lines.push(live);
250
+ return {
251
+ lines,
252
+ ...(this._title === undefined ? null : { title: this._title }),
253
+ needsScreen: this._needsScreen,
254
+ dropped: { ...this._dropped },
255
+ truncated: this._truncated + skipped,
256
+ state: this,
257
+ };
258
+ }
259
+
260
+ // --- the escape machine ---------------------------------------------------
261
+
262
+ private _feed(text: string): void {
263
+ const n = text.length;
264
+ let i = 0;
265
+ while (i < n) {
266
+ if (this._phase === GROUND) {
267
+ // The fast path: everything up to the next control character is text,
268
+ // and a build log is almost all text.
269
+ let j = i;
270
+ while (j < n) {
271
+ const c = text.charCodeAt(j);
272
+ if (c < 0x20 || c === 0x7f) break;
273
+ j++;
274
+ }
275
+ if (j > i) {
276
+ this._print(text.slice(i, j));
277
+ i = j;
278
+ continue;
279
+ }
280
+ this._control(text.charCodeAt(i));
281
+ i++;
282
+ continue;
283
+ }
284
+ this._step(text.charCodeAt(i), text[i]!);
285
+ i++;
286
+ }
287
+ }
288
+
289
+ private _control(c: number): void {
290
+ switch (c) {
291
+ case 0x08:
292
+ this._col = Math.max(0, this._col - 1);
293
+ break;
294
+ case 0x09:
295
+ this._col = Math.min(
296
+ MAX_COLUMN,
297
+ (Math.floor(this._col / this._tabWidth) + 1) * this._tabWidth,
298
+ );
299
+ break;
300
+ case 0x0a:
301
+ case 0x0b:
302
+ case 0x0c:
303
+ this._newline();
304
+ break;
305
+ case 0x0d:
306
+ this._col = 0;
307
+ break;
308
+ case 0x1b:
309
+ this._phase = ESC;
310
+ break;
311
+ default:
312
+ // BEL, SO/SI, DEL and the rest: consumed, and none of them changes
313
+ // anything this model holds.
314
+ break;
315
+ }
316
+ }
317
+
318
+ private _step(code: number, ch: string): void {
319
+ switch (this._phase) {
320
+ case ESC:
321
+ this._escape(ch);
322
+ break;
323
+ case CSI:
324
+ this._csi(code, ch);
325
+ break;
326
+ case OSC:
327
+ case STR:
328
+ this._stringByte(code, ch);
329
+ break;
330
+ case CHARSET:
331
+ // `ESC ( B` and its family: the designation byte, swallowed. Nothing
332
+ // here switches character sets — a capture is already Unicode by the
333
+ // time it reaches this parser.
334
+ this._phase = GROUND;
335
+ break;
336
+ default:
337
+ this._phase = GROUND;
338
+ break;
339
+ }
340
+ }
341
+
342
+ private _escape(ch: string): void {
343
+ switch (ch) {
344
+ case '[':
345
+ this._phase = CSI;
346
+ this._params = [];
347
+ this._group = [];
348
+ this._digits = '';
349
+ this._prefix = '';
350
+ return;
351
+ case ']':
352
+ this._phase = OSC;
353
+ this._string = '';
354
+ this._stringEsc = false;
355
+ return;
356
+ case 'P': // DCS — sixel arrives here
357
+ case 'X': // SOS
358
+ case '^': // PM
359
+ case '_': // APC
360
+ this._phase = STR;
361
+ this._string = '';
362
+ this._stringEsc = false;
363
+ return;
364
+ case '(':
365
+ case ')':
366
+ case '*':
367
+ case '+':
368
+ case '-':
369
+ case '.':
370
+ case '/':
371
+ case '#':
372
+ case '%':
373
+ case ' ':
374
+ this._phase = CHARSET;
375
+ return;
376
+ default:
377
+ break;
378
+ }
379
+ this._phase = GROUND;
380
+ switch (ch) {
381
+ case 'D': // IND — down one line
382
+ this._newline();
383
+ break;
384
+ case 'E': // NEL — down one line, column zero
385
+ this._newline();
386
+ break;
387
+ case 'M': // RI — *up* one line, which only a screen has
388
+ this._screen('RI');
389
+ break;
390
+ case '7':
391
+ case '8':
392
+ // DECSC/DECRC. Counted rather than flagged: a saved cursor restored
393
+ // inside one line is ordinary in progress renderers, and calling
394
+ // every capture that uses it "needs a screen" would cry wolf.
395
+ this._drop(ch === '7' ? 'DECSC' : 'DECRC');
396
+ break;
397
+ case 'c':
398
+ this._drop('RIS');
399
+ break;
400
+ case '\\': // ST with nothing open
401
+ case '=':
402
+ case '>':
403
+ break;
404
+ default:
405
+ this._drop('esc');
406
+ break;
407
+ }
408
+ }
409
+
410
+ private _csi(code: number, ch: string): void {
411
+ if (code >= 0x30 && code <= 0x39) {
412
+ this._digits += ch;
413
+ return;
414
+ }
415
+ if (code === 0x3a) {
416
+ this._group.push(this._value());
417
+ return;
418
+ }
419
+ if (code === 0x3b) {
420
+ this._group.push(this._value());
421
+ this._params.push(this._group);
422
+ this._group = [];
423
+ return;
424
+ }
425
+ if (code >= 0x3c && code <= 0x3f) {
426
+ // `?`, `<`, `=`, `>`: the private marker, and only legal before any
427
+ // parameter — a stray one later is the capture's problem, not ours.
428
+ this._prefix += ch;
429
+ return;
430
+ }
431
+ if (code >= 0x20 && code <= 0x2f) {
432
+ // An intermediate byte. Nothing dispatched below takes one, so the only
433
+ // thing it changes is that the final is not what it would otherwise be.
434
+ this._prefix += ch;
435
+ return;
436
+ }
437
+ if (code >= 0x40 && code <= 0x7e) {
438
+ this._group.push(this._value());
439
+ this._params.push(this._group);
440
+ this._group = [];
441
+ this._phase = GROUND;
442
+ this._dispatch(ch);
443
+ return;
444
+ }
445
+ if (code === 0x18 || code === 0x1a) {
446
+ // CAN/SUB abort the sequence, which is the one way a program says
447
+ // "ignore what I just started".
448
+ this._phase = GROUND;
449
+ return;
450
+ }
451
+ // A C0 inside a CSI is executed and the sequence continues, which is what
452
+ // makes `\e[1;\n31m` behave the way a terminal behaves.
453
+ if (code < 0x20) this._control(code);
454
+ }
455
+
456
+ private _value(): number {
457
+ if (!this._digits) return ABSENT;
458
+ const n = Number.parseInt(this._digits, 10);
459
+ this._digits = '';
460
+ return Number.isFinite(n) ? n : ABSENT;
461
+ }
462
+
463
+ private _dispatch(final: string): void {
464
+ const params = this._params;
465
+ const at = (i: number, dflt: number): number => param(params, i, dflt);
466
+ const positive = (i: number): number =>
467
+ Math.max(1, Math.min(MAX_COLUMN, at(i, 1)));
468
+
469
+ if (this._prefix) {
470
+ this._private(final, at(0, 0));
471
+ return;
472
+ }
473
+
474
+ switch (final) {
475
+ case 'm':
476
+ this._style.apply(params);
477
+ return;
478
+ case 'K':
479
+ this._eraseLine(at(0, 0));
480
+ return;
481
+ case 'C': // CUF
482
+ case 'a': // HPR
483
+ this._col = Math.min(MAX_COLUMN, this._col + positive(0));
484
+ return;
485
+ case 'D': // CUB
486
+ this._col = Math.max(0, this._col - positive(0));
487
+ return;
488
+ case 'G': // CHA
489
+ case '`': // HPA
490
+ // Column-absolute *within a line* is the one addressing sequence a
491
+ // flow model answers exactly, so it is honoured rather than flagged.
492
+ this._col = Math.max(0, Math.min(MAX_COLUMN, at(0, 1) - 1));
493
+ return;
494
+ case 'E': // CNL — down n lines, column zero. In a document, n newlines.
495
+ for (let i = 0; i < positive(0); i++) this._newline();
496
+ return;
497
+ case 'Z': // CBT
498
+ this._col = Math.max(
499
+ 0,
500
+ (Math.ceil(this._col / this._tabWidth) - positive(0)) *
501
+ this._tabWidth,
502
+ );
503
+ return;
504
+ case 'X': // ECH
505
+ this._eraseChars(positive(0));
506
+ return;
507
+ case 'P': // DCH
508
+ this._deleteChars(positive(0));
509
+ return;
510
+ case '@': // ICH
511
+ this._insertBlanks(positive(0));
512
+ return;
513
+ case 'b': // REP
514
+ if (this._lastPrinted) {
515
+ const attrs = this._style.attrs();
516
+ for (let i = 0; i < positive(0); i++)
517
+ this._put(this._lastPrinted, attrs);
518
+ }
519
+ return;
520
+ case 'H':
521
+ case 'f':
522
+ this._screen('CUP');
523
+ return;
524
+ case 'A':
525
+ this._screen('CUU');
526
+ return;
527
+ case 'B':
528
+ this._screen('CUD');
529
+ return;
530
+ case 'F':
531
+ this._screen('CPL');
532
+ return;
533
+ case 'd':
534
+ this._screen('VPA');
535
+ return;
536
+ case 'J':
537
+ this._screen('ED');
538
+ return;
539
+ case 'L':
540
+ this._screen('IL');
541
+ return;
542
+ case 'M':
543
+ this._screen('DL');
544
+ return;
545
+ case 'S':
546
+ this._screen('SU');
547
+ return;
548
+ case 'T':
549
+ this._screen('SD');
550
+ return;
551
+ case 'r':
552
+ this._screen('DECSTBM');
553
+ return;
554
+ case 'n':
555
+ case 'c':
556
+ // A query. Nothing can answer it: a capture is not a conversation.
557
+ this._drop('query');
558
+ return;
559
+ case 'h':
560
+ case 'l':
561
+ this._drop('mode');
562
+ return;
563
+ case 's':
564
+ case 'u':
565
+ this._drop(final === 's' ? 'SCOSC' : 'SCORC');
566
+ return;
567
+ case 't':
568
+ this._drop('window-op');
569
+ return;
570
+ default:
571
+ this._drop('csi');
572
+ return;
573
+ }
574
+ }
575
+
576
+ private _private(final: string, first: number): void {
577
+ if (final !== 'h' && final !== 'l') {
578
+ this._drop('csi-private');
579
+ return;
580
+ }
581
+ // 1049/1047/47 are the alternate screen, and a program that took it drew
582
+ // a screen by definition.
583
+ if (first === 1049 || first === 1047 || first === 47) {
584
+ this._screen('alt-screen');
585
+ return;
586
+ }
587
+ // Cursor visibility, bracketed paste, mouse tracking, focus reporting:
588
+ // all real, none of them visible in a static render.
589
+ this._drop('dec-mode');
590
+ }
591
+
592
+ // --- OSC and the string sequences -----------------------------------------
593
+
594
+ private _stringByte(code: number, ch: string): void {
595
+ if (this._stringEsc) {
596
+ this._stringEsc = false;
597
+ if (ch === '\\') {
598
+ this._endString();
599
+ return;
600
+ }
601
+ // An ESC that was not ST aborts the string, exactly as it does in a
602
+ // terminal — otherwise one dropped byte swallows the rest of the log.
603
+ this._phase = GROUND;
604
+ this._escape(ch);
605
+ return;
606
+ }
607
+ if (code === 0x1b) {
608
+ this._stringEsc = true;
609
+ return;
610
+ }
611
+ if (code === 0x07) {
612
+ this._endString();
613
+ return;
614
+ }
615
+ if (code < 0x20) {
616
+ // A C0 other than BEL/ESC ends an OSC in xterm. Ending is the safe
617
+ // reading: the alternative is swallowing the rest of the capture.
618
+ this._endString();
619
+ this._control(code);
620
+ return;
621
+ }
622
+ if (this._string.length < MAX_STRING) this._string += ch;
623
+ }
624
+
625
+ private _endString(): void {
626
+ const phase = this._phase;
627
+ const payload = this._string;
628
+ this._string = '';
629
+ this._phase = GROUND;
630
+ if (phase === STR) {
631
+ // DCS and friends. Sixel lives here, and a sixel is an image this
632
+ // component does not decode — recognised, consumed, counted.
633
+ this._drop(/^[\d;]*q/.test(payload) ? 'sixel' : 'dcs');
634
+ return;
635
+ }
636
+ const split = payload.indexOf(';');
637
+ const id = split < 0 ? payload : payload.slice(0, split);
638
+ const rest = split < 0 ? '' : payload.slice(split + 1);
639
+ switch (id) {
640
+ case '0':
641
+ case '2':
642
+ this._title = rest;
643
+ return;
644
+ case '1':
645
+ // The icon name. Real, and nothing here has an icon.
646
+ return;
647
+ case '8': {
648
+ // `OSC 8 ; params ; URI ST`, and an empty URI closes.
649
+ const uriAt = rest.indexOf(';');
650
+ const uri = uriAt < 0 ? '' : rest.slice(uriAt + 1);
651
+ this._style.setHref(uri || undefined);
652
+ return;
653
+ }
654
+ case '52':
655
+ // A recorded clipboard write. Recording one is not performing one.
656
+ this._drop('osc-52');
657
+ return;
658
+ case '4':
659
+ case '10':
660
+ case '11':
661
+ case '12':
662
+ case '104':
663
+ case '110':
664
+ case '111':
665
+ case '112':
666
+ this._drop('osc-palette');
667
+ return;
668
+ default:
669
+ this._drop('osc');
670
+ return;
671
+ }
672
+ }
673
+
674
+ // --- the line buffer ------------------------------------------------------
675
+
676
+ private _print(text: string): void {
677
+ const attrs = this._style.attrs();
678
+ for (const ch of text) {
679
+ const cp = ch.codePointAt(0)!;
680
+ const joins = this._joinNext || joinsPrevious(cp, ch);
681
+ this._joinNext = cp === ZWJ;
682
+ if (joins && this._col > 0) {
683
+ const at = this._col - 1;
684
+ this._chars[at] = (this._chars[at] ?? ' ') + ch;
685
+ this._lastPrinted = this._chars[at]!;
686
+ continue;
687
+ }
688
+ this._put(ch, attrs);
689
+ }
690
+ }
691
+
692
+ private _put(ch: string, attrs: AnsiAttrs): void {
693
+ const col = this._col;
694
+ if (col >= MAX_COLUMN) return;
695
+ // A gap opened by CUF or HPA is blank on the screen, so it is blank here.
696
+ for (let i = this._chars.length; i < col; i++) {
697
+ this._chars[i] = ' ';
698
+ this._attrs[i] = PLAIN;
699
+ }
700
+ this._chars[col] = ch;
701
+ this._attrs[col] = attrs;
702
+ this._col = col + 1;
703
+ this._lastPrinted = ch;
704
+ }
705
+
706
+ private _newline(): void {
707
+ this._pushLine(flushLine(this._chars, this._attrs));
708
+ this._chars = [];
709
+ this._attrs = [];
710
+ this._col = 0;
711
+ this._joinNext = false;
712
+ }
713
+
714
+ private _pushLine(line: AnsiLine): void {
715
+ this._lines.push(line);
716
+ if (this._lines.length > this._maxLines) {
717
+ const excess = this._lines.length - this._maxLines;
718
+ this._lines.splice(0, excess);
719
+ this._truncated += excess;
720
+ }
721
+ }
722
+
723
+ private _eraseLine(mode: number): void {
724
+ if (mode === 1) {
725
+ const attrs = this._style.attrs();
726
+ const end = Math.min(
727
+ this._col + 1,
728
+ Math.max(this._chars.length, this._col + 1),
729
+ );
730
+ for (let i = 0; i < end; i++) {
731
+ this._chars[i] = ' ';
732
+ this._attrs[i] = attrs;
733
+ }
734
+ return;
735
+ }
736
+ // 0 truncates from the head, 2 clears the row. In a document both are the
737
+ // same statement — there is nothing past the head but what a `\r` rewind
738
+ // left, and erasing it is exactly what the sequence is for.
739
+ const from = mode === 2 ? 0 : this._col;
740
+ this._chars.length = Math.min(this._chars.length, from);
741
+ this._attrs.length = Math.min(this._attrs.length, from);
742
+ }
743
+
744
+ private _eraseChars(n: number): void {
745
+ const attrs = this._style.attrs();
746
+ const end = Math.min(this._chars.length, this._col + n);
747
+ for (let i = this._col; i < end; i++) {
748
+ this._chars[i] = ' ';
749
+ this._attrs[i] = attrs;
750
+ }
751
+ }
752
+
753
+ private _deleteChars(n: number): void {
754
+ if (this._col >= this._chars.length) return;
755
+ this._chars.splice(this._col, n);
756
+ this._attrs.splice(this._col, n);
757
+ }
758
+
759
+ private _insertBlanks(n: number): void {
760
+ if (this._col > this._chars.length) return;
761
+ const attrs = this._style.attrs();
762
+ const blanks = new Array<string>(n).fill(' ');
763
+ this._chars.splice(this._col, 0, ...blanks);
764
+ this._attrs.splice(this._col, 0, ...new Array<AnsiAttrs>(n).fill(attrs));
765
+ }
766
+
767
+ // --- what could not be honoured -------------------------------------------
768
+
769
+ private _drop(name: string): void {
770
+ this._dropped[name] = (this._dropped[name] ?? 0) + 1;
771
+ }
772
+
773
+ /** Dropped, and it is the kind of sequence that means the capture wanted a
774
+ * real screen. Both, always: `needsScreen` says which renderer to use and
775
+ * `dropped` says what it cost to use the other one. */
776
+ private _screen(name: string): void {
777
+ this._needsScreen = true;
778
+ this._drop(name);
779
+ }
780
+ }