@react-x11/components 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (783) hide show
  1. package/README.md +979 -21
  2. package/dist/ansi/cast.d.ts +48 -0
  3. package/dist/ansi/cast.d.ts.map +1 -0
  4. package/dist/ansi/cast.js +135 -0
  5. package/dist/ansi/cast.js.map +1 -0
  6. package/dist/ansi/index.d.ts +10 -0
  7. package/dist/ansi/index.d.ts.map +1 -0
  8. package/dist/ansi/index.js +27 -0
  9. package/dist/ansi/index.js.map +1 -0
  10. package/dist/ansi/palette.d.ts +79 -0
  11. package/dist/ansi/palette.d.ts.map +1 -0
  12. package/dist/ansi/palette.js +155 -0
  13. package/dist/ansi/palette.js.map +1 -0
  14. package/dist/ansi/parse.d.ts +114 -0
  15. package/dist/ansi/parse.d.ts.map +1 -0
  16. package/dist/ansi/parse.js +687 -0
  17. package/dist/ansi/parse.js.map +1 -0
  18. package/dist/ansi/sgr.d.ts +87 -0
  19. package/dist/ansi/sgr.d.ts.map +1 -0
  20. package/dist/ansi/sgr.js +302 -0
  21. package/dist/ansi/sgr.js.map +1 -0
  22. package/dist/ansi/utf8.d.ts +15 -0
  23. package/dist/ansi/utf8.d.ts.map +1 -0
  24. package/dist/ansi/utf8.js +82 -0
  25. package/dist/ansi/utf8.js.map +1 -0
  26. package/dist/calendar/Calendar.d.ts +136 -0
  27. package/dist/calendar/Calendar.d.ts.map +1 -0
  28. package/dist/calendar/Calendar.js +460 -0
  29. package/dist/calendar/Calendar.js.map +1 -0
  30. package/dist/calendar/DatePicker.d.ts +52 -0
  31. package/dist/calendar/DatePicker.d.ts.map +1 -0
  32. package/dist/calendar/DatePicker.js +257 -0
  33. package/dist/calendar/DatePicker.js.map +1 -0
  34. package/dist/calendar/dates.d.ts +90 -0
  35. package/dist/calendar/dates.d.ts.map +1 -0
  36. package/dist/calendar/dates.js +236 -0
  37. package/dist/calendar/dates.js.map +1 -0
  38. package/dist/calendar/index.d.ts +8 -0
  39. package/dist/calendar/index.d.ts.map +1 -0
  40. package/dist/calendar/index.js +15 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/charts/components.d.ts +141 -0
  43. package/dist/charts/components.d.ts.map +1 -0
  44. package/dist/charts/components.js +580 -0
  45. package/dist/charts/components.js.map +1 -0
  46. package/dist/charts/data.d.ts +198 -0
  47. package/dist/charts/data.d.ts.map +1 -0
  48. package/dist/charts/data.js +616 -0
  49. package/dist/charts/data.js.map +1 -0
  50. package/dist/charts/hx.d.ts +21 -0
  51. package/dist/charts/hx.d.ts.map +1 -0
  52. package/dist/charts/hx.js +15 -0
  53. package/dist/charts/hx.js.map +1 -0
  54. package/dist/charts/index.d.ts +27 -0
  55. package/dist/charts/index.d.ts.map +1 -0
  56. package/dist/charts/index.js +38 -0
  57. package/dist/charts/index.js.map +1 -0
  58. package/dist/charts/node.d.ts +96 -0
  59. package/dist/charts/node.d.ts.map +1 -0
  60. package/dist/charts/node.js +720 -0
  61. package/dist/charts/node.js.map +1 -0
  62. package/dist/charts/render.d.ts +153 -0
  63. package/dist/charts/render.d.ts.map +1 -0
  64. package/dist/charts/render.js +762 -0
  65. package/dist/charts/render.js.map +1 -0
  66. package/dist/charts/scale.d.ts +42 -0
  67. package/dist/charts/scale.d.ts.map +1 -0
  68. package/dist/charts/scale.js +173 -0
  69. package/dist/charts/scale.js.map +1 -0
  70. package/dist/charts/spec.d.ts +91 -0
  71. package/dist/charts/spec.d.ts.map +1 -0
  72. package/dist/charts/spec.js +33 -0
  73. package/dist/charts/spec.js.map +1 -0
  74. package/dist/charts/timers.d.ts +6 -0
  75. package/dist/charts/timers.d.ts.map +1 -0
  76. package/dist/charts/timers.js +14 -0
  77. package/dist/charts/timers.js.map +1 -0
  78. package/dist/code/hx.d.ts +24 -0
  79. package/dist/code/hx.d.ts.map +1 -0
  80. package/dist/code/hx.js +25 -0
  81. package/dist/code/hx.js.map +1 -0
  82. package/dist/code/index.d.ts +45 -0
  83. package/dist/code/index.d.ts.map +1 -0
  84. package/dist/code/index.js +93 -0
  85. package/dist/code/index.js.map +1 -0
  86. package/dist/code-editor/completion.d.ts +26 -0
  87. package/dist/code-editor/completion.d.ts.map +1 -0
  88. package/dist/code-editor/completion.js +129 -0
  89. package/dist/code-editor/completion.js.map +1 -0
  90. package/dist/code-editor/doc.d.ts +35 -0
  91. package/dist/code-editor/doc.d.ts.map +1 -0
  92. package/dist/code-editor/doc.js +162 -0
  93. package/dist/code-editor/doc.js.map +1 -0
  94. package/dist/code-editor/hx.d.ts +13 -0
  95. package/dist/code-editor/hx.d.ts.map +1 -0
  96. package/dist/code-editor/hx.js +10 -0
  97. package/dist/code-editor/hx.js.map +1 -0
  98. package/dist/code-editor/index.d.ts +88 -0
  99. package/dist/code-editor/index.d.ts.map +1 -0
  100. package/dist/code-editor/index.js +401 -0
  101. package/dist/code-editor/index.js.map +1 -0
  102. package/dist/code-editor/node.d.ts +343 -0
  103. package/dist/code-editor/node.d.ts.map +1 -0
  104. package/dist/code-editor/node.js +1521 -0
  105. package/dist/code-editor/node.js.map +1 -0
  106. package/dist/code-language/hljs.d.ts +47 -0
  107. package/dist/code-language/hljs.d.ts.map +1 -0
  108. package/dist/code-language/hljs.js +211 -0
  109. package/dist/code-language/hljs.js.map +1 -0
  110. package/dist/code-language/index.d.ts +22 -0
  111. package/dist/code-language/index.d.ts.map +1 -0
  112. package/dist/code-language/index.js +20 -0
  113. package/dist/code-language/index.js.map +1 -0
  114. package/dist/code-language/languages/glsl.d.ts +4 -0
  115. package/dist/code-language/languages/glsl.d.ts.map +1 -0
  116. package/dist/code-language/languages/glsl.js +99 -0
  117. package/dist/code-language/languages/glsl.js.map +1 -0
  118. package/dist/code-language/languages/javascript.d.ts +10 -0
  119. package/dist/code-language/languages/javascript.d.ts.map +1 -0
  120. package/dist/code-language/languages/javascript.js +360 -0
  121. package/dist/code-language/languages/javascript.js.map +1 -0
  122. package/dist/code-language/languages/json.d.ts +4 -0
  123. package/dist/code-language/languages/json.d.ts.map +1 -0
  124. package/dist/code-language/languages/json.js +68 -0
  125. package/dist/code-language/languages/json.js.map +1 -0
  126. package/dist/code-language/languages/shell.d.ts +4 -0
  127. package/dist/code-language/languages/shell.d.ts.map +1 -0
  128. package/dist/code-language/languages/shell.js +189 -0
  129. package/dist/code-language/languages/shell.js.map +1 -0
  130. package/dist/code-language/languages/sql.d.ts +11 -0
  131. package/dist/code-language/languages/sql.d.ts.map +1 -0
  132. package/dist/code-language/languages/sql.js +133 -0
  133. package/dist/code-language/languages/sql.js.map +1 -0
  134. package/dist/code-language/lezer.d.ts +24 -0
  135. package/dist/code-language/lezer.d.ts.map +1 -0
  136. package/dist/code-language/lezer.js +148 -0
  137. package/dist/code-language/lezer.js.map +1 -0
  138. package/dist/code-language/registry.d.ts +19 -0
  139. package/dist/code-language/registry.d.ts.map +1 -0
  140. package/dist/code-language/registry.js +56 -0
  141. package/dist/code-language/registry.js.map +1 -0
  142. package/dist/code-language/runs.d.ts +35 -0
  143. package/dist/code-language/runs.d.ts.map +1 -0
  144. package/dist/code-language/runs.js +88 -0
  145. package/dist/code-language/runs.js.map +1 -0
  146. package/dist/code-language/stream.d.ts +70 -0
  147. package/dist/code-language/stream.d.ts.map +1 -0
  148. package/dist/code-language/stream.js +243 -0
  149. package/dist/code-language/stream.js.map +1 -0
  150. package/dist/code-language/textmate.d.ts +27 -0
  151. package/dist/code-language/textmate.d.ts.map +1 -0
  152. package/dist/code-language/textmate.js +86 -0
  153. package/dist/code-language/textmate.js.map +1 -0
  154. package/dist/code-language/theme.d.ts +26 -0
  155. package/dist/code-language/theme.d.ts.map +1 -0
  156. package/dist/code-language/theme.js +108 -0
  157. package/dist/code-language/theme.js.map +1 -0
  158. package/dist/code-language/timers.d.ts +7 -0
  159. package/dist/code-language/timers.d.ts.map +1 -0
  160. package/dist/code-language/timers.js +22 -0
  161. package/dist/code-language/timers.js.map +1 -0
  162. package/dist/code-language/types.d.ts +173 -0
  163. package/dist/code-language/types.d.ts.map +1 -0
  164. package/dist/code-language/types.js +41 -0
  165. package/dist/code-language/types.js.map +1 -0
  166. package/dist/codeblock/index.d.ts +69 -0
  167. package/dist/codeblock/index.d.ts.map +1 -0
  168. package/dist/codeblock/index.js +85 -0
  169. package/dist/codeblock/index.js.map +1 -0
  170. package/dist/color-picker/ColorField.d.ts +39 -0
  171. package/dist/color-picker/ColorField.d.ts.map +1 -0
  172. package/dist/color-picker/ColorField.js +239 -0
  173. package/dist/color-picker/ColorField.js.map +1 -0
  174. package/dist/color-picker/ColorPicker.d.ts +109 -0
  175. package/dist/color-picker/ColorPicker.d.ts.map +1 -0
  176. package/dist/color-picker/ColorPicker.js +757 -0
  177. package/dist/color-picker/ColorPicker.js.map +1 -0
  178. package/dist/color-picker/color.d.ts +105 -0
  179. package/dist/color-picker/color.d.ts.map +1 -0
  180. package/dist/color-picker/color.js +313 -0
  181. package/dist/color-picker/color.js.map +1 -0
  182. package/dist/color-picker/index.d.ts +8 -0
  183. package/dist/color-picker/index.d.ts.map +1 -0
  184. package/dist/color-picker/index.js +19 -0
  185. package/dist/color-picker/index.js.map +1 -0
  186. package/dist/desktop-calendar/eds.d.ts +102 -0
  187. package/dist/desktop-calendar/eds.d.ts.map +1 -0
  188. package/dist/desktop-calendar/eds.js +356 -0
  189. package/dist/desktop-calendar/eds.js.map +1 -0
  190. package/dist/desktop-calendar/ical.d.ts +63 -0
  191. package/dist/desktop-calendar/ical.d.ts.map +1 -0
  192. package/dist/desktop-calendar/ical.js +57 -0
  193. package/dist/desktop-calendar/ical.js.map +1 -0
  194. package/dist/desktop-calendar/index.d.ts +72 -0
  195. package/dist/desktop-calendar/index.d.ts.map +1 -0
  196. package/dist/desktop-calendar/index.js +213 -0
  197. package/dist/desktop-calendar/index.js.map +1 -0
  198. package/dist/embed/client.d.ts +121 -0
  199. package/dist/embed/client.d.ts.map +1 -0
  200. package/dist/embed/client.js +203 -0
  201. package/dist/embed/client.js.map +1 -0
  202. package/dist/embed/host.d.ts +96 -0
  203. package/dist/embed/host.d.ts.map +1 -0
  204. package/dist/embed/host.js +266 -0
  205. package/dist/embed/host.js.map +1 -0
  206. package/dist/embed/index.d.ts +5 -0
  207. package/dist/embed/index.d.ts.map +1 -0
  208. package/dist/embed/index.js +13 -0
  209. package/dist/embed/index.js.map +1 -0
  210. package/dist/embed/timers.d.ts +6 -0
  211. package/dist/embed/timers.d.ts.map +1 -0
  212. package/dist/embed/timers.js +16 -0
  213. package/dist/embed/timers.js.map +1 -0
  214. package/dist/flow/draw.d.ts +45 -0
  215. package/dist/flow/draw.d.ts.map +1 -0
  216. package/dist/flow/draw.js +295 -0
  217. package/dist/flow/draw.js.map +1 -0
  218. package/dist/flow/index.d.ts +64 -0
  219. package/dist/flow/index.d.ts.map +1 -0
  220. package/dist/flow/index.js +306 -0
  221. package/dist/flow/index.js.map +1 -0
  222. package/dist/flow/model.d.ts +158 -0
  223. package/dist/flow/model.d.ts.map +1 -0
  224. package/dist/flow/model.js +566 -0
  225. package/dist/flow/model.js.map +1 -0
  226. package/dist/flow/node.d.ts +429 -0
  227. package/dist/flow/node.d.ts.map +1 -0
  228. package/dist/flow/node.js +3025 -0
  229. package/dist/flow/node.js.map +1 -0
  230. package/dist/flow/paths.d.ts +43 -0
  231. package/dist/flow/paths.d.ts.map +1 -0
  232. package/dist/flow/paths.js +327 -0
  233. package/dist/flow/paths.js.map +1 -0
  234. package/dist/flow/types.d.ts +561 -0
  235. package/dist/flow/types.d.ts.map +1 -0
  236. package/dist/flow/types.js +2 -0
  237. package/dist/flow/types.js.map +1 -0
  238. package/dist/formula/hx.d.ts +24 -0
  239. package/dist/formula/hx.d.ts.map +1 -0
  240. package/dist/formula/hx.js +25 -0
  241. package/dist/formula/hx.js.map +1 -0
  242. package/dist/formula/index.d.ts +74 -0
  243. package/dist/formula/index.d.ts.map +1 -0
  244. package/dist/formula/index.js +155 -0
  245. package/dist/formula/index.js.map +1 -0
  246. package/dist/formula/katex.d.ts +78 -0
  247. package/dist/formula/katex.d.ts.map +1 -0
  248. package/dist/formula/katex.js +130 -0
  249. package/dist/formula/katex.js.map +1 -0
  250. package/dist/formula/layout.d.ts +103 -0
  251. package/dist/formula/layout.d.ts.map +1 -0
  252. package/dist/formula/layout.js +716 -0
  253. package/dist/formula/layout.js.map +1 -0
  254. package/dist/formula/node.d.ts +50 -0
  255. package/dist/formula/node.d.ts.map +1 -0
  256. package/dist/formula/node.js +351 -0
  257. package/dist/formula/node.js.map +1 -0
  258. package/dist/html/controls.d.ts +48 -0
  259. package/dist/html/controls.d.ts.map +1 -0
  260. package/dist/html/controls.js +195 -0
  261. package/dist/html/controls.js.map +1 -0
  262. package/dist/html/css/cascade.d.ts +51 -0
  263. package/dist/html/css/cascade.d.ts.map +1 -0
  264. package/dist/html/css/cascade.js +552 -0
  265. package/dist/html/css/cascade.js.map +1 -0
  266. package/dist/html/css/parse.d.ts +74 -0
  267. package/dist/html/css/parse.d.ts.map +1 -0
  268. package/dist/html/css/parse.js +464 -0
  269. package/dist/html/css/parse.js.map +1 -0
  270. package/dist/html/css/style.d.ts +142 -0
  271. package/dist/html/css/style.d.ts.map +1 -0
  272. package/dist/html/css/style.js +1145 -0
  273. package/dist/html/css/style.js.map +1 -0
  274. package/dist/html/css/ua.d.ts +5 -0
  275. package/dist/html/css/ua.d.ts.map +1 -0
  276. package/dist/html/css/ua.js +171 -0
  277. package/dist/html/css/ua.js.map +1 -0
  278. package/dist/html/css/values.d.ts +78 -0
  279. package/dist/html/css/values.d.ts.map +1 -0
  280. package/dist/html/css/values.js +330 -0
  281. package/dist/html/css/values.js.map +1 -0
  282. package/dist/html/dom.d.ts +112 -0
  283. package/dist/html/dom.d.ts.map +1 -0
  284. package/dist/html/dom.js +374 -0
  285. package/dist/html/dom.js.map +1 -0
  286. package/dist/html/hx.d.ts +24 -0
  287. package/dist/html/hx.d.ts.map +1 -0
  288. package/dist/html/hx.js +29 -0
  289. package/dist/html/hx.js.map +1 -0
  290. package/dist/html/index.d.ts +137 -0
  291. package/dist/html/index.d.ts.map +1 -0
  292. package/dist/html/index.js +339 -0
  293. package/dist/html/index.js.map +1 -0
  294. package/dist/html/layout/block.d.ts +58 -0
  295. package/dist/html/layout/block.d.ts.map +1 -0
  296. package/dist/html/layout/block.js +724 -0
  297. package/dist/html/layout/block.js.map +1 -0
  298. package/dist/html/layout/boxes.d.ts +261 -0
  299. package/dist/html/layout/boxes.d.ts.map +1 -0
  300. package/dist/html/layout/boxes.js +725 -0
  301. package/dist/html/layout/boxes.js.map +1 -0
  302. package/dist/html/layout/flex.d.ts +16 -0
  303. package/dist/html/layout/flex.d.ts.map +1 -0
  304. package/dist/html/layout/flex.js +242 -0
  305. package/dist/html/layout/flex.js.map +1 -0
  306. package/dist/html/layout/floats.d.ts +50 -0
  307. package/dist/html/layout/floats.d.ts.map +1 -0
  308. package/dist/html/layout/floats.js +110 -0
  309. package/dist/html/layout/floats.js.map +1 -0
  310. package/dist/html/layout/inline.d.ts +44 -0
  311. package/dist/html/layout/inline.d.ts.map +1 -0
  312. package/dist/html/layout/inline.js +700 -0
  313. package/dist/html/layout/inline.js.map +1 -0
  314. package/dist/html/layout/table.d.ts +5 -0
  315. package/dist/html/layout/table.d.ts.map +1 -0
  316. package/dist/html/layout/table.js +340 -0
  317. package/dist/html/layout/table.js.map +1 -0
  318. package/dist/html/node.d.ts +149 -0
  319. package/dist/html/node.d.ts.map +1 -0
  320. package/dist/html/node.js +861 -0
  321. package/dist/html/node.js.map +1 -0
  322. package/dist/html/paint.d.ts +48 -0
  323. package/dist/html/paint.d.ts.map +1 -0
  324. package/dist/html/paint.js +495 -0
  325. package/dist/html/paint.js.map +1 -0
  326. package/dist/html/resources.d.ts +48 -0
  327. package/dist/html/resources.d.ts.map +1 -0
  328. package/dist/html/resources.js +156 -0
  329. package/dist/html/resources.js.map +1 -0
  330. package/dist/index.d.ts +48 -0
  331. package/dist/index.d.ts.map +1 -0
  332. package/dist/index.js +92 -0
  333. package/dist/index.js.map +1 -0
  334. package/dist/internal/heights.d.ts +81 -0
  335. package/dist/internal/heights.d.ts.map +1 -0
  336. package/dist/internal/heights.js +193 -0
  337. package/dist/internal/heights.js.map +1 -0
  338. package/dist/internal/hx.d.ts +24 -0
  339. package/dist/internal/hx.d.ts.map +1 -0
  340. package/dist/internal/hx.js +27 -0
  341. package/dist/internal/hx.js.map +1 -0
  342. package/dist/internal/text.d.ts +6 -0
  343. package/dist/internal/text.d.ts.map +1 -0
  344. package/dist/internal/text.js +44 -0
  345. package/dist/internal/text.js.map +1 -0
  346. package/dist/internal/timers.d.ts +8 -0
  347. package/dist/internal/timers.d.ts.map +1 -0
  348. package/dist/internal/timers.js +22 -0
  349. package/dist/internal/timers.js.map +1 -0
  350. package/dist/internal/widget.d.ts +40 -0
  351. package/dist/internal/widget.d.ts.map +1 -0
  352. package/dist/internal/widget.js +44 -0
  353. package/dist/internal/widget.js.map +1 -0
  354. package/dist/markdown/ast.d.ts +126 -0
  355. package/dist/markdown/ast.d.ts.map +1 -0
  356. package/dist/markdown/ast.js +8 -0
  357. package/dist/markdown/ast.js.map +1 -0
  358. package/dist/markdown/hx.d.ts +24 -0
  359. package/dist/markdown/hx.d.ts.map +1 -0
  360. package/dist/markdown/hx.js +25 -0
  361. package/dist/markdown/hx.js.map +1 -0
  362. package/dist/markdown/index.d.ts +90 -0
  363. package/dist/markdown/index.d.ts.map +1 -0
  364. package/dist/markdown/index.js +413 -0
  365. package/dist/markdown/index.js.map +1 -0
  366. package/dist/markdown/parse.d.ts +8 -0
  367. package/dist/markdown/parse.d.ts.map +1 -0
  368. package/dist/markdown/parse.js +911 -0
  369. package/dist/markdown/parse.js.map +1 -0
  370. package/dist/markdown/spans.d.ts +20 -0
  371. package/dist/markdown/spans.d.ts.map +1 -0
  372. package/dist/markdown/spans.js +96 -0
  373. package/dist/markdown/spans.js.map +1 -0
  374. package/dist/media-player/backends.d.ts +64 -0
  375. package/dist/media-player/backends.d.ts.map +1 -0
  376. package/dist/media-player/backends.js +110 -0
  377. package/dist/media-player/backends.js.map +1 -0
  378. package/dist/media-player/control.d.ts +40 -0
  379. package/dist/media-player/control.d.ts.map +1 -0
  380. package/dist/media-player/control.js +44 -0
  381. package/dist/media-player/control.js.map +1 -0
  382. package/dist/media-player/hx.d.ts +24 -0
  383. package/dist/media-player/hx.d.ts.map +1 -0
  384. package/dist/media-player/hx.js +25 -0
  385. package/dist/media-player/hx.js.map +1 -0
  386. package/dist/media-player/index.d.ts +107 -0
  387. package/dist/media-player/index.d.ts.map +1 -0
  388. package/dist/media-player/index.js +219 -0
  389. package/dist/media-player/index.js.map +1 -0
  390. package/dist/media-player/mpv.d.ts +4 -0
  391. package/dist/media-player/mpv.d.ts.map +1 -0
  392. package/dist/media-player/mpv.js +120 -0
  393. package/dist/media-player/mpv.js.map +1 -0
  394. package/dist/media-player/vlc.d.ts +8 -0
  395. package/dist/media-player/vlc.d.ts.map +1 -0
  396. package/dist/media-player/vlc.js +83 -0
  397. package/dist/media-player/vlc.js.map +1 -0
  398. package/dist/richtext/index.d.ts +19 -0
  399. package/dist/richtext/index.d.ts.map +1 -0
  400. package/dist/richtext/index.js +4 -0
  401. package/dist/richtext/index.js.map +1 -0
  402. package/dist/richtext/links.d.ts +12 -0
  403. package/dist/richtext/links.d.ts.map +1 -0
  404. package/dist/richtext/links.js +64 -0
  405. package/dist/richtext/links.js.map +1 -0
  406. package/dist/richtext/menu.d.ts +11 -0
  407. package/dist/richtext/menu.d.ts.map +1 -0
  408. package/dist/richtext/menu.js +43 -0
  409. package/dist/richtext/menu.js.map +1 -0
  410. package/dist/richtext/node.d.ts +151 -0
  411. package/dist/richtext/node.d.ts.map +1 -0
  412. package/dist/richtext/node.js +255 -0
  413. package/dist/richtext/node.js.map +1 -0
  414. package/dist/richtext/runs.d.ts +92 -0
  415. package/dist/richtext/runs.d.ts.map +1 -0
  416. package/dist/richtext/runs.js +158 -0
  417. package/dist/richtext/runs.js.map +1 -0
  418. package/dist/table/hx.d.ts +24 -0
  419. package/dist/table/hx.d.ts.map +1 -0
  420. package/dist/table/hx.js +25 -0
  421. package/dist/table/hx.js.map +1 -0
  422. package/dist/table/index.d.ts +169 -0
  423. package/dist/table/index.d.ts.map +1 -0
  424. package/dist/table/index.js +844 -0
  425. package/dist/table/index.js.map +1 -0
  426. package/dist/table/rows.d.ts +136 -0
  427. package/dist/table/rows.d.ts.map +1 -0
  428. package/dist/table/rows.js +146 -0
  429. package/dist/table/rows.js.map +1 -0
  430. package/dist/terminal/backends.d.ts +105 -0
  431. package/dist/terminal/backends.d.ts.map +1 -0
  432. package/dist/terminal/backends.js +185 -0
  433. package/dist/terminal/backends.js.map +1 -0
  434. package/dist/terminal/hx.d.ts +24 -0
  435. package/dist/terminal/hx.d.ts.map +1 -0
  436. package/dist/terminal/hx.js +25 -0
  437. package/dist/terminal/hx.js.map +1 -0
  438. package/dist/terminal/index.d.ts +160 -0
  439. package/dist/terminal/index.d.ts.map +1 -0
  440. package/dist/terminal/index.js +344 -0
  441. package/dist/terminal/index.js.map +1 -0
  442. package/dist/terminal/title.d.ts +24 -0
  443. package/dist/terminal/title.d.ts.map +1 -0
  444. package/dist/terminal/title.js +129 -0
  445. package/dist/terminal/title.js.map +1 -0
  446. package/dist/terminal/vt/colors.d.ts +63 -0
  447. package/dist/terminal/vt/colors.d.ts.map +1 -0
  448. package/dist/terminal/vt/colors.js +203 -0
  449. package/dist/terminal/vt/colors.js.map +1 -0
  450. package/dist/terminal/vt/diff.d.ts +117 -0
  451. package/dist/terminal/vt/diff.d.ts.map +1 -0
  452. package/dist/terminal/vt/diff.js +358 -0
  453. package/dist/terminal/vt/diff.js.map +1 -0
  454. package/dist/terminal/vt/fonts.d.ts +92 -0
  455. package/dist/terminal/vt/fonts.d.ts.map +1 -0
  456. package/dist/terminal/vt/fonts.js +178 -0
  457. package/dist/terminal/vt/fonts.js.map +1 -0
  458. package/dist/terminal/vt/index.d.ts +78 -0
  459. package/dist/terminal/vt/index.d.ts.map +1 -0
  460. package/dist/terminal/vt/index.js +312 -0
  461. package/dist/terminal/vt/index.js.map +1 -0
  462. package/dist/terminal/vt/keys.d.ts +74 -0
  463. package/dist/terminal/vt/keys.d.ts.map +1 -0
  464. package/dist/terminal/vt/keys.js +309 -0
  465. package/dist/terminal/vt/keys.js.map +1 -0
  466. package/dist/terminal/vt/mouse.d.ts +44 -0
  467. package/dist/terminal/vt/mouse.d.ts.map +1 -0
  468. package/dist/terminal/vt/mouse.js +106 -0
  469. package/dist/terminal/vt/mouse.js.map +1 -0
  470. package/dist/terminal/vt/node.d.ts +246 -0
  471. package/dist/terminal/vt/node.d.ts.map +1 -0
  472. package/dist/terminal/vt/node.js +1068 -0
  473. package/dist/terminal/vt/node.js.map +1 -0
  474. package/dist/terminal/vt/pty.d.ts +81 -0
  475. package/dist/terminal/vt/pty.d.ts.map +1 -0
  476. package/dist/terminal/vt/pty.js +201 -0
  477. package/dist/terminal/vt/pty.js.map +1 -0
  478. package/dist/terminal/vt/renderer.d.ts +179 -0
  479. package/dist/terminal/vt/renderer.d.ts.map +1 -0
  480. package/dist/terminal/vt/renderer.js +357 -0
  481. package/dist/terminal/vt/renderer.js.map +1 -0
  482. package/dist/terminal/vt/timers.d.ts +6 -0
  483. package/dist/terminal/vt/timers.d.ts.map +1 -0
  484. package/dist/terminal/vt/timers.js +16 -0
  485. package/dist/terminal/vt/timers.js.map +1 -0
  486. package/dist/terminal/vt/xterm.d.ts +142 -0
  487. package/dist/terminal/vt/xterm.d.ts.map +1 -0
  488. package/dist/terminal/vt/xterm.js +32 -0
  489. package/dist/terminal/vt/xterm.js.map +1 -0
  490. package/dist/terminal-output/hx.d.ts +24 -0
  491. package/dist/terminal-output/hx.d.ts.map +1 -0
  492. package/dist/terminal-output/hx.js +25 -0
  493. package/dist/terminal-output/hx.js.map +1 -0
  494. package/dist/terminal-output/index.d.ts +92 -0
  495. package/dist/terminal-output/index.d.ts.map +1 -0
  496. package/dist/terminal-output/index.js +179 -0
  497. package/dist/terminal-output/index.js.map +1 -0
  498. package/dist/terminal-output/runs.d.ts +27 -0
  499. package/dist/terminal-output/runs.d.ts.map +1 -0
  500. package/dist/terminal-output/runs.js +66 -0
  501. package/dist/terminal-output/runs.js.map +1 -0
  502. package/dist/three/canvas.d.ts +46 -0
  503. package/dist/three/canvas.d.ts.map +1 -0
  504. package/dist/three/canvas.js +305 -0
  505. package/dist/three/canvas.js.map +1 -0
  506. package/dist/three/events.d.ts +64 -0
  507. package/dist/three/events.d.ts.map +1 -0
  508. package/dist/three/events.js +146 -0
  509. package/dist/three/events.js.map +1 -0
  510. package/dist/three/geometries.d.ts +89 -0
  511. package/dist/three/geometries.d.ts.map +1 -0
  512. package/dist/three/geometries.js +345 -0
  513. package/dist/three/geometries.js.map +1 -0
  514. package/dist/three/globals.d.ts +7 -0
  515. package/dist/three/globals.d.ts.map +1 -0
  516. package/dist/three/globals.js +20 -0
  517. package/dist/three/globals.js.map +1 -0
  518. package/dist/three/hx.d.ts +9 -0
  519. package/dist/three/hx.d.ts.map +1 -0
  520. package/dist/three/hx.js +10 -0
  521. package/dist/three/hx.js.map +1 -0
  522. package/dist/three/index.d.ts +22 -0
  523. package/dist/three/index.d.ts.map +1 -0
  524. package/dist/three/index.js +24 -0
  525. package/dist/three/index.js.map +1 -0
  526. package/dist/three/jsx-dev-runtime.d.ts +19 -0
  527. package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
  528. package/dist/three/jsx-dev-runtime.js +2 -0
  529. package/dist/three/jsx-dev-runtime.js.map +1 -0
  530. package/dist/three/jsx-runtime.d.ts +19 -0
  531. package/dist/three/jsx-runtime.d.ts.map +1 -0
  532. package/dist/three/jsx-runtime.js +2 -0
  533. package/dist/three/jsx-runtime.js.map +1 -0
  534. package/dist/three/jsx.d.ts +198 -0
  535. package/dist/three/jsx.d.ts.map +1 -0
  536. package/dist/three/jsx.js +2 -0
  537. package/dist/three/jsx.js.map +1 -0
  538. package/dist/three/materials.d.ts +125 -0
  539. package/dist/three/materials.d.ts.map +1 -0
  540. package/dist/three/materials.js +229 -0
  541. package/dist/three/materials.js.map +1 -0
  542. package/dist/three/math.d.ts +146 -0
  543. package/dist/three/math.d.ts.map +1 -0
  544. package/dist/three/math.js +464 -0
  545. package/dist/three/math.js.map +1 -0
  546. package/dist/three/objects.d.ts +185 -0
  547. package/dist/three/objects.d.ts.map +1 -0
  548. package/dist/three/objects.js +309 -0
  549. package/dist/three/objects.js.map +1 -0
  550. package/dist/three/passes.d.ts +54 -0
  551. package/dist/three/passes.d.ts.map +1 -0
  552. package/dist/three/passes.js +78 -0
  553. package/dist/three/passes.js.map +1 -0
  554. package/dist/three/postprocess.d.ts +85 -0
  555. package/dist/three/postprocess.d.ts.map +1 -0
  556. package/dist/three/postprocess.js +503 -0
  557. package/dist/three/postprocess.js.map +1 -0
  558. package/dist/three/raycast.d.ts +24 -0
  559. package/dist/three/raycast.d.ts.map +1 -0
  560. package/dist/three/raycast.js +138 -0
  561. package/dist/three/raycast.js.map +1 -0
  562. package/dist/three/reconciler.d.ts +48 -0
  563. package/dist/three/reconciler.d.ts.map +1 -0
  564. package/dist/three/reconciler.js +416 -0
  565. package/dist/three/reconciler.js.map +1 -0
  566. package/dist/three/renderer-direct.d.ts +102 -0
  567. package/dist/three/renderer-direct.d.ts.map +1 -0
  568. package/dist/three/renderer-direct.js +782 -0
  569. package/dist/three/renderer-direct.js.map +1 -0
  570. package/dist/three/renderer-indirect.d.ts +68 -0
  571. package/dist/three/renderer-indirect.d.ts.map +1 -0
  572. package/dist/three/renderer-indirect.js +438 -0
  573. package/dist/three/renderer-indirect.js.map +1 -0
  574. package/dist/three/store.d.ts +81 -0
  575. package/dist/three/store.d.ts.map +1 -0
  576. package/dist/three/store.js +110 -0
  577. package/dist/three/store.js.map +1 -0
  578. package/dist/timeline/hx.d.ts +18 -0
  579. package/dist/timeline/hx.d.ts.map +1 -0
  580. package/dist/timeline/hx.js +10 -0
  581. package/dist/timeline/hx.js.map +1 -0
  582. package/dist/timeline/index.d.ts +152 -0
  583. package/dist/timeline/index.d.ts.map +1 -0
  584. package/dist/timeline/index.js +383 -0
  585. package/dist/timeline/index.js.map +1 -0
  586. package/dist/tray-host/hx.d.ts +24 -0
  587. package/dist/tray-host/hx.d.ts.map +1 -0
  588. package/dist/tray-host/hx.js +25 -0
  589. package/dist/tray-host/hx.js.map +1 -0
  590. package/dist/tray-host/index.d.ts +110 -0
  591. package/dist/tray-host/index.d.ts.map +1 -0
  592. package/dist/tray-host/index.js +191 -0
  593. package/dist/tray-host/index.js.map +1 -0
  594. package/dist/tray-host/manager.d.ts +137 -0
  595. package/dist/tray-host/manager.d.ts.map +1 -0
  596. package/dist/tray-host/manager.js +462 -0
  597. package/dist/tray-host/manager.js.map +1 -0
  598. package/dist/tray-host/notify.d.ts +22 -0
  599. package/dist/tray-host/notify.d.ts.map +1 -0
  600. package/dist/tray-host/notify.js +74 -0
  601. package/dist/tray-host/notify.js.map +1 -0
  602. package/dist/tray-host/protocol.d.ts +106 -0
  603. package/dist/tray-host/protocol.d.ts.map +1 -0
  604. package/dist/tray-host/protocol.js +191 -0
  605. package/dist/tray-host/protocol.js.map +1 -0
  606. package/dist/tree/hx.d.ts +24 -0
  607. package/dist/tree/hx.d.ts.map +1 -0
  608. package/dist/tree/hx.js +25 -0
  609. package/dist/tree/hx.js.map +1 -0
  610. package/dist/tree/index.d.ts +221 -0
  611. package/dist/tree/index.d.ts.map +1 -0
  612. package/dist/tree/index.js +716 -0
  613. package/dist/tree/index.js.map +1 -0
  614. package/dist/tree/internal.d.ts +18 -0
  615. package/dist/tree/internal.d.ts.map +1 -0
  616. package/dist/tree/internal.js +66 -0
  617. package/dist/tree/internal.js.map +1 -0
  618. package/dist/tree/rows.d.ts +177 -0
  619. package/dist/tree/rows.d.ts.map +1 -0
  620. package/dist/tree/rows.js +179 -0
  621. package/dist/tree/rows.js.map +1 -0
  622. package/package.json +166 -12
  623. package/src/ansi/cast.ts +159 -0
  624. package/src/ansi/index.ts +53 -0
  625. package/src/ansi/palette.ts +226 -0
  626. package/src/ansi/parse.ts +780 -0
  627. package/src/ansi/sgr.ts +380 -0
  628. package/src/ansi/utf8.ts +84 -0
  629. package/src/calendar/Calendar.ts +744 -0
  630. package/src/calendar/DatePicker.ts +368 -0
  631. package/src/calendar/dates.ts +307 -0
  632. package/src/calendar/index.ts +51 -0
  633. package/src/charts/components.ts +864 -0
  634. package/src/charts/data.ts +776 -0
  635. package/src/charts/hx.ts +39 -0
  636. package/src/charts/index.ts +99 -0
  637. package/src/charts/node.ts +932 -0
  638. package/src/charts/render.ts +982 -0
  639. package/src/charts/scale.ts +214 -0
  640. package/src/charts/spec.ts +122 -0
  641. package/src/charts/timers.ts +24 -0
  642. package/src/code/hx.ts +51 -0
  643. package/src/code/index.ts +174 -0
  644. package/src/code-editor/completion.ts +161 -0
  645. package/src/code-editor/doc.ts +198 -0
  646. package/src/code-editor/hx.ts +26 -0
  647. package/src/code-editor/index.ts +615 -0
  648. package/src/code-editor/node.ts +1926 -0
  649. package/src/code-language/hljs.ts +302 -0
  650. package/src/code-language/index.ts +51 -0
  651. package/src/code-language/languages/glsl.ts +120 -0
  652. package/src/code-language/languages/javascript.ts +419 -0
  653. package/src/code-language/languages/json.ts +72 -0
  654. package/src/code-language/languages/shell.ts +221 -0
  655. package/src/code-language/languages/sql.ts +165 -0
  656. package/src/code-language/lezer.ts +190 -0
  657. package/src/code-language/registry.ts +66 -0
  658. package/src/code-language/runs.ts +128 -0
  659. package/src/code-language/stream.ts +306 -0
  660. package/src/code-language/textmate.ts +134 -0
  661. package/src/code-language/theme.ts +124 -0
  662. package/src/code-language/timers.ts +36 -0
  663. package/src/code-language/types.ts +252 -0
  664. package/src/codeblock/index.ts +146 -0
  665. package/src/color-picker/ColorField.ts +333 -0
  666. package/src/color-picker/ColorPicker.ts +1069 -0
  667. package/src/color-picker/color.ts +399 -0
  668. package/src/color-picker/index.ts +50 -0
  669. package/src/desktop-calendar/eds.ts +484 -0
  670. package/src/desktop-calendar/ical.ts +119 -0
  671. package/src/desktop-calendar/index.ts +287 -0
  672. package/src/embed/client.ts +311 -0
  673. package/src/embed/host.ts +432 -0
  674. package/src/embed/index.ts +33 -0
  675. package/src/embed/timers.ts +32 -0
  676. package/src/flow/draw.ts +418 -0
  677. package/src/flow/index.ts +473 -0
  678. package/src/flow/model.ts +687 -0
  679. package/src/flow/node.ts +3694 -0
  680. package/src/flow/paths.ts +403 -0
  681. package/src/flow/types.ts +634 -0
  682. package/src/formula/hx.ts +51 -0
  683. package/src/formula/index.ts +243 -0
  684. package/src/formula/katex.ts +209 -0
  685. package/src/formula/layout.ts +876 -0
  686. package/src/formula/node.ts +467 -0
  687. package/src/html/controls.ts +244 -0
  688. package/src/html/css/cascade.ts +606 -0
  689. package/src/html/css/parse.ts +500 -0
  690. package/src/html/css/style.ts +1371 -0
  691. package/src/html/css/ua.ts +174 -0
  692. package/src/html/css/values.ts +358 -0
  693. package/src/html/dom.ts +410 -0
  694. package/src/html/hx.ts +55 -0
  695. package/src/html/index.ts +545 -0
  696. package/src/html/layout/block.ts +876 -0
  697. package/src/html/layout/boxes.ts +981 -0
  698. package/src/html/layout/flex.ts +297 -0
  699. package/src/html/layout/floats.ts +125 -0
  700. package/src/html/layout/inline.ts +870 -0
  701. package/src/html/layout/table.ts +380 -0
  702. package/src/html/node.ts +967 -0
  703. package/src/html/paint.ts +605 -0
  704. package/src/html/resources.ts +214 -0
  705. package/src/index.ts +638 -0
  706. package/src/internal/heights.ts +211 -0
  707. package/src/internal/hx.ts +53 -0
  708. package/src/internal/text.ts +44 -0
  709. package/src/internal/timers.ts +44 -0
  710. package/src/internal/widget.ts +92 -0
  711. package/src/markdown/ast.ts +163 -0
  712. package/src/markdown/hx.ts +51 -0
  713. package/src/markdown/index.ts +686 -0
  714. package/src/markdown/parse.ts +1037 -0
  715. package/src/markdown/spans.ts +143 -0
  716. package/src/media-player/backends.ts +155 -0
  717. package/src/media-player/control.ts +70 -0
  718. package/src/media-player/hx.ts +51 -0
  719. package/src/media-player/index.ts +378 -0
  720. package/src/media-player/mpv.ts +146 -0
  721. package/src/media-player/vlc.ts +97 -0
  722. package/src/richtext/index.ts +42 -0
  723. package/src/richtext/links.ts +78 -0
  724. package/src/richtext/menu.ts +49 -0
  725. package/src/richtext/node.ts +406 -0
  726. package/src/richtext/runs.ts +253 -0
  727. package/src/table/hx.ts +51 -0
  728. package/src/table/index.ts +1219 -0
  729. package/src/table/rows.ts +275 -0
  730. package/src/terminal/backends.ts +242 -0
  731. package/src/terminal/hx.ts +51 -0
  732. package/src/terminal/index.ts +574 -0
  733. package/src/terminal/title.ts +172 -0
  734. package/src/terminal/vt/colors.ts +247 -0
  735. package/src/terminal/vt/diff.ts +467 -0
  736. package/src/terminal/vt/fonts.ts +233 -0
  737. package/src/terminal/vt/index.ts +443 -0
  738. package/src/terminal/vt/keys.ts +369 -0
  739. package/src/terminal/vt/mouse.ts +144 -0
  740. package/src/terminal/vt/node.ts +1242 -0
  741. package/src/terminal/vt/pty.ts +334 -0
  742. package/src/terminal/vt/renderer.ts +555 -0
  743. package/src/terminal/vt/timers.ts +31 -0
  744. package/src/terminal/vt/xterm.ts +193 -0
  745. package/src/terminal-output/hx.ts +51 -0
  746. package/src/terminal-output/index.ts +340 -0
  747. package/src/terminal-output/runs.ts +79 -0
  748. package/src/three/canvas.ts +451 -0
  749. package/src/three/events.ts +197 -0
  750. package/src/three/geometries.ts +429 -0
  751. package/src/three/globals.ts +34 -0
  752. package/src/three/hx.ts +22 -0
  753. package/src/three/index.ts +98 -0
  754. package/src/three/jsx-dev-runtime.ts +27 -0
  755. package/src/three/jsx-runtime.ts +38 -0
  756. package/src/three/jsx.ts +275 -0
  757. package/src/three/materials.ts +270 -0
  758. package/src/three/math.ts +585 -0
  759. package/src/three/objects.ts +397 -0
  760. package/src/three/passes.ts +90 -0
  761. package/src/three/postprocess.ts +677 -0
  762. package/src/three/raycast.ts +189 -0
  763. package/src/three/react-reconciler.d.ts +50 -0
  764. package/src/three/reconciler.ts +624 -0
  765. package/src/three/renderer-direct.ts +1055 -0
  766. package/src/three/renderer-indirect.ts +570 -0
  767. package/src/three/store.ts +207 -0
  768. package/src/timeline/hx.ts +31 -0
  769. package/src/timeline/index.ts +603 -0
  770. package/src/tray-host/hx.ts +51 -0
  771. package/src/tray-host/index.ts +331 -0
  772. package/src/tray-host/manager.ts +639 -0
  773. package/src/tray-host/notify.ts +102 -0
  774. package/src/tray-host/protocol.ts +235 -0
  775. package/src/tree/hx.ts +51 -0
  776. package/src/tree/index.ts +1087 -0
  777. package/src/tree/internal.ts +87 -0
  778. package/src/tree/rows.ts +334 -0
  779. package/src/index.d.ts +0 -2
  780. package/src/index.js +0 -9
  781. package/src/sparkline/index.d.ts +0 -29
  782. package/src/sparkline/index.js +0 -50
  783. package/src/sparkline/node.js +0 -72
@@ -0,0 +1,107 @@
1
+ import type { ReactElement, ReactNode, Ref } from 'react';
2
+ import type { Style } from 'react-x11/style';
3
+ import type { EmbedStatus, ExitInfo, ProcessHost } from '../embed/index.js';
4
+ import type { MediaBackendName } from './backends.js';
5
+ export { MEDIA_BACKENDS, mediaBackendsFor, mpv, vlc } from './backends.js';
6
+ export type { MediaBackend, MediaBackendName, MediaLaunch, } from './backends.js';
7
+ export type { PlayerControl, PlayerEvents } from './control.js';
8
+ /** Where playback is. */
9
+ export interface MediaProgress {
10
+ /** Seconds from the start. */
11
+ position: number;
12
+ /** Seconds, or 0 before the player knows. */
13
+ duration: number;
14
+ }
15
+ /** What a `ref` on `<MediaPlayer>` gets. */
16
+ export interface MediaPlayerHandle {
17
+ play(): void;
18
+ pause(): void;
19
+ /** Absolute position, in seconds. */
20
+ seek(seconds: number): void;
21
+ /** 0–1. */
22
+ setVolume(volume: number): void;
23
+ /** Stop playback without stopping the player: the window stays, idle. */
24
+ stop(): void;
25
+ /** Stop the player process and start a new one. */
26
+ restart(): void;
27
+ signal(signal?: string): boolean;
28
+ readonly pid: number | null;
29
+ readonly windowId: number | null;
30
+ readonly backend: string | null;
31
+ readonly status: EmbedStatus;
32
+ /** False under VLC — see `./vlc.ts`. `onProgress` never fires then. */
33
+ readonly reportsProgress: boolean;
34
+ }
35
+ export interface MediaPlayerProps {
36
+ /**
37
+ * A path or a URL. **Changing it does not restart the player** — the new
38
+ * source is loaded into the running one, so the window never blinks.
39
+ */
40
+ src?: string;
41
+ /** Which player. Default `'auto'`: mpv if it is installed, else VLC. */
42
+ backend?: MediaBackendName;
43
+ /** Start playing. Default true. */
44
+ autoPlay?: boolean;
45
+ /**
46
+ * Pause state, if you want to drive it. Leave it out and the player is
47
+ * uncontrolled — `autoPlay` decides how it starts and the handle's
48
+ * `play()`/`pause()` move it from there.
49
+ */
50
+ paused?: boolean;
51
+ /** 0–1. Default: the player's own. */
52
+ volume?: number;
53
+ muted?: boolean;
54
+ /** `'16:9'`, `'4:3'`. The player letterboxes inside the element's rect. */
55
+ aspectRatio?: string;
56
+ loop?: boolean;
57
+ /** The player's own on-screen controls. Off by default: they are drawn by
58
+ * the player and will not match the app's theme. */
59
+ osd?: boolean;
60
+ /** Appended to the player's command line verbatim. */
61
+ extraArgs?: readonly string[];
62
+ /** Position and duration, as the player reports them. mpv only. */
63
+ onProgress?: (progress: MediaProgress) => void;
64
+ /** The file reached its end. Not fired for `stop()` or a new `src`. */
65
+ onEnded?: (info: {
66
+ node: unknown;
67
+ }) => void;
68
+ onPlayingChange?: (playing: boolean) => void;
69
+ /** The player process ended. */
70
+ onExit?: (info: ExitInfo) => void;
71
+ /** Spawn failures, control-channel failures, and the
72
+ * `BackendUnavailableError` for a machine with neither player installed. */
73
+ onError?: (err: Error) => void;
74
+ /** Rendered instead of the surface when no backend is installed. */
75
+ fallback?: ReactNode;
76
+ /** False holds off spawning entirely. */
77
+ enabled?: boolean;
78
+ /** Sent on unmount and restart. Default `SIGTERM`. */
79
+ stopSignal?: string;
80
+ /** Where the process runs. Defaults to this machine, through node. */
81
+ processes?: ProcessHost;
82
+ /** A video surface is not a control; default false, unlike `<Terminal>`. */
83
+ focusable?: boolean;
84
+ style?: Style | Style[];
85
+ ref?: Ref<MediaPlayerHandle>;
86
+ 'data-testname'?: string;
87
+ }
88
+ /**
89
+ * A video surface.
90
+ *
91
+ * ```jsx
92
+ * <MediaPlayer
93
+ * src={file}
94
+ * aspectRatio="16:9"
95
+ * volume={0.8}
96
+ * style={{ flexGrow: 1 }}
97
+ * onProgress={({ position, duration }) => setScrub(position / duration)}
98
+ * onEnded={next}
99
+ * fallback={<text>Install mpv to play video.</text>}
100
+ * />
101
+ * ```
102
+ *
103
+ * The player's window stacks above everything drawn in this one, so nothing 2D
104
+ * can overlap it — see "Controls" at the top of this file.
105
+ */
106
+ export declare function MediaPlayer(props: MediaPlayerProps): ReactElement;
107
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/media-player/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,219 @@
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, { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
28
+ import { useTheme } from 'react-x11';
29
+ import { BackendUnavailableError, resolveBackend, useEmbeddedClient, } from '../embed/index.js';
30
+ import { mediaBackendsFor } from './backends.js';
31
+ import { hx } from './hx.js';
32
+ export { MEDIA_BACKENDS, mediaBackendsFor, mpv, vlc } from './backends.js';
33
+ const h = React.createElement;
34
+ /**
35
+ * A video surface.
36
+ *
37
+ * ```jsx
38
+ * <MediaPlayer
39
+ * src={file}
40
+ * aspectRatio="16:9"
41
+ * volume={0.8}
42
+ * style={{ flexGrow: 1 }}
43
+ * onProgress={({ position, duration }) => setScrub(position / duration)}
44
+ * onEnded={next}
45
+ * fallback={<text>Install mpv to play video.</text>}
46
+ * />
47
+ * ```
48
+ *
49
+ * The player's window stacks above everything drawn in this one, so nothing 2D
50
+ * can overlap it — see "Controls" at the top of this file.
51
+ */
52
+ export function MediaPlayer(props) {
53
+ const { backend = 'auto', enabled = true, focusable, processes, stopSignal, } = props;
54
+ const theme = useTheme();
55
+ const control = useRef(null);
56
+ // Bumped when a control channel opens or closes. The prop-syncing effects
57
+ // below depend on it, which is what makes "apply `volume` once there is
58
+ // something to apply it to" a dependency rather than a retry.
59
+ const [channel, setChannel] = useState(0);
60
+ // What the player was launched with, so a `src` that has not changed is not
61
+ // loaded a second time over the top of itself.
62
+ const loaded = useRef(undefined);
63
+ // Read through a ref so that the plan's identity — which is the restart
64
+ // signal — depends only on the launch key below.
65
+ const latest = useRef(props);
66
+ latest.current = props;
67
+ // Only the props that cannot be changed in a running player. `src`,
68
+ // `volume`, `muted` and `paused` are all live commands, so they are
69
+ // deliberately absent: including them would respawn the process for a
70
+ // volume slider.
71
+ const key = useMemo(() => JSON.stringify([
72
+ backend,
73
+ props.aspectRatio ?? null,
74
+ props.loop ?? false,
75
+ props.osd ?? false,
76
+ props.extraArgs ?? null,
77
+ ]), [backend, props.aspectRatio, props.loop, props.osd, props.extraArgs]);
78
+ const plan = useMemo(() => async ({ windowId, host }) => {
79
+ const candidates = mediaBackendsFor(backend);
80
+ if (candidates.length === 0) {
81
+ throw new BackendUnavailableError('media player', [backend]);
82
+ }
83
+ const chosen = await resolveBackend(host, 'media player', candidates);
84
+ const scratch = await host.socketPath(`react-x11-${chosen.backend.name}`);
85
+ const current = latest.current;
86
+ const launch = {
87
+ windowId,
88
+ controlPath: scratch.path,
89
+ src: current.src,
90
+ autoPlay: current.autoPlay ?? true,
91
+ volume: current.volume,
92
+ muted: current.muted,
93
+ aspectRatio: current.aspectRatio,
94
+ loop: current.loop,
95
+ osd: current.osd,
96
+ extraArgs: current.extraArgs,
97
+ };
98
+ return {
99
+ command: chosen.path,
100
+ args: chosen.backend.args(launch),
101
+ backend: chosen.backend.name,
102
+ async attach() {
103
+ const events = {
104
+ onProgress: (progress) => latest.current.onProgress?.(progress),
105
+ onPlayingChange: (playing) => latest.current.onPlayingChange?.(playing),
106
+ onEnded: () => latest.current.onEnded?.({ node: null }),
107
+ onError: (err) => latest.current.onError?.(err),
108
+ };
109
+ const opened = await chosen.backend.connect(host, scratch.path, events, launch);
110
+ control.current = opened;
111
+ loaded.current = launch.src;
112
+ setChannel((n) => n + 1);
113
+ return () => {
114
+ control.current = null;
115
+ loaded.current = undefined;
116
+ opened.dispose();
117
+ setChannel((n) => n + 1);
118
+ };
119
+ },
120
+ dispose: () => scratch.dispose(),
121
+ };
122
+ }, [backend, key]);
123
+ const client = useEmbeddedClient({
124
+ plan,
125
+ host: processes,
126
+ enabled,
127
+ stopSignal,
128
+ onExit: props.onExit,
129
+ onError: props.onError,
130
+ });
131
+ // --- props the control channel applies to a running player ---------------
132
+ const { src, volume, muted, paused } = props;
133
+ useEffect(() => {
134
+ if (!control.current || src === undefined)
135
+ return;
136
+ if (src === loaded.current)
137
+ return;
138
+ loaded.current = src;
139
+ control.current.load(src);
140
+ }, [src, channel]);
141
+ useEffect(() => {
142
+ if (!control.current || volume === undefined)
143
+ return;
144
+ control.current.setVolume(volume);
145
+ }, [volume, channel]);
146
+ useEffect(() => {
147
+ if (!control.current || muted === undefined)
148
+ return;
149
+ control.current.setMuted(muted);
150
+ }, [muted, channel]);
151
+ useEffect(() => {
152
+ if (!control.current || paused === undefined)
153
+ return;
154
+ control.current.setPaused(paused);
155
+ }, [paused, channel]);
156
+ // --- the handle ---------------------------------------------------------
157
+ const reportsProgress = useMemo(() => {
158
+ const [chosen] = mediaBackendsFor(backend).filter((b) => b.name === client.backend);
159
+ return chosen?.reportsProgress ?? false;
160
+ }, [backend, client.backend]);
161
+ const noop = useCallback(() => { }, []);
162
+ React.useImperativeHandle(props.ref, () => ({
163
+ play: () => control.current?.setPaused(false) ?? noop(),
164
+ pause: () => control.current?.setPaused(true) ?? noop(),
165
+ seek: (seconds) => control.current?.seek(seconds) ?? noop(),
166
+ setVolume: (value) => control.current?.setVolume(value) ?? noop(),
167
+ stop: () => control.current?.stop() ?? noop(),
168
+ restart: client.restart,
169
+ signal: client.signal,
170
+ get pid() {
171
+ return client.pid;
172
+ },
173
+ get windowId() {
174
+ return client.windowId;
175
+ },
176
+ get backend() {
177
+ return client.backend;
178
+ },
179
+ get status() {
180
+ return client.status;
181
+ },
182
+ get reportsProgress() {
183
+ return reportsProgress;
184
+ },
185
+ }), [client, noop, reportsProgress]);
186
+ // Black rather than the theme background: this is a video surface, and what
187
+ // shows around a letterboxed frame should be what a player would put there.
188
+ const style = {
189
+ flexGrow: 1,
190
+ backgroundColor: String(theme.videoBackground ?? '#000000'),
191
+ };
192
+ const styles = [style];
193
+ if (props.style) {
194
+ for (const extra of Array.isArray(props.style)
195
+ ? props.style
196
+ : [props.style]) {
197
+ styles.push(extra);
198
+ }
199
+ }
200
+ if (client.status === 'unavailable' && props.fallback !== undefined) {
201
+ return h(React.Fragment, null, props.fallback);
202
+ }
203
+ const foreign = {
204
+ onReady: client.handleReady,
205
+ // A video surface is not something to tab to, and an embedded player that
206
+ // took the focus would swallow the app's own keys while the pointer is
207
+ // over it.
208
+ focusable: focusable ?? false,
209
+ 'aria-label': 'Media player',
210
+ style: styles,
211
+ };
212
+ // See the same note in `../terminal/index.ts`: `data-testname` is a runtime
213
+ // convention react-x11's element declarations do not carry.
214
+ return hx('foreign', {
215
+ ...foreign,
216
+ 'data-testname': props['data-testname'],
217
+ });
218
+ }
219
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/media-player/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ProcessHost } from '../embed/index.js';
2
+ import type { PlayerControl, PlayerEvents } from './control.js';
3
+ export declare function connectMpv(host: ProcessHost, socketPath: string, events: PlayerEvents): Promise<PlayerControl>;
4
+ //# sourceMappingURL=mpv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mpv.d.ts","sourceRoot":"","sources":["../../src/media-player/mpv.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAuBhE,wBAAsB,UAAU,CAC9B,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,aAAa,CAAC,CAoGxB"}
@@ -0,0 +1,120 @@
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 { lineReader, unitRange } from './control.js';
18
+ /** Observation ids. mpv echoes them back on every property-change, and they
19
+ * are ours to choose. */
20
+ const OBSERVE = {
21
+ position: 1,
22
+ duration: 2,
23
+ pause: 3,
24
+ };
25
+ /** mpv's volume is a percentage and goes above 100 (`--volume-max`); the prop
26
+ * is 0–1, so this is the whole of the conversion. */
27
+ const VOLUME_SCALE = 100;
28
+ export async function connectMpv(host, socketPath, events) {
29
+ const socket = await connectWhenReady(host, socketPath);
30
+ let position = 0;
31
+ let duration = 0;
32
+ let disposed = false;
33
+ const send = (command) => {
34
+ if (disposed)
35
+ return;
36
+ socket.write(`${JSON.stringify({ command })}\n`);
37
+ };
38
+ const observe = (id, property) => {
39
+ send(['observe_property', id, property]);
40
+ };
41
+ socket.onData(lineReader((line) => {
42
+ let message;
43
+ try {
44
+ message = JSON.parse(line);
45
+ }
46
+ catch {
47
+ // mpv only ever writes JSON here; a line that is not is a version
48
+ // saying something we do not understand, and dropping it is right.
49
+ return;
50
+ }
51
+ if (message.event === 'property-change') {
52
+ if (message.id === OBSERVE.position &&
53
+ typeof message.data === 'number') {
54
+ position = message.data;
55
+ events.onProgress?.({ position, duration });
56
+ }
57
+ else if (message.id === OBSERVE.duration &&
58
+ typeof message.data === 'number') {
59
+ duration = message.data;
60
+ events.onProgress?.({ position, duration });
61
+ }
62
+ else if (message.id === OBSERVE.pause) {
63
+ events.onPlayingChange?.(message.data !== true);
64
+ }
65
+ return;
66
+ }
67
+ // `end-file` fires for every way a file stops, including the ones a
68
+ // caller must not hear as "the video finished": `stop` is our own
69
+ // `stop()`, and `redirect` is a playlist indirection mid-load.
70
+ if (message.event === 'end-file') {
71
+ if (message.reason === 'eof')
72
+ events.onEnded?.();
73
+ return;
74
+ }
75
+ if (message.event === 'start-file') {
76
+ position = 0;
77
+ duration = 0;
78
+ }
79
+ }));
80
+ socket.onClose(() => {
81
+ if (disposed)
82
+ return;
83
+ disposed = true;
84
+ // Not an error: mpv closing its socket is mpv exiting, which the process
85
+ // watch in `useEmbeddedClient` reports with an exit code.
86
+ });
87
+ observe(OBSERVE.position, 'time-pos');
88
+ observe(OBSERVE.duration, 'duration');
89
+ observe(OBSERVE.pause, 'pause');
90
+ return {
91
+ reportsProgress: true,
92
+ load(src) {
93
+ // `replace` rather than `append`: the prop names what is playing, so
94
+ // setting it twice must not build a playlist.
95
+ send(['loadfile', src, 'replace']);
96
+ },
97
+ setPaused(paused) {
98
+ send(['set_property', 'pause', paused]);
99
+ },
100
+ seek(seconds) {
101
+ if (!Number.isFinite(seconds))
102
+ return;
103
+ send(['seek', Math.max(0, seconds), 'absolute']);
104
+ },
105
+ setVolume(volume) {
106
+ send(['set_property', 'volume', unitRange(volume) * VOLUME_SCALE]);
107
+ },
108
+ setMuted(muted) {
109
+ send(['set_property', 'mute', muted]);
110
+ },
111
+ stop() {
112
+ send(['stop']);
113
+ },
114
+ dispose() {
115
+ disposed = true;
116
+ socket.close();
117
+ },
118
+ };
119
+ }
120
+ //# sourceMappingURL=mpv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mpv.js","sourceRoot":"","sources":["../../src/media-player/mpv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ProcessHost } from '../embed/index.js';
2
+ import type { PlayerControl, PlayerEvents } from './control.js';
3
+ export interface VlcConnectOptions {
4
+ /** What the player was started doing, so the toggle stays in step. */
5
+ paused: boolean;
6
+ }
7
+ export declare function connectVlc(host: ProcessHost, socketPath: string, events: PlayerEvents, options: VlcConnectOptions): Promise<PlayerControl>;
8
+ //# sourceMappingURL=vlc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vlc.d.ts","sourceRoot":"","sources":["../../src/media-player/vlc.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAKhE,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CAyDxB"}
@@ -0,0 +1,83 @@
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 { unitRange } from './control.js';
24
+ /** VLC's rc `volume` takes 0–256 for 0–100%. */
25
+ const VOLUME_SCALE = 256;
26
+ export async function connectVlc(host, socketPath, events, options) {
27
+ const socket = await connectWhenReady(host, socketPath);
28
+ let paused = options.paused;
29
+ let volume = 1;
30
+ let disposed = false;
31
+ const send = (line) => {
32
+ if (disposed)
33
+ return;
34
+ socket.write(`${line}\n`);
35
+ };
36
+ // Read and discard. The stream has to be consumed — an unread socket
37
+ // eventually stops the writer — and nothing in it is parsed, for the reason
38
+ // in the file comment.
39
+ socket.onData(() => { });
40
+ socket.onClose(() => {
41
+ disposed = true;
42
+ });
43
+ return {
44
+ reportsProgress: false,
45
+ load(src) {
46
+ send(`add ${src}`);
47
+ paused = false;
48
+ events.onPlayingChange?.(true);
49
+ },
50
+ setPaused(next) {
51
+ if (next === paused)
52
+ return;
53
+ // `pause` toggles; `play` is unambiguous, so resuming uses it and only
54
+ // pausing needs the toggle.
55
+ send(next ? 'pause' : 'play');
56
+ paused = next;
57
+ events.onPlayingChange?.(!next);
58
+ },
59
+ seek(seconds) {
60
+ if (!Number.isFinite(seconds))
61
+ return;
62
+ send(`seek ${Math.max(0, Math.round(seconds))}`);
63
+ },
64
+ setVolume(next) {
65
+ volume = unitRange(next);
66
+ send(`volume ${Math.round(volume * VOLUME_SCALE)}`);
67
+ },
68
+ setMuted(muted) {
69
+ // rc has no mute: 0 and back is what the command set can express.
70
+ send(`volume ${muted ? 0 : Math.round(volume * VOLUME_SCALE)}`);
71
+ },
72
+ stop() {
73
+ send('stop');
74
+ paused = true;
75
+ events.onPlayingChange?.(false);
76
+ },
77
+ dispose() {
78
+ disposed = true;
79
+ socket.close();
80
+ },
81
+ };
82
+ }
83
+ //# sourceMappingURL=vlc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vlc.js","sourceRoot":"","sources":["../../src/media-player/vlc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Ref } from 'react';
2
+ import type { RichTextProps } from './node.js';
3
+ export { ELEMENT as RICHTEXT_ELEMENT, registerRichText, RichTextNode, } from './node.js';
4
+ export type { NtkApp, RichTextProps, TextLayoutLike, TextRun } from './node.js';
5
+ export { useSelectionMenu } from './menu.js';
6
+ export type { SelectionMenuHandlers } from './menu.js';
7
+ export { useLinkClicks } from './links.js';
8
+ export type { LinkHandlers } from './links.js';
9
+ declare module 'react-x11/jsx-runtime' {
10
+ namespace JSX {
11
+ interface IntrinsicElements {
12
+ richtext: RichTextProps & {
13
+ key?: string | number;
14
+ ref?: Ref<unknown>;
15
+ };
16
+ }
17
+ }
18
+ }
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/richtext/index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAM/C,OAAO,EACL,OAAO,IAAI,gBAAgB,EAC3B,gBAAgB,EAChB,YAAY,GACb,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,QAAQ,uBAAuB,CAAC;IACrC,UAAU,GAAG,CAAC;QACZ,UAAU,iBAAiB;YACzB,QAAQ,EAAE,aAAa,GAAG;gBAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;gBAAC,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;aAAE,CAAC;SACzE;KACF;CACF"}
@@ -0,0 +1,4 @@
1
+ export { ELEMENT as RICHTEXT_ELEMENT, registerRichText, RichTextNode, } from './node.js';
2
+ export { useSelectionMenu } from './menu.js';
3
+ export { useLinkClicks } from './links.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/richtext/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EACL,OAAO,IAAI,gBAAgB,EAC3B,gBAAgB,EAChB,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { DrawnNode, MouseEvent as X11MouseEvent } from 'react-x11';
2
+ export interface LinkHandlers {
3
+ onMouseDown: (ev: X11MouseEvent<DrawnNode>) => void;
4
+ onMouseUp: (ev: X11MouseEvent<DrawnNode>) => void;
5
+ }
6
+ /**
7
+ * Mouse handlers for a document root that follows links. Returns handlers
8
+ * that do nothing when `onLink` is absent — the component never navigates by
9
+ * itself, and a document with no handler simply has inert link text.
10
+ */
11
+ export declare function useLinkClicks(onLink?: (href: string, ev: X11MouseEvent<DrawnNode>) => void): LinkHandlers;
12
+ //# sourceMappingURL=links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/richtext/links.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AAWxE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IACpD,SAAS,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;CACnD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,IAAI,GAC5D,YAAY,CA6Bd"}