@react-x11/components 0.1.0 → 0.2.1

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 (788) 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 +88 -0
  335. package/dist/internal/heights.d.ts.map +1 -0
  336. package/dist/internal/heights.js +203 -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/scroll.d.ts +62 -0
  343. package/dist/internal/scroll.d.ts.map +1 -0
  344. package/dist/internal/scroll.js +224 -0
  345. package/dist/internal/scroll.js.map +1 -0
  346. package/dist/internal/text.d.ts +6 -0
  347. package/dist/internal/text.d.ts.map +1 -0
  348. package/dist/internal/text.js +44 -0
  349. package/dist/internal/text.js.map +1 -0
  350. package/dist/internal/timers.d.ts +8 -0
  351. package/dist/internal/timers.d.ts.map +1 -0
  352. package/dist/internal/timers.js +22 -0
  353. package/dist/internal/timers.js.map +1 -0
  354. package/dist/internal/widget.d.ts +40 -0
  355. package/dist/internal/widget.d.ts.map +1 -0
  356. package/dist/internal/widget.js +44 -0
  357. package/dist/internal/widget.js.map +1 -0
  358. package/dist/markdown/ast.d.ts +126 -0
  359. package/dist/markdown/ast.d.ts.map +1 -0
  360. package/dist/markdown/ast.js +8 -0
  361. package/dist/markdown/ast.js.map +1 -0
  362. package/dist/markdown/hx.d.ts +24 -0
  363. package/dist/markdown/hx.d.ts.map +1 -0
  364. package/dist/markdown/hx.js +25 -0
  365. package/dist/markdown/hx.js.map +1 -0
  366. package/dist/markdown/index.d.ts +90 -0
  367. package/dist/markdown/index.d.ts.map +1 -0
  368. package/dist/markdown/index.js +413 -0
  369. package/dist/markdown/index.js.map +1 -0
  370. package/dist/markdown/parse.d.ts +8 -0
  371. package/dist/markdown/parse.d.ts.map +1 -0
  372. package/dist/markdown/parse.js +911 -0
  373. package/dist/markdown/parse.js.map +1 -0
  374. package/dist/markdown/spans.d.ts +20 -0
  375. package/dist/markdown/spans.d.ts.map +1 -0
  376. package/dist/markdown/spans.js +96 -0
  377. package/dist/markdown/spans.js.map +1 -0
  378. package/dist/media-player/backends.d.ts +64 -0
  379. package/dist/media-player/backends.d.ts.map +1 -0
  380. package/dist/media-player/backends.js +110 -0
  381. package/dist/media-player/backends.js.map +1 -0
  382. package/dist/media-player/control.d.ts +40 -0
  383. package/dist/media-player/control.d.ts.map +1 -0
  384. package/dist/media-player/control.js +44 -0
  385. package/dist/media-player/control.js.map +1 -0
  386. package/dist/media-player/hx.d.ts +24 -0
  387. package/dist/media-player/hx.d.ts.map +1 -0
  388. package/dist/media-player/hx.js +25 -0
  389. package/dist/media-player/hx.js.map +1 -0
  390. package/dist/media-player/index.d.ts +107 -0
  391. package/dist/media-player/index.d.ts.map +1 -0
  392. package/dist/media-player/index.js +219 -0
  393. package/dist/media-player/index.js.map +1 -0
  394. package/dist/media-player/mpv.d.ts +4 -0
  395. package/dist/media-player/mpv.d.ts.map +1 -0
  396. package/dist/media-player/mpv.js +120 -0
  397. package/dist/media-player/mpv.js.map +1 -0
  398. package/dist/media-player/vlc.d.ts +8 -0
  399. package/dist/media-player/vlc.d.ts.map +1 -0
  400. package/dist/media-player/vlc.js +83 -0
  401. package/dist/media-player/vlc.js.map +1 -0
  402. package/dist/richtext/index.d.ts +19 -0
  403. package/dist/richtext/index.d.ts.map +1 -0
  404. package/dist/richtext/index.js +4 -0
  405. package/dist/richtext/index.js.map +1 -0
  406. package/dist/richtext/links.d.ts +12 -0
  407. package/dist/richtext/links.d.ts.map +1 -0
  408. package/dist/richtext/links.js +64 -0
  409. package/dist/richtext/links.js.map +1 -0
  410. package/dist/richtext/menu.d.ts +11 -0
  411. package/dist/richtext/menu.d.ts.map +1 -0
  412. package/dist/richtext/menu.js +43 -0
  413. package/dist/richtext/menu.js.map +1 -0
  414. package/dist/richtext/node.d.ts +151 -0
  415. package/dist/richtext/node.d.ts.map +1 -0
  416. package/dist/richtext/node.js +255 -0
  417. package/dist/richtext/node.js.map +1 -0
  418. package/dist/richtext/runs.d.ts +92 -0
  419. package/dist/richtext/runs.d.ts.map +1 -0
  420. package/dist/richtext/runs.js +158 -0
  421. package/dist/richtext/runs.js.map +1 -0
  422. package/dist/table/hx.d.ts +24 -0
  423. package/dist/table/hx.d.ts.map +1 -0
  424. package/dist/table/hx.js +25 -0
  425. package/dist/table/hx.js.map +1 -0
  426. package/dist/table/index.d.ts +169 -0
  427. package/dist/table/index.d.ts.map +1 -0
  428. package/dist/table/index.js +890 -0
  429. package/dist/table/index.js.map +1 -0
  430. package/dist/table/rows.d.ts +136 -0
  431. package/dist/table/rows.d.ts.map +1 -0
  432. package/dist/table/rows.js +146 -0
  433. package/dist/table/rows.js.map +1 -0
  434. package/dist/terminal/backends.d.ts +105 -0
  435. package/dist/terminal/backends.d.ts.map +1 -0
  436. package/dist/terminal/backends.js +185 -0
  437. package/dist/terminal/backends.js.map +1 -0
  438. package/dist/terminal/hx.d.ts +24 -0
  439. package/dist/terminal/hx.d.ts.map +1 -0
  440. package/dist/terminal/hx.js +25 -0
  441. package/dist/terminal/hx.js.map +1 -0
  442. package/dist/terminal/index.d.ts +160 -0
  443. package/dist/terminal/index.d.ts.map +1 -0
  444. package/dist/terminal/index.js +344 -0
  445. package/dist/terminal/index.js.map +1 -0
  446. package/dist/terminal/title.d.ts +24 -0
  447. package/dist/terminal/title.d.ts.map +1 -0
  448. package/dist/terminal/title.js +129 -0
  449. package/dist/terminal/title.js.map +1 -0
  450. package/dist/terminal/vt/colors.d.ts +63 -0
  451. package/dist/terminal/vt/colors.d.ts.map +1 -0
  452. package/dist/terminal/vt/colors.js +203 -0
  453. package/dist/terminal/vt/colors.js.map +1 -0
  454. package/dist/terminal/vt/diff.d.ts +117 -0
  455. package/dist/terminal/vt/diff.d.ts.map +1 -0
  456. package/dist/terminal/vt/diff.js +358 -0
  457. package/dist/terminal/vt/diff.js.map +1 -0
  458. package/dist/terminal/vt/fonts.d.ts +92 -0
  459. package/dist/terminal/vt/fonts.d.ts.map +1 -0
  460. package/dist/terminal/vt/fonts.js +178 -0
  461. package/dist/terminal/vt/fonts.js.map +1 -0
  462. package/dist/terminal/vt/index.d.ts +78 -0
  463. package/dist/terminal/vt/index.d.ts.map +1 -0
  464. package/dist/terminal/vt/index.js +312 -0
  465. package/dist/terminal/vt/index.js.map +1 -0
  466. package/dist/terminal/vt/keys.d.ts +74 -0
  467. package/dist/terminal/vt/keys.d.ts.map +1 -0
  468. package/dist/terminal/vt/keys.js +309 -0
  469. package/dist/terminal/vt/keys.js.map +1 -0
  470. package/dist/terminal/vt/mouse.d.ts +44 -0
  471. package/dist/terminal/vt/mouse.d.ts.map +1 -0
  472. package/dist/terminal/vt/mouse.js +106 -0
  473. package/dist/terminal/vt/mouse.js.map +1 -0
  474. package/dist/terminal/vt/node.d.ts +246 -0
  475. package/dist/terminal/vt/node.d.ts.map +1 -0
  476. package/dist/terminal/vt/node.js +1068 -0
  477. package/dist/terminal/vt/node.js.map +1 -0
  478. package/dist/terminal/vt/pty.d.ts +81 -0
  479. package/dist/terminal/vt/pty.d.ts.map +1 -0
  480. package/dist/terminal/vt/pty.js +201 -0
  481. package/dist/terminal/vt/pty.js.map +1 -0
  482. package/dist/terminal/vt/renderer.d.ts +179 -0
  483. package/dist/terminal/vt/renderer.d.ts.map +1 -0
  484. package/dist/terminal/vt/renderer.js +357 -0
  485. package/dist/terminal/vt/renderer.js.map +1 -0
  486. package/dist/terminal/vt/timers.d.ts +6 -0
  487. package/dist/terminal/vt/timers.d.ts.map +1 -0
  488. package/dist/terminal/vt/timers.js +16 -0
  489. package/dist/terminal/vt/timers.js.map +1 -0
  490. package/dist/terminal/vt/xterm.d.ts +142 -0
  491. package/dist/terminal/vt/xterm.d.ts.map +1 -0
  492. package/dist/terminal/vt/xterm.js +32 -0
  493. package/dist/terminal/vt/xterm.js.map +1 -0
  494. package/dist/terminal-output/hx.d.ts +24 -0
  495. package/dist/terminal-output/hx.d.ts.map +1 -0
  496. package/dist/terminal-output/hx.js +25 -0
  497. package/dist/terminal-output/hx.js.map +1 -0
  498. package/dist/terminal-output/index.d.ts +92 -0
  499. package/dist/terminal-output/index.d.ts.map +1 -0
  500. package/dist/terminal-output/index.js +179 -0
  501. package/dist/terminal-output/index.js.map +1 -0
  502. package/dist/terminal-output/runs.d.ts +27 -0
  503. package/dist/terminal-output/runs.d.ts.map +1 -0
  504. package/dist/terminal-output/runs.js +66 -0
  505. package/dist/terminal-output/runs.js.map +1 -0
  506. package/dist/three/canvas.d.ts +46 -0
  507. package/dist/three/canvas.d.ts.map +1 -0
  508. package/dist/three/canvas.js +305 -0
  509. package/dist/three/canvas.js.map +1 -0
  510. package/dist/three/events.d.ts +64 -0
  511. package/dist/three/events.d.ts.map +1 -0
  512. package/dist/three/events.js +146 -0
  513. package/dist/three/events.js.map +1 -0
  514. package/dist/three/geometries.d.ts +89 -0
  515. package/dist/three/geometries.d.ts.map +1 -0
  516. package/dist/three/geometries.js +345 -0
  517. package/dist/three/geometries.js.map +1 -0
  518. package/dist/three/globals.d.ts +7 -0
  519. package/dist/three/globals.d.ts.map +1 -0
  520. package/dist/three/globals.js +20 -0
  521. package/dist/three/globals.js.map +1 -0
  522. package/dist/three/hx.d.ts +9 -0
  523. package/dist/three/hx.d.ts.map +1 -0
  524. package/dist/three/hx.js +10 -0
  525. package/dist/three/hx.js.map +1 -0
  526. package/dist/three/index.d.ts +22 -0
  527. package/dist/three/index.d.ts.map +1 -0
  528. package/dist/three/index.js +24 -0
  529. package/dist/three/index.js.map +1 -0
  530. package/dist/three/jsx-dev-runtime.d.ts +19 -0
  531. package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
  532. package/dist/three/jsx-dev-runtime.js +2 -0
  533. package/dist/three/jsx-dev-runtime.js.map +1 -0
  534. package/dist/three/jsx-runtime.d.ts +19 -0
  535. package/dist/three/jsx-runtime.d.ts.map +1 -0
  536. package/dist/three/jsx-runtime.js +2 -0
  537. package/dist/three/jsx-runtime.js.map +1 -0
  538. package/dist/three/jsx.d.ts +198 -0
  539. package/dist/three/jsx.d.ts.map +1 -0
  540. package/dist/three/jsx.js +2 -0
  541. package/dist/three/jsx.js.map +1 -0
  542. package/dist/three/materials.d.ts +125 -0
  543. package/dist/three/materials.d.ts.map +1 -0
  544. package/dist/three/materials.js +229 -0
  545. package/dist/three/materials.js.map +1 -0
  546. package/dist/three/math.d.ts +146 -0
  547. package/dist/three/math.d.ts.map +1 -0
  548. package/dist/three/math.js +464 -0
  549. package/dist/three/math.js.map +1 -0
  550. package/dist/three/objects.d.ts +185 -0
  551. package/dist/three/objects.d.ts.map +1 -0
  552. package/dist/three/objects.js +309 -0
  553. package/dist/three/objects.js.map +1 -0
  554. package/dist/three/passes.d.ts +54 -0
  555. package/dist/three/passes.d.ts.map +1 -0
  556. package/dist/three/passes.js +78 -0
  557. package/dist/three/passes.js.map +1 -0
  558. package/dist/three/postprocess.d.ts +85 -0
  559. package/dist/three/postprocess.d.ts.map +1 -0
  560. package/dist/three/postprocess.js +503 -0
  561. package/dist/three/postprocess.js.map +1 -0
  562. package/dist/three/raycast.d.ts +24 -0
  563. package/dist/three/raycast.d.ts.map +1 -0
  564. package/dist/three/raycast.js +138 -0
  565. package/dist/three/raycast.js.map +1 -0
  566. package/dist/three/reconciler.d.ts +48 -0
  567. package/dist/three/reconciler.d.ts.map +1 -0
  568. package/dist/three/reconciler.js +416 -0
  569. package/dist/three/reconciler.js.map +1 -0
  570. package/dist/three/renderer-direct.d.ts +102 -0
  571. package/dist/three/renderer-direct.d.ts.map +1 -0
  572. package/dist/three/renderer-direct.js +782 -0
  573. package/dist/three/renderer-direct.js.map +1 -0
  574. package/dist/three/renderer-indirect.d.ts +68 -0
  575. package/dist/three/renderer-indirect.d.ts.map +1 -0
  576. package/dist/three/renderer-indirect.js +438 -0
  577. package/dist/three/renderer-indirect.js.map +1 -0
  578. package/dist/three/store.d.ts +81 -0
  579. package/dist/three/store.d.ts.map +1 -0
  580. package/dist/three/store.js +110 -0
  581. package/dist/three/store.js.map +1 -0
  582. package/dist/timeline/hx.d.ts +18 -0
  583. package/dist/timeline/hx.d.ts.map +1 -0
  584. package/dist/timeline/hx.js +10 -0
  585. package/dist/timeline/hx.js.map +1 -0
  586. package/dist/timeline/index.d.ts +152 -0
  587. package/dist/timeline/index.d.ts.map +1 -0
  588. package/dist/timeline/index.js +383 -0
  589. package/dist/timeline/index.js.map +1 -0
  590. package/dist/tray-host/hx.d.ts +24 -0
  591. package/dist/tray-host/hx.d.ts.map +1 -0
  592. package/dist/tray-host/hx.js +25 -0
  593. package/dist/tray-host/hx.js.map +1 -0
  594. package/dist/tray-host/index.d.ts +110 -0
  595. package/dist/tray-host/index.d.ts.map +1 -0
  596. package/dist/tray-host/index.js +191 -0
  597. package/dist/tray-host/index.js.map +1 -0
  598. package/dist/tray-host/manager.d.ts +137 -0
  599. package/dist/tray-host/manager.d.ts.map +1 -0
  600. package/dist/tray-host/manager.js +462 -0
  601. package/dist/tray-host/manager.js.map +1 -0
  602. package/dist/tray-host/notify.d.ts +22 -0
  603. package/dist/tray-host/notify.d.ts.map +1 -0
  604. package/dist/tray-host/notify.js +74 -0
  605. package/dist/tray-host/notify.js.map +1 -0
  606. package/dist/tray-host/protocol.d.ts +106 -0
  607. package/dist/tray-host/protocol.d.ts.map +1 -0
  608. package/dist/tray-host/protocol.js +191 -0
  609. package/dist/tray-host/protocol.js.map +1 -0
  610. package/dist/tree/hx.d.ts +24 -0
  611. package/dist/tree/hx.d.ts.map +1 -0
  612. package/dist/tree/hx.js +25 -0
  613. package/dist/tree/hx.js.map +1 -0
  614. package/dist/tree/index.d.ts +221 -0
  615. package/dist/tree/index.d.ts.map +1 -0
  616. package/dist/tree/index.js +751 -0
  617. package/dist/tree/index.js.map +1 -0
  618. package/dist/tree/internal.d.ts +18 -0
  619. package/dist/tree/internal.d.ts.map +1 -0
  620. package/dist/tree/internal.js +66 -0
  621. package/dist/tree/internal.js.map +1 -0
  622. package/dist/tree/rows.d.ts +177 -0
  623. package/dist/tree/rows.d.ts.map +1 -0
  624. package/dist/tree/rows.js +179 -0
  625. package/dist/tree/rows.js.map +1 -0
  626. package/package.json +166 -12
  627. package/src/ansi/cast.ts +159 -0
  628. package/src/ansi/index.ts +53 -0
  629. package/src/ansi/palette.ts +226 -0
  630. package/src/ansi/parse.ts +780 -0
  631. package/src/ansi/sgr.ts +380 -0
  632. package/src/ansi/utf8.ts +84 -0
  633. package/src/calendar/Calendar.ts +744 -0
  634. package/src/calendar/DatePicker.ts +368 -0
  635. package/src/calendar/dates.ts +307 -0
  636. package/src/calendar/index.ts +51 -0
  637. package/src/charts/components.ts +864 -0
  638. package/src/charts/data.ts +776 -0
  639. package/src/charts/hx.ts +39 -0
  640. package/src/charts/index.ts +99 -0
  641. package/src/charts/node.ts +932 -0
  642. package/src/charts/render.ts +982 -0
  643. package/src/charts/scale.ts +214 -0
  644. package/src/charts/spec.ts +122 -0
  645. package/src/charts/timers.ts +24 -0
  646. package/src/code/hx.ts +51 -0
  647. package/src/code/index.ts +174 -0
  648. package/src/code-editor/completion.ts +161 -0
  649. package/src/code-editor/doc.ts +198 -0
  650. package/src/code-editor/hx.ts +26 -0
  651. package/src/code-editor/index.ts +615 -0
  652. package/src/code-editor/node.ts +1926 -0
  653. package/src/code-language/hljs.ts +302 -0
  654. package/src/code-language/index.ts +51 -0
  655. package/src/code-language/languages/glsl.ts +120 -0
  656. package/src/code-language/languages/javascript.ts +419 -0
  657. package/src/code-language/languages/json.ts +72 -0
  658. package/src/code-language/languages/shell.ts +221 -0
  659. package/src/code-language/languages/sql.ts +165 -0
  660. package/src/code-language/lezer.ts +190 -0
  661. package/src/code-language/registry.ts +66 -0
  662. package/src/code-language/runs.ts +128 -0
  663. package/src/code-language/stream.ts +306 -0
  664. package/src/code-language/textmate.ts +134 -0
  665. package/src/code-language/theme.ts +124 -0
  666. package/src/code-language/timers.ts +36 -0
  667. package/src/code-language/types.ts +252 -0
  668. package/src/codeblock/index.ts +146 -0
  669. package/src/color-picker/ColorField.ts +333 -0
  670. package/src/color-picker/ColorPicker.ts +1069 -0
  671. package/src/color-picker/color.ts +399 -0
  672. package/src/color-picker/index.ts +50 -0
  673. package/src/desktop-calendar/eds.ts +484 -0
  674. package/src/desktop-calendar/ical.ts +119 -0
  675. package/src/desktop-calendar/index.ts +287 -0
  676. package/src/embed/client.ts +311 -0
  677. package/src/embed/host.ts +432 -0
  678. package/src/embed/index.ts +33 -0
  679. package/src/embed/timers.ts +32 -0
  680. package/src/flow/draw.ts +418 -0
  681. package/src/flow/index.ts +473 -0
  682. package/src/flow/model.ts +687 -0
  683. package/src/flow/node.ts +3694 -0
  684. package/src/flow/paths.ts +403 -0
  685. package/src/flow/types.ts +634 -0
  686. package/src/formula/hx.ts +51 -0
  687. package/src/formula/index.ts +243 -0
  688. package/src/formula/katex.ts +209 -0
  689. package/src/formula/layout.ts +876 -0
  690. package/src/formula/node.ts +467 -0
  691. package/src/html/controls.ts +244 -0
  692. package/src/html/css/cascade.ts +606 -0
  693. package/src/html/css/parse.ts +500 -0
  694. package/src/html/css/style.ts +1371 -0
  695. package/src/html/css/ua.ts +174 -0
  696. package/src/html/css/values.ts +358 -0
  697. package/src/html/dom.ts +410 -0
  698. package/src/html/hx.ts +55 -0
  699. package/src/html/index.ts +545 -0
  700. package/src/html/layout/block.ts +876 -0
  701. package/src/html/layout/boxes.ts +981 -0
  702. package/src/html/layout/flex.ts +297 -0
  703. package/src/html/layout/floats.ts +125 -0
  704. package/src/html/layout/inline.ts +870 -0
  705. package/src/html/layout/table.ts +380 -0
  706. package/src/html/node.ts +967 -0
  707. package/src/html/paint.ts +605 -0
  708. package/src/html/resources.ts +214 -0
  709. package/src/index.ts +638 -0
  710. package/src/internal/heights.ts +222 -0
  711. package/src/internal/hx.ts +53 -0
  712. package/src/internal/scroll.ts +288 -0
  713. package/src/internal/text.ts +44 -0
  714. package/src/internal/timers.ts +44 -0
  715. package/src/internal/widget.ts +92 -0
  716. package/src/markdown/ast.ts +163 -0
  717. package/src/markdown/hx.ts +51 -0
  718. package/src/markdown/index.ts +686 -0
  719. package/src/markdown/parse.ts +1037 -0
  720. package/src/markdown/spans.ts +143 -0
  721. package/src/media-player/backends.ts +155 -0
  722. package/src/media-player/control.ts +70 -0
  723. package/src/media-player/hx.ts +51 -0
  724. package/src/media-player/index.ts +378 -0
  725. package/src/media-player/mpv.ts +146 -0
  726. package/src/media-player/vlc.ts +97 -0
  727. package/src/richtext/index.ts +42 -0
  728. package/src/richtext/links.ts +78 -0
  729. package/src/richtext/menu.ts +49 -0
  730. package/src/richtext/node.ts +406 -0
  731. package/src/richtext/runs.ts +253 -0
  732. package/src/table/hx.ts +51 -0
  733. package/src/table/index.ts +1270 -0
  734. package/src/table/rows.ts +275 -0
  735. package/src/terminal/backends.ts +242 -0
  736. package/src/terminal/hx.ts +51 -0
  737. package/src/terminal/index.ts +574 -0
  738. package/src/terminal/title.ts +172 -0
  739. package/src/terminal/vt/colors.ts +247 -0
  740. package/src/terminal/vt/diff.ts +467 -0
  741. package/src/terminal/vt/fonts.ts +233 -0
  742. package/src/terminal/vt/index.ts +443 -0
  743. package/src/terminal/vt/keys.ts +369 -0
  744. package/src/terminal/vt/mouse.ts +144 -0
  745. package/src/terminal/vt/node.ts +1242 -0
  746. package/src/terminal/vt/pty.ts +334 -0
  747. package/src/terminal/vt/renderer.ts +555 -0
  748. package/src/terminal/vt/timers.ts +31 -0
  749. package/src/terminal/vt/xterm.ts +193 -0
  750. package/src/terminal-output/hx.ts +51 -0
  751. package/src/terminal-output/index.ts +340 -0
  752. package/src/terminal-output/runs.ts +79 -0
  753. package/src/three/canvas.ts +451 -0
  754. package/src/three/events.ts +197 -0
  755. package/src/three/geometries.ts +429 -0
  756. package/src/three/globals.ts +34 -0
  757. package/src/three/hx.ts +22 -0
  758. package/src/three/index.ts +98 -0
  759. package/src/three/jsx-dev-runtime.ts +27 -0
  760. package/src/three/jsx-runtime.ts +38 -0
  761. package/src/three/jsx.ts +275 -0
  762. package/src/three/materials.ts +270 -0
  763. package/src/three/math.ts +585 -0
  764. package/src/three/objects.ts +397 -0
  765. package/src/three/passes.ts +90 -0
  766. package/src/three/postprocess.ts +677 -0
  767. package/src/three/raycast.ts +189 -0
  768. package/src/three/react-reconciler.d.ts +50 -0
  769. package/src/three/reconciler.ts +624 -0
  770. package/src/three/renderer-direct.ts +1055 -0
  771. package/src/three/renderer-indirect.ts +570 -0
  772. package/src/three/store.ts +207 -0
  773. package/src/timeline/hx.ts +31 -0
  774. package/src/timeline/index.ts +603 -0
  775. package/src/tray-host/hx.ts +51 -0
  776. package/src/tray-host/index.ts +331 -0
  777. package/src/tray-host/manager.ts +639 -0
  778. package/src/tray-host/notify.ts +102 -0
  779. package/src/tray-host/protocol.ts +235 -0
  780. package/src/tree/hx.ts +51 -0
  781. package/src/tree/index.ts +1127 -0
  782. package/src/tree/internal.ts +87 -0
  783. package/src/tree/rows.ts +334 -0
  784. package/src/index.d.ts +0 -2
  785. package/src/index.js +0 -9
  786. package/src/sparkline/index.d.ts +0 -29
  787. package/src/sparkline/index.js +0 -50
  788. package/src/sparkline/node.js +0 -72
@@ -0,0 +1,574 @@
1
+ // <Terminal> — a real terminal emulator, embedded as an element.
2
+ //
3
+ // The first of the two XEmbed wrappers (the other is `../media-player/`), and
4
+ // the reason `<foreign>` exists in core at all: a react-x11 app can now *host*
5
+ // another X client instead of only drawing its own pixels.
6
+ //
7
+ // What this component is, mechanically: a `<foreign>` with no `windowId`, so
8
+ // it adopts whatever is put inside it; `xterm -into $WID` spawned with the id
9
+ // core hands over in `onReady`; and a per-backend adapter table
10
+ // (`./backends.ts`) that turns one set of props into three different command
11
+ // lines. Layout, focus, the ICCCM configure and handing the client back on
12
+ // unmount are all core's — see react-x11's `foreignnodes.js`.
13
+ //
14
+ // Registers no element *itself*: `<foreign>` is a built-in, and the vt
15
+ // backend's `<vtterm>` is registered by `./vt/index.ts`, which is reached
16
+ // only through a dynamic `import()`. So this module still has **no side
17
+ // effect at import time at all**, and an app on an XEmbed backend never loads
18
+ // the emulator core.
19
+ //
20
+ // ### The second backend
21
+ //
22
+ // `backend="vt"` is the same component over a pty and `@xterm/headless`,
23
+ // rendered as a native element rather than as somebody else's X window. It is
24
+ // what makes `write()` real — the pty is ours — and what works on a machine
25
+ // with no emulator installed, which is why `'auto'` ends there rather than at
26
+ // the `fallback`.
27
+ //
28
+ // **`write()` still returns `false` on the XEmbed backends**, and that is not
29
+ // an oversight: the pty belongs to xterm, so "type this" would have to be
30
+ // synthetic X key events, which xterm ignores unless `allowSendEvents` is on
31
+ // (a documented security setting, off by default and not ours to change in a
32
+ // user's terminal) and which alacritty's event loop filters out entirely.
33
+ // Returning `false` rather than throwing lets an app feature-test with the
34
+ // call itself.
35
+ import React, {
36
+ useCallback,
37
+ useEffect,
38
+ useMemo,
39
+ useRef,
40
+ useState,
41
+ } from 'react';
42
+ import type { ReactElement, ReactNode, Ref } from 'react';
43
+ import { useTheme } from 'react-x11';
44
+ import type { ForeignProps } from 'react-x11';
45
+ import type { Style } from 'react-x11/style';
46
+
47
+ import {
48
+ BackendUnavailableError,
49
+ resolveBackend,
50
+ useEmbeddedClient,
51
+ } from '../embed/index.js';
52
+ import type {
53
+ EmbedStatus,
54
+ ExitInfo,
55
+ LaunchPlan,
56
+ PlanContext,
57
+ ProcessHost,
58
+ } from '../embed/index.js';
59
+ import { backendsFor } from './backends.js';
60
+ import type {
61
+ TerminalBackendName,
62
+ TerminalColors,
63
+ TerminalLaunch,
64
+ } from './backends.js';
65
+ import { useForeignTitle } from './title.js';
66
+ import { hx } from './hx.js';
67
+ import type { PtyHost } from './vt/pty.js';
68
+ import type { VtHandle, VtTerminalProps } from './vt/index.js';
69
+
70
+ export {
71
+ TERMINAL_BACKENDS,
72
+ alacritty,
73
+ backendsFor,
74
+ urxvt,
75
+ xterm,
76
+ } from './backends.js';
77
+ export type {
78
+ TerminalBackend,
79
+ TerminalBackendName,
80
+ TerminalColors,
81
+ TerminalLaunch,
82
+ } from './backends.js';
83
+
84
+ const h = React.createElement;
85
+
86
+ /**
87
+ * What `import('./vt/index.js')` resolves to.
88
+ *
89
+ * A `typeof import(…)` type rather than a value import: the whole point is
90
+ * that the vt module — and `@xterm/headless` behind it — is fetched only when
91
+ * a vt terminal is actually rendered, which is what `test/treeshake.test.ts`
92
+ * asserts by bundling this subpath and looking for the emulator in it.
93
+ */
94
+ type VtModule = typeof import('./vt/index.js');
95
+
96
+ /** `<foreign>`'s props as `hx` takes them — `theme` is dropped because
97
+ * `hx` re-declares it (see `./hx.ts`). */
98
+ type ForeignElementProps = Omit<ForeignProps, 'theme'>;
99
+
100
+ /** What a `ref` on `<Terminal>` gets. */
101
+ export interface TerminalHandle {
102
+ /** Stop the emulator and start a new one. The scrollback is the old
103
+ * process's and does not survive; nothing else was ours to keep. */
104
+ restart(): void;
105
+ /** Signal the emulator process. `SIGTERM` by default; `false` when there
106
+ * is no process to signal. */
107
+ signal(signal?: string): boolean;
108
+ /** The emulator's pid, or `null`. */
109
+ readonly pid: number | null;
110
+ /** The `<foreign>` container's X window id — what the emulator was given.
111
+ * `null` on the vt backend, which has no child X window. */
112
+ readonly windowId: number | null;
113
+ /** Which backend was chosen, once one has been. */
114
+ readonly backend: string | null;
115
+ readonly status: EmbedStatus;
116
+
117
+ /**
118
+ * Type into the terminal. **vt backend only** — `false` everywhere else,
119
+ * for the reason at the top of this file, so an app can feature-test with
120
+ * the call itself.
121
+ */
122
+ write(data: string): boolean;
123
+ /** Re-derive the grid from the current layout now, rather than at the next
124
+ * paint. vt only. */
125
+ resizeToFit(): void;
126
+ /** Columns and rows the emulator currently has. vt only. */
127
+ readonly cols: number | null;
128
+ readonly rows: number | null;
129
+ /** The selected text, or null. vt only. */
130
+ selection(): string | null;
131
+ clearSelection(): void;
132
+ scrollToBottom(): void;
133
+ /** Move the viewport by `n` lines — negative is back into the scrollback. */
134
+ scrollLines(n: number): void;
135
+ /** The visible screen as text: "copy all", and what a test asserts on. */
136
+ serialize(): string | null;
137
+ }
138
+
139
+ export interface TerminalProps {
140
+ /**
141
+ * argv to run, `['bash', '-lc', 'npm test']`. Omit it for the user's login
142
+ * shell, which is what every emulator here does with no `-e`.
143
+ *
144
+ * **Changing this restarts the terminal**, because an emulator cannot be
145
+ * handed a new command. Pass a stable array (or a stable `useMemo`) unless a
146
+ * restart is what you mean — the component keys on the *contents*, not the
147
+ * identity, so an inline literal is fine as long as its contents are.
148
+ */
149
+ command?: readonly string[];
150
+ cwd?: string;
151
+ /** Added to the ambient environment, not a replacement for it. */
152
+ env?: Record<string, string | undefined>;
153
+ /**
154
+ * Which terminal. Default `'auto'`: the first of xterm, urxvt, alacritty
155
+ * that is installed, and `'vt'` — this package's own emulator, which needs
156
+ * nothing installed — when none of them is.
157
+ */
158
+ backend?: TerminalBackendName;
159
+ fontFamily?: string;
160
+ fontSize?: number;
161
+ /** Lines of scrollback the emulator keeps. */
162
+ scrollback?: number;
163
+ /** The emulator's window title before the program sets one of its own.
164
+ * XEmbed backends only — the vt backend has no window of its own to name,
165
+ * and reports the program's own title through `onTitleChange`. */
166
+ title?: string;
167
+ /**
168
+ * Colours for the emulator. Default: the react-x11 theme's `background` and
169
+ * `text`, with the accent as the cursor, so the pane matches the app around
170
+ * it. Pass `{}` to leave the emulator on its own defaults, or override any
171
+ * subset.
172
+ *
173
+ * `palette` (ANSI 0–15) reaches xterm and alacritty; urxvt takes its from
174
+ * the X resource database, which is the user's and not ours to write.
175
+ */
176
+ colors?: TerminalColors;
177
+ /** The program exited — including because `restart()` or unmount killed
178
+ * it. */
179
+ onExit?: (info: ExitInfo) => void;
180
+ /** The emulator's `_NET_WM_NAME` changed: what the shell says is running. */
181
+ onTitleChange?: (title: string) => void;
182
+ /** Spawn failures, and the `BackendUnavailableError` for a machine with no
183
+ * emulator installed. Without a handler neither is reported anywhere —
184
+ * `status` and `fallback` are the visible half. */
185
+ onError?: (err: Error) => void;
186
+ /** Rendered instead of the surface when no backend is installed. */
187
+ fallback?: ReactNode;
188
+ /** False holds off spawning — a pane in a tab that is not open yet. */
189
+ enabled?: boolean;
190
+ /** Sent on unmount and restart. Default `SIGTERM`. */
191
+ stopSignal?: string;
192
+ /**
193
+ * Where the process runs. Defaults to this machine, through node. The seam
194
+ * is public because "run it in a container / over ssh / under a sandbox" is
195
+ * a real thing to want and should not need a fork — and because it is what
196
+ * the tests drive.
197
+ */
198
+ processes?: ProcessHost;
199
+ /** A terminal is a control the user tabs to. False for a decorative one. */
200
+ focusable?: boolean;
201
+ style?: Style | Style[];
202
+ ref?: Ref<TerminalHandle>;
203
+ 'data-testname'?: string;
204
+
205
+ // --- vt backend only -----------------------------------------------------
206
+ //
207
+ // Each of these needs the emulator to be ours. On an XEmbed backend they are
208
+ // ignored — the running program owns its cursor, its bell and its clipboard,
209
+ // and none of it is reachable from out here — with a warning in development,
210
+ // because a prop that silently does nothing is the worst shape a prop has.
211
+
212
+ /** Default `'block'`. */
213
+ cursorStyle?: 'block' | 'underline' | 'bar';
214
+ /** Default true. */
215
+ cursorBlink?: boolean;
216
+ /** The program rang the bell. */
217
+ onBell?: () => void;
218
+ /** What the bell looks like. Default `'none'`; `'visual'` flashes the pane. */
219
+ bell?: 'none' | 'visual';
220
+ /** Honour OSC 52 clipboard *writes* — how `tmux` and `vim` copy out of an
221
+ * ssh session. Default true. Reads are never answered, at any setting. */
222
+ allowClipboardWrite?: boolean;
223
+ /** The user finished selecting; the text is also on PRIMARY. */
224
+ onSelectionChange?: (text: string) => void;
225
+ /**
226
+ * Where the pty comes from. The `processes` seam's counterpart, public for
227
+ * the same reason — "run the shell in a container / over ssh / under a
228
+ * sandbox" is a real thing to want — and what the tests drive.
229
+ */
230
+ pty?: PtyHost;
231
+ }
232
+
233
+ /** The props only the vt backend reads, for the development warning below. */
234
+ const VT_ONLY = [
235
+ 'cursorStyle',
236
+ 'cursorBlink',
237
+ 'onBell',
238
+ 'bell',
239
+ 'allowClipboardWrite',
240
+ 'onSelectionChange',
241
+ 'pty',
242
+ ] as const;
243
+
244
+ /**
245
+ * Say so, once, when a vt-only prop was passed to an embedded emulator.
246
+ *
247
+ * `process` and `console` come off `globalThis` because the build compiles
248
+ * `src/` with `types: []` — a Node global that wanders in has to fail the
249
+ * build rather than become an implicit `@types/node` dependency.
250
+ */
251
+ function warnVtOnly(props: TerminalProps): void {
252
+ const g = globalThis as {
253
+ process?: { env?: Record<string, string | undefined> };
254
+ console?: { warn(message: string): void };
255
+ };
256
+ if (g.process?.env?.NODE_ENV === 'production') return;
257
+ const named = VT_ONLY.filter((name) => props[name] !== undefined);
258
+ if (named.length === 0) return;
259
+ g.console?.warn(
260
+ `@react-x11/components: <Terminal ${named.join(', ')}> ` +
261
+ `${named.length === 1 ? 'is' : 'are'} only honoured by ` +
262
+ 'backend="vt" — an embedded emulator owns its own cursor, bell and ' +
263
+ 'clipboard.',
264
+ );
265
+ }
266
+
267
+ /**
268
+ * A terminal emulator, laid out like any other element.
269
+ *
270
+ * ```jsx
271
+ * <Terminal
272
+ * command={['bash', '-lc', 'npm test']}
273
+ * cwd={projectDir}
274
+ * style={{ flexGrow: 1 }}
275
+ * onExit={({ code }) => setDone(code === 0)}
276
+ * onTitleChange={setTabLabel}
277
+ * fallback={<text>Install xterm to use the console.</text>}
278
+ * />
279
+ * ```
280
+ *
281
+ * **On an XEmbed backend the emulator's window stacks above everything drawn
282
+ * in this one**, the same rule `<glarea>` has, so nothing 2D can overlap it:
283
+ * an overlay belongs in a sibling `<popup>`. The vt backend has no child
284
+ * window and composites like any other node, so a `<popup>` over it works.
285
+ *
286
+ * **Keys reach the app first.** While the terminal holds focus, react-x11
287
+ * dispatches each key through the React tree and forwards whatever nothing
288
+ * called `preventDefault()` on — so an application chord still wins. The one
289
+ * exception is X's own rule that the pointer position picks the recipient:
290
+ * while the pointer is *over* an embedded emulator, keys go straight to it.
291
+ *
292
+ * **The vt backend is the floor.** With `backend="auto"` (the default), a
293
+ * machine with no emulator installed gets this package's own — so `fallback`
294
+ * renders only when the pty module or `@xterm/headless` is missing too.
295
+ */
296
+ export function Terminal(props: TerminalProps): ReactElement {
297
+ const {
298
+ backend = 'auto',
299
+ enabled = true,
300
+ focusable,
301
+ processes,
302
+ stopSignal,
303
+ } = props;
304
+ const theme = useTheme() as unknown as Record<string, unknown>;
305
+
306
+ // Everything that goes into the command line, as one string.
307
+ //
308
+ // This is the restart key, and it is a string rather than a dependency list
309
+ // for the reason `useDesktopCalendarEvents` keys on `from.getTime()`:
310
+ // `command={['bash']}` and `colors={{}}` are new identities on every paint,
311
+ // and an effect keyed on them would kill and respawn a terminal per frame.
312
+ const colors = useMemo<TerminalColors>(() => {
313
+ if (props.colors) return props.colors;
314
+ return {
315
+ background: String(theme.background ?? '#101014'),
316
+ foreground: String(theme.text ?? '#e6e6e6'),
317
+ cursor: String(theme.accent ?? theme.text ?? '#e6e6e6'),
318
+ };
319
+ // The theme object is stable per palette in react-x11, so this recomputes
320
+ // when the desktop switches light/dark and not otherwise.
321
+ }, [props.colors, theme]);
322
+
323
+ const launch = useMemo<Omit<TerminalLaunch, 'windowId'>>(
324
+ () => ({
325
+ command: props.command,
326
+ title: props.title,
327
+ fontFamily: props.fontFamily,
328
+ fontSize: props.fontSize,
329
+ scrollback: props.scrollback,
330
+ colors,
331
+ }),
332
+ [
333
+ props.command,
334
+ props.title,
335
+ props.fontFamily,
336
+ props.fontSize,
337
+ props.scrollback,
338
+ colors,
339
+ ],
340
+ );
341
+
342
+ const key = useMemo(
343
+ () =>
344
+ JSON.stringify([
345
+ backend,
346
+ launch.command ?? null,
347
+ props.cwd ?? null,
348
+ props.env ?? null,
349
+ launch.title ?? null,
350
+ launch.fontFamily ?? null,
351
+ launch.fontSize ?? null,
352
+ launch.scrollback ?? null,
353
+ colors,
354
+ ]),
355
+ [backend, launch, props.cwd, props.env, colors],
356
+ );
357
+
358
+ // Read through a ref so the factory's identity — the restart signal — is
359
+ // the key and nothing else. Without this an `env={{ TERM: 'xterm-256color' }}`
360
+ // literal would restart the terminal on every render.
361
+ const latest = React.useRef({ launch, cwd: props.cwd, env: props.env });
362
+ latest.current = { launch, cwd: props.cwd, env: props.env };
363
+
364
+ const plan = useMemo(
365
+ () =>
366
+ async ({ windowId, host }: PlanContext): Promise<LaunchPlan> => {
367
+ const candidates = backendsFor(backend);
368
+ if (candidates.length === 0) {
369
+ throw new BackendUnavailableError('terminal', [backend]);
370
+ }
371
+ const chosen = await resolveBackend(host, 'terminal', candidates);
372
+ const current = latest.current;
373
+ return {
374
+ command: chosen.path,
375
+ args: chosen.backend.args({ ...current.launch, windowId }),
376
+ cwd: current.cwd,
377
+ env: current.env,
378
+ backend: chosen.backend.name,
379
+ };
380
+ },
381
+ // `key` is the whole dependency: it is the serialization of everything
382
+ // `latest.current` is read for.
383
+ [backend, key],
384
+ );
385
+
386
+ // --- which half of the component is running ------------------------------
387
+ //
388
+ // `'vt'` asks for it outright; `'auto'` arrives here only after the PATH
389
+ // probe found no emulator, which is what makes vt the floor rather than a
390
+ // parallel option. Both halves' hooks run unconditionally — the one that is
391
+ // not in use is simply disabled — because that is what hooks require and
392
+ // because a `<Terminal>` that flips backends must not remount the other one.
393
+ const [vtFallback, setVtFallback] = useState(false);
394
+ const vt = backend === 'vt' || (backend === 'auto' && vtFallback);
395
+ useEffect(() => {
396
+ if (backend !== 'auto') setVtFallback(false);
397
+ }, [backend]);
398
+
399
+ const client = useEmbeddedClient({
400
+ plan,
401
+ host: processes,
402
+ enabled: enabled && !vt,
403
+ stopSignal,
404
+ onExit: props.onExit,
405
+ onError: props.onError,
406
+ });
407
+
408
+ useEffect(() => {
409
+ if (backend === 'auto' && client.status === 'unavailable') {
410
+ setVtFallback(true);
411
+ }
412
+ }, [backend, client.status]);
413
+
414
+ // Not `vt`, because `'auto'` may still land there: what is worth a warning
415
+ // is a backend that was *named* and cannot honour the prop.
416
+ useEffect(() => {
417
+ if (backend !== 'auto' && backend !== 'vt') warnVtOnly(props);
418
+ // Once per backend change, not once per render — the props object is a
419
+ // new identity every time and this is a diagnostic, not a subscription.
420
+ // eslint-disable-next-line react-hooks/exhaustive-deps
421
+ }, [backend]);
422
+
423
+ const title = useForeignTitle(props.onTitleChange);
424
+
425
+ // The vt module is loaded on demand and never at import time: this is the
426
+ // whole tree-shaking bargain — `@xterm/headless` and the renderer are a
427
+ // separate chunk that an XEmbed app never fetches.
428
+ const [vtModule, setVtModule] = useState<VtModule | null>(null);
429
+ const [vtStatus, setVtStatus] = useState<EmbedStatus>('idle');
430
+ const onErrorRef = useRef(props.onError);
431
+ onErrorRef.current = props.onError;
432
+
433
+ useEffect(() => {
434
+ if (!vt || vtModule) return undefined;
435
+ let live = true;
436
+ void import('./vt/index.js')
437
+ .then((mod) => {
438
+ if (live) setVtModule(mod);
439
+ })
440
+ .catch((err: unknown) => {
441
+ if (!live) return;
442
+ setVtStatus('unavailable');
443
+ onErrorRef.current?.(
444
+ err instanceof Error ? err : new Error(String(err)),
445
+ );
446
+ });
447
+ return () => {
448
+ live = false;
449
+ };
450
+ }, [vt, vtModule]);
451
+
452
+ const vtHandle = useRef<VtHandle | null>(null);
453
+ const onVtStatus = useCallback((next: EmbedStatus) => setVtStatus(next), []);
454
+
455
+ React.useImperativeHandle(
456
+ props.ref,
457
+ () => ({
458
+ restart: () => (vt ? vtHandle.current?.restart() : client.restart()),
459
+ signal: (signal?: string) =>
460
+ vt
461
+ ? (vtHandle.current?.signal(signal) ?? false)
462
+ : client.signal(signal),
463
+ write: (data: string) => vtHandle.current?.write(data) ?? false,
464
+ resizeToFit: () => vtHandle.current?.resizeToFit(),
465
+ selection: () => vtHandle.current?.selection() ?? null,
466
+ clearSelection: () => vtHandle.current?.clearSelection(),
467
+ scrollToBottom: () => vtHandle.current?.scrollToBottom(),
468
+ scrollLines: (n: number) => vtHandle.current?.scrollLines(n),
469
+ serialize: () => vtHandle.current?.serialize() ?? null,
470
+ get pid() {
471
+ return vt ? (vtHandle.current?.pid ?? null) : client.pid;
472
+ },
473
+ get windowId() {
474
+ // The vt backend draws into this window; there is no child to name.
475
+ return vt ? null : client.windowId;
476
+ },
477
+ get backend() {
478
+ return vt ? 'vt' : client.backend;
479
+ },
480
+ get status() {
481
+ return vt ? vtStatus : client.status;
482
+ },
483
+ get cols() {
484
+ return vtHandle.current?.cols ?? null;
485
+ },
486
+ get rows() {
487
+ return vtHandle.current?.rows ?? null;
488
+ },
489
+ }),
490
+ [client, vt, vtStatus],
491
+ );
492
+
493
+ const style: Style = {
494
+ flexGrow: 1,
495
+ // What the container shows before the emulator's window covers it, and
496
+ // between an exit and a restart. `<foreign>` reads it off the ordinary
497
+ // `backgroundColor` rather than a prop of its own.
498
+ backgroundColor: colors.background ?? String(theme.background ?? '#101014'),
499
+ };
500
+ const styles: Style[] = [style];
501
+ if (props.style) {
502
+ for (const extra of Array.isArray(props.style)
503
+ ? props.style
504
+ : [props.style]) {
505
+ styles.push(extra);
506
+ }
507
+ }
508
+
509
+ if (vt) {
510
+ // Nothing installed *at all* — no emulator, and no pty module or no
511
+ // `@xterm/headless` either — is still an ordinary state of a healthy
512
+ // machine, and still a status plus a fallback rather than a throw.
513
+ if (vtStatus === 'unavailable' && props.fallback !== undefined) {
514
+ return h(React.Fragment, null, props.fallback);
515
+ }
516
+ if (!vtModule) {
517
+ // The dynamic import is in flight. An empty box in the terminal's own
518
+ // background holds the layout, so the pane does not jump when it lands.
519
+ return hx('box', { style: styles });
520
+ }
521
+ const vtProps: VtTerminalProps = {
522
+ command: props.command,
523
+ cwd: props.cwd,
524
+ env: props.env,
525
+ colors,
526
+ fontFamily: props.fontFamily,
527
+ fontSize: props.fontSize,
528
+ scrollback: props.scrollback,
529
+ cursorStyle: props.cursorStyle,
530
+ cursorBlink: props.cursorBlink,
531
+ bell: props.bell,
532
+ onBell: props.onBell,
533
+ allowClipboardWrite: props.allowClipboardWrite,
534
+ onSelectionChange: props.onSelectionChange,
535
+ pty: props.pty,
536
+ enabled,
537
+ stopSignal,
538
+ focusable: focusable ?? true,
539
+ onExit: props.onExit,
540
+ onTitleChange: props.onTitleChange,
541
+ onError: props.onError,
542
+ onStatus: onVtStatus,
543
+ style: styles,
544
+ ref: vtHandle,
545
+ 'data-testname': props['data-testname'],
546
+ };
547
+ return h(vtModule.VtTerminal, vtProps);
548
+ }
549
+
550
+ // No backend installed is an ordinary state of a perfectly healthy machine,
551
+ // not an error to report — the same call `useDesktopCalendarEvents` makes
552
+ // about a desktop with no Evolution Data Server.
553
+ if (client.status === 'unavailable' && props.fallback !== undefined) {
554
+ return h(React.Fragment, null, props.fallback);
555
+ }
556
+
557
+ const foreign: ForeignElementProps = {
558
+ onReady: client.handleReady,
559
+ onEmbedded: title.onEmbedded,
560
+ onClientGone: title.onClientGone,
561
+ focusable: focusable ?? true,
562
+ 'aria-label': 'Terminal',
563
+ style: styles,
564
+ };
565
+
566
+ // `data-testname` is a runtime convention — react-x11's queries read it off
567
+ // `props` — and its element declarations do not carry it. Attached past the
568
+ // type here so the rest of the object above is still checked against
569
+ // `<foreign>`, which is the whole reason `hx` exists.
570
+ return hx('foreign', {
571
+ ...foreign,
572
+ 'data-testname': props['data-testname'],
573
+ } as ForeignElementProps);
574
+ }