@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,358 @@
1
+ // What changed on screen, derived by diffing the emulator's buffer against a
2
+ // mirror of what the surface currently shows.
3
+ //
4
+ // The renderer deliberately never asks "what did that escape sequence touch?".
5
+ // Escape-level damage is fragile — one CSI can move the whole screen, and a
6
+ // palette change or a selection drag touches cells no sequence named — while
7
+ // a signature compare over the viewport is a few thousand integer compares
8
+ // (microseconds for a normal grid) and catches *everything*. It also makes
9
+ // "eventually correct" structural rather than a discipline: skip as many
10
+ // frames as you like, the next diff repairs the screen, because the mirror
11
+ // describes pixels rather than intentions.
12
+ //
13
+ // Pure: structural emulator types in, plain arrays out. No X, no node, no
14
+ // `@xterm/headless` import — so the whole model is asserted against synthetic
15
+ // grids in `test/terminal-vt.test.ts`.
16
+ import { resolveCell } from './colors.js';
17
+ export function createSnapshot(cols, rows) {
18
+ const n = Math.max(1, cols * rows);
19
+ return {
20
+ cols,
21
+ rows,
22
+ chars: new Array(n).fill(' '),
23
+ width: new Uint8Array(n).fill(1),
24
+ fg: new Int32Array(n),
25
+ bg: new Int32Array(n),
26
+ flags: new Uint16Array(n),
27
+ sig: new Uint32Array(n),
28
+ rowSig: new Uint32Array(Math.max(1, rows)),
29
+ absTop: 0,
30
+ alt: false,
31
+ };
32
+ }
33
+ /** Whether an absolute line/column is inside the selection. */
34
+ export function inSelection(selection, line, col) {
35
+ if (!selection)
36
+ return false;
37
+ const { startLine, startCol, endLine, endCol } = selection;
38
+ if (line < startLine || line > endLine)
39
+ return false;
40
+ if (line === startLine && col < startCol)
41
+ return false;
42
+ if (line === endLine && col >= endCol)
43
+ return false;
44
+ return true;
45
+ }
46
+ /** Selection endpoints, ordered — a drag runs in either direction. */
47
+ export function orderSelection(anchorLine, anchorCol, headLine, headCol) {
48
+ const backwards = headLine < anchorLine || (headLine === anchorLine && headCol < anchorCol);
49
+ return backwards
50
+ ? {
51
+ startLine: headLine,
52
+ startCol: headCol,
53
+ endLine: anchorLine,
54
+ endCol: anchorCol,
55
+ }
56
+ : {
57
+ startLine: anchorLine,
58
+ startCol: anchorCol,
59
+ endLine: headLine,
60
+ endCol: headCol,
61
+ };
62
+ }
63
+ /** FNV-1a, 32 bits. Fast, well-mixed, and the arithmetic stays in int32. */
64
+ function mixIn(hash, value) {
65
+ let h = (hash ^ (value & 0xffff)) >>> 0;
66
+ h = Math.imul(h, 0x01000193) >>> 0;
67
+ h = (h ^ ((value >>> 16) & 0xffff)) >>> 0;
68
+ return Math.imul(h, 0x01000193) >>> 0;
69
+ }
70
+ const FNV_OFFSET = 0x811c9dc5;
71
+ /** Distinct numbers rather than the shape names: two of them start with the
72
+ * same letter, and a signature that cannot tell a bar from a block is a
73
+ * cursor that does not repaint when the style prop changes. */
74
+ const CURSOR_SHAPE_ID = {
75
+ none: 0,
76
+ block: 1,
77
+ underline: 2,
78
+ bar: 3,
79
+ hollow: 4,
80
+ };
81
+ const scratch = { fg: 0, bg: 0, flags: 0 };
82
+ const cellState = {
83
+ selected: false,
84
+ cursor: 'none',
85
+ brightBold: true,
86
+ };
87
+ /**
88
+ * Read the viewport into `out`, resolving every cell to its two paint colours
89
+ * and its signature.
90
+ *
91
+ * The signature is where selection, cursor position, cursor phase and the
92
+ * palette generation enter the model: they are inputs to the hash, so a
93
+ * selection drag or a theme flip repaints exactly the cells whose *pixels*
94
+ * differ, through the same one mechanism as a program writing text. There is
95
+ * no second damage path anywhere in this component.
96
+ */
97
+ export function readViewport(term, out, options, work) {
98
+ const buffer = term.buffer.active;
99
+ const { cols, rows } = out;
100
+ const cell = work ?? buffer.getNullCell();
101
+ const { palette, selection, cursor } = options;
102
+ cellState.brightBold = options.brightBold;
103
+ out.absTop = buffer.viewportY;
104
+ out.alt = buffer.type === 'alternate';
105
+ for (let row = 0; row < rows; row++) {
106
+ const line = buffer.getLine(buffer.viewportY + row);
107
+ const absLine = buffer.viewportY + row;
108
+ // The row hash mixes only its cells. Nothing extra — an input that is
109
+ // *not* visible in a cell (a palette counter, a frame number) would make
110
+ // every row differ every frame, and the scroll detector below reads these
111
+ // signatures to find the band that survived a shift.
112
+ let rowHash = FNV_OFFSET;
113
+ const base = row * cols;
114
+ for (let col = 0; col < cols; col++) {
115
+ const index = base + col;
116
+ const got = line?.getCell(col, cell);
117
+ let chars = ' ';
118
+ let width = 1;
119
+ if (got) {
120
+ chars = got.getChars() || ' ';
121
+ width = got.getWidth();
122
+ }
123
+ cellState.selected = inSelection(selection, absLine, col);
124
+ cellState.cursor =
125
+ cursor.row === row && cursor.col === col ? cursor.shape : 'none';
126
+ if (got) {
127
+ resolveCell(got, palette, cellState, scratch);
128
+ }
129
+ else {
130
+ // Past the end of a short line, or a line the buffer has trimmed:
131
+ // blank in the default colours, which is what the screen shows.
132
+ scratch.fg = palette.foreground;
133
+ scratch.bg = palette.background;
134
+ scratch.flags = 0;
135
+ if (cellState.selected) {
136
+ scratch.bg = palette.selectionBackground;
137
+ scratch.fg = palette.selectionForeground;
138
+ }
139
+ if (cellState.cursor === 'block') {
140
+ scratch.bg = palette.cursor;
141
+ scratch.fg = palette.cursorText;
142
+ }
143
+ }
144
+ out.chars[index] = chars;
145
+ out.width[index] = width;
146
+ out.fg[index] = scratch.fg;
147
+ out.bg[index] = scratch.bg;
148
+ out.flags[index] = scratch.flags;
149
+ let hash = mixIn(FNV_OFFSET, scratch.fg);
150
+ hash = mixIn(hash, scratch.bg);
151
+ hash = mixIn(hash, scratch.flags | (width << 8));
152
+ for (let i = 0; i < chars.length; i++) {
153
+ hash = mixIn(hash, chars.charCodeAt(i));
154
+ }
155
+ // The cursor shape is not a colour, so it has to enter the signature on
156
+ // its own — a bar becoming an underline changes pixels and nothing else.
157
+ if (cellState.cursor !== 'none') {
158
+ hash = mixIn(hash, CURSOR_SHAPE_ID[cellState.cursor] << 24);
159
+ }
160
+ out.sig[index] = hash;
161
+ rowHash = mixIn(rowHash, hash);
162
+ }
163
+ out.rowSig[row] = rowHash;
164
+ }
165
+ return out;
166
+ }
167
+ /**
168
+ * What the surface currently shows, as signatures.
169
+ *
170
+ * Only hashes: the mirror never holds text or colours, because the only
171
+ * question it answers is "does this cell still look like what I drew".
172
+ */
173
+ export class Mirror {
174
+ cols = 0;
175
+ rows = 0;
176
+ absTop = 0;
177
+ alt = false;
178
+ /** No frame has been drawn yet, so nothing on the surface is trustworthy. */
179
+ _valid = false;
180
+ _sig = new Uint32Array(0);
181
+ _rowSig = new Uint32Array(0);
182
+ _force = new Uint8Array(0);
183
+ /** Forget everything: a resize, a font change, a renderer swap. */
184
+ invalidate() {
185
+ this._valid = false;
186
+ }
187
+ resize(cols, rows) {
188
+ if (cols === this.cols && rows === this.rows)
189
+ return;
190
+ this.cols = cols;
191
+ this.rows = rows;
192
+ this._sig = new Uint32Array(Math.max(1, cols * rows));
193
+ this._rowSig = new Uint32Array(Math.max(1, rows));
194
+ this._force = new Uint8Array(Math.max(1, rows));
195
+ this._valid = false;
196
+ }
197
+ /**
198
+ * Diff a snapshot against the mirror and adopt it.
199
+ *
200
+ * The mirror is updated to describe what the caller is *about* to draw, so
201
+ * a caller that does not draw the result has to `invalidate()`.
202
+ */
203
+ diff(snapshot) {
204
+ const { cols, rows } = snapshot;
205
+ if (cols !== this.cols || rows !== this.rows)
206
+ this.resize(cols, rows);
207
+ const spans = [];
208
+ const full = !this._valid || snapshot.alt !== this.alt || cols === 0 || rows === 0;
209
+ let copy = null;
210
+ this._force.fill(full ? 1 : 0);
211
+ if (!full) {
212
+ const shift = detectShift(this, snapshot);
213
+ if (shift !== 0) {
214
+ copy = shiftMirror(this, shift, cols, rows);
215
+ }
216
+ }
217
+ for (let row = 0; row < rows; row++) {
218
+ const base = row * cols;
219
+ if (!this._force[row] && this._rowSig[row] === snapshot.rowSig[row]) {
220
+ continue;
221
+ }
222
+ this._rowSig[row] = snapshot.rowSig[row];
223
+ if (this._force[row]) {
224
+ // Nothing is known about this row's pixels — a fresh mirror, or the
225
+ // strip a scroll exposed. One span, no per-cell comparison.
226
+ for (let col = 0; col < cols; col++) {
227
+ this._sig[base + col] = snapshot.sig[base + col];
228
+ }
229
+ if (cols > 0)
230
+ spans.push({ row, col: 0, count: cols });
231
+ continue;
232
+ }
233
+ // Collect runs of changed cells, bridging gaps of up to two unchanged
234
+ // cells: three draw calls for `a_b_c` cost more than one for `a_b_c`.
235
+ let start = -1;
236
+ let clean = 0;
237
+ for (let col = 0; col < cols; col++) {
238
+ const index = base + col;
239
+ const changed = this._sig[index] !== snapshot.sig[index];
240
+ if (changed) {
241
+ this._sig[index] = snapshot.sig[index];
242
+ if (start < 0)
243
+ start = col;
244
+ clean = 0;
245
+ }
246
+ else if (start >= 0) {
247
+ clean++;
248
+ if (clean > 2) {
249
+ spans.push({ row, col: start, count: col - clean - start + 1 });
250
+ start = -1;
251
+ clean = 0;
252
+ }
253
+ }
254
+ }
255
+ if (start >= 0)
256
+ spans.push({ row, col: start, count: cols - clean - start });
257
+ }
258
+ this.absTop = snapshot.absTop;
259
+ this.alt = snapshot.alt;
260
+ this._valid = true;
261
+ return { copy, spans, full };
262
+ }
263
+ /** For the shift search and the row shuffle — not part of the contract. */
264
+ rowSignature(row) {
265
+ return this._rowSig[row];
266
+ }
267
+ /** @internal */
268
+ _internals() {
269
+ return { sig: this._sig, rowSig: this._rowSig, force: this._force };
270
+ }
271
+ }
272
+ /**
273
+ * How far the screen moved, in rows. Positive means content moved *up* — the
274
+ * shell scrolled, or the user paged down.
275
+ *
276
+ * The buffer's own `viewportY` is the first guess and is exact while the
277
+ * scrollback is still filling. Once it saturates, lines are trimmed off the
278
+ * top and `viewportY` stops moving although the screen very much does — so
279
+ * the fallback is a search over the mirror's row signatures.
280
+ *
281
+ * A wrong guess cannot corrupt anything. The mirror is shifted by exactly the
282
+ * amount the pixels were, so any row that does not then match its snapshot
283
+ * signature is repainted; a bad guess costs one CopyArea and some redraw, and
284
+ * that is the whole exposure.
285
+ */
286
+ function detectShift(mirror, snapshot) {
287
+ const { rows, cols } = snapshot;
288
+ if (rows < 2 || cols === 0)
289
+ return 0;
290
+ let differing = 0;
291
+ for (let row = 0; row < rows; row++) {
292
+ if (mirror.rowSignature(row) !== snapshot.rowSig[row])
293
+ differing++;
294
+ if (differing > 2)
295
+ break;
296
+ }
297
+ // Typing, a spinner, a cursor blink: nothing moved, and the search is the
298
+ // most expensive thing that would happen this frame if we let it run.
299
+ if (differing <= 2)
300
+ return 0;
301
+ const hint = snapshot.absTop - mirror.absTop;
302
+ if (hint !== 0 &&
303
+ Math.abs(hint) < rows &&
304
+ verifyShift(mirror, snapshot, hint)) {
305
+ return hint;
306
+ }
307
+ for (let shift = 1; shift < rows; shift++) {
308
+ if (mirror.rowSignature(shift) === snapshot.rowSig[0]) {
309
+ if (verifyShift(mirror, snapshot, shift))
310
+ return shift;
311
+ }
312
+ if (mirror.rowSignature(0) === snapshot.rowSig[shift]) {
313
+ if (verifyShift(mirror, snapshot, -shift))
314
+ return -shift;
315
+ }
316
+ }
317
+ return 0;
318
+ }
319
+ /** Does most of the band that would survive this shift actually match? */
320
+ function verifyShift(mirror, snapshot, shift) {
321
+ const { rows } = snapshot;
322
+ const survivors = rows - Math.abs(shift);
323
+ if (survivors < 2)
324
+ return false;
325
+ let matched = 0;
326
+ for (let i = 0; i < survivors; i++) {
327
+ const from = shift > 0 ? i + shift : i;
328
+ const to = shift > 0 ? i : i - shift;
329
+ if (mirror.rowSignature(from) === snapshot.rowSig[to])
330
+ matched++;
331
+ }
332
+ // Three quarters: a partial scroll region (vim inserting a line inside a
333
+ // window) still moves most of the band, and the rows it does not move are
334
+ // repainted by the ordinary diff below.
335
+ return matched >= Math.max(2, Math.ceil(survivors * 0.75));
336
+ }
337
+ /** Move the mirror's rows the way the pixels are about to move. */
338
+ function shiftMirror(mirror, shift, cols, rows) {
339
+ const { sig, rowSig, force } = mirror._internals();
340
+ const count = rows - Math.abs(shift);
341
+ if (shift > 0) {
342
+ sig.copyWithin(0, shift * cols, rows * cols);
343
+ rowSig.copyWithin(0, shift, rows);
344
+ for (let row = count; row < rows; row++)
345
+ force[row] = 1;
346
+ }
347
+ else {
348
+ const up = -shift;
349
+ sig.copyWithin(up * cols, 0, count * cols);
350
+ rowSig.copyWithin(up, 0, count);
351
+ for (let row = 0; row < up; row++)
352
+ force[row] = 1;
353
+ }
354
+ return shift > 0
355
+ ? { srcRow: shift, dstRow: 0, count }
356
+ : { srcRow: 0, dstRow: -shift, count };
357
+ }
358
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/terminal/vt/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /** ntk's `Font`, as this module uses it. */
2
+ export interface NtkFont {
3
+ metrics(size: number): {
4
+ ascent: number;
5
+ descent: number;
6
+ lineGap: number;
7
+ lineHeight: number;
8
+ };
9
+ advanceOf(glyphId: number, size: number): number;
10
+ hasGlyph(codepoint: number): boolean;
11
+ /** ntk#254 — the lookup twin of `hasGlyph`, `null` when uncovered. */
12
+ glyphIdFor(codepoint: number): number | null;
13
+ shape(text: string, size: number, opts?: Record<string, unknown>): {
14
+ glyphs: {
15
+ id: number;
16
+ ax: number;
17
+ dx: number;
18
+ dy: number;
19
+ }[];
20
+ };
21
+ }
22
+ /** ntk's font manager, off `app.fonts`. */
23
+ export interface NtkFonts {
24
+ match(family: string, opts?: {
25
+ weight?: number | string;
26
+ style?: string;
27
+ }): NtkFont;
28
+ fallbackFor(codepoint: number, family?: string, opts?: {
29
+ weight?: number | string;
30
+ style?: string;
31
+ }): NtkFont | null;
32
+ }
33
+ /** One glyph run, in the shape `ctx.drawGlyphs` documents. */
34
+ export interface GlyphRun {
35
+ font: NtkFont;
36
+ size: number;
37
+ glyphs: {
38
+ id: number;
39
+ ax: number;
40
+ dx: number;
41
+ dy: number;
42
+ }[];
43
+ }
44
+ export declare const VARIANTS: readonly ['regular', 'bold', 'italic', 'boldItalic'];
45
+ export type Variant = (typeof VARIANTS)[number];
46
+ export interface CellMetrics {
47
+ /** Integers, because the grid, the copy band and the fill rects are. */
48
+ cellWidth: number;
49
+ cellHeight: number;
50
+ /** Baseline offset from the top of the cell. */
51
+ baseline: number;
52
+ /** Where a single underline sits, from the top of the cell. */
53
+ underline: number;
54
+ /** Thickness of underline/strike/overline rules. */
55
+ ruleHeight: number;
56
+ }
57
+ /**
58
+ * The four faces, the cell box, and the glyph cache — everything that depends
59
+ * on the font and nothing that depends on the frame.
60
+ *
61
+ * Rebuilt when the family or the size changes; the node drops its mirror at
62
+ * the same time, because every cell's pixels moved.
63
+ */
64
+ export declare class FontSet {
65
+ readonly family: string;
66
+ readonly size: number;
67
+ readonly metrics: CellMetrics;
68
+ private _fonts;
69
+ private _faces;
70
+ /** `variant \0 chars` → the run to stamp, or null for "nothing to draw". */
71
+ private _glyphs;
72
+ constructor(fonts: NtkFonts, family: string, size: number);
73
+ /**
74
+ * One of the four faces. A family with no bold or no italic resolves to the
75
+ * regular one — ntk does not synthesise either, and a fake oblique is worse
76
+ * than an honest upright (overstrike emulation is a later, separate call).
77
+ */
78
+ face(variant: Variant): NtkFont | null;
79
+ /**
80
+ * The run for one cell's characters, or null when there is nothing to draw.
81
+ *
82
+ * Cached per (variant, chars) — a screen of text is a few hundred distinct
83
+ * entries, and the cache is what keeps a full-screen redraw a matter of
84
+ * lookups rather than cmap searches.
85
+ */
86
+ run(chars: string, variant: Variant): GlyphRun | null;
87
+ private _build;
88
+ private _fallback;
89
+ }
90
+ /** `VARIANT_*` bits from `./colors.ts` to one of the four faces. */
91
+ export declare function variantOf(bold: boolean, italic: boolean): Variant;
92
+ //# sourceMappingURL=fonts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/terminal/vt/fonts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ // Cell metrics and glyphs.
2
+ //
3
+ // A terminal bypasses text shaping by construction: the grid decides where
4
+ // every glyph goes, so there are no ligatures, no kerning and no cluster
5
+ // positioning to compute — which is exactly what makes the fast path fast.
6
+ // ntk's public seam for that is `Font.glyphIdFor(cp)` plus the documented
7
+ // `drawGlyphs` run contract (ntk#254): a cmap lookup and a hand-built run,
8
+ // no shaping anywhere.
9
+ //
10
+ // The one case that does need shaping is a cluster — a base letter with
11
+ // combining marks, a text-presentation emoji with a variation selector — and
12
+ // `Font.shape()` handles those one cluster at a time, cached, on a path a
13
+ // normal screen never touches.
14
+ export const VARIANTS = ['regular', 'bold', 'italic', 'boldItalic'];
15
+ /**
16
+ * The four faces, the cell box, and the glyph cache — everything that depends
17
+ * on the font and nothing that depends on the frame.
18
+ *
19
+ * Rebuilt when the family or the size changes; the node drops its mirror at
20
+ * the same time, because every cell's pixels moved.
21
+ */
22
+ export class FontSet {
23
+ family;
24
+ size;
25
+ metrics;
26
+ _fonts;
27
+ _faces = new Map();
28
+ /** `variant \0 chars` → the run to stamp, or null for "nothing to draw". */
29
+ _glyphs = new Map();
30
+ constructor(fonts, family, size) {
31
+ this._fonts = fonts;
32
+ this.family = family;
33
+ this.size = size;
34
+ const regular = this.face('regular');
35
+ const m = regular?.metrics(size);
36
+ const ascent = m ? m.ascent : size * 0.8;
37
+ const descent = m ? m.descent : size * 0.2;
38
+ const lineHeight = m ? m.lineHeight : size * 1.2;
39
+ // The advance of a digit is the cell width: in a monospace face every
40
+ // glyph agrees, and in a face that is not monospace the digit is still
41
+ // the least surprising answer.
42
+ let advance = size * 0.6;
43
+ if (regular) {
44
+ const gid = regular.glyphIdFor(0x30);
45
+ if (gid !== null)
46
+ advance = regular.advanceOf(gid, size) || advance;
47
+ }
48
+ const cellWidth = Math.max(1, Math.round(advance));
49
+ const cellHeight = Math.max(1, Math.ceil(lineHeight));
50
+ const baseline = Math.min(cellHeight - 1, Math.round(ascent + (cellHeight - ascent - descent) / 2));
51
+ this.metrics = {
52
+ cellWidth,
53
+ cellHeight,
54
+ baseline,
55
+ underline: Math.min(cellHeight - 1, baseline + Math.max(1, Math.round(size / 10))),
56
+ ruleHeight: Math.max(1, Math.round(size / 14)),
57
+ };
58
+ }
59
+ /**
60
+ * One of the four faces. A family with no bold or no italic resolves to the
61
+ * regular one — ntk does not synthesise either, and a fake oblique is worse
62
+ * than an honest upright (overstrike emulation is a later, separate call).
63
+ */
64
+ face(variant) {
65
+ const cached = this._faces.get(variant);
66
+ if (cached !== undefined)
67
+ return cached;
68
+ let font = null;
69
+ try {
70
+ font = this._fonts.match(this.family, {
71
+ weight: variant === 'bold' || variant === 'boldItalic' ? 700 : 400,
72
+ style: variant === 'italic' || variant === 'boldItalic'
73
+ ? 'italic'
74
+ : 'normal',
75
+ });
76
+ }
77
+ catch {
78
+ // no fontconfig, no fonts on the box: the caller draws backgrounds and
79
+ // no glyphs rather than failing to paint at all
80
+ font = null;
81
+ }
82
+ this._faces.set(variant, font);
83
+ return font;
84
+ }
85
+ /**
86
+ * The run for one cell's characters, or null when there is nothing to draw.
87
+ *
88
+ * Cached per (variant, chars) — a screen of text is a few hundred distinct
89
+ * entries, and the cache is what keeps a full-screen redraw a matter of
90
+ * lookups rather than cmap searches.
91
+ */
92
+ run(chars, variant) {
93
+ if (!chars || chars === ' ')
94
+ return null;
95
+ const key = `${variant}\u0000${chars}`;
96
+ const hit = this._glyphs.get(key);
97
+ if (hit !== undefined)
98
+ return hit;
99
+ const run = this._build(chars, variant);
100
+ this._glyphs.set(key, run);
101
+ return run;
102
+ }
103
+ _build(chars, variant) {
104
+ const font = this.face(variant);
105
+ if (!font)
106
+ return null;
107
+ const first = chars.codePointAt(0);
108
+ if (first === undefined)
109
+ return null;
110
+ const single = String.fromCodePoint(first).length === chars.length;
111
+ if (single) {
112
+ let face = font;
113
+ let gid = safeGlyphId(face, first);
114
+ if (gid === null) {
115
+ // Nothing in the terminal's own face covers it — a box-drawing
116
+ // character in a font that has none, a CJK glyph, an emoji. The
117
+ // fallback face is a different glyphset, so it becomes its own run;
118
+ // it still goes out in the same request as everything else.
119
+ const fallback = this._fallback(first, variant);
120
+ if (!fallback)
121
+ return null;
122
+ face = fallback;
123
+ gid = safeGlyphId(face, first);
124
+ if (gid === null)
125
+ return null;
126
+ }
127
+ return {
128
+ font: face,
129
+ size: this.size,
130
+ glyphs: [{ id: gid, ax: this.metrics.cellWidth, dx: 0, dy: 0 }],
131
+ };
132
+ }
133
+ // A cluster: shape it once and keep the result. Rare enough that the
134
+ // shaping cost never reaches a frame budget, and correct where a
135
+ // codepoint-at-a-time walk would stack the marks on top of each other.
136
+ try {
137
+ const shaped = font.shape(chars, this.size);
138
+ if (!shaped.glyphs.length)
139
+ return null;
140
+ return { font, size: this.size, glyphs: shaped.glyphs };
141
+ }
142
+ catch {
143
+ return null;
144
+ }
145
+ }
146
+ _fallback(codepoint, variant) {
147
+ try {
148
+ return this._fonts.fallbackFor(codepoint, this.family, {
149
+ weight: variant === 'bold' || variant === 'boldItalic' ? 700 : 400,
150
+ style: variant === 'italic' || variant === 'boldItalic'
151
+ ? 'italic'
152
+ : 'normal',
153
+ });
154
+ }
155
+ catch {
156
+ return null;
157
+ }
158
+ }
159
+ }
160
+ function safeGlyphId(font, codepoint) {
161
+ try {
162
+ return font.glyphIdFor(codepoint);
163
+ }
164
+ catch {
165
+ return null;
166
+ }
167
+ }
168
+ /** `VARIANT_*` bits from `./colors.ts` to one of the four faces. */
169
+ export function variantOf(bold, italic) {
170
+ if (bold && italic)
171
+ return 'boldItalic';
172
+ if (bold)
173
+ return 'bold';
174
+ if (italic)
175
+ return 'italic';
176
+ return 'regular';
177
+ }
178
+ //# sourceMappingURL=fonts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/terminal/vt/fonts.ts"],"names":[],"mappings":"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"}