@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,378 @@
1
+ // <MediaPlayer> — mpv or VLC, drawing into an element.
2
+ //
3
+ // The second XEmbed wrapper, and mechanically the same component as
4
+ // `../terminal/`: a `<foreign>` with no `windowId` adopts whatever is put
5
+ // inside it, the id `onReady` hands over is passed to the player as
6
+ // `--wid=…`, and `../embed/` owns everything about starting, watching and
7
+ // handing back the process.
8
+ //
9
+ // What makes it more than a surface is the control channel. mpv's JSON IPC
10
+ // socket turns `volume`, `paused` and `seek()` into real commands and pushes
11
+ // position back as it changes, so `src` can be swapped inside a running
12
+ // player rather than by respawning one. `./backends.ts` is where that and
13
+ // VLC's much narrower rc interface are reconciled.
14
+ //
15
+ // Registers no element: `<foreign>` is a built-in. Nothing here happens at
16
+ // import time.
17
+ //
18
+ // ### Controls
19
+ //
20
+ // There are none drawn, on purpose. The player's window stacks above
21
+ // everything drawn in ours — the same rule `<glarea>` has — so a transport bar
22
+ // laid over the video cannot be a sibling `<box>`; it has to be a `<popup>`,
23
+ // which is a placement and dismissal problem an app is better placed to solve
24
+ // than a component is. What this exposes instead is the whole of the state a
25
+ // transport bar needs (`onProgress`, `onPlayingChange`, the handle) plus
26
+ // `osd` for the player's own overlay when a quick one will do.
27
+ import React, {
28
+ useCallback,
29
+ useEffect,
30
+ useMemo,
31
+ useRef,
32
+ useState,
33
+ } from 'react';
34
+ import type { ReactElement, ReactNode, Ref } from 'react';
35
+ import { useTheme } from 'react-x11';
36
+ import type { ForeignProps } from 'react-x11';
37
+ import type { Style } from 'react-x11/style';
38
+
39
+ import {
40
+ BackendUnavailableError,
41
+ resolveBackend,
42
+ useEmbeddedClient,
43
+ } from '../embed/index.js';
44
+ import type {
45
+ EmbedStatus,
46
+ ExitInfo,
47
+ LaunchPlan,
48
+ PlanContext,
49
+ ProcessHost,
50
+ } from '../embed/index.js';
51
+ import { mediaBackendsFor } from './backends.js';
52
+ import type { MediaBackendName, MediaLaunch } from './backends.js';
53
+ import type { PlayerControl } from './control.js';
54
+ import { hx } from './hx.js';
55
+
56
+ export { MEDIA_BACKENDS, mediaBackendsFor, mpv, vlc } from './backends.js';
57
+ export type {
58
+ MediaBackend,
59
+ MediaBackendName,
60
+ MediaLaunch,
61
+ } from './backends.js';
62
+ export type { PlayerControl, PlayerEvents } from './control.js';
63
+
64
+ const h = React.createElement;
65
+
66
+ /** `<foreign>`'s props as `hx` takes them. */
67
+ type ForeignElementProps = Omit<ForeignProps, 'theme'>;
68
+
69
+ /** Where playback is. */
70
+ export interface MediaProgress {
71
+ /** Seconds from the start. */
72
+ position: number;
73
+ /** Seconds, or 0 before the player knows. */
74
+ duration: number;
75
+ }
76
+
77
+ /** What a `ref` on `<MediaPlayer>` gets. */
78
+ export interface MediaPlayerHandle {
79
+ play(): void;
80
+ pause(): void;
81
+ /** Absolute position, in seconds. */
82
+ seek(seconds: number): void;
83
+ /** 0–1. */
84
+ setVolume(volume: number): void;
85
+ /** Stop playback without stopping the player: the window stays, idle. */
86
+ stop(): void;
87
+ /** Stop the player process and start a new one. */
88
+ restart(): void;
89
+ signal(signal?: string): boolean;
90
+ readonly pid: number | null;
91
+ readonly windowId: number | null;
92
+ readonly backend: string | null;
93
+ readonly status: EmbedStatus;
94
+ /** False under VLC — see `./vlc.ts`. `onProgress` never fires then. */
95
+ readonly reportsProgress: boolean;
96
+ }
97
+
98
+ export interface MediaPlayerProps {
99
+ /**
100
+ * A path or a URL. **Changing it does not restart the player** — the new
101
+ * source is loaded into the running one, so the window never blinks.
102
+ */
103
+ src?: string;
104
+ /** Which player. Default `'auto'`: mpv if it is installed, else VLC. */
105
+ backend?: MediaBackendName;
106
+ /** Start playing. Default true. */
107
+ autoPlay?: boolean;
108
+ /**
109
+ * Pause state, if you want to drive it. Leave it out and the player is
110
+ * uncontrolled — `autoPlay` decides how it starts and the handle's
111
+ * `play()`/`pause()` move it from there.
112
+ */
113
+ paused?: boolean;
114
+ /** 0–1. Default: the player's own. */
115
+ volume?: number;
116
+ muted?: boolean;
117
+ /** `'16:9'`, `'4:3'`. The player letterboxes inside the element's rect. */
118
+ aspectRatio?: string;
119
+ loop?: boolean;
120
+ /** The player's own on-screen controls. Off by default: they are drawn by
121
+ * the player and will not match the app's theme. */
122
+ osd?: boolean;
123
+ /** Appended to the player's command line verbatim. */
124
+ extraArgs?: readonly string[];
125
+ /** Position and duration, as the player reports them. mpv only. */
126
+ onProgress?: (progress: MediaProgress) => void;
127
+ /** The file reached its end. Not fired for `stop()` or a new `src`. */
128
+ onEnded?: (info: { node: unknown }) => void;
129
+ onPlayingChange?: (playing: boolean) => void;
130
+ /** The player process ended. */
131
+ onExit?: (info: ExitInfo) => void;
132
+ /** Spawn failures, control-channel failures, and the
133
+ * `BackendUnavailableError` for a machine with neither player installed. */
134
+ onError?: (err: Error) => void;
135
+ /** Rendered instead of the surface when no backend is installed. */
136
+ fallback?: ReactNode;
137
+ /** False holds off spawning entirely. */
138
+ enabled?: boolean;
139
+ /** Sent on unmount and restart. Default `SIGTERM`. */
140
+ stopSignal?: string;
141
+ /** Where the process runs. Defaults to this machine, through node. */
142
+ processes?: ProcessHost;
143
+ /** A video surface is not a control; default false, unlike `<Terminal>`. */
144
+ focusable?: boolean;
145
+ style?: Style | Style[];
146
+ ref?: Ref<MediaPlayerHandle>;
147
+ 'data-testname'?: string;
148
+ }
149
+
150
+ /**
151
+ * A video surface.
152
+ *
153
+ * ```jsx
154
+ * <MediaPlayer
155
+ * src={file}
156
+ * aspectRatio="16:9"
157
+ * volume={0.8}
158
+ * style={{ flexGrow: 1 }}
159
+ * onProgress={({ position, duration }) => setScrub(position / duration)}
160
+ * onEnded={next}
161
+ * fallback={<text>Install mpv to play video.</text>}
162
+ * />
163
+ * ```
164
+ *
165
+ * The player's window stacks above everything drawn in this one, so nothing 2D
166
+ * can overlap it — see "Controls" at the top of this file.
167
+ */
168
+ export function MediaPlayer(props: MediaPlayerProps): ReactElement {
169
+ const {
170
+ backend = 'auto',
171
+ enabled = true,
172
+ focusable,
173
+ processes,
174
+ stopSignal,
175
+ } = props;
176
+ const theme = useTheme() as unknown as Record<string, unknown>;
177
+
178
+ const control = useRef<PlayerControl | null>(null);
179
+ // Bumped when a control channel opens or closes. The prop-syncing effects
180
+ // below depend on it, which is what makes "apply `volume` once there is
181
+ // something to apply it to" a dependency rather than a retry.
182
+ const [channel, setChannel] = useState(0);
183
+ // What the player was launched with, so a `src` that has not changed is not
184
+ // loaded a second time over the top of itself.
185
+ const loaded = useRef<string | undefined>(undefined);
186
+
187
+ // Read through a ref so that the plan's identity — which is the restart
188
+ // signal — depends only on the launch key below.
189
+ const latest = useRef(props);
190
+ latest.current = props;
191
+
192
+ // Only the props that cannot be changed in a running player. `src`,
193
+ // `volume`, `muted` and `paused` are all live commands, so they are
194
+ // deliberately absent: including them would respawn the process for a
195
+ // volume slider.
196
+ const key = useMemo(
197
+ () =>
198
+ JSON.stringify([
199
+ backend,
200
+ props.aspectRatio ?? null,
201
+ props.loop ?? false,
202
+ props.osd ?? false,
203
+ props.extraArgs ?? null,
204
+ ]),
205
+ [backend, props.aspectRatio, props.loop, props.osd, props.extraArgs],
206
+ );
207
+
208
+ const plan = useMemo(
209
+ () =>
210
+ async ({ windowId, host }: PlanContext): Promise<LaunchPlan> => {
211
+ const candidates = mediaBackendsFor(backend);
212
+ if (candidates.length === 0) {
213
+ throw new BackendUnavailableError('media player', [backend]);
214
+ }
215
+ const chosen = await resolveBackend(host, 'media player', candidates);
216
+ const scratch = await host.socketPath(
217
+ `react-x11-${chosen.backend.name}`,
218
+ );
219
+ const current = latest.current;
220
+ const launch: MediaLaunch = {
221
+ windowId,
222
+ controlPath: scratch.path,
223
+ src: current.src,
224
+ autoPlay: current.autoPlay ?? true,
225
+ volume: current.volume,
226
+ muted: current.muted,
227
+ aspectRatio: current.aspectRatio,
228
+ loop: current.loop,
229
+ osd: current.osd,
230
+ extraArgs: current.extraArgs,
231
+ };
232
+
233
+ return {
234
+ command: chosen.path,
235
+ args: chosen.backend.args(launch),
236
+ backend: chosen.backend.name,
237
+ async attach() {
238
+ const events = {
239
+ onProgress: (progress: MediaProgress) =>
240
+ latest.current.onProgress?.(progress),
241
+ onPlayingChange: (playing: boolean) =>
242
+ latest.current.onPlayingChange?.(playing),
243
+ onEnded: () => latest.current.onEnded?.({ node: null }),
244
+ onError: (err: Error) => latest.current.onError?.(err),
245
+ };
246
+ const opened = await chosen.backend.connect(
247
+ host,
248
+ scratch.path,
249
+ events,
250
+ launch,
251
+ );
252
+ control.current = opened;
253
+ loaded.current = launch.src;
254
+ setChannel((n) => n + 1);
255
+ return () => {
256
+ control.current = null;
257
+ loaded.current = undefined;
258
+ opened.dispose();
259
+ setChannel((n) => n + 1);
260
+ };
261
+ },
262
+ dispose: () => scratch.dispose(),
263
+ };
264
+ },
265
+ [backend, key],
266
+ );
267
+
268
+ const client = useEmbeddedClient({
269
+ plan,
270
+ host: processes,
271
+ enabled,
272
+ stopSignal,
273
+ onExit: props.onExit,
274
+ onError: props.onError,
275
+ });
276
+
277
+ // --- props the control channel applies to a running player ---------------
278
+
279
+ const { src, volume, muted, paused } = props;
280
+
281
+ useEffect(() => {
282
+ if (!control.current || src === undefined) return;
283
+ if (src === loaded.current) return;
284
+ loaded.current = src;
285
+ control.current.load(src);
286
+ }, [src, channel]);
287
+
288
+ useEffect(() => {
289
+ if (!control.current || volume === undefined) return;
290
+ control.current.setVolume(volume);
291
+ }, [volume, channel]);
292
+
293
+ useEffect(() => {
294
+ if (!control.current || muted === undefined) return;
295
+ control.current.setMuted(muted);
296
+ }, [muted, channel]);
297
+
298
+ useEffect(() => {
299
+ if (!control.current || paused === undefined) return;
300
+ control.current.setPaused(paused);
301
+ }, [paused, channel]);
302
+
303
+ // --- the handle ---------------------------------------------------------
304
+
305
+ const reportsProgress = useMemo(() => {
306
+ const [chosen] = mediaBackendsFor(backend).filter(
307
+ (b) => b.name === client.backend,
308
+ );
309
+ return chosen?.reportsProgress ?? false;
310
+ }, [backend, client.backend]);
311
+
312
+ const noop = useCallback(() => {}, []);
313
+
314
+ React.useImperativeHandle(
315
+ props.ref,
316
+ () => ({
317
+ play: () => control.current?.setPaused(false) ?? noop(),
318
+ pause: () => control.current?.setPaused(true) ?? noop(),
319
+ seek: (seconds: number) => control.current?.seek(seconds) ?? noop(),
320
+ setVolume: (value: number) => control.current?.setVolume(value) ?? noop(),
321
+ stop: () => control.current?.stop() ?? noop(),
322
+ restart: client.restart,
323
+ signal: client.signal,
324
+ get pid() {
325
+ return client.pid;
326
+ },
327
+ get windowId() {
328
+ return client.windowId;
329
+ },
330
+ get backend() {
331
+ return client.backend;
332
+ },
333
+ get status() {
334
+ return client.status;
335
+ },
336
+ get reportsProgress() {
337
+ return reportsProgress;
338
+ },
339
+ }),
340
+ [client, noop, reportsProgress],
341
+ );
342
+
343
+ // Black rather than the theme background: this is a video surface, and what
344
+ // shows around a letterboxed frame should be what a player would put there.
345
+ const style: Style = {
346
+ flexGrow: 1,
347
+ backgroundColor: String(theme.videoBackground ?? '#000000'),
348
+ };
349
+ const styles: Style[] = [style];
350
+ if (props.style) {
351
+ for (const extra of Array.isArray(props.style)
352
+ ? props.style
353
+ : [props.style]) {
354
+ styles.push(extra);
355
+ }
356
+ }
357
+
358
+ if (client.status === 'unavailable' && props.fallback !== undefined) {
359
+ return h(React.Fragment, null, props.fallback);
360
+ }
361
+
362
+ const foreign: ForeignElementProps = {
363
+ onReady: client.handleReady,
364
+ // A video surface is not something to tab to, and an embedded player that
365
+ // took the focus would swallow the app's own keys while the pointer is
366
+ // over it.
367
+ focusable: focusable ?? false,
368
+ 'aria-label': 'Media player',
369
+ style: styles,
370
+ };
371
+
372
+ // See the same note in `../terminal/index.ts`: `data-testname` is a runtime
373
+ // convention react-x11's element declarations do not carry.
374
+ return hx('foreign', {
375
+ ...foreign,
376
+ 'data-testname': props['data-testname'],
377
+ } as ForeignElementProps);
378
+ }
@@ -0,0 +1,146 @@
1
+ // mpv's JSON IPC, which is what makes `<MediaPlayer>`'s props real control
2
+ // rather than decoration.
3
+ //
4
+ // `--input-ipc-server=PATH` gives a unix socket that speaks newline-delimited
5
+ // JSON in both directions: `{"command":[…]}` out, `{"event":…}` and
6
+ // `{"request_id":…}` back. Two things it buys that a command line cannot:
7
+ //
8
+ // - **`observe_property`.** Position, duration, pause state and volume are
9
+ // pushed as they change, so `onProgress` is an event rather than a poll.
10
+ // - **`loadfile … replace`.** A new `src` swaps the file inside the running
11
+ // player, so the embedded window never blinks and the process never has to
12
+ // be respawned.
13
+ //
14
+ // The socket is created by mpv some milliseconds *after* it starts, which is
15
+ // what `connectWhenReady` in `../embed/host.ts` is for.
16
+ import { connectWhenReady } from '../embed/index.js';
17
+ import type { IpcSocket, ProcessHost } from '../embed/index.js';
18
+ import { lineReader, unitRange } from './control.js';
19
+ import type { PlayerControl, PlayerEvents } from './control.js';
20
+
21
+ /** Observation ids. mpv echoes them back on every property-change, and they
22
+ * are ours to choose. */
23
+ const OBSERVE = {
24
+ position: 1,
25
+ duration: 2,
26
+ pause: 3,
27
+ } as const;
28
+
29
+ /** mpv's volume is a percentage and goes above 100 (`--volume-max`); the prop
30
+ * is 0–1, so this is the whole of the conversion. */
31
+ const VOLUME_SCALE = 100;
32
+
33
+ interface MpvMessage {
34
+ event?: string;
35
+ id?: number;
36
+ name?: string;
37
+ data?: unknown;
38
+ reason?: string;
39
+ error?: string;
40
+ }
41
+
42
+ export async function connectMpv(
43
+ host: ProcessHost,
44
+ socketPath: string,
45
+ events: PlayerEvents,
46
+ ): Promise<PlayerControl> {
47
+ const socket: IpcSocket = await connectWhenReady(host, socketPath);
48
+
49
+ let position = 0;
50
+ let duration = 0;
51
+ let disposed = false;
52
+
53
+ const send = (command: readonly unknown[]): void => {
54
+ if (disposed) return;
55
+ socket.write(`${JSON.stringify({ command })}\n`);
56
+ };
57
+
58
+ const observe = (id: number, property: string): void => {
59
+ send(['observe_property', id, property]);
60
+ };
61
+
62
+ socket.onData(
63
+ lineReader((line) => {
64
+ let message: MpvMessage;
65
+ try {
66
+ message = JSON.parse(line) as MpvMessage;
67
+ } catch {
68
+ // mpv only ever writes JSON here; a line that is not is a version
69
+ // saying something we do not understand, and dropping it is right.
70
+ return;
71
+ }
72
+
73
+ if (message.event === 'property-change') {
74
+ if (
75
+ message.id === OBSERVE.position &&
76
+ typeof message.data === 'number'
77
+ ) {
78
+ position = message.data;
79
+ events.onProgress?.({ position, duration });
80
+ } else if (
81
+ message.id === OBSERVE.duration &&
82
+ typeof message.data === 'number'
83
+ ) {
84
+ duration = message.data;
85
+ events.onProgress?.({ position, duration });
86
+ } else if (message.id === OBSERVE.pause) {
87
+ events.onPlayingChange?.(message.data !== true);
88
+ }
89
+ return;
90
+ }
91
+
92
+ // `end-file` fires for every way a file stops, including the ones a
93
+ // caller must not hear as "the video finished": `stop` is our own
94
+ // `stop()`, and `redirect` is a playlist indirection mid-load.
95
+ if (message.event === 'end-file') {
96
+ if (message.reason === 'eof') events.onEnded?.();
97
+ return;
98
+ }
99
+
100
+ if (message.event === 'start-file') {
101
+ position = 0;
102
+ duration = 0;
103
+ }
104
+ }),
105
+ );
106
+
107
+ socket.onClose(() => {
108
+ if (disposed) return;
109
+ disposed = true;
110
+ // Not an error: mpv closing its socket is mpv exiting, which the process
111
+ // watch in `useEmbeddedClient` reports with an exit code.
112
+ });
113
+
114
+ observe(OBSERVE.position, 'time-pos');
115
+ observe(OBSERVE.duration, 'duration');
116
+ observe(OBSERVE.pause, 'pause');
117
+
118
+ return {
119
+ reportsProgress: true,
120
+ load(src) {
121
+ // `replace` rather than `append`: the prop names what is playing, so
122
+ // setting it twice must not build a playlist.
123
+ send(['loadfile', src, 'replace']);
124
+ },
125
+ setPaused(paused) {
126
+ send(['set_property', 'pause', paused]);
127
+ },
128
+ seek(seconds) {
129
+ if (!Number.isFinite(seconds)) return;
130
+ send(['seek', Math.max(0, seconds), 'absolute']);
131
+ },
132
+ setVolume(volume) {
133
+ send(['set_property', 'volume', unitRange(volume) * VOLUME_SCALE]);
134
+ },
135
+ setMuted(muted) {
136
+ send(['set_property', 'mute', muted]);
137
+ },
138
+ stop() {
139
+ send(['stop']);
140
+ },
141
+ dispose() {
142
+ disposed = true;
143
+ socket.close();
144
+ },
145
+ };
146
+ }
@@ -0,0 +1,97 @@
1
+ // VLC's rc interface, used write-only — and the asymmetry is the point.
2
+ //
3
+ // `--extraintf rc --rc-unix=PATH` gives a unix socket that accepts the same
4
+ // console commands VLC's `rc` module has always accepted: `play`, `pause`,
5
+ // `stop`, `seek N`, `volume N`, `add URI`. That is enough for every control
6
+ // `<MediaPlayer>` exposes.
7
+ //
8
+ // What it is *not* enough for is `onProgress`. The replies to `get_time` and
9
+ // `get_length` are bare numbers with a `>` prompt around them, in a stream
10
+ // that also carries unsolicited status blocks and localised text — there is no
11
+ // request id, so a reply cannot be matched to the question that asked for it
12
+ // except by counting, and a dropped or extra line desynchronises the count
13
+ // permanently. Rather than ship a parser that is wrong in a way nobody
14
+ // notices until a progress bar lies, this backend declares
15
+ // `reportsProgress: false` and the component reports position only under mpv.
16
+ //
17
+ // The other consequence of not reading: `pause` in the rc protocol *toggles*.
18
+ // So the intended state is tracked here, seeded from `autoPlay`, and
19
+ // `setPaused` sends a toggle only when the two disagree. That is exact as long
20
+ // as nobody else is driving the same player, which is the case for a player
21
+ // this component spawned.
22
+ import { connectWhenReady } from '../embed/index.js';
23
+ import type { IpcSocket, ProcessHost } from '../embed/index.js';
24
+ import { unitRange } from './control.js';
25
+ import type { PlayerControl, PlayerEvents } from './control.js';
26
+
27
+ /** VLC's rc `volume` takes 0–256 for 0–100%. */
28
+ const VOLUME_SCALE = 256;
29
+
30
+ export interface VlcConnectOptions {
31
+ /** What the player was started doing, so the toggle stays in step. */
32
+ paused: boolean;
33
+ }
34
+
35
+ export async function connectVlc(
36
+ host: ProcessHost,
37
+ socketPath: string,
38
+ events: PlayerEvents,
39
+ options: VlcConnectOptions,
40
+ ): Promise<PlayerControl> {
41
+ const socket: IpcSocket = await connectWhenReady(host, socketPath);
42
+
43
+ let paused = options.paused;
44
+ let volume = 1;
45
+ let disposed = false;
46
+
47
+ const send = (line: string): void => {
48
+ if (disposed) return;
49
+ socket.write(`${line}\n`);
50
+ };
51
+
52
+ // Read and discard. The stream has to be consumed — an unread socket
53
+ // eventually stops the writer — and nothing in it is parsed, for the reason
54
+ // in the file comment.
55
+ socket.onData(() => {});
56
+ socket.onClose(() => {
57
+ disposed = true;
58
+ });
59
+
60
+ return {
61
+ reportsProgress: false,
62
+ load(src) {
63
+ send(`add ${src}`);
64
+ paused = false;
65
+ events.onPlayingChange?.(true);
66
+ },
67
+ setPaused(next) {
68
+ if (next === paused) return;
69
+ // `pause` toggles; `play` is unambiguous, so resuming uses it and only
70
+ // pausing needs the toggle.
71
+ send(next ? 'pause' : 'play');
72
+ paused = next;
73
+ events.onPlayingChange?.(!next);
74
+ },
75
+ seek(seconds) {
76
+ if (!Number.isFinite(seconds)) return;
77
+ send(`seek ${Math.max(0, Math.round(seconds))}`);
78
+ },
79
+ setVolume(next) {
80
+ volume = unitRange(next);
81
+ send(`volume ${Math.round(volume * VOLUME_SCALE)}`);
82
+ },
83
+ setMuted(muted) {
84
+ // rc has no mute: 0 and back is what the command set can express.
85
+ send(`volume ${muted ? 0 : Math.round(volume * VOLUME_SCALE)}`);
86
+ },
87
+ stop() {
88
+ send('stop');
89
+ paused = true;
90
+ events.onPlayingChange?.(false);
91
+ },
92
+ dispose() {
93
+ disposed = true;
94
+ socket.close();
95
+ },
96
+ };
97
+ }
@@ -0,0 +1,42 @@
1
+ // Styled text that a document can select across, as a shared module: the
2
+ // `<richtext>` element (wrapped runs, per-run decoration, and the four text
3
+ // accessors core's selection asks for), plus the right-click menu a
4
+ // read-only surface offers. `<Markdown>` and `<Code>` are compositions over
5
+ // this; an app can build its own surface from the same parts.
6
+ //
7
+ // The selection itself is core's since react-x11#291 — a `selectable` prop
8
+ // on the root box, and the anchor/focus, granularity, PRIMARY, Ctrl+A/Ctrl+C
9
+ // and the one-visible-selection rule that come with it. This module used to
10
+ // carry all of that (a `TextSelection` controller and a `useSelectionGestures`
11
+ // hook); both are gone, and so are the `order`/`registry`/`joiner` props the
12
+ // element took to feed them — a copy's separators now come from the layout.
13
+ //
14
+ // Importing this barrel registers nothing. A component that renders
15
+ // `<richtext>` calls `registerRichText()` at its own module scope — see
16
+ // the note in node.ts.
17
+ import type { Ref } from 'react';
18
+
19
+ import type { RichTextProps } from './node.js';
20
+
21
+ // The augmentation needs its target module resolved (same note as
22
+ // `code-editor/index.ts`): nothing in `src/` writes JSX.
23
+ import type {} from 'react-x11/jsx-runtime';
24
+
25
+ export {
26
+ ELEMENT as RICHTEXT_ELEMENT,
27
+ registerRichText,
28
+ RichTextNode,
29
+ } from './node.js';
30
+ export type { NtkApp, RichTextProps, TextLayoutLike, TextRun } from './node.js';
31
+ export { useSelectionMenu } from './menu.js';
32
+ export type { SelectionMenuHandlers } from './menu.js';
33
+ export { useLinkClicks } from './links.js';
34
+ export type { LinkHandlers } from './links.js';
35
+
36
+ declare module 'react-x11/jsx-runtime' {
37
+ namespace JSX {
38
+ interface IntrinsicElements {
39
+ richtext: RichTextProps & { key?: string | number; ref?: Ref<unknown> };
40
+ }
41
+ }
42
+ }