@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,570 @@
1
+ // The scene drawn through indirect GLX — GL 1.x commands encoded into the X
2
+ // connection. A port of react-x11's `src/scene3d.js` renderer, reading the
3
+ // mutable object graph instead of retained-node props.
4
+ //
5
+ // The rule that shapes everything here is a protocol one: GLX encodes no
6
+ // vertex arrays, so geometry can only travel as immediate-mode commands.
7
+ // Sending a mesh per frame costs kilobytes per frame, so every geometry is
8
+ // compiled into a **server-side display list** once and replayed with a
9
+ // single CallList. A frame is then matrices + material state + one CallList
10
+ // per mesh, whatever the triangle count — the property the tests assert on
11
+ // the encoded command stream.
12
+ //
13
+ // The GL object is ntk's indirect context: PascalCase OpenGL 1.x, untyped
14
+ // because it is a JS façade over the protocol encoder.
15
+ /* The one file-wide `any`: the GL façade. */
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ type GL = any;
18
+
19
+ import type { Mat4 } from './math.js';
20
+ import { identity, multiply, compose } from './math.js';
21
+ import type { BufferGeometry } from './geometries.js';
22
+ import type {
23
+ InstanceSpec,
24
+ Light,
25
+ Mesh,
26
+ Object3D,
27
+ Primitive,
28
+ Scene,
29
+ SpotLight,
30
+ PointLight,
31
+ Camera,
32
+ } from './objects.js';
33
+ import { InstancedMesh } from './objects.js';
34
+ import type { Material, TextureImage } from './materials.js';
35
+ import { UNLIT_MATERIALS, materialColors } from './materials.js';
36
+ import { Color } from './math.js';
37
+ import { warn } from './globals.js';
38
+
39
+ // Fixed-function GL has exactly eight light units. The shader backend has no
40
+ // such limit, but keeps the same cap so a scene lights identically on both.
41
+ export const MAX_LIGHTS = 8;
42
+
43
+ export interface FrameCamera {
44
+ projection: Mat4;
45
+ view: Mat4;
46
+ width: number;
47
+ height: number;
48
+ }
49
+
50
+ /** The GL primitive a drawable's vertices are assembled into. */
51
+ function BEGIN_MODE(gl: GL, primitive: Primitive): number {
52
+ switch (primitive) {
53
+ case 'points':
54
+ return gl.POINTS;
55
+ case 'lines':
56
+ return gl.LINES;
57
+ case 'lineStrip':
58
+ return gl.LINE_STRIP;
59
+ case 'lineLoop':
60
+ return gl.LINE_LOOP;
61
+ default:
62
+ return gl.TRIANGLES;
63
+ }
64
+ }
65
+
66
+ const asTriple = (
67
+ value: readonly number[] | number | undefined,
68
+ fallback: [number, number, number],
69
+ ): [number, number, number] => {
70
+ if (value == null) return fallback;
71
+ if (typeof value === 'number') return [value, value, value];
72
+ return [value[0] ?? 0, value[1] ?? 0, value[2] ?? 0];
73
+ };
74
+
75
+ /** One `<instancedMesh>` entry's transform, in the parent's space. */
76
+ export function instanceMatrix(
77
+ instance: InstanceSpec,
78
+ out = new Float32Array(16),
79
+ ): Mat4 {
80
+ return compose(
81
+ asTriple(instance.position, [0, 0, 0]),
82
+ asTriple(instance.rotation, [0, 0, 0]),
83
+ asTriple(instance.scale, [1, 1, 1]),
84
+ out,
85
+ );
86
+ }
87
+
88
+ export interface CollectedLight {
89
+ node: Light;
90
+ world: Mat4;
91
+ }
92
+
93
+ /** Lights with their world matrices, in tree order. */
94
+ export function collectLights(
95
+ nodes: Object3D[],
96
+ parentMatrix: Mat4,
97
+ out: CollectedLight[] = [],
98
+ ): CollectedLight[] {
99
+ for (const node of nodes) {
100
+ if (!node.isObject3D || !node.visible) continue;
101
+ const world = multiply(parentMatrix, node.localMatrix());
102
+ if ((node as Light).isLight) out.push({ node: node as Light, world });
103
+ collectLights(node.children, world, out);
104
+ }
105
+ return out;
106
+ }
107
+
108
+ const scaled = (
109
+ [r, g, b]: [number, number, number] | readonly number[],
110
+ intensity: number,
111
+ ): [number, number, number, number] => [
112
+ r * intensity,
113
+ g * intensity,
114
+ b * intensity,
115
+ 1,
116
+ ];
117
+
118
+ const instanceColor = (
119
+ value: InstanceSpec['color'],
120
+ ): [number, number, number] => {
121
+ const c = new Color(value as never);
122
+ return [c.r, c.g, c.b];
123
+ };
124
+
125
+ interface ListEntry {
126
+ id: number;
127
+ version: number;
128
+ }
129
+
130
+ /**
131
+ * Per-surface GL bookkeeping: the display list of every geometry, and the
132
+ * material state last sent (so an unchanged material costs nothing).
133
+ */
134
+ export class IndirectRenderer {
135
+ readonly backend = 'indirect';
136
+
137
+ private lists = new Map<BufferGeometry, Map<Primitive, ListEntry>>();
138
+ private nextList = 1;
139
+ private textures = new Map<TextureImage, number>();
140
+ private nextTexture = 1;
141
+ private materialKey: string | null = null;
142
+ private initialized = false;
143
+ private enabledLights = 0;
144
+ private lit = false;
145
+ private warnedLightLimit = false;
146
+ private warnedDirectOnly = false;
147
+
148
+ /** The matrices of the frame on screen — what picking rays are cast with. */
149
+ camera: FrameCamera | null = null;
150
+
151
+ /** Draw `scene`; false when there is nothing 3D to draw. */
152
+ render(
153
+ gl: GL,
154
+ scene: Scene,
155
+ camera: Camera,
156
+ size: { width: number; height: number },
157
+ ): boolean {
158
+ const roots = scene.children.filter((c) => c.isObject3D);
159
+ if (roots.length === 0) return false;
160
+
161
+ if (!this.initialized) {
162
+ this.initialized = true;
163
+ gl.Enable(gl.DEPTH_TEST);
164
+ gl.Enable(gl.NORMALIZE); // scaled meshes keep unit-length normals
165
+ gl.ShadeModel(gl.SMOOTH);
166
+ }
167
+ this.materialKey = null;
168
+
169
+ const projection = camera.projectionMatrix(size.width, size.height);
170
+ const view = camera.viewMatrix();
171
+ this.camera = { projection, view, width: size.width, height: size.height };
172
+ gl.MatrixMode(gl.PROJECTION);
173
+ gl.LoadIdentity();
174
+ gl.MultMatrixf(projection);
175
+ gl.MatrixMode(gl.MODELVIEW);
176
+ gl.LoadIdentity();
177
+ gl.MultMatrixf(view);
178
+
179
+ // light positions are transformed by the modelview matrix in force when
180
+ // they are sent, and it is the view matrix right now — so world-space
181
+ // positions land in eye space exactly as GL expects
182
+ this.applyLights(gl, collectLights(roots, identity()));
183
+
184
+ for (const node of roots) this.drawObject(gl, node, identity());
185
+ return true;
186
+ }
187
+
188
+ private drawObject(gl: GL, node: Object3D, parentWorld: Mat4): void {
189
+ if (!node.visible) return;
190
+ // the world matrix is recorded rather than recomputed later: picking
191
+ // rays are transformed by exactly what was drawn
192
+ const world = multiply(parentWorld, node.localMatrix());
193
+ node.__world = world;
194
+ gl.PushMatrix();
195
+ gl.MultMatrixf(node.localMatrix());
196
+ if ((node as Mesh).isMesh) this.drawMesh(gl, node as Mesh);
197
+ for (const child of node.children) {
198
+ if (child.isObject3D) this.drawObject(gl, child, world);
199
+ }
200
+ gl.PopMatrix();
201
+ }
202
+
203
+ private drawMesh(gl: GL, mesh: Mesh): void {
204
+ const geometry = mesh.geometry;
205
+ if (!geometry) return;
206
+ const applied = this.applyMaterial(gl, mesh.material);
207
+ const list = this.listFor(gl, geometry, mesh.primitive);
208
+ if (!(mesh instanceof InstancedMesh)) {
209
+ gl.CallList(list);
210
+ return;
211
+ }
212
+
213
+ // One list, replayed under each instance's transform. The geometry is
214
+ // compiled once however many instances there are, which is the whole
215
+ // saving; the per-instance cost is a matrix and a CallList.
216
+ //
217
+ // Colour is GL state, and PopMatrix restores the matrix and nothing
218
+ // else — so once any instance has set one, every instance has to say
219
+ // what it wants or it inherits its predecessor's.
220
+ const colored = mesh.instances.some((instance) => instance.color);
221
+ for (const instance of mesh.instances) {
222
+ gl.PushMatrix();
223
+ gl.MultMatrixf(instanceMatrix(instance));
224
+ if (colored) {
225
+ const [r, g, b] = instance.color
226
+ ? instanceColor(instance.color)
227
+ : applied.color;
228
+ gl.Color3f(r, g, b);
229
+ }
230
+ gl.CallList(list);
231
+ gl.PopMatrix();
232
+ }
233
+ // the material's own colour is no longer what is current
234
+ if (colored) this.materialKey = null;
235
+ }
236
+
237
+ /**
238
+ * Upload once, bind per frame. Texture pixels are the same problem as
239
+ * geometry — kilobytes that must not cross the wire twice — so an image is
240
+ * uploaded on first use and only rebound afterwards. `map` is an ntk
241
+ * `Image`, or anything with `{ width, height, data }` in RGBA byte order.
242
+ */
243
+ private textureFor(gl: GL, image: TextureImage): number {
244
+ const cached = this.textures.get(image);
245
+ if (cached) return cached;
246
+ const id = this.nextTexture++;
247
+ gl.BindTexture(gl.TEXTURE_2D, id);
248
+ gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
249
+ gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
250
+ gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
251
+ gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
252
+ gl.TexImage2D(
253
+ gl.TEXTURE_2D,
254
+ 0,
255
+ gl.RGBA,
256
+ image.width,
257
+ image.height,
258
+ 0,
259
+ gl.RGBA,
260
+ gl.UNSIGNED_BYTE,
261
+ image.data,
262
+ );
263
+ this.textures.set(image, id);
264
+ return id;
265
+ }
266
+
267
+ /** Compile once, replay forever — this is the whole point of the design. */
268
+ private listFor(
269
+ gl: GL,
270
+ geometry: BufferGeometry,
271
+ primitive: Primitive,
272
+ ): number {
273
+ // Keyed by primitive as well as by geometry: the same vertices compiled
274
+ // as triangles and as points are two different lists, and a scene can
275
+ // legitimately use one geometry both ways.
276
+ let perPrimitive = this.lists.get(geometry);
277
+ if (!perPrimitive) this.lists.set(geometry, (perPrimitive = new Map()));
278
+ const cached = perPrimitive.get(primitive);
279
+ if (cached && cached.version === geometry.version) return cached.id;
280
+ const id = cached ? cached.id : this.nextList++;
281
+
282
+ const shaded = primitive === 'triangles';
283
+ const { positions, normals, uvs, index } = geometry.data({
284
+ normals: shaded,
285
+ });
286
+ // Points ignore any index — every vertex is one dot, and running the
287
+ // triangle index over them would draw the shared ones repeatedly.
288
+ const useIndex = primitive === 'points' ? null : index;
289
+ const count = useIndex ? useIndex.length : positions.length / 3;
290
+
291
+ gl.NewList(id, gl.COMPILE);
292
+ gl.Begin(BEGIN_MODE(gl, primitive));
293
+ for (let i = 0; i < count; i++) {
294
+ const v = useIndex ? useIndex[i] : i;
295
+ if (shaded && normals.length > v * 3 + 2) {
296
+ gl.Normal3f(normals[v * 3], normals[v * 3 + 1], normals[v * 3 + 2]);
297
+ }
298
+ if (shaded && uvs.length > v * 2 + 1) {
299
+ gl.TexCoord2f(uvs[v * 2], uvs[v * 2 + 1]);
300
+ }
301
+ gl.Vertex3f(positions[v * 3], positions[v * 3 + 1], positions[v * 3 + 2]);
302
+ }
303
+ gl.End();
304
+ gl.EndList();
305
+
306
+ perPrimitive.set(primitive, { id, version: geometry.version });
307
+ return id;
308
+ }
309
+
310
+ /**
311
+ * Fixed-function GL has eight light units. `<ambientLight>` has no unit of
312
+ * its own — its colour is summed into the first light's GL_AMBIENT term
313
+ * (and into a dummy unit when it is the only light in the scene).
314
+ */
315
+ private applyLights(gl: GL, lights: CollectedLight[]): void {
316
+ let ambient: [number, number, number] = [0, 0, 0];
317
+ const units: {
318
+ node: Light;
319
+ intensity: number;
320
+ color: [number, number, number];
321
+ world: Mat4;
322
+ }[] = [];
323
+ for (const light of lights) {
324
+ const { node } = light;
325
+ const intensity = node.intensity;
326
+ const { r, g, b } = node.color;
327
+ if ((node as { isAmbientLight?: boolean }).isAmbientLight) {
328
+ ambient = [
329
+ ambient[0] + r * intensity,
330
+ ambient[1] + g * intensity,
331
+ ambient[2] + b * intensity,
332
+ ];
333
+ continue;
334
+ }
335
+ units.push({ node, intensity, color: [r, g, b], world: light.world });
336
+ }
337
+
338
+ if (units.length > MAX_LIGHTS && !this.warnedLightLimit) {
339
+ this.warnedLightLimit = true;
340
+ warn(
341
+ `@react-x11/components: ${units.length} lights in the scene; ` +
342
+ `fixed-function GL has ${MAX_LIGHTS} light units, so the rest ` +
343
+ 'are ignored.',
344
+ );
345
+ }
346
+ const used = units.slice(0, MAX_LIGHTS);
347
+ this.lit = used.length > 0 || ambient.some((c) => c > 0);
348
+
349
+ if (!this.lit) {
350
+ for (let i = 0; i < this.enabledLights; i++) gl.Disable(gl.LIGHT0 + i);
351
+ this.enabledLights = 0;
352
+ return;
353
+ }
354
+
355
+ // ambient-only scenes still need one unit, to carry the ambient term
356
+ const count = Math.max(used.length, 1);
357
+ for (let i = 0; i < count; i++) {
358
+ const unit = gl.LIGHT0 + i;
359
+ gl.Enable(unit);
360
+ gl.Lightfv(unit, gl.AMBIENT, i === 0 ? [...ambient, 1] : [0, 0, 0, 1]);
361
+ const light = used[i];
362
+ if (!light) {
363
+ // the dummy unit for a scene lit only by <ambientLight>
364
+ gl.Lightfv(unit, gl.DIFFUSE, [0, 0, 0, 1]);
365
+ gl.Lightfv(unit, gl.SPECULAR, [0, 0, 0, 1]);
366
+ gl.Lightfv(unit, gl.POSITION, [0, 0, 1, 0]);
367
+ continue;
368
+ }
369
+ const { node, intensity, color, world } = light;
370
+ const position = [world[12], world[13], world[14]];
371
+ gl.Lightfv(unit, gl.DIFFUSE, scaled(color, intensity));
372
+ gl.Lightfv(unit, gl.SPECULAR, scaled(color, intensity));
373
+
374
+ if ((node as { isDirectionalLight?: boolean }).isDirectionalLight) {
375
+ // w = 0: a direction, pointing from the scene toward the light
376
+ gl.Lightfv(unit, gl.POSITION, [...position, 0]);
377
+ gl.Lightfv(unit, gl.SPOT_DIRECTION, [0, 0, -1, 0]);
378
+ gl.Lightfv(unit, gl.SPOT_CUTOFF, 180, 0, 0, 0);
379
+ } else {
380
+ gl.Lightfv(unit, gl.POSITION, [...position, 1]);
381
+ const point = node as PointLight;
382
+ const distance = point.distance ?? 0;
383
+ // three.js decay=2 is physical falloff; map it onto GL attenuation
384
+ const decay = point.decay ?? 0;
385
+ gl.Lightfv(unit, gl.CONSTANT_ATTENUATION, 1, 0, 0, 0);
386
+ gl.Lightfv(
387
+ unit,
388
+ gl.LINEAR_ATTENUATION,
389
+ distance > 0 ? 1 / distance : 0,
390
+ 0,
391
+ 0,
392
+ 0,
393
+ );
394
+ gl.Lightfv(
395
+ unit,
396
+ gl.QUADRATIC_ATTENUATION,
397
+ decay > 1 && distance > 0 ? 1 / (distance * distance) : 0,
398
+ 0,
399
+ 0,
400
+ 0,
401
+ );
402
+ if ((node as { isSpotLight?: boolean }).isSpotLight) {
403
+ const spot = node as SpotLight;
404
+ const target = spot.target;
405
+ const dir = [
406
+ target.x - position[0],
407
+ target.y - position[1],
408
+ target.z - position[2],
409
+ ];
410
+ const len = Math.hypot(dir[0], dir[1], dir[2]) || 1;
411
+ gl.Lightfv(
412
+ unit,
413
+ gl.SPOT_DIRECTION,
414
+ dir[0] / len,
415
+ dir[1] / len,
416
+ dir[2] / len,
417
+ 0,
418
+ );
419
+ gl.Lightfv(
420
+ unit,
421
+ gl.SPOT_CUTOFF,
422
+ Math.min(90, (spot.angle * 180) / Math.PI),
423
+ 0,
424
+ 0,
425
+ 0,
426
+ );
427
+ gl.Lightfv(unit, gl.SPOT_EXPONENT, spot.penumbra * 128, 0, 0, 0);
428
+ } else {
429
+ gl.Lightfv(unit, gl.SPOT_CUTOFF, 180, 0, 0, 0);
430
+ }
431
+ }
432
+ }
433
+ for (let i = count; i < this.enabledLights; i++) gl.Disable(gl.LIGHT0 + i);
434
+ this.enabledLights = count;
435
+ // the material state depends on whether lighting is on
436
+ this.materialKey = null;
437
+ }
438
+
439
+ /** Material state is per frame, so one geometry list can serve many
440
+ * meshes. Returns the colour, so `<instancedMesh>` can restore it. */
441
+ private applyMaterial(
442
+ gl: GL,
443
+ material: Material | null,
444
+ ): { color: [number, number, number] } {
445
+ let kind = material?.kind ?? 'meshBasicMaterial';
446
+ // A mesh that reached this renderer with a shader material can only
447
+ // happen if the backend changed under a mounted tree; draw it flat
448
+ // rather than as whatever an unknown kind falls through to.
449
+ if (kind === 'shaderMaterial' || kind === 'rawShaderMaterial') {
450
+ if (!this.warnedDirectOnly) {
451
+ this.warnedDirectOnly = true;
452
+ warn(
453
+ `@react-x11/components: <${kind}> needs direct rendering; ` +
454
+ 'drawing it as an unlit material instead.',
455
+ );
456
+ }
457
+ kind = 'meshBasicMaterial';
458
+ }
459
+ const colors = materialColors(material);
460
+ const [r, g, b] = colors.color;
461
+ const alpha = colors.alpha;
462
+ // <meshBasicMaterial> is unlit by definition — and so are the point and
463
+ // line materials, which have no surface to shade. A lit material with no
464
+ // light in the scene would render black, so that falls back to flat too.
465
+ const lit = !UNLIT_MATERIALS.has(kind) && this.lit;
466
+ // texturing is state like everything else here, so it is part of the key
467
+ const map = material?.map ?? null;
468
+ const wireframe = material?.wireframe ?? false;
469
+ const side = material?.side ?? 'front';
470
+ const transparent = material?.transparent ?? false;
471
+ const size = (material as { size?: number } | null)?.size ?? 1;
472
+ const linewidth =
473
+ (material as { linewidth?: number } | null)?.linewidth ?? 1;
474
+ const key = [
475
+ kind,
476
+ lit,
477
+ r,
478
+ g,
479
+ b,
480
+ alpha,
481
+ wireframe,
482
+ side,
483
+ transparent,
484
+ colors.shininess,
485
+ colors.specular.join(','),
486
+ colors.emissive.join(','),
487
+ colors.diffuseScale,
488
+ size,
489
+ linewidth,
490
+ map ? (this.textures.get(map) ?? 'new') : 'none',
491
+ ].join('|');
492
+ if (key === this.materialKey) return { color: [r, g, b] };
493
+ this.materialKey = key;
494
+
495
+ const blended = alpha < 1 || transparent;
496
+ if (blended) {
497
+ gl.Enable(gl.BLEND);
498
+ gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
499
+ } else {
500
+ gl.Disable(gl.BLEND);
501
+ }
502
+
503
+ if (lit) {
504
+ gl.Enable(gl.LIGHTING);
505
+ const scale = colors.diffuseScale;
506
+ // colour reaches the shading equation as the surface reflectance
507
+ gl.Materialfv(gl.FRONT_AND_BACK, gl.AMBIENT_AND_DIFFUSE, [
508
+ r * scale,
509
+ g * scale,
510
+ b * scale,
511
+ alpha,
512
+ ]);
513
+ gl.Materialfv(gl.FRONT_AND_BACK, gl.EMISSION, [...colors.emissive, 1]);
514
+ if (kind === 'meshPhongMaterial' || kind === 'meshStandardMaterial') {
515
+ gl.Materialfv(gl.FRONT_AND_BACK, gl.SPECULAR, [...colors.specular, 1]);
516
+ gl.Materialf(gl.FRONT_AND_BACK, gl.SHININESS, colors.shininess);
517
+ } else {
518
+ // Lambert: diffuse only
519
+ gl.Materialfv(gl.FRONT_AND_BACK, gl.SPECULAR, [0, 0, 0, 1]);
520
+ gl.Materialf(gl.FRONT_AND_BACK, gl.SHININESS, 0);
521
+ }
522
+ // both faces are shaded when both are drawn
523
+ gl.LightModelf(gl.LIGHT_MODEL_TWO_SIDE, side === 'double' ? 1 : 0);
524
+ } else {
525
+ gl.Disable(gl.LIGHTING);
526
+ if (blended) gl.Color4f(r, g, b, alpha);
527
+ else gl.Color3f(r, g, b);
528
+ }
529
+
530
+ if (map?.width && map?.data) {
531
+ gl.Enable(gl.TEXTURE_2D);
532
+ gl.BindTexture(gl.TEXTURE_2D, this.textureFor(gl, map));
533
+ // MODULATE: the texture is tinted by the colour and the lighting
534
+ gl.TexEnvi(gl.TEXTURE_ENV, gl.TEXTURE_ENV_MODE, gl.MODULATE);
535
+ } else {
536
+ gl.Disable(gl.TEXTURE_2D);
537
+ }
538
+
539
+ // three.js's names: `size` on a points material, `linewidth` on a line
540
+ // one. Both are fixed-function state the GLX protocol does encode.
541
+ if (kind === 'pointsMaterial') gl.PointSize(size);
542
+ if (kind === 'lineBasicMaterial') gl.LineWidth(linewidth);
543
+
544
+ gl.PolygonMode(gl.FRONT_AND_BACK, wireframe ? gl.LINE : gl.FILL);
545
+ if (side === 'double') {
546
+ gl.Disable(gl.CULL_FACE);
547
+ } else {
548
+ gl.Enable(gl.CULL_FACE);
549
+ gl.CullFace(side === 'back' ? gl.FRONT : gl.BACK);
550
+ }
551
+ return { color: [r, g, b] };
552
+ }
553
+
554
+ /** Drop a removed geometry's lists so the ids can be reused. */
555
+ forget(gl: GL, geometry: BufferGeometry): void {
556
+ const perPrimitive = this.lists.get(geometry);
557
+ if (!perPrimitive) return;
558
+ this.lists.delete(geometry);
559
+ for (const { id } of perPrimitive.values()) gl?.DeleteLists?.(id, 1);
560
+ }
561
+
562
+ dispose(gl: GL): void {
563
+ for (const perPrimitive of this.lists.values()) {
564
+ for (const { id } of perPrimitive.values()) gl?.DeleteLists?.(id, 1);
565
+ }
566
+ this.lists.clear();
567
+ if (this.textures.size) gl?.DeleteTextures?.([...this.textures.values()]);
568
+ this.textures.clear();
569
+ }
570
+ }