@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,782 @@
1
+ import { identity, invert, multiply, normalMatrix } from './math.js';
2
+ import { InstancedMesh } from './objects.js';
3
+ import { ShaderMaterial, RawShaderMaterial, UNLIT_MATERIALS, materialColors, } from './materials.js';
4
+ import { collectLights, instanceMatrix, MAX_LIGHTS, } from './renderer-indirect.js';
5
+ import { Color } from './math.js';
6
+ import { warn } from './globals.js';
7
+ /**
8
+ * The default float precision, injected into **both** stages.
9
+ *
10
+ * GLSL ES requires a uniform declared in the vertex and the fragment shader
11
+ * to carry the same precision, and the default differs between them —
12
+ * `highp` in a vertex shader, nothing at all in a fragment shader — so a
13
+ * `uniform float uTime` used in both fails to *link* unless something says
14
+ * otherwise. three.js injects a default for the same reason.
15
+ */
16
+ const PRECISION = 'precision mediump float;\n';
17
+ // three.js's attribute and matrix names, so a shader written against r3f —
18
+ // or copied out of a tutorial — compiles here unchanged
19
+ const COMMON_VERTEX_UNIFORMS = `${PRECISION}
20
+ uniform mat4 projectionMatrix;
21
+ uniform mat4 modelViewMatrix;
22
+ uniform mat4 modelMatrix;
23
+ uniform mat3 normalMatrix;
24
+ attribute vec3 position;
25
+ attribute vec3 normal;
26
+ attribute vec2 uv;
27
+ `;
28
+ /** The vertex/fragment pair for one material configuration. */
29
+ function materialProgramSource({ kind, lit, textured, lights, primitive, }) {
30
+ const phong = kind === 'meshPhongMaterial' || kind === 'meshStandardMaterial';
31
+ const points = primitive === 'points';
32
+ const vertex = `${COMMON_VERTEX_UNIFORMS}${points ? 'uniform float pointSize;\n' : ''}
33
+ varying vec3 vNormal;
34
+ varying vec3 vViewPosition;
35
+ varying vec2 vUv;
36
+ void main() {
37
+ vUv = uv;
38
+ vNormal = normalize(normalMatrix * normal);
39
+ vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
40
+ // the direction from the surface toward the eye, which is the origin in
41
+ // view space
42
+ vViewPosition = -mvPosition.xyz;
43
+ gl_Position = projectionMatrix * mvPosition;
44
+ ${points ? ' // ES 2 has no glPointSize: a point sprite is sized by the vertex shader\n gl_PointSize = pointSize;\n' : ''}}`;
45
+ const lighting = lit
46
+ ? `
47
+ uniform vec3 ambientColor;
48
+ // w picks the kind: 0 is a direction toward the light, 1 is a position
49
+ uniform vec4 lightPosition[${lights}];
50
+ uniform vec3 lightColor[${lights}];
51
+ uniform vec3 spotDirection[${lights}];
52
+ // x = cos(cutoff) or -1 for a light that is not a spot, y = spot exponent,
53
+ // z = linear attenuation, w unused
54
+ uniform vec4 spotParams[${lights}];
55
+ `
56
+ : '';
57
+ const lightingBody = lit
58
+ ? `
59
+ vec3 normal = normalize(vNormal) * (gl_FrontFacing ? 1.0 : -1.0);
60
+ vec3 viewDir = normalize(vViewPosition);
61
+ vec3 lit = ambientColor * diffuseColor;
62
+ for (int i = 0; i < ${lights}; i++) {
63
+ vec3 toLight;
64
+ float attenuation = 1.0;
65
+ if (lightPosition[i].w == 0.0) {
66
+ toLight = normalize(lightPosition[i].xyz);
67
+ } else {
68
+ vec3 offset = lightPosition[i].xyz - (-vViewPosition);
69
+ float dist = length(offset);
70
+ toLight = offset / max(dist, 0.0001);
71
+ attenuation = 1.0 / (1.0 + spotParams[i].z * dist);
72
+ if (spotParams[i].x >= -0.5) {
73
+ float aligned = dot(-toLight, normalize(spotDirection[i]));
74
+ attenuation *= aligned < spotParams[i].x
75
+ ? 0.0
76
+ : pow(aligned, spotParams[i].y);
77
+ }
78
+ }
79
+ float diffuse = max(dot(normal, toLight), 0.0);
80
+ lit += diffuseColor * lightColor[i] * diffuse * attenuation;
81
+ ${phong
82
+ ? ` if (diffuse > 0.0) {
83
+ vec3 halfway = normalize(toLight + viewDir);
84
+ float spec = pow(max(dot(normal, halfway), 0.0), max(shininess, 0.0001));
85
+ lit += specularColor * lightColor[i] * spec * attenuation;
86
+ }`
87
+ : ''}
88
+ }
89
+ vec3 color = lit + emissiveColor;`
90
+ : `
91
+ vec3 color = diffuseColor;`;
92
+ const fragment = `${PRECISION}uniform vec3 diffuse;
93
+ uniform float opacity;
94
+ uniform vec3 emissive;
95
+ ${phong ? 'uniform vec3 specular;\nuniform float shininess;\n' : ''}${textured ? 'uniform sampler2D map;\n' : ''}${lighting}
96
+ varying vec3 vNormal;
97
+ varying vec3 vViewPosition;
98
+ varying vec2 vUv;
99
+ void main() {
100
+ vec4 base = vec4(diffuse, opacity);
101
+ ${textured ? ' base *= texture2D(map, vUv);\n' : ''}
102
+ vec3 diffuseColor = base.rgb;
103
+ vec3 emissiveColor = ${lit ? 'emissive' : 'vec3(0.0)'};
104
+ ${phong ? ' vec3 specularColor = specular;\n' : ''}${lightingBody}
105
+ gl_FragColor = vec4(color, base.a);
106
+ }`;
107
+ return { vertex, fragment };
108
+ }
109
+ /** Shader sources for a `<shaderMaterial>`, with three.js's prelude. */
110
+ function userProgramSource(material, raw) {
111
+ const vertex = raw
112
+ ? material.vertexShader
113
+ : `${COMMON_VERTEX_UNIFORMS}uniform vec3 cameraPosition;
114
+ ${material.vertexShader}`;
115
+ const fragment = raw
116
+ ? material.fragmentShader
117
+ : `${PRECISION}${material.fragmentShader}`;
118
+ return { vertex, fragment };
119
+ }
120
+ /** The ES 2 draw mode a drawable's primitive assembles into. */
121
+ function PRIMITIVE_MODE(gl, primitive) {
122
+ switch (primitive) {
123
+ case 'points':
124
+ return gl.POINTS;
125
+ case 'lines':
126
+ return gl.LINES;
127
+ case 'lineStrip':
128
+ return gl.LINE_STRIP;
129
+ case 'lineLoop':
130
+ return gl.LINE_LOOP;
131
+ default:
132
+ return gl.TRIANGLES;
133
+ }
134
+ }
135
+ const isTypedArray = (v) => ArrayBuffer.isView(v) && !(v instanceof DataView);
136
+ /**
137
+ * A `<shaderMaterial>` uniform value, sent with whichever setter its
138
+ * JavaScript type implies. Matrices need a typed array or a 9/16-long
139
+ * array, since nothing else says "this is a mat3, not three vec3s".
140
+ */
141
+ function setUniform(gl, location, value) {
142
+ if (location === null || location === -1 || value === undefined)
143
+ return;
144
+ if (typeof value === 'number')
145
+ return gl.uniform1f(location, value);
146
+ if (typeof value === 'boolean')
147
+ return gl.uniform1i(location, value ? 1 : 0);
148
+ if (value instanceof Color) {
149
+ return gl.uniform3fv(location, new Float32Array(value.toArray()));
150
+ }
151
+ if (isTypedArray(value) || Array.isArray(value)) {
152
+ const array = value instanceof Float32Array
153
+ ? value
154
+ : new Float32Array(value);
155
+ switch (array.length) {
156
+ case 2:
157
+ return gl.uniform2fv(location, array);
158
+ case 3:
159
+ return gl.uniform3fv(location, array);
160
+ case 4:
161
+ return gl.uniform4fv(location, array);
162
+ case 9:
163
+ return gl.uniformMatrix3fv(location, false, array);
164
+ case 16:
165
+ return gl.uniformMatrix4fv(location, false, array);
166
+ default:
167
+ return gl.uniform1fv(location, array);
168
+ }
169
+ }
170
+ }
171
+ /**
172
+ * Per-surface GPU state for the direct backend: one buffer set per geometry,
173
+ * one program per material configuration, one texture per image.
174
+ */
175
+ export class DirectRenderer {
176
+ backend = 'direct';
177
+ geometries = new Map();
178
+ programs = new Map();
179
+ textures = new Map();
180
+ failed = new Set();
181
+ wireWarned = new WeakSet();
182
+ _usable;
183
+ camera = null;
184
+ /** A shader that will not build is reported here, once per source. */
185
+ onError = null;
186
+ render(gl, scene, camera, size) {
187
+ const roots = scene.children.filter((c) => c.isObject3D);
188
+ if (roots.length === 0)
189
+ return false;
190
+ if (!this.usable(gl))
191
+ return false;
192
+ gl.enable(gl.DEPTH_TEST);
193
+ gl.depthFunc(gl.LEQUAL);
194
+ const projection = camera.projectionMatrix(size.width, size.height);
195
+ const view = camera.viewMatrix();
196
+ this.camera = { projection, view, width: size.width, height: size.height };
197
+ const lights = this.lightUniforms(collectLights(roots, identity()), view);
198
+ for (const node of roots)
199
+ this.drawObject(gl, node, identity(), lights);
200
+ return true;
201
+ }
202
+ /**
203
+ * Does this context have the GL entry points a material needs? It can
204
+ * genuinely lack them: ntk passes the `x11-dri` addon's table straight
205
+ * through, so the context is only as complete as the addon installed. The
206
+ * failure without this check is a `TypeError` from inside a draw call,
207
+ * which names nothing a consumer could act on.
208
+ */
209
+ usable(gl) {
210
+ if (this._usable !== undefined)
211
+ return this._usable;
212
+ const missing = [
213
+ 'createBuffer',
214
+ 'bufferData',
215
+ 'createShader',
216
+ 'linkProgram',
217
+ 'uniform3fv',
218
+ 'uniformMatrix4fv',
219
+ 'uniformMatrix3fv',
220
+ 'drawElements',
221
+ 'blendFunc',
222
+ 'depthMask',
223
+ ].filter((name) => typeof gl[name] !== 'function');
224
+ this._usable = missing.length === 0;
225
+ if (!this._usable) {
226
+ this.report('gl-incomplete', `this GL context is missing ${missing.join(', ')}, so the 3D scene ` +
227
+ 'cannot be drawn. The direct backend exposes whatever the x11-dri ' +
228
+ 'addon provides; check with `npm ls x11-dri`.', 'GL_CONTEXT_INCOMPLETE');
229
+ }
230
+ return this._usable;
231
+ }
232
+ /**
233
+ * Lights as flat arrays in view space, which is where the shader works.
234
+ * Transformed here rather than in the shader for the same reason
235
+ * fixed-function GL transforms them when they are set: once per frame
236
+ * beats once per fragment.
237
+ */
238
+ lightUniforms(lights, view) {
239
+ const ambient = [0, 0, 0];
240
+ const used = [];
241
+ for (const light of lights) {
242
+ const { node } = light;
243
+ const intensity = node.intensity;
244
+ const { r, g, b } = node.color;
245
+ if (node.isAmbientLight) {
246
+ ambient[0] += r * intensity;
247
+ ambient[1] += g * intensity;
248
+ ambient[2] += b * intensity;
249
+ continue;
250
+ }
251
+ if (used.length >= MAX_LIGHTS)
252
+ continue;
253
+ used.push({ node, intensity, color: [r, g, b], world: light.world });
254
+ }
255
+ const count = used.length;
256
+ const position = new Float32Array(Math.max(1, count) * 4);
257
+ const color = new Float32Array(Math.max(1, count) * 3);
258
+ const spotDirection = new Float32Array(Math.max(1, count) * 3);
259
+ const spotParams = new Float32Array(Math.max(1, count) * 4);
260
+ used.forEach((light, i) => {
261
+ const { node, intensity, world } = light;
262
+ const wx = world[12];
263
+ const wy = world[13];
264
+ const wz = world[14];
265
+ const directional = node
266
+ .isDirectionalLight;
267
+ // view-space position (w = 1) or direction toward the light (w = 0)
268
+ const w = directional ? 0 : 1;
269
+ position[i * 4] =
270
+ view[0] * wx + view[4] * wy + view[8] * wz + view[12] * w;
271
+ position[i * 4 + 1] =
272
+ view[1] * wx + view[5] * wy + view[9] * wz + view[13] * w;
273
+ position[i * 4 + 2] =
274
+ view[2] * wx + view[6] * wy + view[10] * wz + view[14] * w;
275
+ position[i * 4 + 3] = w;
276
+ color[i * 3] = light.color[0] * intensity;
277
+ color[i * 3 + 1] = light.color[1] * intensity;
278
+ color[i * 3 + 2] = light.color[2] * intensity;
279
+ const distance = node.distance ?? 0;
280
+ spotParams[i * 4 + 2] = distance > 0 ? 1 / distance : 0;
281
+ if (node.isSpotLight) {
282
+ const spot = node;
283
+ const dx = spot.target.x - wx;
284
+ const dy = spot.target.y - wy;
285
+ const dz = spot.target.z - wz;
286
+ const length = Math.hypot(dx, dy, dz) || 1;
287
+ // the direction is a vector, so the translation column does not apply
288
+ spotDirection[i * 3] =
289
+ (view[0] * dx + view[4] * dy + view[8] * dz) / length;
290
+ spotDirection[i * 3 + 1] =
291
+ (view[1] * dx + view[5] * dy + view[9] * dz) / length;
292
+ spotDirection[i * 3 + 2] =
293
+ (view[2] * dx + view[6] * dy + view[10] * dz) / length;
294
+ spotParams[i * 4] = Math.cos(Math.min(Math.PI / 2, spot.angle));
295
+ spotParams[i * 4 + 1] = spot.penumbra * 128;
296
+ }
297
+ else {
298
+ spotParams[i * 4] = -1; // not a spot
299
+ spotParams[i * 4 + 1] = 0;
300
+ }
301
+ });
302
+ return {
303
+ count,
304
+ ambient: new Float32Array(ambient),
305
+ position,
306
+ color,
307
+ spotDirection,
308
+ spotParams,
309
+ lit: count > 0 || ambient.some((c) => c > 0),
310
+ };
311
+ }
312
+ drawObject(gl, node, parentWorld, lights) {
313
+ if (!node.visible)
314
+ return;
315
+ const world = multiply(parentWorld, node.localMatrix());
316
+ node.__world = world;
317
+ if (node.isMesh)
318
+ this.drawMesh(gl, node, world, lights);
319
+ for (const child of node.children) {
320
+ if (child.isObject3D)
321
+ this.drawObject(gl, child, world, lights);
322
+ }
323
+ }
324
+ drawMesh(gl, mesh, world, lights) {
325
+ const geometry = mesh.geometry;
326
+ if (!geometry)
327
+ return;
328
+ const primitive = mesh.primitive;
329
+ const buffers = this.geometryFor(gl, geometry, primitive);
330
+ if (!buffers)
331
+ return;
332
+ const material = mesh.material;
333
+ const program = this.programFor(gl, material, lights, primitive);
334
+ if (!program)
335
+ return;
336
+ gl.useProgram(program.program);
337
+ const applied = this.applyMaterial(gl, program, material, lights);
338
+ gl.uniformMatrix4fv(program.uniform('projectionMatrix'), false, this.camera.projection);
339
+ gl.uniformMatrix4fv(program.uniform('viewMatrix'), false, this.camera.view);
340
+ this.bindAttributes(gl, program, buffers);
341
+ const wire = primitive === 'triangles' && material?.wireframe
342
+ ? this.wireframeFor(gl, geometry, buffers)
343
+ : null;
344
+ if (!(mesh instanceof InstancedMesh)) {
345
+ this.drawOne(gl, program, buffers, world, primitive, wire);
346
+ return;
347
+ }
348
+ // One upload, many transforms. Neither backend does GPU instancing —
349
+ // ES 2 guarantees none and GLX encodes none — so what this saves is the
350
+ // geometry, not the draw calls: each instance is a matrix and a draw.
351
+ const diffuse = program.uniform('diffuse');
352
+ for (const instance of mesh.instances) {
353
+ if (instance.color) {
354
+ const c = new Color(instance.color);
355
+ gl.uniform3fv(diffuse, new Float32Array([c.r, c.g, c.b]));
356
+ }
357
+ else if (applied) {
358
+ gl.uniform3fv(diffuse, new Float32Array(applied.color));
359
+ }
360
+ this.drawOne(gl, program, buffers, multiply(world, instanceMatrix(instance)), primitive, wire);
361
+ }
362
+ }
363
+ /** One draw of `buffers` at `world`, as whichever primitive. */
364
+ drawOne(gl, program, buffers, world, primitive, wire = null) {
365
+ const modelView = multiply(this.camera.view, world);
366
+ gl.uniformMatrix4fv(program.uniform('modelViewMatrix'), false, modelView);
367
+ gl.uniformMatrix4fv(program.uniform('modelMatrix'), false, world);
368
+ gl.uniformMatrix3fv(program.uniform('normalMatrix'), false, normalMatrix(modelView));
369
+ if (wire) {
370
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, wire.index);
371
+ gl.drawElements(gl.LINES, wire.count, gl.UNSIGNED_SHORT, 0);
372
+ return;
373
+ }
374
+ const mode = PRIMITIVE_MODE(gl, primitive);
375
+ if (buffers.index) {
376
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffers.index);
377
+ gl.drawElements(mode, buffers.count, gl.UNSIGNED_SHORT, 0);
378
+ }
379
+ else {
380
+ gl.drawArrays(mode, 0, buffers.count);
381
+ }
382
+ }
383
+ bindAttributes(gl, program, buffers) {
384
+ for (const [name, buffer, size] of [
385
+ ['position', buffers.position, 3],
386
+ ['normal', buffers.normal, 3],
387
+ ['uv', buffers.uv, 2],
388
+ ]) {
389
+ const location = program.attribute(name);
390
+ if (location < 0)
391
+ continue;
392
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
393
+ gl.enableVertexAttribArray(location);
394
+ gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
395
+ }
396
+ }
397
+ /**
398
+ * Upload a geometry once and keep it on the GPU. The indirect backend
399
+ * compiles geometry into a display list for exactly the same reason —
400
+ * never send the vertices twice — and the cache is keyed the same way, by
401
+ * object identity and version.
402
+ */
403
+ geometryFor(gl, node, primitive) {
404
+ // Keyed by primitive as well as by node: points and lines want no
405
+ // normals and ignore the triangle index, so the same geometry used both
406
+ // ways is genuinely two uploads.
407
+ const shaded = primitive === 'triangles';
408
+ const key = shaded ? 'shaded' : 'flat';
409
+ let perPrimitive = this.geometries.get(node);
410
+ if (!perPrimitive)
411
+ this.geometries.set(node, (perPrimitive = new Map()));
412
+ const cached = perPrimitive.get(key);
413
+ if (cached && cached.version === node.version)
414
+ return cached;
415
+ if (cached)
416
+ this.releaseGeometry(gl, cached);
417
+ const built = node.data({ normals: shaded });
418
+ const { positions, normals, uvs } = built;
419
+ // points are one dot per vertex; running a triangle index over them
420
+ // would draw every shared vertex again
421
+ const index = primitive === 'points' ? null : built.index;
422
+ const vertexCount = positions.length / 3;
423
+ if (vertexCount === 0)
424
+ return null;
425
+ const upload = (data, fallbackLength) => {
426
+ const buffer = gl.createBuffer();
427
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
428
+ const array = data.length
429
+ ? new Float32Array(data)
430
+ : new Float32Array(fallbackLength);
431
+ gl.bufferData(gl.ARRAY_BUFFER, array, gl.STATIC_DRAW);
432
+ return buffer;
433
+ };
434
+ const entry = {
435
+ version: node.version,
436
+ position: upload(positions, vertexCount * 3),
437
+ normal: upload(normals, vertexCount * 3),
438
+ uv: upload(uvs, vertexCount * 2),
439
+ index: null,
440
+ count: vertexCount,
441
+ wire: null,
442
+ };
443
+ if (index && index.length) {
444
+ // ES 2 indices are 16-bit. A geometry with more vertices than that is
445
+ // expanded to a flat triangle soup rather than quietly wrapping —
446
+ // sphereGeometry with enough segments really does get there.
447
+ if (vertexCount > 0xffff) {
448
+ const flat = {
449
+ positions: [],
450
+ normals: [],
451
+ uvs: [],
452
+ };
453
+ for (const i of index) {
454
+ flat.positions.push(positions[i * 3], positions[i * 3 + 1], positions[i * 3 + 2]);
455
+ flat.normals.push(normals[i * 3], normals[i * 3 + 1], normals[i * 3 + 2]);
456
+ flat.uvs.push(uvs[i * 2], uvs[i * 2 + 1]);
457
+ }
458
+ this.releaseGeometry(gl, entry);
459
+ entry.position = upload(flat.positions, 0);
460
+ entry.normal = upload(flat.normals, 0);
461
+ entry.uv = upload(flat.uvs, 0);
462
+ entry.index = null;
463
+ entry.count = index.length;
464
+ }
465
+ else {
466
+ entry.index = gl.createBuffer();
467
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, entry.index);
468
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(index), gl.STATIC_DRAW);
469
+ entry.count = index.length;
470
+ }
471
+ }
472
+ perPrimitive.set(key, entry);
473
+ return entry;
474
+ }
475
+ releaseGeometry(gl, entry) {
476
+ for (const key of ['position', 'normal', 'uv', 'index']) {
477
+ if (entry[key])
478
+ gl.deleteBuffer(entry[key]);
479
+ entry[key] = null;
480
+ }
481
+ if (entry.wire) {
482
+ gl.deleteBuffer(entry.wire.index);
483
+ entry.wire = null;
484
+ }
485
+ }
486
+ /**
487
+ * The unique-edge index that draws `node` as a wireframe. The indirect
488
+ * backend flips one server-side switch (`PolygonMode LINE`); ES 2 has no
489
+ * polygon modes, so this backend does what three.js's `WireframeGeometry`
490
+ * does — every triangle edge once, drawn as `LINES` over the same vertex
491
+ * buffers. Built on first use, cached until the geometry rebuilds.
492
+ */
493
+ wireframeFor(gl, node, buffers) {
494
+ if (buffers.wire)
495
+ return buffers.wire;
496
+ // no index means consecutive-triplet triangles (including the >0xffff
497
+ // soup, whose vertices a 16-bit edge index cannot name)
498
+ if (!buffers.index && buffers.count > 0xffff) {
499
+ if (!this.wireWarned.has(node)) {
500
+ this.wireWarned.add(node);
501
+ warn(`wireframe needs a 16-bit index and this geometry expanded to ` +
502
+ `${buffers.count} vertices — drawing it filled`);
503
+ }
504
+ return null;
505
+ }
506
+ const source = buffers.index ? node.data({ normals: true }).index : null;
507
+ const seen = new Set();
508
+ const edges = [];
509
+ const push = (a, b) => {
510
+ const key = a < b ? a * 0x10000 + b : b * 0x10000 + a;
511
+ if (seen.has(key))
512
+ return;
513
+ seen.add(key);
514
+ edges.push(a, b);
515
+ };
516
+ const triangles = source ? source.length / 3 : buffers.count / 3;
517
+ for (let t = 0; t < triangles; t++) {
518
+ const a = source ? source[t * 3] : t * 3;
519
+ const b = source ? source[t * 3 + 1] : t * 3 + 1;
520
+ const c = source ? source[t * 3 + 2] : t * 3 + 2;
521
+ push(a, b);
522
+ push(b, c);
523
+ push(c, a);
524
+ }
525
+ const index = gl.createBuffer();
526
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index);
527
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(edges), gl.STATIC_DRAW);
528
+ buffers.wire = { index, count: edges.length };
529
+ return buffers.wire;
530
+ }
531
+ /** Compile once per material configuration, reuse for every mesh using it. */
532
+ programFor(gl, material, lights, primitive) {
533
+ const kind = material?.kind ?? 'meshBasicMaterial';
534
+ const user = material instanceof ShaderMaterial;
535
+ let signature;
536
+ let source;
537
+ if (user) {
538
+ const shader = material;
539
+ signature = `${kind} ${shader.vertexShader} ${shader.fragmentShader}`;
540
+ source = userProgramSource(shader, material instanceof RawShaderMaterial);
541
+ }
542
+ else {
543
+ const lit = !UNLIT_MATERIALS.has(kind) && lights.lit && lights.count > 0;
544
+ const map = material?.map;
545
+ const textured = !!(map?.width && map?.data);
546
+ // the primitive is part of the signature because only a points program
547
+ // declares (and writes) gl_PointSize
548
+ signature = `${kind}|${lit}|${textured}|${lights.count}|${primitive}`;
549
+ source = materialProgramSource({
550
+ kind,
551
+ lit,
552
+ textured,
553
+ lights: lights.count,
554
+ primitive,
555
+ });
556
+ }
557
+ const cached = this.programs.get(signature);
558
+ if (cached)
559
+ return cached.program ? cached : null;
560
+ const entry = this.compile(gl, source, signature, kind);
561
+ this.programs.set(signature, entry);
562
+ return entry.program ? entry : null;
563
+ }
564
+ /** Lent to the post-processor, so a pass that will not build is reported
565
+ * exactly the way a material that will not build is. */
566
+ compile(gl, source, signature, kind) {
567
+ const shader = (type, text, what) => {
568
+ const object = gl.createShader(type);
569
+ gl.shaderSource(object, text);
570
+ gl.compileShader(object);
571
+ if (gl.getShaderParameter(object, gl.COMPILE_STATUS))
572
+ return object;
573
+ this.report(signature, `${kind}: ${what} failed to compile\n${gl.getShaderInfoLog(object)}`);
574
+ gl.deleteShader(object);
575
+ return null;
576
+ };
577
+ const vertex = shader(gl.VERTEX_SHADER, source.vertex, 'vertex shader');
578
+ const fragment = vertex && shader(gl.FRAGMENT_SHADER, source.fragment, 'fragment shader');
579
+ if (!vertex || !fragment) {
580
+ if (vertex)
581
+ gl.deleteShader(vertex);
582
+ return { program: null };
583
+ }
584
+ const program = gl.createProgram();
585
+ gl.attachShader(program, vertex);
586
+ gl.attachShader(program, fragment);
587
+ gl.linkProgram(program);
588
+ gl.deleteShader(vertex);
589
+ gl.deleteShader(fragment);
590
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
591
+ this.report(signature, `${kind}: program failed to link\n${gl.getProgramInfoLog(program)}`);
592
+ gl.deleteProgram(program);
593
+ return { program: null };
594
+ }
595
+ const uniforms = new Map();
596
+ const attributes = new Map();
597
+ return {
598
+ program,
599
+ uniform(name) {
600
+ if (!uniforms.has(name))
601
+ uniforms.set(name, gl.getUniformLocation(program, name));
602
+ return uniforms.get(name);
603
+ },
604
+ attribute(name) {
605
+ if (!attributes.has(name))
606
+ attributes.set(name, gl.getAttribLocation(program, name));
607
+ return attributes.get(name);
608
+ },
609
+ };
610
+ }
611
+ /**
612
+ * A shader that will not build is reported once and then skipped.
613
+ * Throwing would take down a render that is otherwise fine, and repeating
614
+ * it every frame would bury the message it came with — the compiler's own
615
+ * log, the only thing that says what to fix.
616
+ */
617
+ report(signature, message, code = 'GL_SHADER_FAILED') {
618
+ if (this.failed.has(signature))
619
+ return;
620
+ this.failed.add(signature);
621
+ const err = new Error(`@react-x11/components: ${message}`);
622
+ err.code = code;
623
+ if (this.onError)
624
+ this.onError(err);
625
+ else
626
+ warn(err.message);
627
+ }
628
+ /** `<shaderPass uniforms>` reads like a `<shaderMaterial>`'s. */
629
+ setUniform(gl, location, value) {
630
+ setUniform(gl, location, value);
631
+ }
632
+ applyMaterial(gl, program, material, lights) {
633
+ if (material instanceof ShaderMaterial) {
634
+ gl.uniform3fv(program.uniform('cameraPosition'), this.cameraPosition());
635
+ for (const [name, entry] of Object.entries(material.uniforms)) {
636
+ const value = entry.value;
637
+ const image = value;
638
+ if (image &&
639
+ typeof image === 'object' &&
640
+ 'width' in image &&
641
+ 'data' in image &&
642
+ image.width &&
643
+ image.data) {
644
+ const unit = this.textureFor(gl, image);
645
+ gl.uniform1i(program.uniform(name), unit);
646
+ }
647
+ else {
648
+ setUniform(gl, program.uniform(name), value);
649
+ }
650
+ }
651
+ this.applyDrawState(gl, material, material.transparent || material.opacity < 1);
652
+ return undefined;
653
+ }
654
+ const kind = material?.kind ?? 'meshBasicMaterial';
655
+ const colors = materialColors(material);
656
+ const scale = colors.diffuseScale;
657
+ gl.uniform3fv(program.uniform('diffuse'), new Float32Array([
658
+ colors.color[0] * scale,
659
+ colors.color[1] * scale,
660
+ colors.color[2] * scale,
661
+ ]));
662
+ // three.js's names: `size` on a points material, `linewidth` on a line one
663
+ if (kind === 'pointsMaterial') {
664
+ gl.uniform1f(program.uniform('pointSize'), material?.size ?? 1);
665
+ }
666
+ if (kind === 'lineBasicMaterial') {
667
+ gl.lineWidth(material?.linewidth ?? 1);
668
+ }
669
+ gl.uniform1f(program.uniform('opacity'), colors.alpha);
670
+ gl.uniform3fv(program.uniform('emissive'), new Float32Array(colors.emissive));
671
+ if (kind === 'meshPhongMaterial' || kind === 'meshStandardMaterial') {
672
+ gl.uniform3fv(program.uniform('specular'), new Float32Array(colors.specular));
673
+ gl.uniform1f(program.uniform('shininess'), colors.shininess);
674
+ }
675
+ const map = material?.map;
676
+ if (map?.width && map?.data) {
677
+ gl.uniform1i(program.uniform('map'), this.textureFor(gl, map));
678
+ }
679
+ if (lights.count > 0 || lights.lit) {
680
+ gl.uniform3fv(program.uniform('ambientColor'), lights.ambient);
681
+ if (lights.count > 0) {
682
+ gl.uniform4fv(program.uniform('lightPosition[0]'), lights.position);
683
+ gl.uniform3fv(program.uniform('lightColor[0]'), lights.color);
684
+ gl.uniform3fv(program.uniform('spotDirection[0]'), lights.spotDirection);
685
+ gl.uniform4fv(program.uniform('spotParams[0]'), lights.spotParams);
686
+ }
687
+ }
688
+ this.applyDrawState(gl, material, colors.alpha < 1 || (material?.transparent ?? false));
689
+ // handed back so <instancedMesh> can restore it between instances that
690
+ // override the colour and instances that do not
691
+ return { color: colors.color };
692
+ }
693
+ /** Blending, culling and depth writes — the state a material implies. */
694
+ applyDrawState(gl, material, blended) {
695
+ if (blended) {
696
+ gl.enable(gl.BLEND);
697
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
698
+ // a translucent surface must not hide what is behind it
699
+ gl.depthMask(false);
700
+ }
701
+ else {
702
+ gl.disable(gl.BLEND);
703
+ gl.depthMask(true);
704
+ }
705
+ const side = material?.side ?? 'front';
706
+ if (side === 'double') {
707
+ gl.disable(gl.CULL_FACE);
708
+ }
709
+ else {
710
+ gl.enable(gl.CULL_FACE);
711
+ gl.cullFace(side === 'back' ? gl.FRONT : gl.BACK);
712
+ }
713
+ }
714
+ cameraPosition() {
715
+ // the eye is the origin in view space, so its world position is the
716
+ // translation of the inverted view matrix
717
+ const inverse = this.camera ? invert(this.camera.view) : null;
718
+ return inverse
719
+ ? new Float32Array([inverse[12], inverse[13], inverse[14]])
720
+ : new Float32Array(3);
721
+ }
722
+ /**
723
+ * Upload an image once and bind it to a texture unit. `map` is an ntk
724
+ * `Image`, or anything with `{ width, height, data }` in RGBA byte order —
725
+ * the same contract the indirect renderer takes.
726
+ */
727
+ textureFor(gl, image) {
728
+ const cached = this.textures.get(image);
729
+ if (cached) {
730
+ gl.activeTexture(gl.TEXTURE0 + cached.unit);
731
+ gl.bindTexture(gl.TEXTURE_2D, cached.texture);
732
+ return cached.unit;
733
+ }
734
+ const unit = this.textures.size;
735
+ const texture = gl.createTexture();
736
+ gl.activeTexture(gl.TEXTURE0 + unit);
737
+ gl.bindTexture(gl.TEXTURE_2D, texture);
738
+ gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);
739
+ const data = image.data instanceof Uint8Array
740
+ ? image.data
741
+ : new Uint8Array(image.data);
742
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, image.width, image.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, data);
743
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
744
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
745
+ // REPEAT needs power-of-two dimensions in ES 2; CLAMP_TO_EDGE always works
746
+ const pot = (n) => (n & (n - 1)) === 0;
747
+ const wrap = pot(image.width) && pot(image.height) ? gl.REPEAT : gl.CLAMP_TO_EDGE;
748
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrap);
749
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrap);
750
+ this.textures.set(image, { texture, unit });
751
+ return unit;
752
+ }
753
+ /** A removed geometry's buffers are no longer needed on the GPU. */
754
+ forget(gl, node) {
755
+ const perPrimitive = this.geometries.get(node);
756
+ if (!perPrimitive)
757
+ return;
758
+ this.geometries.delete(node);
759
+ if (gl)
760
+ for (const entry of perPrimitive.values())
761
+ this.releaseGeometry(gl, entry);
762
+ }
763
+ dispose(gl) {
764
+ if (gl) {
765
+ for (const perPrimitive of this.geometries.values()) {
766
+ for (const entry of perPrimitive.values()) {
767
+ this.releaseGeometry(gl, entry);
768
+ }
769
+ }
770
+ for (const { program } of this.programs.values()) {
771
+ if (program)
772
+ gl.deleteProgram(program);
773
+ }
774
+ for (const { texture } of this.textures.values())
775
+ gl.deleteTexture(texture);
776
+ }
777
+ this.geometries.clear();
778
+ this.programs.clear();
779
+ this.textures.clear();
780
+ }
781
+ }
782
+ //# sourceMappingURL=renderer-direct.js.map