@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,78 @@
1
+ // Following a link in a document.
2
+ //
3
+ // The only part of the old gesture hook that survived react-x11#291: core
4
+ // selects, copies and takes PRIMARY on its own now, but it left hover and
5
+ // `cursorAt` out deliberately, so which run is a link and what a click on
6
+ // one means are still this package's to answer.
7
+ //
8
+ // It lived in `../markdown/` until `<TerminalOutput>` needed it for OSC 8
9
+ // hyperlinks, and it moved here rather than being copied: there is no
10
+ // markdown in it at all. It is about `TextRun.href` and `hrefAtPoint`, both
11
+ // of which are this module's — the same "extract when the second consumer
12
+ // arrives" move `../codeblock/` was.
13
+ //
14
+ // The third consumer, `<Html>`, is what made the node test structural: it
15
+ // answers `hrefAtPoint` from a document it laid out itself and is not a
16
+ // `RichTextNode`. Asking for the method rather than the class is also what
17
+ // keeps this module from importing `node.ts`, so a surface that wants link
18
+ // clicks and nothing else does not pull the element in behind them.
19
+ //
20
+ // The whole problem is that a press on a link is also the start of a drag,
21
+ // and the two are told apart only at the release: a pointer that has barely
22
+ // moved and left nothing selected was a click, and anything else was a
23
+ // selection that happened to begin on a link. These handlers never call
24
+ // `preventDefault`, so core's own selection still runs after them.
25
+ import { useRef } from 'react';
26
+ import type { DrawnNode, MouseEvent as X11MouseEvent } from 'react-x11';
27
+
28
+ /** Any node that can name the link under a point — `<richtext>` and
29
+ * `<htmlview>` both do, and neither has to say so to this module. */
30
+ interface HrefSource {
31
+ hrefAtPoint?(x: number, y: number): string | null;
32
+ }
33
+
34
+ /** How far the pointer may travel and still count as a click, in pixels. */
35
+ const CLICK_SLOP = 3;
36
+
37
+ export interface LinkHandlers {
38
+ onMouseDown: (ev: X11MouseEvent<DrawnNode>) => void;
39
+ onMouseUp: (ev: X11MouseEvent<DrawnNode>) => void;
40
+ }
41
+
42
+ /**
43
+ * Mouse handlers for a document root that follows links. Returns handlers
44
+ * that do nothing when `onLink` is absent — the component never navigates by
45
+ * itself, and a document with no handler simply has inert link text.
46
+ */
47
+ export function useLinkClicks(
48
+ onLink?: (href: string, ev: X11MouseEvent<DrawnNode>) => void,
49
+ ): LinkHandlers {
50
+ const press = useRef<{ x: number; y: number; href: string } | null>(null);
51
+ return {
52
+ onMouseDown: (ev) => {
53
+ press.current = null;
54
+ if (!onLink || ev.button !== 1) return;
55
+ const target = ev.target as HrefSource | null;
56
+ const href =
57
+ typeof target?.hrefAtPoint === 'function'
58
+ ? target.hrefAtPoint(ev.x, ev.y)
59
+ : null;
60
+ if (href != null) press.current = { x: ev.x, y: ev.y, href };
61
+ },
62
+ onMouseUp: (ev) => {
63
+ const start = press.current;
64
+ press.current = null;
65
+ if (!onLink || !start || ev.button !== 1) return;
66
+ if (
67
+ Math.abs(ev.x - start.x) > CLICK_SLOP ||
68
+ Math.abs(ev.y - start.y) > CLICK_SLOP
69
+ ) {
70
+ return;
71
+ }
72
+ // a drag that ended where it began still selected something; that was
73
+ // a selection gesture, not a click
74
+ if (!(ev.currentTarget?.textSelection?.isCollapsed ?? true)) return;
75
+ onLink(start.href, ev);
76
+ },
77
+ };
78
+ }
@@ -0,0 +1,49 @@
1
+ // Right-click on a selectable surface.
2
+ //
3
+ // Core selects, copies and takes PRIMARY by itself (react-x11#291), and it
4
+ // opens the standard edit menu by itself for `<textinput>` — but a
5
+ // `selectable` surface has no default context menu, because which verbs a
6
+ // surface offers is the surface's to say. A read-only document offers two:
7
+ // Copy, and Select all.
8
+ //
9
+ // `openEditMenu` is core's own (react-x11#289), so what is left here is the
10
+ // verb list. Everything else about the menu — which rows are enabled, Paste
11
+ // watching selection ownership rather than asking the server, the arrow
12
+ // keys, Escape, the pointer grab that dismisses it, handing the keyboard
13
+ // back afterwards — is core's and shared with the field.
14
+ import { openEditMenu, useClipboard } from 'react-x11';
15
+ import type { DrawnNode, MouseEvent as X11MouseEvent } from 'react-x11';
16
+
17
+ export interface SelectionMenuHandlers {
18
+ onContextMenu: (ev: X11MouseEvent<DrawnNode>) => void;
19
+ }
20
+
21
+ /**
22
+ * The context-menu handler for a `selectable` root. Spread onto the same
23
+ * `<box>` the `selectable` prop is on — the menu's verbs are read off that
24
+ * node, which is the surface.
25
+ */
26
+ export function useSelectionMenu(enabled = true): SelectionMenuHandlers {
27
+ const clipboard = useClipboard();
28
+ return {
29
+ onContextMenu: (ev) => {
30
+ if (!enabled) return;
31
+ const surface = ev.currentTarget;
32
+ if (!surface) return;
33
+ openEditMenu(
34
+ surface,
35
+ { x: ev.x, y: ev.y },
36
+ {
37
+ // A verb left out is a row that is not there rather than a greyed
38
+ // one, so a read-only surface simply never mentions Cut or Paste.
39
+ hasSelection: !(surface.textSelection?.isCollapsed ?? true),
40
+ copy: () => {
41
+ const text = surface.selectedText();
42
+ if (text) clipboard.write(text).catch(() => {});
43
+ },
44
+ selectAll: () => surface.selectAll(),
45
+ },
46
+ );
47
+ },
48
+ };
49
+ }
@@ -0,0 +1,406 @@
1
+ // The retained node behind `<richtext>` — one wrapped, styled run of inline
2
+ // text: a paragraph, a heading, a list item's line, a table cell, a code
3
+ // block. `<Markdown>` and `<Code>` compose documents out of these plus plain
4
+ // `<box>`es.
5
+ //
6
+ // This directory is a shared module, not a component: registration is a
7
+ // function (`registerRichText()`), called at module scope by each component
8
+ // whose index.ts uses the element, so the "a component registers its element
9
+ // in its own index.ts" tree-shaking rule keeps holding — an app that imports
10
+ // neither `<Markdown>` nor `<Code>` never registers or ships any of this.
11
+ //
12
+ // **Why the element still exists, now that core selects text.** react-x11#291
13
+ // gave every node the four text accessors and made `selectable` a core
14
+ // service, which is what this directory used to implement itself (a whole
15
+ // `TextSelection` controller and a gestures hook, both deleted with it). What
16
+ // core's `<text>` still does not do is paint *per-run decoration*: the
17
+ // inline-code chip's background, a link's underline, `~~del~~`'s rule — and
18
+ // it composes mixed styles by nesting spans rather than laying out one array
19
+ // of styled runs, which is the shape a markdown inline sequence and a
20
+ // tokenized line of code both already have. So the element is a painter that
21
+ // answers for its own text, which is exactly the seam docs/extending.md
22
+ // describes: implement the four accessors and a document selects across you,
23
+ // with no registration call.
24
+ import { registerElement, registeredElements } from 'react-x11/host';
25
+ import { Node } from 'react-x11/node';
26
+ import type {
27
+ Context2D,
28
+ MeasureConstraints,
29
+ MeasuredSize,
30
+ } from 'react-x11/node';
31
+ import type { Rect } from 'react-x11';
32
+ import type { Style } from 'react-x11/style';
33
+
34
+ import {
35
+ canFill,
36
+ lineBands,
37
+ paintRunBackgrounds,
38
+ paintRunRules,
39
+ } from './runs.js';
40
+ import { codeUnitOffsets } from '../internal/text.js';
41
+
42
+ /** The element name — registration key, `node.kind` and JSX tag alike. */
43
+ export const ELEMENT = 'richtext';
44
+
45
+ /**
46
+ * Register `<richtext>`. Called at module scope by every component index
47
+ * that renders the element — never at this module's own scope, so the
48
+ * shared module stays side-effect free. Idempotent on purpose:
49
+ * `registerElement` throws on a second registration without `override`,
50
+ * which is the right default for two *packages* fighting over a name — but a
51
+ * lockfile skew that puts two copies of this package in one app should not
52
+ * fail to boot over it.
53
+ */
54
+ export function registerRichText(): void {
55
+ if (registeredElements().includes(ELEMENT)) return;
56
+ registerElement(ELEMENT, {
57
+ create: (props, app) => new RichTextNode(props, app),
58
+ // neither is a style name today, but `wrap` reads like one — declaring
59
+ // everything the element owns keeps the DEV assertion honest even if
60
+ // core's style vocabulary grows underneath us
61
+ semanticNames: ['runs', 'wrap'],
62
+ childrenAllowed: false,
63
+ });
64
+ }
65
+
66
+ /** The ntk connection a node is built against. Derived from `Node`'s own
67
+ * constructor rather than named, so it cannot drift from core's. */
68
+ export type NtkApp = ConstructorParameters<typeof Node>[2];
69
+
70
+ /**
71
+ * One styled run. `text`/`family`/`size`/`weight`/`style`/`color` are
72
+ * ntk-span vocabulary and pass straight through to `fonts.layout`; the
73
+ * rest ride along unread by ntk and come back on the laid-out runs, which
74
+ * is how the paint pass knows where code backgrounds, link underlines and
75
+ * strikethroughs go (the same trick ntk's own MarkdownView used).
76
+ */
77
+ export interface TextRun {
78
+ text: string;
79
+ family?: string;
80
+ size?: number;
81
+ weight?: number | 'normal' | 'bold';
82
+ style?: 'normal' | 'italic';
83
+ color?: string;
84
+ /** Fill painted behind the run — the inline-code chip. */
85
+ bg?: string;
86
+ /**
87
+ * How `bg` is painted. `'chip'` (the default) insets the fill to the run's
88
+ * ink and pads it slightly, which is what an inline-code background wants.
89
+ *
90
+ * `'line'` fills the run's exact width and the line's full height instead,
91
+ * so adjacent runs abut with no seam and no bleed — what a terminal's
92
+ * background colours need, where a two-pixel overhang would paint over the
93
+ * neighbouring cell and a fill that stops at the descender would leave a
94
+ * gap between rows.
95
+ */
96
+ bgFill?: 'chip' | 'line';
97
+ /** 1px rule under the baseline, in this colour — links. */
98
+ underline?: string;
99
+ /** The rule `underline` draws. Default `'single'`; the rest are SGR 4's
100
+ * sub-parameters, which a captured terminal session carries. Ignored
101
+ * without `underline`, which is what says the rule exists at all. */
102
+ underlineStyle?: 'single' | 'double' | 'curly' | 'dotted' | 'dashed';
103
+ /** 1px rule through the x-height, in this colour — `~~del~~`. */
104
+ strike?: string;
105
+ /** Link target. `null` is a link still streaming in (not clickable). */
106
+ href?: string | null;
107
+ }
108
+
109
+ /** The props `<richtext>` takes. */
110
+ export interface RichTextProps {
111
+ /** The styled runs. Give a stable array identity — the layout cache and
112
+ * the streaming path both key off it. */
113
+ runs: TextRun[];
114
+ /** False lays the text out at its natural width, unwrapped — code. */
115
+ wrap?: boolean;
116
+ style?: Style | Style[];
117
+ }
118
+
119
+ // --- the slices of ntk this node speaks to ---------------------------------
120
+ // Typed structurally rather than imported: react-x11 keeps ntk deliberately
121
+ // loose, so an element says what it needs and nothing more.
122
+
123
+ interface FontMetricsLike {
124
+ ascent: number;
125
+ descent: number;
126
+ }
127
+
128
+ interface LaidRunLike {
129
+ x: number;
130
+ width: number;
131
+ /** Extent within the paragraph, in **code units** (ntk's run vocabulary). */
132
+ start: number;
133
+ end: number;
134
+ span: TextRun;
135
+ run: {
136
+ font: { metrics(size: number): FontMetricsLike };
137
+ size: number;
138
+ direction?: 'ltr' | 'rtl';
139
+ };
140
+ }
141
+
142
+ interface LineLike {
143
+ x: number;
144
+ y: number;
145
+ height: number;
146
+ baseline: number;
147
+ width: number;
148
+ ascent: number;
149
+ descent: number;
150
+ /** The line's extent, in code units, like its runs'. */
151
+ start: number;
152
+ end: number;
153
+ runs: LaidRunLike[];
154
+ }
155
+
156
+ export interface TextLayoutLike {
157
+ width: number;
158
+ height: number;
159
+ lines: LineLike[];
160
+ draw(ctx: unknown, x?: number, y?: number): void;
161
+ caretPosition(index: number): {
162
+ x: number;
163
+ y: number;
164
+ height: number;
165
+ line: number;
166
+ };
167
+ indexAt(x: number, y: number): number;
168
+ }
169
+
170
+ interface FontsLike {
171
+ layout(
172
+ content: TextRun[],
173
+ style: Record<string, unknown>,
174
+ options: { maxWidth?: number; lineHeight?: number; align?: string },
175
+ ): TextLayoutLike;
176
+ }
177
+
178
+ /**
179
+ * The bands a highlight over `[start, end)` fills, in layout coordinates —
180
+ * one per line, and more than one on a line that changes direction. The
181
+ * per-line work is `runs.ts`'s, which is also what `<Html>` calls with its
182
+ * own line placement.
183
+ */
184
+ function rangeBands(
185
+ layout: TextLayoutLike,
186
+ text: string,
187
+ start: number,
188
+ end: number,
189
+ ): Rect[] {
190
+ const lines = layout.lines;
191
+ if (!lines?.length || end <= start) return [];
192
+ const offsets = codeUnitOffsets(text);
193
+ const last = offsets.length - 1;
194
+ const from = offsets[Math.max(0, Math.min(start, last))];
195
+ const to = offsets[Math.max(0, Math.min(end, last))];
196
+ if (to <= from) return [];
197
+ const bands: Rect[] = [];
198
+ for (const line of lines) {
199
+ if (line.end <= from || line.start >= to) continue;
200
+ for (const band of lineBands(layout, line, offsets, from, to)) {
201
+ bands.push({
202
+ x: band.x,
203
+ y: line.y,
204
+ width: band.width,
205
+ height: line.height,
206
+ });
207
+ }
208
+ }
209
+ return bands;
210
+ }
211
+
212
+ export class RichTextNode extends Node {
213
+ private _layouts = new Map<string, TextLayoutLike | null>();
214
+ private _text: string | null = null;
215
+
216
+ constructor(props: Record<string, unknown>, app: NtkApp) {
217
+ super(ELEMENT, props, app);
218
+ }
219
+
220
+ /**
221
+ * The size the laid-out runs come to. An unbounded axis arrives as
222
+ * `Infinity`, which is also what `wrap={false}` wants, so the wrap flag is
223
+ * the only branch left — and an answer wider than the offer overflows
224
+ * rather than being clamped, which is what makes a non-wrapping run
225
+ * scrollable inside its parent. `null` is the mock backend, where there is
226
+ * no font manager to measure through.
227
+ */
228
+ override measureContent({ width }: MeasureConstraints): MeasuredSize {
229
+ const wrap = (this.props as unknown as RichTextProps).wrap !== false;
230
+ const layout = this._layoutFor(wrap ? width : Infinity);
231
+ if (!layout) return { width: 0, height: 0 };
232
+ return {
233
+ width: Math.ceil(layout.width),
234
+ height: Math.ceil(layout.height),
235
+ };
236
+ }
237
+
238
+ private _runs(): TextRun[] {
239
+ const runs = (this.props as unknown as RichTextProps).runs;
240
+ return Array.isArray(runs) ? runs : [];
241
+ }
242
+
243
+ /**
244
+ * Lay the runs out at a width, memoized. The mock backend's app has no
245
+ * font manager; every caller treats `null` as "skip the geometry", the
246
+ * same convention core's rich nodes use.
247
+ */
248
+ private _layoutFor(maxWidth: number): TextLayoutLike | null {
249
+ const key = String(maxWidth);
250
+ const hit = this._layouts.get(key);
251
+ if (hit !== undefined) return hit;
252
+ const fonts = (this.app as { fonts?: FontsLike } | null)?.fonts;
253
+ let layout: TextLayoutLike | null = null;
254
+ if (fonts) {
255
+ layout = fonts.layout(
256
+ this._runs(),
257
+ { family: 'sans-serif', size: 14 },
258
+ {
259
+ maxWidth: Number.isFinite(maxWidth) ? maxWidth : undefined,
260
+ lineHeight: this.style.lineHeight,
261
+ align: this.style.textAlign,
262
+ },
263
+ );
264
+ }
265
+ if (this._layouts.size > 32) this._layouts.clear();
266
+ this._layouts.set(key, layout);
267
+ return layout;
268
+ }
269
+
270
+ /**
271
+ * The layout this node is currently painted with — and, because it is the
272
+ * one thing every accessor below answers from, the reason a caret rect and
273
+ * a glyph cannot disagree (docs/extending.md, "answer from what you draw").
274
+ */
275
+ private _paintLayout(): TextLayoutLike | null {
276
+ const wrap = (this.props as unknown as RichTextProps).wrap !== false;
277
+ return this._layoutFor(wrap ? this.abs.width : Infinity);
278
+ }
279
+
280
+ override applyProps(
281
+ nextProps: Record<string, unknown>,
282
+ prevProps: Record<string, unknown>,
283
+ ): void {
284
+ super.applyProps(nextProps, prevProps);
285
+ if (
286
+ nextProps.runs !== prevProps.runs ||
287
+ nextProps.wrap !== prevProps.wrap
288
+ ) {
289
+ this._layouts.clear();
290
+ this._text = null;
291
+ this.invalidateMeasure('content');
292
+ }
293
+ }
294
+
295
+ override destroySubtree(): void {
296
+ this._layouts.clear();
297
+ super.destroySubtree();
298
+ }
299
+
300
+ // --- answering for our own text ------------------------------------------
301
+ //
302
+ // The four accessors from react-x11#291. Implementing them is the whole of
303
+ // joining a `selectable` document: core walks the subtree, asks, and pushes
304
+ // back a `selectionRange` for `paint` to fill. Indices are **code points**
305
+ // and rectangles are in the **owning window's** coordinates, which is the
306
+ // space `abs` and a mouse event's `x`/`y` are already in.
307
+
308
+ override textContent(): string {
309
+ if (this._text === null) {
310
+ this._text = this._runs()
311
+ .map((r) => r.text)
312
+ .join('');
313
+ }
314
+ return this._text;
315
+ }
316
+
317
+ override textIndexAt(x: number, y: number): number {
318
+ const layout = this._paintLayout();
319
+ if (!layout) return 0;
320
+ const i = layout.indexAt(x - this.abs.x, y - this.abs.y);
321
+ return Math.max(0, Math.min([...this.textContent()].length, i));
322
+ }
323
+
324
+ override textCaretRect(index: number): Rect | null {
325
+ const layout = this._paintLayout();
326
+ if (!layout) return null;
327
+ const caret = layout.caretPosition(index);
328
+ return {
329
+ x: this.abs.x + caret.x,
330
+ y: this.abs.y + caret.y,
331
+ width: 0,
332
+ height: caret.height,
333
+ };
334
+ }
335
+
336
+ override textRangeRects(start: number, end: number): Rect[] {
337
+ const layout = this._paintLayout();
338
+ if (!layout) return [];
339
+ return rangeBands(layout, this.textContent(), start, end).map((band) => ({
340
+ x: this.abs.x + band.x,
341
+ y: this.abs.y + band.y,
342
+ width: band.width,
343
+ height: band.height,
344
+ }));
345
+ }
346
+
347
+ /** The run's link target under a point, if any — for click-to-follow.
348
+ * Not part of the selection seam: core deliberately left hover and
349
+ * `cursorAt` out of #291, so following a link stays this package's. */
350
+ hrefAtPoint(x: number, y: number): string | null {
351
+ const layout = this._paintLayout();
352
+ if (!layout) return null;
353
+ const lx = x - this.abs.x;
354
+ const ly = y - this.abs.y;
355
+ for (const line of layout.lines) {
356
+ if (ly < line.y || ly >= line.y + line.height) continue;
357
+ for (const r of line.runs) {
358
+ const href = r.span.href;
359
+ if (href == null) continue;
360
+ if (lx >= line.x + r.x && lx <= line.x + r.x + r.width) return href;
361
+ }
362
+ }
363
+ return null;
364
+ }
365
+
366
+ // --- paint ---------------------------------------------------------------
367
+
368
+ override paint(ctx: Context2D): void {
369
+ super.paint(ctx); // background, border, clip to `abs`
370
+ const layout = this._paintLayout();
371
+ if (!layout || !canFill(ctx)) return;
372
+ const { x, y } = this.abs;
373
+
374
+ ctx.save();
375
+
376
+ // 1. run decorations that sit under everything: the code chip, and the
377
+ // terminal's cell backgrounds
378
+ for (const line of layout.lines) paintRunBackgrounds(ctx, line, x, y);
379
+
380
+ // 2. the band the document selection has claimed of this element's text,
381
+ // translucent so the ink keeps its contrast on either palette (the
382
+ // same reasoning as `<textarea>`'s). The range and the colour both
383
+ // arrive from the surface above; `textRangeRects` is what a custom
384
+ // element and core's own `<text>` both fill, so they cannot drift.
385
+ const range = this.selectionRange;
386
+ if (range && range.end > range.start) {
387
+ ctx.fillStyle = this.selectionColor;
388
+ for (const r of this.textRangeRects(range.start, range.end)) {
389
+ ctx.fillRect(
390
+ Math.round(r.x),
391
+ Math.round(r.y),
392
+ Math.ceil(r.width),
393
+ Math.ceil(r.height),
394
+ );
395
+ }
396
+ }
397
+
398
+ // 3. the ink
399
+ layout.draw(ctx, x, y);
400
+
401
+ // 4. rules over the ink: link underlines, strikethrough
402
+ for (const line of layout.lines) paintRunRules(ctx, line, x, y);
403
+
404
+ ctx.restore();
405
+ }
406
+ }