@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,555 @@
1
+ // Cells to pixels, through two implementations of one interface.
2
+ //
3
+ // **`RetainedRenderer`** keeps an offscreen `Surface` holding the whole grid:
4
+ // the frame's changed cells are drawn into it, a scroll is one server-side
5
+ // `Surface.copyWithin` (ntk#252) instead of a screenful of glyph work, and
6
+ // the node's paint is a single `drawImage` composite of the band the window
7
+ // asked for. Everything it needs is public API — the escape hatches this
8
+ // component was designed around (a raw `X.CopyArea` on a pixmap, a private
9
+ // `Render.FillRectangles`, an undocumented glyph-run shape) were promoted
10
+ // upstream as ntk#252/#253/#254 before any of this shipped, so there is no
11
+ // hatch left to confine.
12
+ //
13
+ // **`DirectRenderer`** is the same cell decisions with no retained buffer:
14
+ // it draws into the paint context and answers `false` to `copyRows`, so the
15
+ // caller repaints what a scroll moved. Slower on scroll, identical pixels —
16
+ // and it is the correctness reference the tests compare the retained path
17
+ // against, plus what runs where a `Surface` cannot be created.
18
+ //
19
+ // Both batch. A frame's background rectangles go out as one
20
+ // `ctx.fillRects` per colour (ntk#253 — one `Render.FillRectangles` request
21
+ // instead of one composite per rectangle), and its glyphs as one
22
+ // `ctx.drawGlyphs` per colour (one `CompositeGlyphs` covering every run in
23
+ // the call). That is what keeps "the terminal scrolled" at a handful of
24
+ // requests rather than a few thousand.
25
+ import type { CellMetrics, GlyphRun } from './fonts.js';
26
+
27
+ /** What `ctx.drawGlyphs` takes: a run and where its baseline starts. */
28
+ export interface PositionedRun {
29
+ run: GlyphRun;
30
+ x: number;
31
+ y: number;
32
+ }
33
+
34
+ /** The slice of ntk's 2d context the renderers draw through. */
35
+ export interface CellContext {
36
+ fillStyle: unknown;
37
+ fillRect(x: number, y: number, w: number, h: number): void;
38
+ fillRects?(rects: number[]): void;
39
+ drawGlyphs?(op: number, src: unknown, positioned: PositionedRun[]): void;
40
+ createSolidPicture?(r: number, g: number, b: number, a: number): unknown;
41
+ drawImage?(
42
+ image: unknown,
43
+ sx: number,
44
+ sy: number,
45
+ sw: number,
46
+ sh: number,
47
+ dx: number,
48
+ dy: number,
49
+ dw: number,
50
+ dh: number,
51
+ ): void;
52
+ Render?: { PictOp?: { Over?: number; Src?: number } };
53
+ destroy?(): void;
54
+ }
55
+
56
+ /** ntk's `Surface`, as the retained renderer uses it. */
57
+ interface SurfaceLike {
58
+ width: number;
59
+ height: number;
60
+ getContext(name: string): CellContext;
61
+ /** ntk#252 — overlapping self-copy inside the pixmap. */
62
+ copyWithin(
63
+ src: { x: number; y: number; width: number; height: number },
64
+ dx: number,
65
+ dy: number,
66
+ ): boolean;
67
+ destroy(): void;
68
+ }
69
+
70
+ export type SurfaceCtor = new (
71
+ app: unknown,
72
+ options: { width: number; height: number; format?: string },
73
+ ) => SurfaceLike;
74
+
75
+ export type DecorationKind =
76
+ | 'underline'
77
+ | 'strike'
78
+ | 'overline'
79
+ /** The unfocused cursor's outline. */
80
+ | 'box'
81
+ /** The `bar` cursor: a rule down the left edge of the cell. */
82
+ | 'bar'
83
+ /** The `underline` cursor: a rule along the bottom of the cell, which is
84
+ * lower and thicker than the SGR 4 underline. */
85
+ | 'cursorUnderline';
86
+
87
+ export interface FrameInfo {
88
+ /** Where the grid's top-left corner is, in window coordinates. */
89
+ originX: number;
90
+ originY: number;
91
+ cols: number;
92
+ rows: number;
93
+ metrics: CellMetrics;
94
+ }
95
+
96
+ /** What a frame cost, for the draw-op budget assertions in the tests. */
97
+ export interface RendererStats {
98
+ /** `fillRects`/`fillRect` requests — one per colour, not one per cell. */
99
+ fillRequests: number;
100
+ /** `drawGlyphs` calls — one per colour. */
101
+ glyphRequests: number;
102
+ /** Server-side scroll copies. */
103
+ copies: number;
104
+ /** Surface → window composites. */
105
+ blits: number;
106
+ cellsFilled: number;
107
+ glyphsDrawn: number;
108
+ }
109
+
110
+ export interface RendererOps {
111
+ readonly kind: 'retained' | 'direct';
112
+ /**
113
+ * Grid geometry for the frames to come. `false` means the buffer was
114
+ * reallocated and holds nothing — the caller drops its mirror.
115
+ */
116
+ ensure(cols: number, rows: number, metrics: CellMetrics): boolean;
117
+ begin(ctx: CellContext, frame: FrameInfo): void;
118
+ /** The scroll fast path. `false` when this renderer has no buffer to move
119
+ * pixels inside, and the caller repaints the band instead. */
120
+ copyRows(srcRow: number, dstRow: number, count: number): boolean;
121
+ fillCells(row: number, col: number, count: number, rgb: number): void;
122
+ drawRun(row: number, col: number, run: GlyphRun, rgb: number): void;
123
+ decorate(
124
+ row: number,
125
+ col: number,
126
+ count: number,
127
+ kind: DecorationKind,
128
+ rgb: number,
129
+ ): void;
130
+ /** Flush the frame. */
131
+ end(): void;
132
+ /** What the frame being drawn has cost so far. Reset by `begin`. */
133
+ readonly stats: RendererStats;
134
+ /** The same counters over this renderer's whole life. A frame's cost is
135
+ * the thing to assert a budget against; a total is the thing to assert a
136
+ * fast path was *taken*, since the next frame would have reset it. */
137
+ readonly totals: RendererStats;
138
+ destroy(): void;
139
+ }
140
+
141
+ function zeroStats(): RendererStats {
142
+ return {
143
+ fillRequests: 0,
144
+ glyphRequests: 0,
145
+ copies: 0,
146
+ blits: 0,
147
+ cellsFilled: 0,
148
+ glyphsDrawn: 0,
149
+ };
150
+ }
151
+
152
+ function css(rgb: number): string {
153
+ return `#${(rgb & 0xffffff).toString(16).padStart(6, '0')}`;
154
+ }
155
+
156
+ /**
157
+ * The batching half, shared by both renderers.
158
+ *
159
+ * Order within a frame is fixed and is the whole of the "two colours per
160
+ * cell" model: backgrounds first, then glyphs over them, then decorations
161
+ * (which are foreground-coloured rules) over those.
162
+ */
163
+ abstract class BatchingRenderer implements RendererOps {
164
+ abstract readonly kind: 'retained' | 'direct';
165
+ protected frame: FrameInfo | null = null;
166
+ protected ctx: CellContext | null = null;
167
+ /** Where this renderer's coordinates sit relative to the paint context. */
168
+ protected offsetX = 0;
169
+ protected offsetY = 0;
170
+ private _fills = new Map<number, number[]>();
171
+ private _decorations = new Map<number, number[]>();
172
+ private _runs = new Map<number, PositionedRun[]>();
173
+ readonly stats: RendererStats = zeroStats();
174
+ readonly totals: RendererStats = zeroStats();
175
+
176
+ /** Every counter goes through here, so a total can never drift from the
177
+ * per-frame number it was added to. */
178
+ protected count(key: keyof RendererStats, by = 1): void {
179
+ this.stats[key] += by;
180
+ this.totals[key] += by;
181
+ }
182
+
183
+ abstract ensure(cols: number, rows: number, metrics: CellMetrics): boolean;
184
+ abstract copyRows(srcRow: number, dstRow: number, count: number): boolean;
185
+ /** Where the batched draws land — the surface, or the window. */
186
+ protected abstract target(): CellContext | null;
187
+ /** After the batches are flushed: the retained renderer composites. */
188
+ protected abstract present(): void;
189
+ abstract destroy(): void;
190
+
191
+ begin(ctx: CellContext, frame: FrameInfo): void {
192
+ this.ctx = ctx;
193
+ this.frame = frame;
194
+ this._fills.clear();
195
+ this._decorations.clear();
196
+ this._runs.clear();
197
+ this.stats.fillRequests = 0;
198
+ this.stats.glyphRequests = 0;
199
+ this.stats.copies = 0;
200
+ this.stats.blits = 0;
201
+ this.stats.cellsFilled = 0;
202
+ this.stats.glyphsDrawn = 0;
203
+ }
204
+
205
+ fillCells(row: number, col: number, count: number, rgb: number): void {
206
+ const frame = this.frame;
207
+ if (!frame || count <= 0) return;
208
+ const { cellWidth, cellHeight } = frame.metrics;
209
+ push(this._fills, rgb, [
210
+ this.offsetX + col * cellWidth,
211
+ this.offsetY + row * cellHeight,
212
+ count * cellWidth,
213
+ cellHeight,
214
+ ]);
215
+ this.count('cellsFilled', count);
216
+ }
217
+
218
+ drawRun(row: number, col: number, run: GlyphRun, rgb: number): void {
219
+ const frame = this.frame;
220
+ if (!frame) return;
221
+ const { cellWidth, cellHeight, baseline } = frame.metrics;
222
+ let list = this._runs.get(rgb);
223
+ if (!list) {
224
+ list = [];
225
+ this._runs.set(rgb, list);
226
+ }
227
+ // Grid-computed, per cell: a fractional font advance can never accumulate
228
+ // into drift, because nothing ever advances a pen across the row.
229
+ list.push({
230
+ run,
231
+ x: this.offsetX + col * cellWidth,
232
+ y: this.offsetY + row * cellHeight + baseline,
233
+ });
234
+ this.count('glyphsDrawn', run.glyphs.length);
235
+ }
236
+
237
+ decorate(
238
+ row: number,
239
+ col: number,
240
+ count: number,
241
+ kind: DecorationKind,
242
+ rgb: number,
243
+ ): void {
244
+ const frame = this.frame;
245
+ if (!frame || count <= 0) return;
246
+ const { cellWidth, cellHeight, baseline, underline, ruleHeight } =
247
+ frame.metrics;
248
+ const x = this.offsetX + col * cellWidth;
249
+ const y = this.offsetY + row * cellHeight;
250
+ const w = count * cellWidth;
251
+ switch (kind) {
252
+ case 'underline':
253
+ push(this._decorations, rgb, [x, y + underline, w, ruleHeight]);
254
+ break;
255
+ case 'strike':
256
+ push(this._decorations, rgb, [
257
+ x,
258
+ y + Math.round(baseline - baseline / 3),
259
+ w,
260
+ ruleHeight,
261
+ ]);
262
+ break;
263
+ case 'overline':
264
+ push(this._decorations, rgb, [x, y, w, ruleHeight]);
265
+ break;
266
+ case 'bar':
267
+ push(this._decorations, rgb, [
268
+ x,
269
+ y,
270
+ Math.max(1, ruleHeight * 2),
271
+ cellHeight,
272
+ ]);
273
+ break;
274
+ case 'cursorUnderline':
275
+ push(this._decorations, rgb, [
276
+ x,
277
+ y + cellHeight - Math.max(2, ruleHeight * 2),
278
+ w,
279
+ Math.max(2, ruleHeight * 2),
280
+ ]);
281
+ break;
282
+ case 'box': {
283
+ // The unfocused cursor: an outline, so the cell keeps its own
284
+ // colours and the character under it stays readable.
285
+ const t = ruleHeight;
286
+ push(this._decorations, rgb, [x, y, w, t]);
287
+ push(this._decorations, rgb, [x, y + cellHeight - t, w, t]);
288
+ push(this._decorations, rgb, [x, y, t, cellHeight]);
289
+ push(this._decorations, rgb, [x + w - t, y, t, cellHeight]);
290
+ break;
291
+ }
292
+ }
293
+ }
294
+
295
+ end(): void {
296
+ const ctx = this.target();
297
+ if (ctx) {
298
+ this._flushRects(ctx, this._fills);
299
+ this._flushGlyphs(ctx);
300
+ this._flushRects(ctx, this._decorations);
301
+ }
302
+ this.present();
303
+ this._fills.clear();
304
+ this._decorations.clear();
305
+ this._runs.clear();
306
+ }
307
+
308
+ private _flushRects(ctx: CellContext, batches: Map<number, number[]>): void {
309
+ for (const [rgb, rects] of batches) {
310
+ if (!rects.length) continue;
311
+ ctx.fillStyle = css(rgb);
312
+ if (typeof ctx.fillRects === 'function') {
313
+ // One `Render.FillRectangles` for the whole colour (ntk#253), where
314
+ // a `fillRect` loop is one composite per rectangle.
315
+ ctx.fillRects(rects);
316
+ } else {
317
+ for (let i = 0; i < rects.length; i += 4) {
318
+ ctx.fillRect(rects[i], rects[i + 1], rects[i + 2], rects[i + 3]);
319
+ }
320
+ }
321
+ this.count('fillRequests');
322
+ }
323
+ }
324
+
325
+ private _flushGlyphs(ctx: CellContext): void {
326
+ if (!this._runs.size) return;
327
+ if (
328
+ typeof ctx.drawGlyphs !== 'function' ||
329
+ typeof ctx.createSolidPicture !== 'function'
330
+ ) {
331
+ return;
332
+ }
333
+ const op = ctx.Render?.PictOp?.Over ?? 3;
334
+ for (const [rgb, runs] of this._runs) {
335
+ if (!runs.length) continue;
336
+ // Premultiplied 0..1, which is what XRender solids are. Opaque, so the
337
+ // premultiplication is the identity.
338
+ const src = ctx.createSolidPicture(
339
+ ((rgb >> 16) & 0xff) / 255,
340
+ ((rgb >> 8) & 0xff) / 255,
341
+ (rgb & 0xff) / 255,
342
+ 1,
343
+ );
344
+ ctx.drawGlyphs(op, src, runs);
345
+ this.count('glyphRequests');
346
+ }
347
+ }
348
+ }
349
+
350
+ function push(
351
+ batches: Map<number, number[]>,
352
+ key: number,
353
+ rect: number[],
354
+ ): void {
355
+ const list = batches.get(key);
356
+ if (list) list.push(rect[0], rect[1], rect[2], rect[3]);
357
+ else batches.set(key, rect.slice());
358
+ }
359
+
360
+ /**
361
+ * The default: a retained `Surface` the size of the grid.
362
+ *
363
+ * Why a surface of our own rather than `Window#scrollRegion` on the window's
364
+ * backing store: the window's backing store is where react-x11 paints every
365
+ * *other* node too, so scrolling it would make our correctness depend on
366
+ * nothing overlapping the band mid-frame and on core's damage bookkeeping not
367
+ * repainting our rect after we moved it. The surface decouples us from both
368
+ * for the price of one composite per frame.
369
+ */
370
+ export class RetainedRenderer extends BatchingRenderer {
371
+ readonly kind = 'retained' as const;
372
+ private _app: unknown;
373
+ private _Surface: SurfaceCtor;
374
+ private _surface: SurfaceLike | null = null;
375
+ private _surfaceCtx: CellContext | null = null;
376
+ private _cols = 0;
377
+ private _metrics: CellMetrics | null = null;
378
+
379
+ constructor(app: unknown, Surface: SurfaceCtor) {
380
+ super();
381
+ this._app = app;
382
+ this._Surface = Surface;
383
+ }
384
+
385
+ ensure(cols: number, rows: number, metrics: CellMetrics): boolean {
386
+ const width = Math.max(1, cols * metrics.cellWidth);
387
+ const height = Math.max(1, rows * metrics.cellHeight);
388
+ const fits =
389
+ this._surface !== null &&
390
+ this._surface.width >= width &&
391
+ this._surface.height >= height &&
392
+ this._metrics?.cellWidth === metrics.cellWidth &&
393
+ this._metrics?.cellHeight === metrics.cellHeight;
394
+ this._cols = cols;
395
+ this._metrics = metrics;
396
+ if (fits) return true;
397
+ this._release();
398
+ // Grown with headroom, the way ntk grows a window's backing store: a
399
+ // drag-resize is a stream of sizes, and reallocating on each one throws
400
+ // the whole screen away every frame of the drag.
401
+ const alloc = (n: number): number => Math.ceil((n * 5) / 4);
402
+ try {
403
+ this._surface = new this._Surface(this._app, {
404
+ width: alloc(width),
405
+ height: alloc(height),
406
+ format: 'argb32',
407
+ });
408
+ // One context for the surface's whole life: a context is much heavier
409
+ // than it looks (a GC and a Picture), and `Surface#render` would build
410
+ // and destroy one per frame.
411
+ this._surfaceCtx = this._surface.getContext('2d');
412
+ } catch {
413
+ this._surface = null;
414
+ this._surfaceCtx = null;
415
+ }
416
+ return false;
417
+ }
418
+
419
+ protected target(): CellContext | null {
420
+ return this._surfaceCtx;
421
+ }
422
+
423
+ copyRows(srcRow: number, dstRow: number, count: number): boolean {
424
+ const surface = this._surface;
425
+ const metrics = this._metrics;
426
+ if (!surface || !metrics || count <= 0 || srcRow === dstRow) return false;
427
+ const h = metrics.cellHeight;
428
+ const ok = surface.copyWithin(
429
+ {
430
+ x: 0,
431
+ y: srcRow * h,
432
+ width: this._cols * metrics.cellWidth,
433
+ height: count * h,
434
+ },
435
+ 0,
436
+ (dstRow - srcRow) * h,
437
+ );
438
+ if (ok) this.count('copies');
439
+ return ok;
440
+ }
441
+
442
+ protected present(): void {
443
+ const ctx = this.ctx;
444
+ const frame = this.frame;
445
+ const surface = this._surface;
446
+ if (!ctx || !frame || !surface || typeof ctx.drawImage !== 'function') {
447
+ return;
448
+ }
449
+ const width = frame.cols * frame.metrics.cellWidth;
450
+ const height = frame.rows * frame.metrics.cellHeight;
451
+ if (width <= 0 || height <= 0) return;
452
+ // The whole grid, one composite. It is the whole grid rather than the
453
+ // frame's dirty bands because `Node.paint` has just filled this node's
454
+ // background across everything the damage clip covers, and the damage we
455
+ // claimed is the grid rect — the diff decides what is *rendered*, which
456
+ // is where the cost is, and the blit is one request either way.
457
+ ctx.drawImage(
458
+ surface,
459
+ 0,
460
+ 0,
461
+ width,
462
+ height,
463
+ frame.originX,
464
+ frame.originY,
465
+ width,
466
+ height,
467
+ );
468
+ this.count('blits');
469
+ }
470
+
471
+ private _release(): void {
472
+ this._surfaceCtx?.destroy?.();
473
+ this._surface?.destroy();
474
+ this._surfaceCtx = null;
475
+ this._surface = null;
476
+ }
477
+
478
+ destroy(): void {
479
+ this._release();
480
+ }
481
+
482
+ /** Whether the surface actually exists — the probe the factory reads. */
483
+ get usable(): boolean {
484
+ return this._surface !== null;
485
+ }
486
+ }
487
+
488
+ /**
489
+ * No buffer: draw the frame straight into the paint context.
490
+ *
491
+ * `copyRows` refuses, so the caller repaints what moved. That is not a
492
+ * degradation to apologise for — `Node.paint` fills this node's background
493
+ * before we draw, so there are no old pixels to shift in the first place.
494
+ */
495
+ export class DirectRenderer extends BatchingRenderer {
496
+ readonly kind = 'direct' as const;
497
+
498
+ ensure(): boolean {
499
+ // Nothing is retained between frames, so every frame is a fresh one and
500
+ // the caller has to treat its mirror as empty.
501
+ return false;
502
+ }
503
+
504
+ override begin(ctx: CellContext, frame: FrameInfo): void {
505
+ super.begin(ctx, frame);
506
+ this.offsetX = frame.originX;
507
+ this.offsetY = frame.originY;
508
+ }
509
+
510
+ protected target(): CellContext | null {
511
+ return this.ctx;
512
+ }
513
+
514
+ copyRows(): boolean {
515
+ return false;
516
+ }
517
+
518
+ protected present(): void {
519
+ // already in the window
520
+ }
521
+
522
+ destroy(): void {
523
+ // nothing owned
524
+ }
525
+ }
526
+
527
+ /**
528
+ * Pick a renderer for this context, or `null` when there is nothing to draw
529
+ * with — the mock backend's context has no pixel API at all, and a component
530
+ * that throws there cannot be tested headlessly (AGENTS.md).
531
+ */
532
+ const PROBE_METRICS: CellMetrics = {
533
+ cellWidth: 1,
534
+ cellHeight: 1,
535
+ baseline: 1,
536
+ underline: 1,
537
+ ruleHeight: 1,
538
+ };
539
+
540
+ export function createRenderer(
541
+ app: unknown,
542
+ ctx: CellContext,
543
+ Surface: SurfaceCtor | null,
544
+ ): RendererOps | null {
545
+ if (typeof ctx.fillRect !== 'function') return null;
546
+ if (Surface && typeof ctx.drawImage === 'function') {
547
+ const retained = new RetainedRenderer(app, Surface);
548
+ // Probing by construction rather than by feature-sniffing the server:
549
+ // whether a pixmap can be made on this connection is the actual question.
550
+ retained.ensure(1, 1, PROBE_METRICS);
551
+ if (retained.usable) return retained;
552
+ retained.destroy();
553
+ }
554
+ return new DirectRenderer();
555
+ }
@@ -0,0 +1,31 @@
1
+ // Timers, reached through `globalThis` — `types: []` in the build means a
2
+ // runtime-provided global is typed structurally rather than inherited from
3
+ // `@types/node` (AGENTS.md, "Two tsconfigs").
4
+ //
5
+ // A copy of `../../embed/timers.ts` with the interval half added, and
6
+ // deliberately a copy for the reason that file gives: a module reaching into
7
+ // another module's private file makes the two one unit for a bundler. Thirty
8
+ // lines is the cheaper side of the trade.
9
+ interface TimerGlobals {
10
+ setInterval?(fn: () => void, ms: number): unknown;
11
+ clearInterval?(id: unknown): void;
12
+ queueMicrotask?(fn: () => void): void;
13
+ }
14
+
15
+ const g = globalThis as TimerGlobals;
16
+
17
+ export type TimerId = unknown;
18
+
19
+ export function startInterval(fn: () => void, ms: number): TimerId {
20
+ return g.setInterval?.(fn, ms) ?? null;
21
+ }
22
+
23
+ export function stopInterval(id: TimerId): void {
24
+ if (id != null) g.clearInterval?.(id);
25
+ }
26
+
27
+ /** Off the current stack — how paint tells React that the grid resized. */
28
+ export function microtask(fn: () => void): void {
29
+ if (g.queueMicrotask) g.queueMicrotask(fn);
30
+ else void Promise.resolve().then(fn);
31
+ }