@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,87 @@
1
+ // The bit of react-x11 that `<Tree>` needs and react-x11 does not export.
2
+ //
3
+ // Everything else the widget stands on is public — `useTheme`,
4
+ // `useDirection`, `createStyles`, `<Icon>`, the `XK_*` keysyms, the host
5
+ // elements. Type-ahead is not: `src/components/typeahead.js` is shared
6
+ // between core's own `Select` and its menus and is not on the exports map.
7
+ // So it is vendored, the way `../calendar/internal.ts` vendors its three;
8
+ // it is small and pure, and if core ever exports it, delete this and import
9
+ // it instead.
10
+ //
11
+ // Matching core's behaviour matters more than the code being ours: a user who
12
+ // has learnt that typing "sr" in a `Select` jumps to "src" expects the same
13
+ // two keys to do the same thing in a tree, including the two rules that are
14
+ // easy to leave out — a growing query searches from where you are, and a
15
+ // repeated letter cycles rather than sticking.
16
+
17
+ import { useCallback, useRef } from 'react';
18
+ import type { KeyboardEvent } from 'react-x11';
19
+
20
+ /** How long a query stays open. Core's number, and it is a habit rather than
21
+ * a preference — the same pause has to end a query everywhere. */
22
+ export const TYPE_AHEAD_TIMEOUT = 700;
23
+
24
+ /**
25
+ * Type-ahead: typing letters jumps to the entry whose label starts with them.
26
+ * Returns the matching index, or -1.
27
+ */
28
+ export function useTypeAhead(
29
+ timeout: number = TYPE_AHEAD_TIMEOUT,
30
+ ): <T>(
31
+ char: string,
32
+ items: readonly T[],
33
+ current: number | null,
34
+ labelOf: (item: T) => unknown,
35
+ selectable?: (item: T) => boolean,
36
+ ) => number {
37
+ const state = useRef({ text: '', at: 0 });
38
+ return useCallback(
39
+ <T>(
40
+ char: string,
41
+ items: readonly T[],
42
+ current: number | null,
43
+ labelOf: (item: T) => unknown,
44
+ selectable?: (item: T) => boolean,
45
+ ): number => {
46
+ if (!char || char.length !== 1) return -1;
47
+ const now = Date.now();
48
+ const s = state.current;
49
+ s.text = now - s.at > timeout ? char : s.text + char;
50
+ s.at = now;
51
+
52
+ const query = s.text.toLowerCase();
53
+ // "ccc" cycles the entries starting with c rather than refining a
54
+ // prefix nothing has.
55
+ const cycling = query.length > 1 && /^(.)\1+$/.test(query);
56
+ const needle = cycling ? query[0] : query;
57
+ // A growing query keeps you on the row it still matches; a fresh letter
58
+ // starts from the one after it.
59
+ const from =
60
+ cycling || query.length === 1 ? (current ?? -1) + 1 : (current ?? 0);
61
+
62
+ const n = items.length;
63
+ for (let k = 0; k < n; k++) {
64
+ const i = (((from + k) % n) + n) % n;
65
+ const item = items[i];
66
+ if (selectable && !selectable(item)) continue;
67
+ const label = String(labelOf(item) ?? '').toLowerCase();
68
+ if (label.startsWith(needle)) return i;
69
+ }
70
+ return -1;
71
+ },
72
+ [timeout],
73
+ );
74
+ }
75
+
76
+ /**
77
+ * A printable character usable for type-ahead, or null.
78
+ *
79
+ * Space is excluded on purpose: it activates the focused row everywhere in
80
+ * this widget set, and a tree that jumped to an entry beginning with a space
81
+ * instead would be the one control that disagreed.
82
+ */
83
+ export function typeAheadChar(ev: KeyboardEvent): string | null {
84
+ return ev.key && ev.key.length === 1 && (ev.codepoint ?? 0) > 32
85
+ ? ev.key
86
+ : null;
87
+ }
@@ -0,0 +1,334 @@
1
+ // The row model: what a tree of items looks like once it has been opened.
2
+ //
3
+ // Everything in this file is pure, and deliberately so. A tree's real
4
+ // complexity is not the painting — it is "which rows are on screen, in what
5
+ // order, at what depth, and which of them is the last of its siblings", and
6
+ // every one of those questions is answerable without a display. The component
7
+ // then only has to draw the answer.
8
+ //
9
+ // The flattening is also what makes virtualization possible at all: a
10
+ // window into a list is arithmetic, a window into a recursive structure is
11
+ // not. `<Tree layout="nested">` renders the same rows nested again (see
12
+ // `groupRows`), so the two layouts cannot disagree about the tree they are
13
+ // showing.
14
+
15
+ import type { ReactNode } from 'react';
16
+
17
+ /** What an item is keyed by. Numbers are allowed because a row often comes
18
+ * from a database and stringifying an id is a chance to lose one. */
19
+ export type TreeItemId = string | number;
20
+
21
+ /**
22
+ * The item shape `<Tree>` reads with no accessors configured.
23
+ *
24
+ * `children` being an array — **even an empty one** — is what makes an item a
25
+ * branch, which is how a directory shows a twisty before anything has read
26
+ * it. An item whose children are not known yet says so with `branch: true`
27
+ * and no `children` at all; see {@link TreeAccessors.isBranch}.
28
+ */
29
+ export interface TreeItem {
30
+ id: TreeItemId;
31
+ /** A string or a number is wrapped in a `<text>`; anything else is
32
+ * rendered as it stands. */
33
+ label?: ReactNode;
34
+ children?: readonly TreeItem[];
35
+ /** A branch whose children have not been loaded. Ignored when `children`
36
+ * is an array, which already answers the question. */
37
+ branch?: boolean;
38
+ disabled?: boolean;
39
+ }
40
+
41
+ /**
42
+ * How to read the app's own node type.
43
+ *
44
+ * The default answers describe {@link TreeItem}, so a tree of
45
+ * `{ id, label, children }` needs none of this. Anything else — a
46
+ * `{ path, entries }` from a file listing, an AST, a normalized store keyed by
47
+ * id — hands over the four or five functions instead of copying its data into
48
+ * a shape this component preferred.
49
+ *
50
+ * **Define them outside the component, or memoize them.** The flattening is
51
+ * keyed on their identity, because an `isBranch` that reads state has to be
52
+ * able to change what the tree shows; a fresh arrow per render therefore
53
+ * re-flattens the tree per render. On a small tree that costs nothing and on
54
+ * a large one it is the whole cost, which is exactly backwards from what an
55
+ * app would guess. `examples/tree.tsx` puts them in a `useMemo`.
56
+ */
57
+ export interface TreeAccessors<T> {
58
+ /** Defaults to `item.id`. */
59
+ getId?: (item: T) => TreeItemId;
60
+ /** Defaults to `item.label`, and then to the id, so a tree of bare ids
61
+ * still shows something. */
62
+ getLabel?: (item: T) => ReactNode;
63
+ /**
64
+ * The text type-ahead matches on. Defaults to the label when the label is
65
+ * a string, and to `''` when it is not.
66
+ *
67
+ * The seam exists because a rendered label is the one thing a component
68
+ * cannot read back: a row drawn as an icon plus a `<text>` is a React
69
+ * element, `String()` of it is `[object Object]`, and a tree whose keyboard
70
+ * search silently stopped working is a bug nobody reports.
71
+ */
72
+ getText?: (item: T) => string;
73
+ /** Defaults to `item.children`. `undefined` means "not loaded", which is
74
+ * not the same as `[]` — see {@link isBranch}. */
75
+ getChildren?: (item: T) => readonly T[] | undefined;
76
+ /**
77
+ * Is this a branch at all? Defaults to "its children are an array, or it
78
+ * said `branch: true`".
79
+ *
80
+ * The distinction matters for lazy loading: a directory nobody has read is
81
+ * a branch with no children, and it must draw a twisty anyway or there is
82
+ * nothing to click to find out what is in it.
83
+ */
84
+ isBranch?: (item: T) => boolean;
85
+ /** Defaults to `item.disabled`. A disabled row is skipped by the keyboard
86
+ * and does not select, but is still shown and still opens. */
87
+ isDisabled?: (item: T) => boolean;
88
+ }
89
+
90
+ /** The accessors with every default filled in — what the component and the
91
+ * functions below actually run on. */
92
+ export interface ResolvedAccessors<T> {
93
+ getId: (item: T) => TreeItemId;
94
+ getLabel: (item: T) => ReactNode;
95
+ getText: (item: T) => string;
96
+ getChildren: (item: T) => readonly T[] | undefined;
97
+ isBranch: (item: T) => boolean;
98
+ isDisabled: (item: T) => boolean;
99
+ }
100
+
101
+ /** The `TreeItem` fields, read off an item of unknown type. */
102
+ type DefaultItem = Partial<TreeItem>;
103
+
104
+ export function resolveAccessors<T>(
105
+ accessors: TreeAccessors<T> | undefined,
106
+ ): ResolvedAccessors<T> {
107
+ const getId =
108
+ accessors?.getId ?? ((item: T) => (item as DefaultItem).id as TreeItemId);
109
+ const getChildren =
110
+ accessors?.getChildren ??
111
+ ((item: T) => (item as DefaultItem).children as readonly T[] | undefined);
112
+ const getLabel =
113
+ accessors?.getLabel ??
114
+ ((item: T) => (item as DefaultItem).label ?? getId(item));
115
+ return {
116
+ getId,
117
+ getLabel,
118
+ getText:
119
+ accessors?.getText ??
120
+ ((item: T) => {
121
+ const label = getLabel(item);
122
+ return typeof label === 'string' || typeof label === 'number'
123
+ ? String(label)
124
+ : '';
125
+ }),
126
+ getChildren,
127
+ isBranch:
128
+ accessors?.isBranch ??
129
+ ((item: T) =>
130
+ Array.isArray(getChildren(item)) ||
131
+ (item as DefaultItem).branch === true),
132
+ isDisabled:
133
+ accessors?.isDisabled ??
134
+ ((item: T) => (item as DefaultItem).disabled === true),
135
+ };
136
+ }
137
+
138
+ /**
139
+ * One visible row.
140
+ *
141
+ * `parent` is the row object rather than the item, so walking to an ancestor
142
+ * — which is what Left does, and what the branch guides read — costs no
143
+ * lookup. That makes the array cyclic in the graph sense; nothing serializes
144
+ * it, and the alternative (an index into the same array) is the same cycle
145
+ * written less clearly.
146
+ */
147
+ export interface TreeRow<T> {
148
+ item: T;
149
+ id: TreeItemId;
150
+ /** 0 for a root. */
151
+ depth: number;
152
+ /** Can be opened — including a branch whose children are not loaded. */
153
+ branch: boolean;
154
+ /** Is open *now*. Always false for a leaf. */
155
+ open: boolean;
156
+ disabled: boolean;
157
+ /** Position among **all** visible rows. What virtualization counts in, and
158
+ * what `aria-posinset` would be if a tree were a flat list, which it is
159
+ * not — see `posInSet`. */
160
+ index: number;
161
+ parent: TreeRow<T> | null;
162
+ /** The last of its siblings — the row a `└─` guide belongs to. */
163
+ last: boolean;
164
+ /** 1-based position among its siblings, for `aria-posinset`. */
165
+ posInSet: number;
166
+ /** How many siblings it has, for `aria-setsize`. */
167
+ setSize: number;
168
+ }
169
+
170
+ /**
171
+ * The rows a tree can show right now: the roots, plus the children of every
172
+ * expanded branch, in the order they are drawn.
173
+ *
174
+ * Iterative rather than recursive. A generated tree — a dependency graph, a
175
+ * filesystem walked to the bottom — is deep enough often enough that a call
176
+ * per level is a stack overflow waiting for one unlucky user, and the
177
+ * explicit stack costs nothing to read.
178
+ */
179
+ export function visibleRows<T>(
180
+ items: readonly T[],
181
+ open: ReadonlySet<TreeItemId>,
182
+ accessors: ResolvedAccessors<T>,
183
+ ): TreeRow<T>[] {
184
+ const rows: TreeRow<T>[] = [];
185
+ /** Siblings still to visit, innermost last — each with the parent they
186
+ * belong to and how far through them we are. */
187
+ const stack: Array<{
188
+ items: readonly T[];
189
+ at: number;
190
+ parent: TreeRow<T> | null;
191
+ }> = [{ items, at: 0, parent: null }];
192
+
193
+ while (stack.length) {
194
+ const frame = stack[stack.length - 1];
195
+ if (frame.at >= frame.items.length) {
196
+ stack.pop();
197
+ continue;
198
+ }
199
+ const item = frame.items[frame.at];
200
+ const at = frame.at++;
201
+ const id = accessors.getId(item);
202
+ const branch = accessors.isBranch(item);
203
+ const isOpen = branch && open.has(id);
204
+ const row: TreeRow<T> = {
205
+ item,
206
+ id,
207
+ depth: stack.length - 1,
208
+ branch,
209
+ open: isOpen,
210
+ disabled: accessors.isDisabled(item),
211
+ index: rows.length,
212
+ parent: frame.parent,
213
+ last: at === frame.items.length - 1,
214
+ posInSet: at + 1,
215
+ setSize: frame.items.length,
216
+ };
217
+ rows.push(row);
218
+ if (isOpen) {
219
+ const children = accessors.getChildren(item);
220
+ // An open branch with nothing under it yet is not a bug: it is a
221
+ // directory being read. It simply contributes no rows this frame.
222
+ if (children?.length) stack.push({ items: children, at: 0, parent: row });
223
+ }
224
+ }
225
+ return rows;
226
+ }
227
+
228
+ /**
229
+ * The item with this id, wherever it is — including inside branches nobody
230
+ * has opened.
231
+ *
232
+ * What `TreeHandle.setExpanded` needs: the change it reports carries the item,
233
+ * and the id it is given may well name something no row is showing. A lazy
234
+ * load finishing under a branch the user collapsed again is exactly that, and
235
+ * it is a legitimate thing to expand.
236
+ *
237
+ * Searches only what is loaded, which is all there is to search.
238
+ */
239
+ export function findItem<T>(
240
+ items: readonly T[],
241
+ id: TreeItemId,
242
+ accessors: ResolvedAccessors<T>,
243
+ ): T | undefined {
244
+ const stack: Array<readonly T[]> = [items];
245
+ while (stack.length) {
246
+ const level = stack.pop() as readonly T[];
247
+ for (const item of level) {
248
+ if (accessors.getId(item) === id) return item;
249
+ const children = accessors.getChildren(item);
250
+ if (children?.length) stack.push(children);
251
+ }
252
+ }
253
+ return undefined;
254
+ }
255
+
256
+ /**
257
+ * The branch edges to draw down a row's indent, outermost first.
258
+ *
259
+ * There is one entry per level of depth, and `true` means "a line passes
260
+ * through this column".
261
+ *
262
+ * Column `k` is where the line joining the children of the ancestor at depth
263
+ * `k` runs, so it passes this row when the row's own ancestor at depth `k+1`
264
+ * still has a sibling below it. The last column — `depth - 1` — is therefore
265
+ * the row's own, which is where a `├─` or `└─` connector goes, and it is the
266
+ * row itself that decides whether the line continues past it.
267
+ *
268
+ * The consequence worth stating, because it is the one an implementation gets
269
+ * backwards: a row deep inside the **last** child of a branch has a *blank*
270
+ * column above that branch, even though the branch's own parent has plenty of
271
+ * siblings left. The line stops at the last child; nothing below it is joined
272
+ * to anything.
273
+ *
274
+ * Computed on demand rather than stored on the row, because it is only ever
275
+ * asked for the handful of rows actually on screen while a row may be one of
276
+ * a hundred thousand.
277
+ */
278
+ export function branchEdges(row: TreeRow<unknown>): boolean[] {
279
+ const edges = new Array<boolean>(row.depth);
280
+ // Walk up from the row itself: at each column the question is about the
281
+ // ancestor one level *deeper* than the column, and the row is its own.
282
+ let below: TreeRow<unknown> | null = row;
283
+ for (let level = row.depth - 1; level >= 0; level--) {
284
+ edges[level] = below ? !below.last : false;
285
+ below = below?.parent ?? null;
286
+ }
287
+ return edges;
288
+ }
289
+
290
+ /** A run of rows that share a parent — what `layout="nested"` wraps in a
291
+ * subtree container. */
292
+ export interface TreeGroup<T> {
293
+ /** The row the group hangs off; `null` for the roots. */
294
+ parent: TreeRow<T> | null;
295
+ rows: Array<TreeRow<T> | TreeGroup<T>>;
296
+ }
297
+
298
+ /** Tell a group from a row without a `kind` field on either. */
299
+ export function isGroup<T>(
300
+ node: TreeRow<T> | TreeGroup<T>,
301
+ ): node is TreeGroup<T> {
302
+ return Array.isArray((node as TreeGroup<T>).rows);
303
+ }
304
+
305
+ /**
306
+ * The same rows, nested again: each expanded branch's children collected
307
+ * into a group that `renderSubtree` can wrap.
308
+ *
309
+ * Rebuilt from the flat list rather than from the items, so the two layouts
310
+ * cannot disagree about depth, order, or which row is last — the flat pass is
311
+ * the single answer and this is a regrouping of it.
312
+ */
313
+ export function groupRows<T>(rows: readonly TreeRow<T>[]): TreeGroup<T> {
314
+ const root: TreeGroup<T> = { parent: null, rows: [] };
315
+ /** The open group per depth: `stack[d]` collects the rows at depth `d`. */
316
+ const stack: Array<TreeGroup<T>> = [root];
317
+ for (let i = 0; i < rows.length; i++) {
318
+ const row = rows[i];
319
+ // Rows arrive in draw order, so a shallower row closes every group
320
+ // deeper than it.
321
+ stack.length = row.depth + 1;
322
+ const group = stack[row.depth];
323
+ group.rows.push(row);
324
+ // A group is opened only when a deeper row actually follows. An expanded
325
+ // branch that is still loading has no children to hold, and an empty
326
+ // container would still paint whatever `renderSubtree` gives it.
327
+ if (row.open && rows[i + 1]?.depth === row.depth + 1) {
328
+ const child: TreeGroup<T> = { parent: row, rows: [] };
329
+ group.rows.push(child);
330
+ stack.push(child);
331
+ }
332
+ }
333
+ return root;
334
+ }
package/src/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export { Sparkline, SPARKLINE_ELEMENT } from './sparkline/index.js';
2
- export type { SparklineProps } from './sparkline/index.js';
package/src/index.js DELETED
@@ -1,9 +0,0 @@
1
- // The convenience barrel. `import { Sparkline } from '@react-x11/components'`
2
- // and `import { Sparkline } from '@react-x11/components/sparkline'` are the
3
- // same module either way — with `sideEffects: false` and no side effects at
4
- // this level, a bundler drops the components an app does not name.
5
- //
6
- // This file must never do more than re-export. Anything with a side effect
7
- // here (a registration, a theme install, a feature probe) runs for every
8
- // consumer of the barrel and takes the whole package into their bundle.
9
- export { Sparkline, SPARKLINE_ELEMENT } from './sparkline/index.js';
@@ -1,29 +0,0 @@
1
- import type { ReactElement } from 'react';
2
- import type { Style } from 'react-x11/style';
3
-
4
- export interface SparklineProps {
5
- /** The series. Fewer than two points draws nothing. */
6
- data: number[];
7
- /** Stroke colour. Falls back to `style.color`, then black. */
8
- color?: string;
9
- /** Pen width in pixels. Default `1`. */
10
- strokeWidth?: number;
11
- /** No intrinsic size — give it a width and a height. */
12
- style?: Style | Style[];
13
- }
14
-
15
- export declare function Sparkline(props: SparklineProps): ReactElement;
16
-
17
- /** The host element name, for apps that would rather write `<sparkline>`. */
18
- export declare const SPARKLINE_ELEMENT: 'sparkline';
19
-
20
- // Importing this module teaches JSX the element too, so `<sparkline>` is a
21
- // typed tag and not an error. This is the module-augmentation shape
22
- // react-x11's docs/typescript.md prescribes for a third-party element.
23
- declare module 'react-x11/jsx-runtime' {
24
- namespace JSX {
25
- interface IntrinsicElements {
26
- sparkline: SparklineProps;
27
- }
28
- }
29
- }
@@ -1,50 +0,0 @@
1
- // <Sparkline> — a bare line chart, and the worked example of the
2
- // `registerElement` path this whole package is built on. react-x11's own
3
- // docs/extending.md illustrates the seam with a `<sparkline>`; this is that
4
- // element, shipped.
5
- //
6
- // **Registration happens when this module is evaluated**, and that is the
7
- // design, not a shortcut. Nothing in the package registers anything until
8
- // an app imports the component that needs it, so `sideEffects: false` stays
9
- // honest: an app that never renders a sparkline ships none of this. Do not
10
- // move registration up into `../index.js` — that is the one edit that would
11
- // make the barrel pull every component into every bundle.
12
- import React from 'react';
13
- import { registerElement, registeredElements } from 'react-x11/host';
14
-
15
- import { ELEMENT, SparklineNode } from './node.js';
16
-
17
- // Idempotent on purpose. `registerElement` throws on a second registration
18
- // without `override`, which is the right default for two *packages* fighting
19
- // over a name — but an app that ends up with two copies of this one (a
20
- // version skew in someone's lockfile) should not fail to boot over it.
21
- if (!registeredElements().includes(ELEMENT)) {
22
- registerElement(ELEMENT, {
23
- create: (props, app) => new SparklineNode(props, app),
24
- // `color` is also a style name. Without declaring it the element throws
25
- // on its own props in development and works in production — the worst
26
- // shape a bug can have, so react-x11 asks elements to say so.
27
- semanticNames: ['data', 'color', 'strokeWidth'],
28
- childrenAllowed: false,
29
- });
30
- }
31
-
32
- /**
33
- * A sparkline. Has no intrinsic size — give it one through `style`, the way
34
- * react-x11's own `<canvas>` wants one:
35
- *
36
- * ```jsx
37
- * <Sparkline data={[1, 4, 2, 8]} color="#c0392b"
38
- * style={{ width: 120, height: 40 }} />
39
- * ```
40
- *
41
- * The component is a thin handle on the host element rather than a wrapper
42
- * with behaviour of its own: it exists to carry the types, to be the thing
43
- * an app imports (and therefore the thing that triggers registration), and
44
- * to be the seam if this ever grows props that are not the element's.
45
- */
46
- export function Sparkline(props) {
47
- return React.createElement(ELEMENT, props);
48
- }
49
-
50
- export { ELEMENT as SPARKLINE_ELEMENT };
@@ -1,72 +0,0 @@
1
- // The retained node behind <sparkline>. `./index.js` is the only module
2
- // that imports this one, and it is also the module that registers the
3
- // element — so the pair is reachable exactly when an app imports
4
- // `Sparkline`, and droppable as a unit when it does not (see AGENTS.md,
5
- // "Tree-shaking is a constraint, not a nice-to-have").
6
- import { Node } from 'react-x11/node';
7
-
8
- /**
9
- * The element name. The registration key, the node's `kind` and the JSX tag
10
- * are all this one string — react-x11 rejects a node whose `kind` is
11
- * anything but the name it was registered under, because `kind` is what
12
- * paint order, queries and the DEV style assertion match on.
13
- */
14
- export const ELEMENT = 'sparkline';
15
-
16
- const DEFAULT_COLOR = '#000000';
17
-
18
- export class SparklineNode extends Node {
19
- constructor(props, app) {
20
- super(ELEMENT, props, app);
21
- }
22
-
23
- paint(ctx) {
24
- // background, border and the clip to this node's rect
25
- super.paint(ctx);
26
-
27
- const data = this.props.data;
28
- if (!Array.isArray(data) || data.length < 2) return;
29
- // The mock backend in `react-x11/test` has no path API. A component
30
- // that throws there cannot be tested headlessly, and headless is where
31
- // CI runs — so the drawing is skipped rather than attempted.
32
- if (typeof ctx.beginPath !== 'function') return;
33
-
34
- const { x, y, width, height } = this.abs;
35
- if (width <= 0 || height <= 0) return;
36
-
37
- const lineWidth = this.props.strokeWidth ?? 1;
38
- // `super.paint` clipped to `abs`, so a stroke sitting on the top or
39
- // bottom edge would be cut in half. Inset by half the pen.
40
- const inset = lineWidth / 2;
41
- const top = y + inset;
42
- const usable = Math.max(0, height - lineWidth);
43
-
44
- let min = Infinity;
45
- let max = -Infinity;
46
- for (const value of data) {
47
- if (value < min) min = value;
48
- if (value > max) max = value;
49
- }
50
- const span = max - min;
51
-
52
- const stepX = width / (data.length - 1);
53
-
54
- ctx.save();
55
- ctx.beginPath();
56
- for (let i = 0; i < data.length; i++) {
57
- const px = x + stepX * i;
58
- // A flat series has no span to scale against; draw it down the middle
59
- // rather than dividing by zero or pinning it to an edge.
60
- const py =
61
- span === 0
62
- ? y + height / 2
63
- : top + usable * (1 - (data[i] - min) / span);
64
- if (i === 0) ctx.moveTo(px, py);
65
- else ctx.lineTo(px, py);
66
- }
67
- ctx.lineWidth = lineWidth;
68
- ctx.strokeStyle = this.props.color ?? this.style.color ?? DEFAULT_COLOR;
69
- ctx.stroke();
70
- ctx.restore();
71
- }
72
- }