@react-x11/components 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (788) hide show
  1. package/README.md +979 -21
  2. package/dist/ansi/cast.d.ts +48 -0
  3. package/dist/ansi/cast.d.ts.map +1 -0
  4. package/dist/ansi/cast.js +135 -0
  5. package/dist/ansi/cast.js.map +1 -0
  6. package/dist/ansi/index.d.ts +10 -0
  7. package/dist/ansi/index.d.ts.map +1 -0
  8. package/dist/ansi/index.js +27 -0
  9. package/dist/ansi/index.js.map +1 -0
  10. package/dist/ansi/palette.d.ts +79 -0
  11. package/dist/ansi/palette.d.ts.map +1 -0
  12. package/dist/ansi/palette.js +155 -0
  13. package/dist/ansi/palette.js.map +1 -0
  14. package/dist/ansi/parse.d.ts +114 -0
  15. package/dist/ansi/parse.d.ts.map +1 -0
  16. package/dist/ansi/parse.js +687 -0
  17. package/dist/ansi/parse.js.map +1 -0
  18. package/dist/ansi/sgr.d.ts +87 -0
  19. package/dist/ansi/sgr.d.ts.map +1 -0
  20. package/dist/ansi/sgr.js +302 -0
  21. package/dist/ansi/sgr.js.map +1 -0
  22. package/dist/ansi/utf8.d.ts +15 -0
  23. package/dist/ansi/utf8.d.ts.map +1 -0
  24. package/dist/ansi/utf8.js +82 -0
  25. package/dist/ansi/utf8.js.map +1 -0
  26. package/dist/calendar/Calendar.d.ts +136 -0
  27. package/dist/calendar/Calendar.d.ts.map +1 -0
  28. package/dist/calendar/Calendar.js +460 -0
  29. package/dist/calendar/Calendar.js.map +1 -0
  30. package/dist/calendar/DatePicker.d.ts +52 -0
  31. package/dist/calendar/DatePicker.d.ts.map +1 -0
  32. package/dist/calendar/DatePicker.js +257 -0
  33. package/dist/calendar/DatePicker.js.map +1 -0
  34. package/dist/calendar/dates.d.ts +90 -0
  35. package/dist/calendar/dates.d.ts.map +1 -0
  36. package/dist/calendar/dates.js +236 -0
  37. package/dist/calendar/dates.js.map +1 -0
  38. package/dist/calendar/index.d.ts +8 -0
  39. package/dist/calendar/index.d.ts.map +1 -0
  40. package/dist/calendar/index.js +15 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/charts/components.d.ts +141 -0
  43. package/dist/charts/components.d.ts.map +1 -0
  44. package/dist/charts/components.js +580 -0
  45. package/dist/charts/components.js.map +1 -0
  46. package/dist/charts/data.d.ts +198 -0
  47. package/dist/charts/data.d.ts.map +1 -0
  48. package/dist/charts/data.js +616 -0
  49. package/dist/charts/data.js.map +1 -0
  50. package/dist/charts/hx.d.ts +21 -0
  51. package/dist/charts/hx.d.ts.map +1 -0
  52. package/dist/charts/hx.js +15 -0
  53. package/dist/charts/hx.js.map +1 -0
  54. package/dist/charts/index.d.ts +27 -0
  55. package/dist/charts/index.d.ts.map +1 -0
  56. package/dist/charts/index.js +38 -0
  57. package/dist/charts/index.js.map +1 -0
  58. package/dist/charts/node.d.ts +96 -0
  59. package/dist/charts/node.d.ts.map +1 -0
  60. package/dist/charts/node.js +720 -0
  61. package/dist/charts/node.js.map +1 -0
  62. package/dist/charts/render.d.ts +153 -0
  63. package/dist/charts/render.d.ts.map +1 -0
  64. package/dist/charts/render.js +762 -0
  65. package/dist/charts/render.js.map +1 -0
  66. package/dist/charts/scale.d.ts +42 -0
  67. package/dist/charts/scale.d.ts.map +1 -0
  68. package/dist/charts/scale.js +173 -0
  69. package/dist/charts/scale.js.map +1 -0
  70. package/dist/charts/spec.d.ts +91 -0
  71. package/dist/charts/spec.d.ts.map +1 -0
  72. package/dist/charts/spec.js +33 -0
  73. package/dist/charts/spec.js.map +1 -0
  74. package/dist/charts/timers.d.ts +6 -0
  75. package/dist/charts/timers.d.ts.map +1 -0
  76. package/dist/charts/timers.js +14 -0
  77. package/dist/charts/timers.js.map +1 -0
  78. package/dist/code/hx.d.ts +24 -0
  79. package/dist/code/hx.d.ts.map +1 -0
  80. package/dist/code/hx.js +25 -0
  81. package/dist/code/hx.js.map +1 -0
  82. package/dist/code/index.d.ts +45 -0
  83. package/dist/code/index.d.ts.map +1 -0
  84. package/dist/code/index.js +93 -0
  85. package/dist/code/index.js.map +1 -0
  86. package/dist/code-editor/completion.d.ts +26 -0
  87. package/dist/code-editor/completion.d.ts.map +1 -0
  88. package/dist/code-editor/completion.js +129 -0
  89. package/dist/code-editor/completion.js.map +1 -0
  90. package/dist/code-editor/doc.d.ts +35 -0
  91. package/dist/code-editor/doc.d.ts.map +1 -0
  92. package/dist/code-editor/doc.js +162 -0
  93. package/dist/code-editor/doc.js.map +1 -0
  94. package/dist/code-editor/hx.d.ts +13 -0
  95. package/dist/code-editor/hx.d.ts.map +1 -0
  96. package/dist/code-editor/hx.js +10 -0
  97. package/dist/code-editor/hx.js.map +1 -0
  98. package/dist/code-editor/index.d.ts +88 -0
  99. package/dist/code-editor/index.d.ts.map +1 -0
  100. package/dist/code-editor/index.js +401 -0
  101. package/dist/code-editor/index.js.map +1 -0
  102. package/dist/code-editor/node.d.ts +343 -0
  103. package/dist/code-editor/node.d.ts.map +1 -0
  104. package/dist/code-editor/node.js +1521 -0
  105. package/dist/code-editor/node.js.map +1 -0
  106. package/dist/code-language/hljs.d.ts +47 -0
  107. package/dist/code-language/hljs.d.ts.map +1 -0
  108. package/dist/code-language/hljs.js +211 -0
  109. package/dist/code-language/hljs.js.map +1 -0
  110. package/dist/code-language/index.d.ts +22 -0
  111. package/dist/code-language/index.d.ts.map +1 -0
  112. package/dist/code-language/index.js +20 -0
  113. package/dist/code-language/index.js.map +1 -0
  114. package/dist/code-language/languages/glsl.d.ts +4 -0
  115. package/dist/code-language/languages/glsl.d.ts.map +1 -0
  116. package/dist/code-language/languages/glsl.js +99 -0
  117. package/dist/code-language/languages/glsl.js.map +1 -0
  118. package/dist/code-language/languages/javascript.d.ts +10 -0
  119. package/dist/code-language/languages/javascript.d.ts.map +1 -0
  120. package/dist/code-language/languages/javascript.js +360 -0
  121. package/dist/code-language/languages/javascript.js.map +1 -0
  122. package/dist/code-language/languages/json.d.ts +4 -0
  123. package/dist/code-language/languages/json.d.ts.map +1 -0
  124. package/dist/code-language/languages/json.js +68 -0
  125. package/dist/code-language/languages/json.js.map +1 -0
  126. package/dist/code-language/languages/shell.d.ts +4 -0
  127. package/dist/code-language/languages/shell.d.ts.map +1 -0
  128. package/dist/code-language/languages/shell.js +189 -0
  129. package/dist/code-language/languages/shell.js.map +1 -0
  130. package/dist/code-language/languages/sql.d.ts +11 -0
  131. package/dist/code-language/languages/sql.d.ts.map +1 -0
  132. package/dist/code-language/languages/sql.js +133 -0
  133. package/dist/code-language/languages/sql.js.map +1 -0
  134. package/dist/code-language/lezer.d.ts +24 -0
  135. package/dist/code-language/lezer.d.ts.map +1 -0
  136. package/dist/code-language/lezer.js +148 -0
  137. package/dist/code-language/lezer.js.map +1 -0
  138. package/dist/code-language/registry.d.ts +19 -0
  139. package/dist/code-language/registry.d.ts.map +1 -0
  140. package/dist/code-language/registry.js +56 -0
  141. package/dist/code-language/registry.js.map +1 -0
  142. package/dist/code-language/runs.d.ts +35 -0
  143. package/dist/code-language/runs.d.ts.map +1 -0
  144. package/dist/code-language/runs.js +88 -0
  145. package/dist/code-language/runs.js.map +1 -0
  146. package/dist/code-language/stream.d.ts +70 -0
  147. package/dist/code-language/stream.d.ts.map +1 -0
  148. package/dist/code-language/stream.js +243 -0
  149. package/dist/code-language/stream.js.map +1 -0
  150. package/dist/code-language/textmate.d.ts +27 -0
  151. package/dist/code-language/textmate.d.ts.map +1 -0
  152. package/dist/code-language/textmate.js +86 -0
  153. package/dist/code-language/textmate.js.map +1 -0
  154. package/dist/code-language/theme.d.ts +26 -0
  155. package/dist/code-language/theme.d.ts.map +1 -0
  156. package/dist/code-language/theme.js +108 -0
  157. package/dist/code-language/theme.js.map +1 -0
  158. package/dist/code-language/timers.d.ts +7 -0
  159. package/dist/code-language/timers.d.ts.map +1 -0
  160. package/dist/code-language/timers.js +22 -0
  161. package/dist/code-language/timers.js.map +1 -0
  162. package/dist/code-language/types.d.ts +173 -0
  163. package/dist/code-language/types.d.ts.map +1 -0
  164. package/dist/code-language/types.js +41 -0
  165. package/dist/code-language/types.js.map +1 -0
  166. package/dist/codeblock/index.d.ts +69 -0
  167. package/dist/codeblock/index.d.ts.map +1 -0
  168. package/dist/codeblock/index.js +85 -0
  169. package/dist/codeblock/index.js.map +1 -0
  170. package/dist/color-picker/ColorField.d.ts +39 -0
  171. package/dist/color-picker/ColorField.d.ts.map +1 -0
  172. package/dist/color-picker/ColorField.js +239 -0
  173. package/dist/color-picker/ColorField.js.map +1 -0
  174. package/dist/color-picker/ColorPicker.d.ts +109 -0
  175. package/dist/color-picker/ColorPicker.d.ts.map +1 -0
  176. package/dist/color-picker/ColorPicker.js +757 -0
  177. package/dist/color-picker/ColorPicker.js.map +1 -0
  178. package/dist/color-picker/color.d.ts +105 -0
  179. package/dist/color-picker/color.d.ts.map +1 -0
  180. package/dist/color-picker/color.js +313 -0
  181. package/dist/color-picker/color.js.map +1 -0
  182. package/dist/color-picker/index.d.ts +8 -0
  183. package/dist/color-picker/index.d.ts.map +1 -0
  184. package/dist/color-picker/index.js +19 -0
  185. package/dist/color-picker/index.js.map +1 -0
  186. package/dist/desktop-calendar/eds.d.ts +102 -0
  187. package/dist/desktop-calendar/eds.d.ts.map +1 -0
  188. package/dist/desktop-calendar/eds.js +356 -0
  189. package/dist/desktop-calendar/eds.js.map +1 -0
  190. package/dist/desktop-calendar/ical.d.ts +63 -0
  191. package/dist/desktop-calendar/ical.d.ts.map +1 -0
  192. package/dist/desktop-calendar/ical.js +57 -0
  193. package/dist/desktop-calendar/ical.js.map +1 -0
  194. package/dist/desktop-calendar/index.d.ts +72 -0
  195. package/dist/desktop-calendar/index.d.ts.map +1 -0
  196. package/dist/desktop-calendar/index.js +213 -0
  197. package/dist/desktop-calendar/index.js.map +1 -0
  198. package/dist/embed/client.d.ts +121 -0
  199. package/dist/embed/client.d.ts.map +1 -0
  200. package/dist/embed/client.js +203 -0
  201. package/dist/embed/client.js.map +1 -0
  202. package/dist/embed/host.d.ts +96 -0
  203. package/dist/embed/host.d.ts.map +1 -0
  204. package/dist/embed/host.js +266 -0
  205. package/dist/embed/host.js.map +1 -0
  206. package/dist/embed/index.d.ts +5 -0
  207. package/dist/embed/index.d.ts.map +1 -0
  208. package/dist/embed/index.js +13 -0
  209. package/dist/embed/index.js.map +1 -0
  210. package/dist/embed/timers.d.ts +6 -0
  211. package/dist/embed/timers.d.ts.map +1 -0
  212. package/dist/embed/timers.js +16 -0
  213. package/dist/embed/timers.js.map +1 -0
  214. package/dist/flow/draw.d.ts +45 -0
  215. package/dist/flow/draw.d.ts.map +1 -0
  216. package/dist/flow/draw.js +295 -0
  217. package/dist/flow/draw.js.map +1 -0
  218. package/dist/flow/index.d.ts +64 -0
  219. package/dist/flow/index.d.ts.map +1 -0
  220. package/dist/flow/index.js +306 -0
  221. package/dist/flow/index.js.map +1 -0
  222. package/dist/flow/model.d.ts +158 -0
  223. package/dist/flow/model.d.ts.map +1 -0
  224. package/dist/flow/model.js +566 -0
  225. package/dist/flow/model.js.map +1 -0
  226. package/dist/flow/node.d.ts +429 -0
  227. package/dist/flow/node.d.ts.map +1 -0
  228. package/dist/flow/node.js +3025 -0
  229. package/dist/flow/node.js.map +1 -0
  230. package/dist/flow/paths.d.ts +43 -0
  231. package/dist/flow/paths.d.ts.map +1 -0
  232. package/dist/flow/paths.js +327 -0
  233. package/dist/flow/paths.js.map +1 -0
  234. package/dist/flow/types.d.ts +561 -0
  235. package/dist/flow/types.d.ts.map +1 -0
  236. package/dist/flow/types.js +2 -0
  237. package/dist/flow/types.js.map +1 -0
  238. package/dist/formula/hx.d.ts +24 -0
  239. package/dist/formula/hx.d.ts.map +1 -0
  240. package/dist/formula/hx.js +25 -0
  241. package/dist/formula/hx.js.map +1 -0
  242. package/dist/formula/index.d.ts +74 -0
  243. package/dist/formula/index.d.ts.map +1 -0
  244. package/dist/formula/index.js +155 -0
  245. package/dist/formula/index.js.map +1 -0
  246. package/dist/formula/katex.d.ts +78 -0
  247. package/dist/formula/katex.d.ts.map +1 -0
  248. package/dist/formula/katex.js +130 -0
  249. package/dist/formula/katex.js.map +1 -0
  250. package/dist/formula/layout.d.ts +103 -0
  251. package/dist/formula/layout.d.ts.map +1 -0
  252. package/dist/formula/layout.js +716 -0
  253. package/dist/formula/layout.js.map +1 -0
  254. package/dist/formula/node.d.ts +50 -0
  255. package/dist/formula/node.d.ts.map +1 -0
  256. package/dist/formula/node.js +351 -0
  257. package/dist/formula/node.js.map +1 -0
  258. package/dist/html/controls.d.ts +48 -0
  259. package/dist/html/controls.d.ts.map +1 -0
  260. package/dist/html/controls.js +195 -0
  261. package/dist/html/controls.js.map +1 -0
  262. package/dist/html/css/cascade.d.ts +51 -0
  263. package/dist/html/css/cascade.d.ts.map +1 -0
  264. package/dist/html/css/cascade.js +552 -0
  265. package/dist/html/css/cascade.js.map +1 -0
  266. package/dist/html/css/parse.d.ts +74 -0
  267. package/dist/html/css/parse.d.ts.map +1 -0
  268. package/dist/html/css/parse.js +464 -0
  269. package/dist/html/css/parse.js.map +1 -0
  270. package/dist/html/css/style.d.ts +142 -0
  271. package/dist/html/css/style.d.ts.map +1 -0
  272. package/dist/html/css/style.js +1145 -0
  273. package/dist/html/css/style.js.map +1 -0
  274. package/dist/html/css/ua.d.ts +5 -0
  275. package/dist/html/css/ua.d.ts.map +1 -0
  276. package/dist/html/css/ua.js +171 -0
  277. package/dist/html/css/ua.js.map +1 -0
  278. package/dist/html/css/values.d.ts +78 -0
  279. package/dist/html/css/values.d.ts.map +1 -0
  280. package/dist/html/css/values.js +330 -0
  281. package/dist/html/css/values.js.map +1 -0
  282. package/dist/html/dom.d.ts +112 -0
  283. package/dist/html/dom.d.ts.map +1 -0
  284. package/dist/html/dom.js +374 -0
  285. package/dist/html/dom.js.map +1 -0
  286. package/dist/html/hx.d.ts +24 -0
  287. package/dist/html/hx.d.ts.map +1 -0
  288. package/dist/html/hx.js +29 -0
  289. package/dist/html/hx.js.map +1 -0
  290. package/dist/html/index.d.ts +137 -0
  291. package/dist/html/index.d.ts.map +1 -0
  292. package/dist/html/index.js +339 -0
  293. package/dist/html/index.js.map +1 -0
  294. package/dist/html/layout/block.d.ts +58 -0
  295. package/dist/html/layout/block.d.ts.map +1 -0
  296. package/dist/html/layout/block.js +724 -0
  297. package/dist/html/layout/block.js.map +1 -0
  298. package/dist/html/layout/boxes.d.ts +261 -0
  299. package/dist/html/layout/boxes.d.ts.map +1 -0
  300. package/dist/html/layout/boxes.js +725 -0
  301. package/dist/html/layout/boxes.js.map +1 -0
  302. package/dist/html/layout/flex.d.ts +16 -0
  303. package/dist/html/layout/flex.d.ts.map +1 -0
  304. package/dist/html/layout/flex.js +242 -0
  305. package/dist/html/layout/flex.js.map +1 -0
  306. package/dist/html/layout/floats.d.ts +50 -0
  307. package/dist/html/layout/floats.d.ts.map +1 -0
  308. package/dist/html/layout/floats.js +110 -0
  309. package/dist/html/layout/floats.js.map +1 -0
  310. package/dist/html/layout/inline.d.ts +44 -0
  311. package/dist/html/layout/inline.d.ts.map +1 -0
  312. package/dist/html/layout/inline.js +700 -0
  313. package/dist/html/layout/inline.js.map +1 -0
  314. package/dist/html/layout/table.d.ts +5 -0
  315. package/dist/html/layout/table.d.ts.map +1 -0
  316. package/dist/html/layout/table.js +340 -0
  317. package/dist/html/layout/table.js.map +1 -0
  318. package/dist/html/node.d.ts +149 -0
  319. package/dist/html/node.d.ts.map +1 -0
  320. package/dist/html/node.js +861 -0
  321. package/dist/html/node.js.map +1 -0
  322. package/dist/html/paint.d.ts +48 -0
  323. package/dist/html/paint.d.ts.map +1 -0
  324. package/dist/html/paint.js +495 -0
  325. package/dist/html/paint.js.map +1 -0
  326. package/dist/html/resources.d.ts +48 -0
  327. package/dist/html/resources.d.ts.map +1 -0
  328. package/dist/html/resources.js +156 -0
  329. package/dist/html/resources.js.map +1 -0
  330. package/dist/index.d.ts +48 -0
  331. package/dist/index.d.ts.map +1 -0
  332. package/dist/index.js +92 -0
  333. package/dist/index.js.map +1 -0
  334. package/dist/internal/heights.d.ts +88 -0
  335. package/dist/internal/heights.d.ts.map +1 -0
  336. package/dist/internal/heights.js +203 -0
  337. package/dist/internal/heights.js.map +1 -0
  338. package/dist/internal/hx.d.ts +24 -0
  339. package/dist/internal/hx.d.ts.map +1 -0
  340. package/dist/internal/hx.js +27 -0
  341. package/dist/internal/hx.js.map +1 -0
  342. package/dist/internal/scroll.d.ts +62 -0
  343. package/dist/internal/scroll.d.ts.map +1 -0
  344. package/dist/internal/scroll.js +224 -0
  345. package/dist/internal/scroll.js.map +1 -0
  346. package/dist/internal/text.d.ts +6 -0
  347. package/dist/internal/text.d.ts.map +1 -0
  348. package/dist/internal/text.js +44 -0
  349. package/dist/internal/text.js.map +1 -0
  350. package/dist/internal/timers.d.ts +8 -0
  351. package/dist/internal/timers.d.ts.map +1 -0
  352. package/dist/internal/timers.js +22 -0
  353. package/dist/internal/timers.js.map +1 -0
  354. package/dist/internal/widget.d.ts +40 -0
  355. package/dist/internal/widget.d.ts.map +1 -0
  356. package/dist/internal/widget.js +44 -0
  357. package/dist/internal/widget.js.map +1 -0
  358. package/dist/markdown/ast.d.ts +126 -0
  359. package/dist/markdown/ast.d.ts.map +1 -0
  360. package/dist/markdown/ast.js +8 -0
  361. package/dist/markdown/ast.js.map +1 -0
  362. package/dist/markdown/hx.d.ts +24 -0
  363. package/dist/markdown/hx.d.ts.map +1 -0
  364. package/dist/markdown/hx.js +25 -0
  365. package/dist/markdown/hx.js.map +1 -0
  366. package/dist/markdown/index.d.ts +90 -0
  367. package/dist/markdown/index.d.ts.map +1 -0
  368. package/dist/markdown/index.js +413 -0
  369. package/dist/markdown/index.js.map +1 -0
  370. package/dist/markdown/parse.d.ts +8 -0
  371. package/dist/markdown/parse.d.ts.map +1 -0
  372. package/dist/markdown/parse.js +911 -0
  373. package/dist/markdown/parse.js.map +1 -0
  374. package/dist/markdown/spans.d.ts +20 -0
  375. package/dist/markdown/spans.d.ts.map +1 -0
  376. package/dist/markdown/spans.js +96 -0
  377. package/dist/markdown/spans.js.map +1 -0
  378. package/dist/media-player/backends.d.ts +64 -0
  379. package/dist/media-player/backends.d.ts.map +1 -0
  380. package/dist/media-player/backends.js +110 -0
  381. package/dist/media-player/backends.js.map +1 -0
  382. package/dist/media-player/control.d.ts +40 -0
  383. package/dist/media-player/control.d.ts.map +1 -0
  384. package/dist/media-player/control.js +44 -0
  385. package/dist/media-player/control.js.map +1 -0
  386. package/dist/media-player/hx.d.ts +24 -0
  387. package/dist/media-player/hx.d.ts.map +1 -0
  388. package/dist/media-player/hx.js +25 -0
  389. package/dist/media-player/hx.js.map +1 -0
  390. package/dist/media-player/index.d.ts +107 -0
  391. package/dist/media-player/index.d.ts.map +1 -0
  392. package/dist/media-player/index.js +219 -0
  393. package/dist/media-player/index.js.map +1 -0
  394. package/dist/media-player/mpv.d.ts +4 -0
  395. package/dist/media-player/mpv.d.ts.map +1 -0
  396. package/dist/media-player/mpv.js +120 -0
  397. package/dist/media-player/mpv.js.map +1 -0
  398. package/dist/media-player/vlc.d.ts +8 -0
  399. package/dist/media-player/vlc.d.ts.map +1 -0
  400. package/dist/media-player/vlc.js +83 -0
  401. package/dist/media-player/vlc.js.map +1 -0
  402. package/dist/richtext/index.d.ts +19 -0
  403. package/dist/richtext/index.d.ts.map +1 -0
  404. package/dist/richtext/index.js +4 -0
  405. package/dist/richtext/index.js.map +1 -0
  406. package/dist/richtext/links.d.ts +12 -0
  407. package/dist/richtext/links.d.ts.map +1 -0
  408. package/dist/richtext/links.js +64 -0
  409. package/dist/richtext/links.js.map +1 -0
  410. package/dist/richtext/menu.d.ts +11 -0
  411. package/dist/richtext/menu.d.ts.map +1 -0
  412. package/dist/richtext/menu.js +43 -0
  413. package/dist/richtext/menu.js.map +1 -0
  414. package/dist/richtext/node.d.ts +151 -0
  415. package/dist/richtext/node.d.ts.map +1 -0
  416. package/dist/richtext/node.js +255 -0
  417. package/dist/richtext/node.js.map +1 -0
  418. package/dist/richtext/runs.d.ts +92 -0
  419. package/dist/richtext/runs.d.ts.map +1 -0
  420. package/dist/richtext/runs.js +158 -0
  421. package/dist/richtext/runs.js.map +1 -0
  422. package/dist/table/hx.d.ts +24 -0
  423. package/dist/table/hx.d.ts.map +1 -0
  424. package/dist/table/hx.js +25 -0
  425. package/dist/table/hx.js.map +1 -0
  426. package/dist/table/index.d.ts +169 -0
  427. package/dist/table/index.d.ts.map +1 -0
  428. package/dist/table/index.js +890 -0
  429. package/dist/table/index.js.map +1 -0
  430. package/dist/table/rows.d.ts +136 -0
  431. package/dist/table/rows.d.ts.map +1 -0
  432. package/dist/table/rows.js +146 -0
  433. package/dist/table/rows.js.map +1 -0
  434. package/dist/terminal/backends.d.ts +105 -0
  435. package/dist/terminal/backends.d.ts.map +1 -0
  436. package/dist/terminal/backends.js +185 -0
  437. package/dist/terminal/backends.js.map +1 -0
  438. package/dist/terminal/hx.d.ts +24 -0
  439. package/dist/terminal/hx.d.ts.map +1 -0
  440. package/dist/terminal/hx.js +25 -0
  441. package/dist/terminal/hx.js.map +1 -0
  442. package/dist/terminal/index.d.ts +160 -0
  443. package/dist/terminal/index.d.ts.map +1 -0
  444. package/dist/terminal/index.js +344 -0
  445. package/dist/terminal/index.js.map +1 -0
  446. package/dist/terminal/title.d.ts +24 -0
  447. package/dist/terminal/title.d.ts.map +1 -0
  448. package/dist/terminal/title.js +129 -0
  449. package/dist/terminal/title.js.map +1 -0
  450. package/dist/terminal/vt/colors.d.ts +63 -0
  451. package/dist/terminal/vt/colors.d.ts.map +1 -0
  452. package/dist/terminal/vt/colors.js +203 -0
  453. package/dist/terminal/vt/colors.js.map +1 -0
  454. package/dist/terminal/vt/diff.d.ts +117 -0
  455. package/dist/terminal/vt/diff.d.ts.map +1 -0
  456. package/dist/terminal/vt/diff.js +358 -0
  457. package/dist/terminal/vt/diff.js.map +1 -0
  458. package/dist/terminal/vt/fonts.d.ts +92 -0
  459. package/dist/terminal/vt/fonts.d.ts.map +1 -0
  460. package/dist/terminal/vt/fonts.js +178 -0
  461. package/dist/terminal/vt/fonts.js.map +1 -0
  462. package/dist/terminal/vt/index.d.ts +78 -0
  463. package/dist/terminal/vt/index.d.ts.map +1 -0
  464. package/dist/terminal/vt/index.js +312 -0
  465. package/dist/terminal/vt/index.js.map +1 -0
  466. package/dist/terminal/vt/keys.d.ts +74 -0
  467. package/dist/terminal/vt/keys.d.ts.map +1 -0
  468. package/dist/terminal/vt/keys.js +309 -0
  469. package/dist/terminal/vt/keys.js.map +1 -0
  470. package/dist/terminal/vt/mouse.d.ts +44 -0
  471. package/dist/terminal/vt/mouse.d.ts.map +1 -0
  472. package/dist/terminal/vt/mouse.js +106 -0
  473. package/dist/terminal/vt/mouse.js.map +1 -0
  474. package/dist/terminal/vt/node.d.ts +246 -0
  475. package/dist/terminal/vt/node.d.ts.map +1 -0
  476. package/dist/terminal/vt/node.js +1068 -0
  477. package/dist/terminal/vt/node.js.map +1 -0
  478. package/dist/terminal/vt/pty.d.ts +81 -0
  479. package/dist/terminal/vt/pty.d.ts.map +1 -0
  480. package/dist/terminal/vt/pty.js +201 -0
  481. package/dist/terminal/vt/pty.js.map +1 -0
  482. package/dist/terminal/vt/renderer.d.ts +179 -0
  483. package/dist/terminal/vt/renderer.d.ts.map +1 -0
  484. package/dist/terminal/vt/renderer.js +357 -0
  485. package/dist/terminal/vt/renderer.js.map +1 -0
  486. package/dist/terminal/vt/timers.d.ts +6 -0
  487. package/dist/terminal/vt/timers.d.ts.map +1 -0
  488. package/dist/terminal/vt/timers.js +16 -0
  489. package/dist/terminal/vt/timers.js.map +1 -0
  490. package/dist/terminal/vt/xterm.d.ts +142 -0
  491. package/dist/terminal/vt/xterm.d.ts.map +1 -0
  492. package/dist/terminal/vt/xterm.js +32 -0
  493. package/dist/terminal/vt/xterm.js.map +1 -0
  494. package/dist/terminal-output/hx.d.ts +24 -0
  495. package/dist/terminal-output/hx.d.ts.map +1 -0
  496. package/dist/terminal-output/hx.js +25 -0
  497. package/dist/terminal-output/hx.js.map +1 -0
  498. package/dist/terminal-output/index.d.ts +92 -0
  499. package/dist/terminal-output/index.d.ts.map +1 -0
  500. package/dist/terminal-output/index.js +179 -0
  501. package/dist/terminal-output/index.js.map +1 -0
  502. package/dist/terminal-output/runs.d.ts +27 -0
  503. package/dist/terminal-output/runs.d.ts.map +1 -0
  504. package/dist/terminal-output/runs.js +66 -0
  505. package/dist/terminal-output/runs.js.map +1 -0
  506. package/dist/three/canvas.d.ts +46 -0
  507. package/dist/three/canvas.d.ts.map +1 -0
  508. package/dist/three/canvas.js +305 -0
  509. package/dist/three/canvas.js.map +1 -0
  510. package/dist/three/events.d.ts +64 -0
  511. package/dist/three/events.d.ts.map +1 -0
  512. package/dist/three/events.js +146 -0
  513. package/dist/three/events.js.map +1 -0
  514. package/dist/three/geometries.d.ts +89 -0
  515. package/dist/three/geometries.d.ts.map +1 -0
  516. package/dist/three/geometries.js +345 -0
  517. package/dist/three/geometries.js.map +1 -0
  518. package/dist/three/globals.d.ts +7 -0
  519. package/dist/three/globals.d.ts.map +1 -0
  520. package/dist/three/globals.js +20 -0
  521. package/dist/three/globals.js.map +1 -0
  522. package/dist/three/hx.d.ts +9 -0
  523. package/dist/three/hx.d.ts.map +1 -0
  524. package/dist/three/hx.js +10 -0
  525. package/dist/three/hx.js.map +1 -0
  526. package/dist/three/index.d.ts +22 -0
  527. package/dist/three/index.d.ts.map +1 -0
  528. package/dist/three/index.js +24 -0
  529. package/dist/three/index.js.map +1 -0
  530. package/dist/three/jsx-dev-runtime.d.ts +19 -0
  531. package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
  532. package/dist/three/jsx-dev-runtime.js +2 -0
  533. package/dist/three/jsx-dev-runtime.js.map +1 -0
  534. package/dist/three/jsx-runtime.d.ts +19 -0
  535. package/dist/three/jsx-runtime.d.ts.map +1 -0
  536. package/dist/three/jsx-runtime.js +2 -0
  537. package/dist/three/jsx-runtime.js.map +1 -0
  538. package/dist/three/jsx.d.ts +198 -0
  539. package/dist/three/jsx.d.ts.map +1 -0
  540. package/dist/three/jsx.js +2 -0
  541. package/dist/three/jsx.js.map +1 -0
  542. package/dist/three/materials.d.ts +125 -0
  543. package/dist/three/materials.d.ts.map +1 -0
  544. package/dist/three/materials.js +229 -0
  545. package/dist/three/materials.js.map +1 -0
  546. package/dist/three/math.d.ts +146 -0
  547. package/dist/three/math.d.ts.map +1 -0
  548. package/dist/three/math.js +464 -0
  549. package/dist/three/math.js.map +1 -0
  550. package/dist/three/objects.d.ts +185 -0
  551. package/dist/three/objects.d.ts.map +1 -0
  552. package/dist/three/objects.js +309 -0
  553. package/dist/three/objects.js.map +1 -0
  554. package/dist/three/passes.d.ts +54 -0
  555. package/dist/three/passes.d.ts.map +1 -0
  556. package/dist/three/passes.js +78 -0
  557. package/dist/three/passes.js.map +1 -0
  558. package/dist/three/postprocess.d.ts +85 -0
  559. package/dist/three/postprocess.d.ts.map +1 -0
  560. package/dist/three/postprocess.js +503 -0
  561. package/dist/three/postprocess.js.map +1 -0
  562. package/dist/three/raycast.d.ts +24 -0
  563. package/dist/three/raycast.d.ts.map +1 -0
  564. package/dist/three/raycast.js +138 -0
  565. package/dist/three/raycast.js.map +1 -0
  566. package/dist/three/reconciler.d.ts +48 -0
  567. package/dist/three/reconciler.d.ts.map +1 -0
  568. package/dist/three/reconciler.js +416 -0
  569. package/dist/three/reconciler.js.map +1 -0
  570. package/dist/three/renderer-direct.d.ts +102 -0
  571. package/dist/three/renderer-direct.d.ts.map +1 -0
  572. package/dist/three/renderer-direct.js +782 -0
  573. package/dist/three/renderer-direct.js.map +1 -0
  574. package/dist/three/renderer-indirect.d.ts +68 -0
  575. package/dist/three/renderer-indirect.d.ts.map +1 -0
  576. package/dist/three/renderer-indirect.js +438 -0
  577. package/dist/three/renderer-indirect.js.map +1 -0
  578. package/dist/three/store.d.ts +81 -0
  579. package/dist/three/store.d.ts.map +1 -0
  580. package/dist/three/store.js +110 -0
  581. package/dist/three/store.js.map +1 -0
  582. package/dist/timeline/hx.d.ts +18 -0
  583. package/dist/timeline/hx.d.ts.map +1 -0
  584. package/dist/timeline/hx.js +10 -0
  585. package/dist/timeline/hx.js.map +1 -0
  586. package/dist/timeline/index.d.ts +152 -0
  587. package/dist/timeline/index.d.ts.map +1 -0
  588. package/dist/timeline/index.js +383 -0
  589. package/dist/timeline/index.js.map +1 -0
  590. package/dist/tray-host/hx.d.ts +24 -0
  591. package/dist/tray-host/hx.d.ts.map +1 -0
  592. package/dist/tray-host/hx.js +25 -0
  593. package/dist/tray-host/hx.js.map +1 -0
  594. package/dist/tray-host/index.d.ts +110 -0
  595. package/dist/tray-host/index.d.ts.map +1 -0
  596. package/dist/tray-host/index.js +191 -0
  597. package/dist/tray-host/index.js.map +1 -0
  598. package/dist/tray-host/manager.d.ts +137 -0
  599. package/dist/tray-host/manager.d.ts.map +1 -0
  600. package/dist/tray-host/manager.js +462 -0
  601. package/dist/tray-host/manager.js.map +1 -0
  602. package/dist/tray-host/notify.d.ts +22 -0
  603. package/dist/tray-host/notify.d.ts.map +1 -0
  604. package/dist/tray-host/notify.js +74 -0
  605. package/dist/tray-host/notify.js.map +1 -0
  606. package/dist/tray-host/protocol.d.ts +106 -0
  607. package/dist/tray-host/protocol.d.ts.map +1 -0
  608. package/dist/tray-host/protocol.js +191 -0
  609. package/dist/tray-host/protocol.js.map +1 -0
  610. package/dist/tree/hx.d.ts +24 -0
  611. package/dist/tree/hx.d.ts.map +1 -0
  612. package/dist/tree/hx.js +25 -0
  613. package/dist/tree/hx.js.map +1 -0
  614. package/dist/tree/index.d.ts +221 -0
  615. package/dist/tree/index.d.ts.map +1 -0
  616. package/dist/tree/index.js +751 -0
  617. package/dist/tree/index.js.map +1 -0
  618. package/dist/tree/internal.d.ts +18 -0
  619. package/dist/tree/internal.d.ts.map +1 -0
  620. package/dist/tree/internal.js +66 -0
  621. package/dist/tree/internal.js.map +1 -0
  622. package/dist/tree/rows.d.ts +177 -0
  623. package/dist/tree/rows.d.ts.map +1 -0
  624. package/dist/tree/rows.js +179 -0
  625. package/dist/tree/rows.js.map +1 -0
  626. package/package.json +166 -12
  627. package/src/ansi/cast.ts +159 -0
  628. package/src/ansi/index.ts +53 -0
  629. package/src/ansi/palette.ts +226 -0
  630. package/src/ansi/parse.ts +780 -0
  631. package/src/ansi/sgr.ts +380 -0
  632. package/src/ansi/utf8.ts +84 -0
  633. package/src/calendar/Calendar.ts +744 -0
  634. package/src/calendar/DatePicker.ts +368 -0
  635. package/src/calendar/dates.ts +307 -0
  636. package/src/calendar/index.ts +51 -0
  637. package/src/charts/components.ts +864 -0
  638. package/src/charts/data.ts +776 -0
  639. package/src/charts/hx.ts +39 -0
  640. package/src/charts/index.ts +99 -0
  641. package/src/charts/node.ts +932 -0
  642. package/src/charts/render.ts +982 -0
  643. package/src/charts/scale.ts +214 -0
  644. package/src/charts/spec.ts +122 -0
  645. package/src/charts/timers.ts +24 -0
  646. package/src/code/hx.ts +51 -0
  647. package/src/code/index.ts +174 -0
  648. package/src/code-editor/completion.ts +161 -0
  649. package/src/code-editor/doc.ts +198 -0
  650. package/src/code-editor/hx.ts +26 -0
  651. package/src/code-editor/index.ts +615 -0
  652. package/src/code-editor/node.ts +1926 -0
  653. package/src/code-language/hljs.ts +302 -0
  654. package/src/code-language/index.ts +51 -0
  655. package/src/code-language/languages/glsl.ts +120 -0
  656. package/src/code-language/languages/javascript.ts +419 -0
  657. package/src/code-language/languages/json.ts +72 -0
  658. package/src/code-language/languages/shell.ts +221 -0
  659. package/src/code-language/languages/sql.ts +165 -0
  660. package/src/code-language/lezer.ts +190 -0
  661. package/src/code-language/registry.ts +66 -0
  662. package/src/code-language/runs.ts +128 -0
  663. package/src/code-language/stream.ts +306 -0
  664. package/src/code-language/textmate.ts +134 -0
  665. package/src/code-language/theme.ts +124 -0
  666. package/src/code-language/timers.ts +36 -0
  667. package/src/code-language/types.ts +252 -0
  668. package/src/codeblock/index.ts +146 -0
  669. package/src/color-picker/ColorField.ts +333 -0
  670. package/src/color-picker/ColorPicker.ts +1069 -0
  671. package/src/color-picker/color.ts +399 -0
  672. package/src/color-picker/index.ts +50 -0
  673. package/src/desktop-calendar/eds.ts +484 -0
  674. package/src/desktop-calendar/ical.ts +119 -0
  675. package/src/desktop-calendar/index.ts +287 -0
  676. package/src/embed/client.ts +311 -0
  677. package/src/embed/host.ts +432 -0
  678. package/src/embed/index.ts +33 -0
  679. package/src/embed/timers.ts +32 -0
  680. package/src/flow/draw.ts +418 -0
  681. package/src/flow/index.ts +473 -0
  682. package/src/flow/model.ts +687 -0
  683. package/src/flow/node.ts +3694 -0
  684. package/src/flow/paths.ts +403 -0
  685. package/src/flow/types.ts +634 -0
  686. package/src/formula/hx.ts +51 -0
  687. package/src/formula/index.ts +243 -0
  688. package/src/formula/katex.ts +209 -0
  689. package/src/formula/layout.ts +876 -0
  690. package/src/formula/node.ts +467 -0
  691. package/src/html/controls.ts +244 -0
  692. package/src/html/css/cascade.ts +606 -0
  693. package/src/html/css/parse.ts +500 -0
  694. package/src/html/css/style.ts +1371 -0
  695. package/src/html/css/ua.ts +174 -0
  696. package/src/html/css/values.ts +358 -0
  697. package/src/html/dom.ts +410 -0
  698. package/src/html/hx.ts +55 -0
  699. package/src/html/index.ts +545 -0
  700. package/src/html/layout/block.ts +876 -0
  701. package/src/html/layout/boxes.ts +981 -0
  702. package/src/html/layout/flex.ts +297 -0
  703. package/src/html/layout/floats.ts +125 -0
  704. package/src/html/layout/inline.ts +870 -0
  705. package/src/html/layout/table.ts +380 -0
  706. package/src/html/node.ts +967 -0
  707. package/src/html/paint.ts +605 -0
  708. package/src/html/resources.ts +214 -0
  709. package/src/index.ts +638 -0
  710. package/src/internal/heights.ts +222 -0
  711. package/src/internal/hx.ts +53 -0
  712. package/src/internal/scroll.ts +288 -0
  713. package/src/internal/text.ts +44 -0
  714. package/src/internal/timers.ts +44 -0
  715. package/src/internal/widget.ts +92 -0
  716. package/src/markdown/ast.ts +163 -0
  717. package/src/markdown/hx.ts +51 -0
  718. package/src/markdown/index.ts +686 -0
  719. package/src/markdown/parse.ts +1037 -0
  720. package/src/markdown/spans.ts +143 -0
  721. package/src/media-player/backends.ts +155 -0
  722. package/src/media-player/control.ts +70 -0
  723. package/src/media-player/hx.ts +51 -0
  724. package/src/media-player/index.ts +378 -0
  725. package/src/media-player/mpv.ts +146 -0
  726. package/src/media-player/vlc.ts +97 -0
  727. package/src/richtext/index.ts +42 -0
  728. package/src/richtext/links.ts +78 -0
  729. package/src/richtext/menu.ts +49 -0
  730. package/src/richtext/node.ts +406 -0
  731. package/src/richtext/runs.ts +253 -0
  732. package/src/table/hx.ts +51 -0
  733. package/src/table/index.ts +1270 -0
  734. package/src/table/rows.ts +275 -0
  735. package/src/terminal/backends.ts +242 -0
  736. package/src/terminal/hx.ts +51 -0
  737. package/src/terminal/index.ts +574 -0
  738. package/src/terminal/title.ts +172 -0
  739. package/src/terminal/vt/colors.ts +247 -0
  740. package/src/terminal/vt/diff.ts +467 -0
  741. package/src/terminal/vt/fonts.ts +233 -0
  742. package/src/terminal/vt/index.ts +443 -0
  743. package/src/terminal/vt/keys.ts +369 -0
  744. package/src/terminal/vt/mouse.ts +144 -0
  745. package/src/terminal/vt/node.ts +1242 -0
  746. package/src/terminal/vt/pty.ts +334 -0
  747. package/src/terminal/vt/renderer.ts +555 -0
  748. package/src/terminal/vt/timers.ts +31 -0
  749. package/src/terminal/vt/xterm.ts +193 -0
  750. package/src/terminal-output/hx.ts +51 -0
  751. package/src/terminal-output/index.ts +340 -0
  752. package/src/terminal-output/runs.ts +79 -0
  753. package/src/three/canvas.ts +451 -0
  754. package/src/three/events.ts +197 -0
  755. package/src/three/geometries.ts +429 -0
  756. package/src/three/globals.ts +34 -0
  757. package/src/three/hx.ts +22 -0
  758. package/src/three/index.ts +98 -0
  759. package/src/three/jsx-dev-runtime.ts +27 -0
  760. package/src/three/jsx-runtime.ts +38 -0
  761. package/src/three/jsx.ts +275 -0
  762. package/src/three/materials.ts +270 -0
  763. package/src/three/math.ts +585 -0
  764. package/src/three/objects.ts +397 -0
  765. package/src/three/passes.ts +90 -0
  766. package/src/three/postprocess.ts +677 -0
  767. package/src/three/raycast.ts +189 -0
  768. package/src/three/react-reconciler.d.ts +50 -0
  769. package/src/three/reconciler.ts +624 -0
  770. package/src/three/renderer-direct.ts +1055 -0
  771. package/src/three/renderer-indirect.ts +570 -0
  772. package/src/three/store.ts +207 -0
  773. package/src/timeline/hx.ts +31 -0
  774. package/src/timeline/index.ts +603 -0
  775. package/src/tray-host/hx.ts +51 -0
  776. package/src/tray-host/index.ts +331 -0
  777. package/src/tray-host/manager.ts +639 -0
  778. package/src/tray-host/notify.ts +102 -0
  779. package/src/tray-host/protocol.ts +235 -0
  780. package/src/tree/hx.ts +51 -0
  781. package/src/tree/index.ts +1127 -0
  782. package/src/tree/internal.ts +87 -0
  783. package/src/tree/rows.ts +334 -0
  784. package/src/index.d.ts +0 -2
  785. package/src/index.js +0 -9
  786. package/src/sparkline/index.d.ts +0 -29
  787. package/src/sparkline/index.js +0 -50
  788. package/src/sparkline/node.js +0 -72
@@ -0,0 +1,451 @@
1
+ // `<Canvas>` — the react-three-fiber-shaped entry point, standing on core's
2
+ // public `<glarea>` element.
3
+ //
4
+ // The division of labour: `<glarea>` owns everything that is renderer
5
+ // internals — the child X window on a GL visual, the context, the frame
6
+ // clock, the swap — and exposes it as `onCreated`/`onDraw`/`frameLoop`.
7
+ // This component owns everything that is scene: the second reconciler
8
+ // rendering `children` into the object graph, the store `useThree`/`useFrame`
9
+ // read, the backend-appropriate renderer, picking, and post-processing.
10
+ //
11
+ // Which backend draws is not chosen here: ntk's `glPolicy` decided it when
12
+ // the connection was made, and the context that arrives says which one it
13
+ // is. `glPolicy: 'auto'` at createRoot() is what "pick the best available"
14
+ // spells — the same scene JSX renders either way, which is the point of the
15
+ // shared subset.
16
+ import {
17
+ createElement as h,
18
+ useCallback,
19
+ useEffect,
20
+ useLayoutEffect,
21
+ useMemo,
22
+ useRef,
23
+ useState,
24
+ } from 'react';
25
+ import type { ReactNode, Ref } from 'react';
26
+ import { useSupports } from 'react-x11';
27
+ import type { ReactX11Elements } from 'react-x11';
28
+ // Loads the module the JSX augmentation in jsx.ts targets (see flow/index.ts
29
+ // for the same pattern). Type-only, so it is erased.
30
+ import type {} from 'react-x11/jsx-runtime';
31
+
32
+ import type { Color } from './math.js';
33
+ import { hx } from './hx.js';
34
+ import { OrthographicCamera, PerspectiveCamera, Scene } from './objects.js';
35
+ import type { Camera } from './objects.js';
36
+ import type { BufferGeometry } from './geometries.js';
37
+ import { applyProps, createSceneRoot } from './reconciler.js';
38
+ import type { Instance, SceneContainer, SceneRoot } from './reconciler.js';
39
+ import { ThreeContext, computeViewport, createThreeStore } from './store.js';
40
+ import type { RootState, ThreeStore } from './store.js';
41
+ import { IndirectRenderer } from './renderer-indirect.js';
42
+ import { DirectRenderer } from './renderer-direct.js';
43
+ import { PostProcessor } from './postprocess.js';
44
+ import type { EffectComposer } from './passes.js';
45
+ import { ScenePointer, type ThreeEvent } from './events.js';
46
+ import { sceneWantsPointer } from './raycast.js';
47
+ import { now, warn } from './globals.js';
48
+
49
+ /**
50
+ * Failures that mean "one thing in this scene is broken", not "this machine
51
+ * has no 3D". The fallback is for the second: replacing a whole scene with
52
+ * "no 3D here" because a pass shader has a typo would send the reader off
53
+ * to check their drivers.
54
+ */
55
+ const SCENE_LEVEL = new Set([
56
+ 'GL_SHADER_FAILED',
57
+ 'GL_CONTEXT_INCOMPLETE',
58
+ 'GL_POST_UNAVAILABLE',
59
+ 'GL_POST_TARGET_FAILED',
60
+ ]);
61
+
62
+ type GlAreaProps = ReactX11Elements['glarea'];
63
+
64
+ /** The glarea node surface this component reaches through its ref. */
65
+ interface SurfaceNode {
66
+ requestFrame?: () => void;
67
+ window?: {
68
+ on(name: string, handler: (event: { x: number; y: number }) => void): void;
69
+ setCursor?(cursor: string | null): void;
70
+ } | null;
71
+ }
72
+
73
+ interface DrawInfo {
74
+ width: number;
75
+ height: number;
76
+ }
77
+
78
+ export interface CanvasProps {
79
+ children?: ReactNode;
80
+ /** Layout, as any drawn element takes it. */
81
+ style?: GlAreaProps['style'];
82
+ /**
83
+ * Partial settings for the default camera, r3f-shaped:
84
+ * `{ position: [3, 3, 6], fov: 50, near, far, zoom, up, target }`.
85
+ * A `<perspectiveCamera makeDefault>` in the scene replaces it wholesale.
86
+ */
87
+ camera?: Record<string, unknown>;
88
+ /** An orthographic default camera instead of the perspective one. */
89
+ orthographic?: boolean;
90
+ /**
91
+ * `'demand'` (the default): render when something changed — a commit, a
92
+ * resize, an expose, or `invalidate()`. Subscribing to `useFrame` makes
93
+ * the surface animate, so ported r3f components move without asking.
94
+ * `'always'` runs the clock continuously; `'never'` renders only on
95
+ * `invalidate()`. (r3f defaults to `'always'`; a desktop toolkit is the
96
+ * one place that default wastes a battery, so it is opt-in here.)
97
+ */
98
+ frameloop?: 'always' | 'demand' | 'never';
99
+ /** CSS colour or `[r, g, b, a]` floats (default black). A
100
+ * `<color attach="background" />` in the scene wins over this. */
101
+ clearColor?: GlAreaProps['clearColor'];
102
+ /** Visual spec for the GL window, e.g. `{ DEPTH_SIZE: 24 }`. */
103
+ glx?: GlAreaProps['glx'];
104
+ /** Shown in place of the surface when this connection has no GL at all —
105
+ * an element, or a function of the error (whose `code` says why). */
106
+ fallback?: ReactNode | ((error: Error) => ReactNode);
107
+ /** Runs once the context exists, with the full root state. */
108
+ onCreated?: (state: RootState) => void;
109
+ /** A press that hit no object. */
110
+ onPointerMissed?: (event: ThreeEvent) => void;
111
+ onError?: (error: Error) => void;
112
+ /** Raw GL after the scene draws — the escape hatch `<glarea onDraw>` is.
113
+ * Branch on `gl.backend`: camelCase ES 2 against PascalCase GL 1.x. */
114
+ onDraw?: GlAreaProps['onDraw'];
115
+ }
116
+
117
+ interface CanvasKit {
118
+ scene: Scene;
119
+ store: ThreeStore;
120
+ container: SceneContainer;
121
+ pointer: ScenePointer;
122
+ renderer: IndirectRenderer | DirectRenderer | null;
123
+ post: PostProcessor | null;
124
+ gl: unknown;
125
+ disposals: BufferGeometry[];
126
+ root: SceneRoot | null;
127
+ lastFrameAt: number | null;
128
+ firstFrameAt: number | null;
129
+ }
130
+
131
+ const isGeometry = (value: object): value is BufferGeometry =>
132
+ (value as { isBufferGeometry?: boolean }).isBufferGeometry === true;
133
+
134
+ export function Canvas({
135
+ children,
136
+ style,
137
+ camera,
138
+ orthographic = false,
139
+ frameloop = 'demand',
140
+ clearColor,
141
+ glx,
142
+ fallback,
143
+ onCreated,
144
+ onPointerMissed,
145
+ onError,
146
+ onDraw,
147
+ }: CanvasProps) {
148
+ const supportsShaders = useSupports('shaders');
149
+ const [error, setError] = useState<Error | null>(null);
150
+ const areaRef = useRef<unknown>(null);
151
+
152
+ // Everything with the canvas's lifetime, made once. The camera the scene
153
+ // starts with is the default one; `<perspectiveCamera makeDefault>`
154
+ // replaces it through the store.
155
+ const kit = useMemo<CanvasKit>(() => {
156
+ const scene = new Scene();
157
+ const defaultCamera: Camera = orthographic
158
+ ? new OrthographicCamera()
159
+ : new PerspectiveCamera();
160
+ const size = { width: 1, height: 1 };
161
+ const store = createThreeStore({
162
+ gl: null,
163
+ backend: null,
164
+ scene,
165
+ camera: defaultCamera,
166
+ size,
167
+ viewport: computeViewport(defaultCamera, size),
168
+ clock: { elapsedTime: 0, delta: 0 },
169
+ supportsShaders,
170
+ frameloop,
171
+ invalidate: () => {
172
+ const node = areaRef.current as SurfaceNode | null;
173
+ node?.requestFrame?.();
174
+ },
175
+ });
176
+ const state: CanvasKit = {
177
+ scene,
178
+ store,
179
+ container: {
180
+ scene,
181
+ store,
182
+ invalidate: () => store.getState().invalidate(),
183
+ onRemoved: (instance) => {
184
+ state.pointer.forget(instance);
185
+ if (isGeometry(instance)) state.disposals.push(instance);
186
+ },
187
+ },
188
+ pointer: new ScenePointer({
189
+ scene,
190
+ cameraOf: () => state.renderer?.camera ?? null,
191
+ onPointerMissed: (event) => {
192
+ // read through a ref so the prop can change without remaking the kit
193
+ missedRef.current?.(event);
194
+ },
195
+ }),
196
+ renderer: null,
197
+ post: null,
198
+ gl: null,
199
+ disposals: [],
200
+ root: null,
201
+ lastFrameAt: null,
202
+ firstFrameAt: null,
203
+ };
204
+ // mutations arriving outside React — `ref.current.position.x = 2` in an
205
+ // event handler — redraw a demand-mode surface without an invalidate()
206
+ scene.propagateDirty(() => store.getState().invalidate());
207
+ return state;
208
+ // the kit is per-mount; remaking it on prop changes would drop the scene
209
+ // eslint-disable-next-line react-hooks/exhaustive-deps
210
+ }, []);
211
+
212
+ const missedRef = useRef(onPointerMissed);
213
+ missedRef.current = onPointerMissed;
214
+
215
+ // r3f's camera prop contract: partial settings applied onto the default
216
+ // camera, diffed so an unchanged inline object costs nothing new.
217
+ const prevCameraProps = useRef<Record<string, unknown>>({});
218
+ useEffect(() => {
219
+ if (!camera) return;
220
+ applyProps(
221
+ kit.store.getState().camera as unknown as Instance,
222
+ prevCameraProps.current,
223
+ camera,
224
+ );
225
+ prevCameraProps.current = camera;
226
+ kit.store.getState().invalidate();
227
+ }, [camera, kit]);
228
+
229
+ useEffect(() => {
230
+ if (kit.store.getState().frameloop !== frameloop) {
231
+ kit.store.setState({ frameloop });
232
+ }
233
+ }, [frameloop, kit]);
234
+
235
+ // Until a context exists the hook is the best prediction there is, and
236
+ // it can settle false→true after the kit captured it (caps resolve on
237
+ // their own clock). Keep the store following the hook so a direct-only
238
+ // element mounting on that flip is judged by the fresh value — declared
239
+ // before the scene-root effects so it lands first. The created context
240
+ // overwrites this with the backend that actually arrived.
241
+ useLayoutEffect(() => {
242
+ const state = kit.store.getState();
243
+ if (!state.backend && state.supportsShaders !== supportsShaders) {
244
+ kit.store.setState({ supportsShaders });
245
+ }
246
+ }, [kit, supportsShaders]);
247
+
248
+ // The scene root: created once, fed the children every render, torn down
249
+ // with the canvas. `useLayoutEffect` so the scene exists before the
250
+ // surface's first frame asks it to draw.
251
+ useLayoutEffect(() => {
252
+ kit.root = createSceneRoot(kit.container);
253
+ return () => {
254
+ kit.root?.unmount();
255
+ kit.root = null;
256
+ if (kit.renderer && kit.gl) {
257
+ kit.renderer.dispose(kit.gl);
258
+ kit.post?.dispose(kit.gl);
259
+ }
260
+ };
261
+ // eslint-disable-next-line react-hooks/exhaustive-deps
262
+ }, [kit]);
263
+ useLayoutEffect(() => {
264
+ kit.root?.render(h(ThreeContext.Provider, { value: kit.store }, children));
265
+ });
266
+
267
+ // The surface animates while anything subscribes to useFrame — that is
268
+ // what makes a ported r3f component move — or while frameloop asks for it.
269
+ const [animating, setAnimating] = useState(false);
270
+ useEffect(
271
+ () =>
272
+ kit.store.subscribe(() => {
273
+ setAnimating(kit.store.frames.length > 0);
274
+ }),
275
+ [kit],
276
+ );
277
+
278
+ const handleError = useCallback(
279
+ (err: Error & { code?: string }) => {
280
+ // The fallback means "this surface has no GL", so only a failure to
281
+ // get a context switches to it.
282
+ if (!SCENE_LEVEL.has(err?.code ?? '')) setError(err);
283
+ if (onError) return onError(err);
284
+ if (fallback === undefined) {
285
+ warn(`@react-x11/components: <Canvas>: ${err?.message ?? err}`);
286
+ }
287
+ },
288
+ [onError, fallback],
289
+ );
290
+
291
+ const handleCreated = useCallback(
292
+ (gl: { backend?: string }) => {
293
+ kit.gl = gl;
294
+ const backend = gl?.backend === 'direct' ? 'direct' : 'indirect';
295
+ if (backend === 'direct') {
296
+ const renderer = new DirectRenderer();
297
+ renderer.onError = handleError;
298
+ kit.renderer = renderer;
299
+ } else {
300
+ kit.renderer = new IndirectRenderer();
301
+ }
302
+ // The context in hand outranks any prediction: once a backend has
303
+ // actually arrived, `useThree((s) => s.supportsShaders)` and the
304
+ // direct-only mount guard follow it. (Since react-x11#358 the
305
+ // useSupports('shaders') hook is policy-aware and agrees with this;
306
+ // writing it here keeps the store truthful on any core version.)
307
+ kit.store.setState({
308
+ gl,
309
+ backend,
310
+ supportsShaders: backend === 'direct',
311
+ });
312
+ onCreated?.(kit.store.getState());
313
+ },
314
+ // handleError is stable enough (fallback/onError changes reroute later
315
+ // reports through the current closure on the next created surface)
316
+ // eslint-disable-next-line react-hooks/exhaustive-deps
317
+ [kit],
318
+ );
319
+
320
+ const onDrawRef = useRef(onDraw);
321
+ onDrawRef.current = onDraw;
322
+
323
+ const handleDraw = useCallback(
324
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
325
+ (gl: any, info: DrawInfo) => {
326
+ const renderer = kit.renderer;
327
+ if (!renderer) return;
328
+ const store = kit.store;
329
+ const state = store.getState();
330
+
331
+ if (
332
+ state.size.width !== info.width ||
333
+ state.size.height !== info.height
334
+ ) {
335
+ const size = { width: info.width, height: info.height };
336
+ store.setState({
337
+ size,
338
+ viewport: computeViewport(state.camera, size),
339
+ });
340
+ }
341
+
342
+ // geometry that left the tree: its server/GPU resources go with it
343
+ if (kit.disposals.length) {
344
+ for (const geometry of kit.disposals) renderer.forget(gl, geometry);
345
+ kit.disposals.length = 0;
346
+ }
347
+
348
+ // the frame clock, before anything draws: a callback that mutates the
349
+ // scene is drawing this frame, and one that sets React state lands on
350
+ // the next — both the r3f contract
351
+ const time = now();
352
+ if (kit.firstFrameAt === null) kit.firstFrameAt = time;
353
+ // clamped: a surface that was occluded for a second must not teleport
354
+ // everything that integrates against delta
355
+ const delta = Math.min((time - (kit.lastFrameAt ?? time)) / 1000, 0.1);
356
+ kit.lastFrameAt = time;
357
+ const clock = store.getState().clock;
358
+ clock.elapsedTime = (time - kit.firstFrameAt) / 1000;
359
+ clock.delta = delta;
360
+ store.runFrames(store.getState(), delta);
361
+
362
+ // pointer events are only worth selecting on the X window when
363
+ // something in the scene listens — checked when the tree said it
364
+ // changed, attached the first time it is true
365
+ if (store.eventsDirty) {
366
+ store.eventsDirty = false;
367
+ if (!kit.pointer.attached && sceneWantsPointer(kit.scene.children)) {
368
+ const node = areaRef.current as SurfaceNode | null;
369
+ if (node?.window) kit.pointer.attach(node.window);
370
+ }
371
+ }
372
+
373
+ const current = store.getState();
374
+ const scene = kit.scene;
375
+
376
+ // `<color attach="background" />` wins over the clearColor prop. The
377
+ // surface already cleared to the prop before this ran, so only an
378
+ // explicit background costs a second clear.
379
+ const background = scene.background;
380
+ const composer =
381
+ renderer.backend === 'direct'
382
+ ? (scene.children.find(
383
+ (child) => (child as unknown as EffectComposer).isComposer,
384
+ ) as EffectComposer | undefined)
385
+ : undefined;
386
+
387
+ const anyGl = gl as {
388
+ clearColor?: (r: number, g: number, b: number, a: number) => void;
389
+ clear?: (bits: number) => void;
390
+ ClearColor?: (r: number, g: number, b: number, a: number) => void;
391
+ Clear?: (bits: number) => void;
392
+ COLOR_BUFFER_BIT?: number;
393
+ DEPTH_BUFFER_BIT?: number;
394
+ };
395
+ const clearTo = (color: Color | null) => {
396
+ const [r, g, b] = color ? color.toArray() : [0, 0, 0];
397
+ const a = color ? color._alpha : 1;
398
+ if (renderer.backend === 'direct') {
399
+ anyGl.clearColor?.(r, g, b, a);
400
+ anyGl.clear?.(anyGl.COLOR_BUFFER_BIT! | anyGl.DEPTH_BUFFER_BIT!);
401
+ } else {
402
+ anyGl.ClearColor?.(r, g, b, a);
403
+ anyGl.Clear?.(anyGl.COLOR_BUFFER_BIT! | anyGl.DEPTH_BUFFER_BIT!);
404
+ }
405
+ };
406
+
407
+ // An <effectComposer> redirects the frame into a texture, and the
408
+ // redirect has to happen before the clear: the clear colour is the
409
+ // composed image's background, and `onDraw` output is part of what
410
+ // gets composed.
411
+ let composed = false;
412
+ if (composer && renderer.backend === 'direct') {
413
+ kit.post ??= new PostProcessor(renderer as DirectRenderer);
414
+ composed = kit.post.begin(gl, info, composer);
415
+ if (composed) clearTo(background);
416
+ } else if (background) {
417
+ clearTo(background);
418
+ }
419
+
420
+ renderer.render(gl, scene, current.camera, info);
421
+ onDrawRef.current?.(gl, info as never);
422
+ if (composed) kit.post!.end(gl, info);
423
+ },
424
+ // eslint-disable-next-line react-hooks/exhaustive-deps
425
+ [kit],
426
+ );
427
+
428
+ if (error && fallback !== undefined) {
429
+ return hx(
430
+ 'box',
431
+ { style },
432
+ typeof fallback === 'function' ? fallback(error) : fallback,
433
+ );
434
+ }
435
+
436
+ const loop =
437
+ frameloop === 'always' || (frameloop === 'demand' && animating)
438
+ ? 'always'
439
+ : 'demand';
440
+
441
+ return hx('glarea', {
442
+ ref: areaRef as Ref<never>,
443
+ style,
444
+ clearColor,
445
+ glx,
446
+ frameLoop: loop,
447
+ onCreated: handleCreated as GlAreaProps['onCreated'],
448
+ onDraw: handleDraw as GlAreaProps['onDraw'],
449
+ onError: handleError,
450
+ });
451
+ }
@@ -0,0 +1,197 @@
1
+ // Pointer events for the scene: X mouse events on the `<glarea>`'s child
2
+ // window, raycast against the CPU-side geometry, dispatched to the object
3
+ // they hit and bubbled up its ancestors — a port of react-x11's
4
+ // `src/pointer3d.js` onto the object graph, with the event shaped the way
5
+ // r3f handlers expect (`object`, `point`, `distance`, `stopPropagation`).
6
+ import type { Mesh, Object3D, Scene } from './objects.js';
7
+ import { raycast } from './raycast.js';
8
+ import type { RayHit } from './raycast.js';
9
+ import type { FrameCamera } from './renderer-indirect.js';
10
+
11
+ /** What a pointer handler receives. */
12
+ export interface ThreeEvent {
13
+ type: string;
14
+ /** The object whose handler is running (bubbling walks ancestors). */
15
+ target: Object3D | null;
16
+ /** The mesh the ray hit. */
17
+ object: Mesh | null;
18
+ point: [number, number, number] | null;
19
+ distance: number | null;
20
+ face: number | null;
21
+ uv: [number, number] | null;
22
+ x: number | undefined;
23
+ y: number | undefined;
24
+ nativeEvent: unknown;
25
+ stopPropagation(): void;
26
+ readonly propagationStopped: boolean;
27
+ }
28
+
29
+ interface NativeMouse {
30
+ x: number;
31
+ y: number;
32
+ }
33
+
34
+ /** The window seam this needs — what an ntk window provides. */
35
+ export interface PointerSource {
36
+ on(name: string, handler: (event: NativeMouse) => void): unknown;
37
+ setCursor?(cursor: string | null): void;
38
+ }
39
+
40
+ /** The dispatch path: the object that was hit, then its ancestors. */
41
+ function bubblePath(node: Object3D, scene: Scene): Object3D[] {
42
+ const path: Object3D[] = [];
43
+ for (
44
+ let n: Object3D | null = node;
45
+ n && (n as unknown) !== (scene as unknown);
46
+ n = n.parent
47
+ ) {
48
+ path.push(n);
49
+ }
50
+ return path;
51
+ }
52
+
53
+ /**
54
+ * One canvas's pointer pipeline. The canvas attaches it to the surface's
55
+ * child X window once anything in the scene listens; hover and press state
56
+ * live here so enter/leave pairs and click (down and up on the same object)
57
+ * come out right.
58
+ */
59
+ export class ScenePointer {
60
+ private scene: Scene;
61
+ private cameraOf: () => FrameCamera | null;
62
+ private onMissed: (event: ThreeEvent) => void;
63
+ private hovered: Object3D | null = null;
64
+ private pressed: Object3D | null = null;
65
+ private _cursor: string | null = null;
66
+ private source: PointerSource | null = null;
67
+ attached = false;
68
+
69
+ constructor(options: {
70
+ scene: Scene;
71
+ cameraOf: () => FrameCamera | null;
72
+ onPointerMissed?: (event: ThreeEvent) => void;
73
+ }) {
74
+ this.scene = options.scene;
75
+ this.cameraOf = options.cameraOf;
76
+ this.onMissed = (event) => options.onPointerMissed?.(event);
77
+ }
78
+
79
+ attach(source: PointerSource): void {
80
+ if (this.attached || typeof source.on !== 'function') return;
81
+ this.attached = true;
82
+ this.source = source;
83
+ source.on('mousedown', (ev) => this.onPointer('pointerdown', ev));
84
+ source.on('mouseup', (ev) => this.onPointer('pointerup', ev));
85
+ source.on('mousemove', (ev) => this.onPointer('pointermove', ev));
86
+ source.on('mouseout', () => this.onLeave());
87
+ }
88
+
89
+ /** The nearest hit under the pointer, or null. */
90
+ private pick(ev: NativeMouse): RayHit | null {
91
+ const camera = this.cameraOf();
92
+ if (!camera) return null;
93
+ const [hit] = raycast(this.scene.children, ev.x, ev.y, camera);
94
+ return hit ?? null;
95
+ }
96
+
97
+ private makeEvent(
98
+ type: string,
99
+ hit: RayHit | null,
100
+ native: NativeMouse | null,
101
+ target: Object3D | null,
102
+ ): ThreeEvent {
103
+ let stopped = false;
104
+ return {
105
+ type,
106
+ target,
107
+ object: hit?.object ?? null,
108
+ point: hit?.point ?? null,
109
+ distance: hit?.distance ?? null,
110
+ face: hit?.face ?? null,
111
+ uv: hit?.uv ?? null,
112
+ x: native?.x,
113
+ y: native?.y,
114
+ nativeEvent: native,
115
+ stopPropagation() {
116
+ stopped = true;
117
+ },
118
+ get propagationStopped() {
119
+ return stopped;
120
+ },
121
+ };
122
+ }
123
+
124
+ /** Call `on<Name>` along the bubble path until one stops propagation. */
125
+ private dispatch(
126
+ name: string,
127
+ hit: RayHit | null,
128
+ native: NativeMouse | null,
129
+ node: Object3D | null = hit?.object ?? null,
130
+ ): void {
131
+ if (!node) return;
132
+ const prop = `on${name[0].toUpperCase()}${name.slice(1)}`;
133
+ let event: ThreeEvent | null = null;
134
+ for (const target of bubblePath(node, this.scene)) {
135
+ const handler = (target.__handlers as Record<string, unknown> | null)?.[
136
+ prop
137
+ ];
138
+ if (typeof handler !== 'function') continue;
139
+ event = event ?? this.makeEvent(name.toLowerCase(), hit, native, target);
140
+ event.target = target;
141
+ (handler as (event: ThreeEvent) => void)(event);
142
+ if (event.propagationStopped) break;
143
+ }
144
+ }
145
+
146
+ private onPointer(type: string, native: NativeMouse): void {
147
+ const hit = this.pick(native);
148
+ if (type === 'pointermove') {
149
+ this.updateHover(hit, native);
150
+ if (hit) this.dispatch('pointerMove', hit, native);
151
+ return;
152
+ }
153
+ if (type === 'pointerdown') {
154
+ this.pressed = hit?.object ?? null;
155
+ if (hit) this.dispatch('pointerDown', hit, native);
156
+ else this.onMissed(this.makeEvent('pointermissed', null, native, null));
157
+ return;
158
+ }
159
+ // pointerup: a click is down and up on the same object
160
+ if (hit) this.dispatch('pointerUp', hit, native);
161
+ if (hit && this.pressed === hit.object) {
162
+ this.dispatch('click', hit, native);
163
+ }
164
+ this.pressed = null;
165
+ }
166
+
167
+ /** enter/leave, diffed against the object hovered last time. */
168
+ private updateHover(hit: RayHit | null, native: NativeMouse | null): void {
169
+ const next = hit?.object ?? null;
170
+ if (next === this.hovered) return;
171
+ const previous = this.hovered;
172
+ this.hovered = next;
173
+ if (previous) this.dispatch('pointerOut', null, native, previous);
174
+ if (next) this.dispatch('pointerOver', hit, native);
175
+ this.applyCursor(next);
176
+ }
177
+
178
+ private applyCursor(node: Object3D | null): void {
179
+ const source = this.source;
180
+ if (typeof source?.setCursor !== 'function') return;
181
+ const cursor = node?.cursor ?? null;
182
+ if (cursor === this._cursor) return;
183
+ this._cursor = cursor;
184
+ source.setCursor(cursor);
185
+ }
186
+
187
+ private onLeave(): void {
188
+ if (!this.hovered) return;
189
+ this.updateHover(null, null);
190
+ }
191
+
192
+ /** A node left the tree: drop references to it. */
193
+ forget(node: object): void {
194
+ if (this.hovered === node) this.hovered = null;
195
+ if (this.pressed === node) this.pressed = null;
196
+ }
197
+ }