@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,615 @@
1
+ // <CodeEditor> — a multiline code editor: syntax highlighting through the
2
+ // pluggable language seam (built-in stream tokenizers, or Lezer / TextMate
3
+ // adapters), completion through async sources, LSP-shaped diagnostics.
4
+ //
5
+ // **Registration happens when this module is evaluated**, and that is the
6
+ // design, not a shortcut: nothing in the package registers anything until an
7
+ // app imports the component that needs it, so `sideEffects: false` stays
8
+ // honest and an app that never renders a code editor ships none of this. Do
9
+ // not move registration up into `../index.ts` — that is the one edit that
10
+ // would make the barrel pull every component into every bundle.
11
+ //
12
+ // The split of labour with `./node.ts`: the node owns the text model and the
13
+ // pixels; this file owns registration, the React component that wires input
14
+ // props to the node's `handle*` methods (user handlers run first, exactly
15
+ // core's ordering), and the completion popup — which is plain composition
16
+ // over `<popup>`, so an app can ignore it and build its own from the same
17
+ // `CompletionSource`s.
18
+ import React, { useCallback, useRef, useState } from 'react';
19
+ import type { ReactElement, ReactNode, Ref, RefObject } from 'react';
20
+ import { registerElement, registeredElements } from 'react-x11/host';
21
+ import { useTheme } from 'react-x11';
22
+ import type {
23
+ DrawnNode,
24
+ FocusEvent,
25
+ KeyboardEvent,
26
+ MouseEvent,
27
+ WheelEvent,
28
+ } from 'react-x11';
29
+ import type { Style } from 'react-x11/style';
30
+ import {
31
+ XK_BACKSPACE,
32
+ XK_DOWN,
33
+ XK_ESCAPE,
34
+ XK_PAGE_DOWN,
35
+ XK_PAGE_UP,
36
+ XK_RETURN,
37
+ XK_SPACE,
38
+ XK_TAB,
39
+ XK_UP,
40
+ } from 'react-x11/keysyms';
41
+
42
+ // Loads the module the JSX augmentation at the bottom targets — nothing in
43
+ // `src/` writes JSX, so the build has no other reason to resolve it.
44
+ import type {} from 'react-x11/jsx-runtime';
45
+
46
+ import { hx } from './hx.js';
47
+ import { microtask } from '../code-language/timers.js';
48
+ import { CodeEditorNode, ELEMENT } from './node.js';
49
+ import type {
50
+ CodeEditorEvent,
51
+ CodeEditorHandle,
52
+ CodeEditorProps,
53
+ } from './node.js';
54
+ import { rankCompletions } from './completion.js';
55
+ import type {
56
+ CompletionContext,
57
+ CompletionItem,
58
+ CompletionResult,
59
+ CompletionSource,
60
+ Position,
61
+ } from '../code-language/types.js';
62
+ import { wordRangeAt } from './doc.js';
63
+
64
+ export { ELEMENT as CODE_EDITOR_ELEMENT };
65
+ export { CodeEditorNode };
66
+ export type { CodeEditorEvent, CodeEditorHandle, CodeEditorProps };
67
+
68
+ if (!registeredElements().includes(ELEMENT)) {
69
+ registerElement(ELEMENT, {
70
+ create: (props, app) => new CodeEditorNode(props, app),
71
+ // none of the editor's prop names collide with the style vocabulary
72
+ // today; `rows` and the colour props are its own the way they are
73
+ // `<textinput>`'s. Declared anyway for the two an audit flagged as
74
+ // near-misses, so a future style vocabulary addition fails loudly here
75
+ // rather than silently in an app.
76
+ semanticNames: ['rows', 'tabSize'],
77
+ childrenAllowed: false,
78
+ });
79
+ }
80
+
81
+ const MAX_VISIBLE_COMPLETIONS = 8;
82
+ const MAX_COMPLETIONS = 100;
83
+ /** A word character for the "should typing reopen the popup" test. */
84
+ const TRIGGER_CHAR = /[\p{L}\p{N}_.$]/u;
85
+ /** What the list may shrink to, and grow to, around its labels. Bounds
86
+ * rather than a width: the popup measures its own rows (see below). */
87
+ const MIN_COMPLETION_WIDTH = 180;
88
+ const MAX_COMPLETION_WIDTH = 480;
89
+
90
+ interface CompletionState {
91
+ items: CompletionItem[];
92
+ /** Replacement start, per item source (parallel to items). */
93
+ froms: (Position | undefined)[];
94
+ from: Position; // the default (word start)
95
+ selected: number;
96
+ /** First visible row — the popup shows a window of the list. */
97
+ offset: number;
98
+ /** The caret, in the **editor's own coordinates** — the popup's `at`. */
99
+ at: { x: number; y: number; width: number; height: number };
100
+ rowHeight: number;
101
+ }
102
+
103
+ /** What `<CodeEditor completionSources>` takes — re-exported seam types. */
104
+ export type {
105
+ CompletionContext,
106
+ CompletionItem,
107
+ CompletionResult,
108
+ CompletionSource,
109
+ };
110
+
111
+ export interface CodeEditorComponentProps extends CodeEditorProps {
112
+ /** Completion providers. Absent → completion is off entirely. */
113
+ completionSources?: readonly CompletionSource[];
114
+ /** Query sources while typing (default true when sources are given);
115
+ * Ctrl+Space always works. */
116
+ autoComplete?: boolean;
117
+ focusable?: boolean;
118
+ autoFocus?: boolean;
119
+ disabled?: boolean;
120
+ /** The editor's imperative surface: `ref.current.value`, `.undo()`,
121
+ * `.replaceRange(…)`, `.focus()` — see {@link CodeEditorHandle}. */
122
+ ref?: Ref<CodeEditorHandle | null>;
123
+ onKeyDown?: (ev: KeyboardEvent) => void;
124
+ onMouseDown?: (ev: MouseEvent) => void;
125
+ onFocus?: (ev: FocusEvent) => void;
126
+ onBlur?: (ev: FocusEvent) => void;
127
+ }
128
+
129
+ const editorDefaults: Style = {
130
+ fontFamily: 'monospace',
131
+ fontSize: 13,
132
+ padding: 8,
133
+ borderWidth: 1,
134
+ cursor: 'text',
135
+ // theme tokens, so an unstyled editor is legible on a light *and* a dark
136
+ // desktop: the node also picks its token palette from the resolved
137
+ // background (see `_tokenStyles`), and the caret follows `color`
138
+ color: '$text',
139
+ backgroundColor: '$background',
140
+ borderColor: '$border',
141
+ };
142
+
143
+ /**
144
+ * ```tsx
145
+ * <CodeEditor
146
+ * language={sql()}
147
+ * value={query}
148
+ * onChange={(ev) => setQuery(ev.value)}
149
+ * completionSources={[keywordCompletionSource(), sqlCompletionSource(schema)]}
150
+ * lineNumbers
151
+ * style={{ flexGrow: 1 }}
152
+ * />
153
+ * ```
154
+ */
155
+ export function CodeEditor(props: CodeEditorComponentProps): ReactElement {
156
+ const {
157
+ completionSources,
158
+ autoComplete = true,
159
+ focusable = true,
160
+ autoFocus,
161
+ disabled,
162
+ ref,
163
+ onKeyDown: userKeyDown,
164
+ onMouseDown: userMouseDown,
165
+ onFocus: userFocus,
166
+ onBlur: userBlur,
167
+ style,
168
+ ...nodeProps
169
+ } = props;
170
+
171
+ const theme = useTheme();
172
+ const nodeRef = useRef<CodeEditorNode | null>(null);
173
+ const [completion, setCompletion] = useState<CompletionState | null>(null);
174
+ // bumped per query; a stale async result compares and drops itself
175
+ const queryId = useRef(0);
176
+
177
+ const setNode = useCallback(
178
+ (n: unknown) => {
179
+ nodeRef.current = n as CodeEditorNode | null;
180
+ if (typeof ref === 'function') ref(nodeRef.current);
181
+ else if (ref) ref.current = nodeRef.current;
182
+ },
183
+ [ref],
184
+ );
185
+
186
+ const close = useCallback(() => setCompletion(null), []);
187
+
188
+ const query = useCallback(
189
+ (trigger: 'input' | 'explicit') => {
190
+ const node = nodeRef.current;
191
+ if (!node || !completionSources || completionSources.length === 0) {
192
+ return;
193
+ }
194
+ // a snapshot: the node's own array is live across edits, and an async
195
+ // source must not see it move out from under the `pos` it was given
196
+ const lines = node.lines.slice();
197
+ const pos = node.selection.head;
198
+ const wordChars = node.language?.data?.wordChars ?? '';
199
+ const range = wordRangeAt(lines[pos.line], pos.ch, wordChars);
200
+ const wordFrom = Math.min(range.from, pos.ch);
201
+ const context: CompletionContext = {
202
+ lines,
203
+ pos,
204
+ word: {
205
+ from: { line: pos.line, ch: wordFrom },
206
+ text: lines[pos.line].slice(wordFrom, pos.ch),
207
+ },
208
+ trigger,
209
+ language: node.language,
210
+ };
211
+ const id = ++queryId.current;
212
+ const stamp = `${node.value}\u0000${pos.line}:${pos.ch}`;
213
+ Promise.all(
214
+ completionSources.map((source) =>
215
+ Promise.resolve()
216
+ .then(() => source(context))
217
+ .catch(() => null),
218
+ ),
219
+ ).then((results) => {
220
+ const node2 = nodeRef.current;
221
+ if (id !== queryId.current || !node2 || node2.destroyed) return;
222
+ const pos2 = node2.selection.head;
223
+ if (`${node2.value}\u0000${pos2.line}:${pos2.ch}` !== stamp) return;
224
+ openPopup(node2, context, results);
225
+ });
226
+ },
227
+ [completionSources],
228
+ );
229
+
230
+ const openPopup = (
231
+ node: CodeEditorNode,
232
+ context: CompletionContext,
233
+ results: (CompletionResult | null)[],
234
+ ): void => {
235
+ const items: CompletionItem[] = [];
236
+ const froms: (Position | undefined)[] = [];
237
+ const seen = new Set<string>();
238
+ for (const result of results) {
239
+ if (!result) continue;
240
+ const ranked = rankCompletions(result.items, context.word.text);
241
+ for (const item of ranked) {
242
+ const key = `${item.kind ?? ''}\u0000${item.label}`;
243
+ if (seen.has(key)) continue;
244
+ seen.add(key);
245
+ items.push(item);
246
+ froms.push(result.from);
247
+ if (items.length >= MAX_COMPLETIONS) break;
248
+ }
249
+ if (items.length >= MAX_COMPLETIONS) break;
250
+ }
251
+ // re-rank across sources so a better match from a later source wins
252
+ const order = rankCompletions(items, context.word.text);
253
+ const orderedFroms = order.map((item) => froms[items.indexOf(item)]);
254
+ if (order.length === 0) {
255
+ setCompletion(null);
256
+ return;
257
+ }
258
+ // Geometry stops here: the caret rect is all the popup needs, and it is
259
+ // already in the editor's own coordinates, which is what `at` wants
260
+ // (react-x11#280). Where that lands on screen, which side of the line
261
+ // the list opens on, and how wide it is are all worked out by the popup
262
+ // itself — see the `anchor` below for why they have to be.
263
+ const caret = node.caretRect();
264
+ const rowHeight = Math.ceil(node.metrics().lineHeight) + 6;
265
+ setCompletion({
266
+ items: order,
267
+ froms: orderedFroms,
268
+ from: context.word.from,
269
+ selected: 0,
270
+ offset: 0,
271
+ at: { x: caret.x, y: caret.y, width: 1, height: caret.height },
272
+ rowHeight,
273
+ });
274
+ };
275
+
276
+ const accept = (state: CompletionState, index: number): void => {
277
+ const node = nodeRef.current;
278
+ if (!node) return;
279
+ const item = state.items[index];
280
+ if (!item) return;
281
+ const from = state.froms[index] ?? state.from;
282
+ node.replaceRange(from, node.selection.head, item.apply ?? item.label);
283
+ setCompletion(null);
284
+ };
285
+
286
+ const moveSelection = (state: CompletionState, delta: number): void => {
287
+ const count = state.items.length;
288
+ const selected = Math.max(0, Math.min(count - 1, state.selected + delta));
289
+ let offset = state.offset;
290
+ if (selected < offset) offset = selected;
291
+ if (selected >= offset + MAX_VISIBLE_COMPLETIONS) {
292
+ offset = selected - MAX_VISIBLE_COMPLETIONS + 1;
293
+ }
294
+ setCompletion({ ...state, selected, offset });
295
+ };
296
+
297
+ // The completion popup's own keys, as an ordinary user-level handler: it
298
+ // runs before the element's default action (react-x11#266), so consuming a
299
+ // key here is exactly what stops the editor from also acting on it. The
300
+ // editing keys, and the Escape-arms-one-Tab bargain that keeps the editor
301
+ // from being a keyboard trap, belong to the node and are not repeated.
302
+ const handleKeyDown = (ev: KeyboardEvent): void => {
303
+ userKeyDown?.(ev);
304
+ if (ev.defaultPrevented) return;
305
+ const node = nodeRef.current;
306
+ if (!node || disabled) return;
307
+ const k = ev.keysym;
308
+
309
+ if (completion) {
310
+ if (k === XK_DOWN || k === XK_UP) {
311
+ moveSelection(completion, k === XK_DOWN ? 1 : -1);
312
+ ev.preventDefault();
313
+ return;
314
+ }
315
+ if (k === XK_PAGE_DOWN || k === XK_PAGE_UP) {
316
+ moveSelection(
317
+ completion,
318
+ (k === XK_PAGE_DOWN ? 1 : -1) * MAX_VISIBLE_COMPLETIONS,
319
+ );
320
+ ev.preventDefault();
321
+ return;
322
+ }
323
+ if (k === XK_RETURN || (k === XK_TAB && !ev.shiftKey)) {
324
+ accept(completion, completion.selected);
325
+ ev.preventDefault();
326
+ return;
327
+ }
328
+ if (k === XK_ESCAPE) {
329
+ close();
330
+ ev.preventDefault();
331
+ return;
332
+ }
333
+ }
334
+
335
+ // Ctrl+Space: explicit completion
336
+ if (
337
+ ev.ctrlKey &&
338
+ (k === XK_SPACE || ev.codepoint === 0x20) &&
339
+ completionSources?.length
340
+ ) {
341
+ query('explicit');
342
+ ev.preventDefault();
343
+ return;
344
+ }
345
+
346
+ // Escape with no popup open is the node's (it arms the Tab-out), and a
347
+ // Tab it lets through is leaving the editor: either way the popup that
348
+ // is not open needs nothing, but a stale one must not outlive the move.
349
+ if (k === XK_ESCAPE || k === XK_TAB) close();
350
+
351
+ // After the edit the node is about to make: retrigger or dismiss. In a
352
+ // microtask because the default action has not run yet — the text this
353
+ // reads is the text the key is about to produce.
354
+ if (!completionSources || completionSources.length === 0) return;
355
+ const typed =
356
+ ev.codepoint != null && ev.codepoint >= 0x20 && !ev.ctrlKey
357
+ ? String.fromCodePoint(ev.codepoint)
358
+ : null;
359
+ const editKey = typed !== null || k === XK_BACKSPACE;
360
+ if (completion) {
361
+ if (editKey) microtask(() => query('input'));
362
+ else close();
363
+ } else if (
364
+ autoComplete &&
365
+ typed !== null &&
366
+ TRIGGER_CHAR.test(typed) &&
367
+ !node.props.readOnly
368
+ ) {
369
+ microtask(() => query('input'));
370
+ }
371
+ };
372
+
373
+ const handleMouseDown = (ev: MouseEvent): void => {
374
+ userMouseDown?.(ev);
375
+ if (ev.defaultPrevented) return;
376
+ close();
377
+ };
378
+
379
+ const rows: ReactNode[] = [];
380
+ if (completion) {
381
+ const m = nodeRef.current?.metrics();
382
+ const visible = completion.items.slice(
383
+ completion.offset,
384
+ completion.offset + MAX_VISIBLE_COMPLETIONS,
385
+ );
386
+ visible.forEach((item, i) => {
387
+ const index = completion.offset + i;
388
+ const selected = index === completion.selected;
389
+ rows.push(
390
+ hx(
391
+ 'box',
392
+ {
393
+ key: `${item.kind ?? ''}:${item.label}`,
394
+ style: {
395
+ flexDirection: 'row',
396
+ alignItems: 'center',
397
+ gap: 12,
398
+ paddingLeft: 8,
399
+ paddingRight: 8,
400
+ height: completion.rowHeight,
401
+ backgroundColor: selected ? theme.accent : 'transparent',
402
+ },
403
+ onMouseDown: (rowEv: MouseEvent) => {
404
+ rowEv.preventDefault();
405
+ accept(completion, index);
406
+ },
407
+ },
408
+ hx(
409
+ 'text',
410
+ {
411
+ style: {
412
+ fontFamily: m?.family ?? 'monospace',
413
+ fontSize: m?.size ?? 13,
414
+ color: selected ? theme.accentText : theme.text,
415
+ flexGrow: 1,
416
+ },
417
+ },
418
+ item.label,
419
+ ),
420
+ item.detail
421
+ ? hx(
422
+ 'text',
423
+ {
424
+ style: {
425
+ fontSize: Math.max(10, (m?.size ?? 13) - 2),
426
+ color: selected ? theme.accentText : theme.textMuted,
427
+ },
428
+ },
429
+ item.detail,
430
+ )
431
+ : null,
432
+ ),
433
+ );
434
+ });
435
+ }
436
+
437
+ // The editor element itself, plus (while open) the completion popup. A
438
+ // fragment rather than a wrapper box: a `<popup>` is its own X window and
439
+ // never participates in the parent's layout, so the app's style lands
440
+ // directly on the editor node with no extra layout node in between.
441
+ // No `theme` prop on the element: the node must inherit the nearest
442
+ // node-level theme (a `<window theme>` above it), and stamping the React
443
+ // context's palette here would override that with the default scheme —
444
+ // the editors-render-light-on-a-dark-window bug. The popup below is a
445
+ // separate X window that inherits nothing, so it does take the context
446
+ // theme, same as the calendar's popups.
447
+ const editor = React.createElement(ELEMENT, {
448
+ ...(nodeProps as Record<string, unknown>),
449
+ ref: setNode,
450
+ // `focusableByDefault` on the node already makes a bare <codeeditor> a
451
+ // tab stop; this is the app's override, and what keeps a disabled
452
+ // editor out of the tab order entirely.
453
+ focusable: focusable && !disabled,
454
+ disabled,
455
+ autoFocus,
456
+ role: 'textbox',
457
+ onKeyDown: handleKeyDown,
458
+ onMouseDown: handleMouseDown,
459
+ // Caret placement, drag-selection, focus and the caret blink are the
460
+ // node's default actions now. Wheel has no default-action hook, so it
461
+ // stays wired here.
462
+ onWheel: (ev: WheelEvent) => {
463
+ if (disabled) return;
464
+ if (nodeRef.current?.handleWheel(ev)) ev.preventDefault();
465
+ },
466
+ onFocus: userFocus,
467
+ onBlur: (ev: FocusEvent) => {
468
+ close();
469
+ userBlur?.(ev);
470
+ },
471
+ style: [editorDefaults, style as Style],
472
+ });
473
+
474
+ const popup =
475
+ completion &&
476
+ hx(
477
+ 'popup',
478
+ {
479
+ theme,
480
+ // The popup places itself (react-x11#280), and it is the only thing
481
+ // that can: with no `width`/`height` it is sized by the rows it
482
+ // happens to be showing, and that size is settled after the content
483
+ // is measured and before the window exists — past the last commit
484
+ // that could have handed a rect in. Which side of the caret line the
485
+ // list opens on is a function of that size, so it is core's answer
486
+ // too, and it is taken against the usable part of the monitor rather
487
+ // than the guess at the owner window this made before.
488
+ //
489
+ // `at` is the caret **inside** the editor, so the list opens on the
490
+ // line being typed rather than under the editor, and follows it
491
+ // through everything that can move it: the editor's own layout, an
492
+ // ancestor scrolling, the window being dragged. When the caret
493
+ // scrolls out of the editor the popup unmaps until it is back — a
494
+ // list floating over text it no longer points into has no position
495
+ // worth having.
496
+ anchor: {
497
+ to: nodeRef as unknown as RefObject<DrawnNode | null>,
498
+ at: completion.at,
499
+ placement: 'bottom',
500
+ },
501
+ // The bounds the label measuring used to enforce by hand.
502
+ minWidth: MIN_COMPLETION_WIDTH,
503
+ maxWidth: MAX_COMPLETION_WIDTH,
504
+ // the grab is what dismisses on an outside press, menu-style; the
505
+ // popup never takes focus, so typing continues in the editor
506
+ grab: true,
507
+ onDismiss: close,
508
+ },
509
+ hx(
510
+ 'box',
511
+ {
512
+ style: {
513
+ flexGrow: 1,
514
+ flexDirection: 'column',
515
+ borderWidth: 1,
516
+ borderColor: theme.border,
517
+ backgroundColor: theme.background,
518
+ },
519
+ },
520
+ ...rows,
521
+ ),
522
+ );
523
+
524
+ return React.createElement(React.Fragment, null, editor, popup);
525
+ }
526
+
527
+ /**
528
+ * What the raw `<codeeditor>` element takes: the node's props plus the
529
+ * interaction surface the component normally wires for you. A named
530
+ * interface rather than an inline type in the augmentation below, because
531
+ * the augmentation exists twice in a checkout that compiles both `src/` and
532
+ * `dist/` (the packaging test imports the built package by name), and two
533
+ * property declarations only merge when they reference the same-shaped
534
+ * named type.
535
+ */
536
+ export interface CodeEditorElementProps extends CodeEditorProps {
537
+ focusable?: boolean;
538
+ autoFocus?: boolean;
539
+ role?: string;
540
+ ref?: Ref<unknown>;
541
+ onKeyDown?: (ev: KeyboardEvent) => void;
542
+ onMouseDown?: (ev: MouseEvent) => void;
543
+ onMouseMove?: (ev: MouseEvent) => void;
544
+ onMouseUp?: (ev: MouseEvent) => void;
545
+ onWheel?: (ev: WheelEvent) => void;
546
+ onFocus?: (ev: FocusEvent) => void;
547
+ onBlur?: (ev: FocusEvent) => void;
548
+ }
549
+
550
+ // Importing this module teaches JSX the raw element too.
551
+ declare module 'react-x11/jsx-runtime' {
552
+ namespace JSX {
553
+ interface IntrinsicElements {
554
+ codeeditor: CodeEditorElementProps;
555
+ }
556
+ }
557
+ }
558
+
559
+ // The language + completion surface, re-exported so one import serves the
560
+ // whole feature. Each language module is pure until called, so a bundler
561
+ // keeps only what an app touches.
562
+ export {
563
+ lineModeLanguage,
564
+ streamLanguage,
565
+ StringStream,
566
+ } from '../code-language/stream.js';
567
+ export type { LineMode, StreamMode } from '../code-language/stream.js';
568
+ export { sql } from '../code-language/languages/sql.js';
569
+ export type { SqlOptions } from '../code-language/languages/sql.js';
570
+ export { shell } from '../code-language/languages/shell.js';
571
+ export { glsl } from '../code-language/languages/glsl.js';
572
+ export { javascript } from '../code-language/languages/javascript.js';
573
+ export type { JavascriptOptions } from '../code-language/languages/javascript.js';
574
+ export { json } from '../code-language/languages/json.js';
575
+ export {
576
+ keywordCompletionSource,
577
+ rankCompletions,
578
+ sqlCompletionSource,
579
+ wordCompletionSource,
580
+ } from './completion.js';
581
+ export type { SqlSchema } from './completion.js';
582
+ export {
583
+ autoTokenStyles,
584
+ DARK_TOKEN_STYLES,
585
+ isDarkBackground,
586
+ LIGHT_TOKEN_STYLES,
587
+ tokenStyleFor,
588
+ } from '../code-language/theme.js';
589
+ export { lezerLanguage } from '../code-language/lezer.js';
590
+ export type {
591
+ LezerHighlightLike,
592
+ LezerLanguageOptions,
593
+ LezerParserLike,
594
+ } from '../code-language/lezer.js';
595
+ export { textMateLanguage } from '../code-language/textmate.js';
596
+ export type {
597
+ TextMateGrammarLike,
598
+ TextMateLanguageOptions,
599
+ TextMateStateLike,
600
+ } from '../code-language/textmate.js';
601
+ export type {
602
+ Diagnostic,
603
+ Language,
604
+ LanguageData,
605
+ LineEdit,
606
+ Position,
607
+ Selection,
608
+ Token,
609
+ Tokenizer,
610
+ TokenizerHost,
611
+ TokenStyle,
612
+ TokenStyles,
613
+ TokenType,
614
+ } from '../code-language/types.js';
615
+ export { TOKEN_FALLBACK } from '../code-language/types.js';