@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,686 @@
1
+ // <Markdown> — a streaming-friendly GFM renderer with selection, built the
2
+ // way this package builds everything: composition over public host
3
+ // elements, plus one registered element of its own.
4
+ //
5
+ // **Why not ntk's MarkdownView / HtmlView** (both deprecated): they render
6
+ // a whole document as one opaque widget, which forecloses the two things
7
+ // this component exists for — cross-block text selection (their layout
8
+ // items are unreachable) and per-block streaming updates (any edit relaid
9
+ // the whole document). **Why not Streamdown** (evaluated first): its
10
+ // pipeline is remark → rehype → DOM with Tailwind classes — an HTML pass
11
+ // and a DOM renderer, neither of which exists here. What was worth taking
12
+ // was taken: its `remend` package's unterminated-markdown behaviour is
13
+ // implemented natively by `parse.ts`, as parser tolerance rather than a
14
+ // repair pre-pass (one pass instead of repair-then-reparse).
15
+ //
16
+ // So: `parse.ts` → AST → this file renders `<box>` structure with one
17
+ // `<richtext>` per run of inline text, inside one `selectable` root. During
18
+ // streaming, every top-level block whose raw source did not change renders
19
+ // from a cache keyed on that raw text, so appending to the tail re-renders
20
+ // the tail alone.
21
+ //
22
+ // **What the selection costs this file: nothing.** react-x11#291 made it a
23
+ // core service, so a drag across blocks, the word and block granularities,
24
+ // Ctrl+A, Ctrl+C and PRIMARY all arrive with the `selectable` prop on the
25
+ // root. What a copy assembles comes from the *layout* — two blocks sharing
26
+ // a band of pixels are joined with a tab, one below the last with a newline
27
+ // — which is what a table's cells and rows already are on screen, so the
28
+ // separator plumbing this renderer used to thread through every cell and
29
+ // list line is gone. What is left to say is which parts are not text a
30
+ // reader wants: the list markers, with `selectable={false}`.
31
+ //
32
+ // **MDX (planned, not implemented):** the AST reserves a `component` node
33
+ // and the renderer keeps a components-map seam; because a document here is
34
+ // ordinary React composition — not a painted widget — interleaving user
35
+ // components is structurally possible, in streaming mode too (a pending
36
+ // component tag is just one more held-back tail). The parser is the only
37
+ // part that would grow. A user component's text joins the selection by
38
+ // answering the four accessors in core's docs/extending.md, with nothing to
39
+ // register.
40
+ import React from 'react';
41
+ import type { ReactElement, ReactNode } from 'react';
42
+ import { Icon, useApp, useTheme } from 'react-x11';
43
+ import type { DrawnNode, MouseEvent as X11MouseEvent } from 'react-x11';
44
+ import { tint } from 'react-x11/style';
45
+ import type { Style } from 'react-x11/style';
46
+
47
+ import type {
48
+ BlockNode,
49
+ Document,
50
+ InlineNode,
51
+ ListBlock,
52
+ TableBlock,
53
+ } from './ast.js';
54
+ import {
55
+ registerRichText,
56
+ RICHTEXT_ELEMENT,
57
+ useSelectionMenu,
58
+ } from '../richtext/index.js';
59
+ import type { RichTextProps, TextRun } from '../richtext/index.js';
60
+ import {
61
+ codeBlockLook,
62
+ codeBlockRuns,
63
+ codeBlockStyle,
64
+ codeTextStyle,
65
+ } from '../codeblock/index.js';
66
+ import type { CodeBlockLook } from '../codeblock/index.js';
67
+ import type { Language } from '../code-language/index.js';
68
+
69
+ import { parse } from './parse.js';
70
+ import { runsOf, plainTextOf } from './spans.js';
71
+ import type { InlineStyles } from './spans.js';
72
+ import { useLinkClicks } from '../richtext/index.js';
73
+ import { hx } from './hx.js';
74
+
75
+ export type {
76
+ BlockNode,
77
+ InlineNode,
78
+ Document as MarkdownDocument,
79
+ ParseOptions,
80
+ } from './ast.js';
81
+ export { parse, parseInline } from './parse.js';
82
+
83
+ const h = React.createElement;
84
+
85
+ // Registration is a shared-module function so `<Code>` can render the same
86
+ // element — but the call sits here, at this component's module scope, so
87
+ // the tree-shaking contract ("a component registers its element in its own
88
+ // index.ts") keeps holding.
89
+ registerRichText();
90
+
91
+ // --- props -----------------------------------------------------------------
92
+
93
+ /** What a fence renderer is handed — see `MarkdownProps.fences`. */
94
+ export interface FenceInfo {
95
+ /** The fence's info string, lowercased — the key it was looked up by. */
96
+ lang: string;
97
+ /** The fence's content, as it stands. */
98
+ text: string;
99
+ /** True while this fence is the live tail of a streaming document —
100
+ * its `text` is still growing. */
101
+ partial: boolean;
102
+ }
103
+
104
+ export interface MarkdownProps {
105
+ /** The markdown text. Append to it as chunks stream in. */
106
+ source: string;
107
+ /**
108
+ * Whether more source may still arrive (default true). While true, the
109
+ * live tail is rendered friendly: unclosed emphasis/code close
110
+ * implicitly, half-arrived constructs are hidden or held. Set false when
111
+ * the stream ends, and the tail is re-read under final-document rules.
112
+ */
113
+ partial?: boolean;
114
+ /** Mouse selection, Ctrl+A / Ctrl+C, PRIMARY. Default true. */
115
+ selectable?: boolean;
116
+ /**
117
+ * A link was activated. Absent means clicks do nothing — this component
118
+ * never navigates by itself. Images render as their alt text linked to
119
+ * the image source, so they arrive here too.
120
+ */
121
+ onLink?: (href: string, ev: X11MouseEvent<DrawnNode>) => void;
122
+ /** Base text style. Defaults: theme `fontSize` (14), `sans-serif`. */
123
+ fontSize?: number;
124
+ fontFamily?: string;
125
+ /** Code font. Default `'monospace'` — there is no theme token for it. */
126
+ monoFamily?: string;
127
+ /** Selection band fill. Default: theme accent at 35% opacity. */
128
+ selectionColor?: string;
129
+ /** Syntax colouring in fenced code. Default true. */
130
+ highlight?: boolean;
131
+ /**
132
+ * A `Language` for a fence tag the built-in tokenizers do not cover —
133
+ * js/ts/jsx/tsx, json, shell, sql and glsl are built in, and this is where
134
+ * everything else comes from. `hljsLanguage` is the ready-made one:
135
+ *
136
+ * ```tsx
137
+ * import hljs from 'highlight.js/lib/common';
138
+ * <Markdown resolveLanguage={(tag) => hljsLanguage({ hljs, name: tag })} />
139
+ * ```
140
+ *
141
+ * A tag it does not know is `null`, and the fence paints plain. Give it a
142
+ * stable identity — a new closure per render defeats the block cache, the
143
+ * same way a new `fences` map does.
144
+ */
145
+ resolveLanguage?: (tag: string) => Language | null;
146
+ /**
147
+ * Custom renderers for fenced blocks, keyed by the fence's language
148
+ * (lowercased). A fence whose language has an entry renders through it
149
+ * instead of as a code block — how a ```math fence becomes a `<Formula>`
150
+ * — and the seam is a map so this component never imports the components
151
+ * it hosts. Streaming keeps working: the live tail's fence re-renders as
152
+ * its text grows, with `partial` true until the document ends. The
153
+ * renderer's text joins the document's selection if what it returns
154
+ * answers core's text accessors (docs/extending.md); it is handed a
155
+ * keyed slot, so it does not need a `key` of its own. Give the map a
156
+ * stable identity — a new object per render defeats the block cache.
157
+ */
158
+ fences?: Record<string, (fence: FenceInfo) => ReactNode>;
159
+ /** The root `<box>`'s style — width, padding, margins, `overflow`. */
160
+ style?: Style | Style[];
161
+ 'data-testname'?: string;
162
+ }
163
+
164
+ // --- derived look ----------------------------------------------------------
165
+
166
+ interface Look {
167
+ inline: InlineStyles;
168
+ dim: string;
169
+ border: string;
170
+ headerBg: string;
171
+ headingScales: number[];
172
+ blockGap: number;
173
+ /** Fenced code: shared with `<Code>`, so the two agree in one window. */
174
+ code: CodeBlockLook;
175
+ highlight: boolean;
176
+ /** Cache epoch: two equal keys derive identical elements. */
177
+ key: string;
178
+ }
179
+
180
+ function deriveLook(
181
+ theme: Record<string, unknown>,
182
+ props: MarkdownProps,
183
+ ): Look {
184
+ const text = String(theme.text ?? '#2d3436');
185
+ const dim = String(theme.textMuted ?? '#7f8c8d');
186
+ const accent = String(theme.accent ?? '#2980b9');
187
+ const border = String(theme.border ?? '#b2bec3');
188
+ const background = String(theme.background ?? 'white');
189
+ const size = props.fontSize ?? Number(theme.fontSize ?? 14);
190
+ const family = props.fontFamily ?? 'sans-serif';
191
+ const monoFamily = props.monoFamily ?? 'monospace';
192
+ const highlight = props.highlight !== false;
193
+ const inline: InlineStyles = {
194
+ family,
195
+ monoFamily,
196
+ size,
197
+ color: text,
198
+ linkColor: accent,
199
+ codeColor: text,
200
+ codeBg: tint(text, 0.08),
201
+ };
202
+ return {
203
+ inline,
204
+ dim,
205
+ border,
206
+ headerBg: tint(text, 0.05),
207
+ headingScales: [1.75, 1.4, 1.2, 1.05, 0.95, 0.85],
208
+ blockGap: Math.round(size * 0.7),
209
+ code: codeBlockLook(theme, { baseSize: size, monoFamily }),
210
+ highlight,
211
+ key: [
212
+ text,
213
+ dim,
214
+ accent,
215
+ border,
216
+ background,
217
+ size,
218
+ family,
219
+ monoFamily,
220
+ highlight,
221
+ ].join('|'),
222
+ };
223
+ }
224
+
225
+ // --- rendering -------------------------------------------------------------
226
+
227
+ interface RenderCtx {
228
+ look: Look;
229
+ /** `app.fonts`, when real — table column sizing measures through it. */
230
+ fonts: FontsMeasureLike | null;
231
+ fences?: MarkdownProps['fences'];
232
+ resolveLanguage?: MarkdownProps['resolveLanguage'];
233
+ /** True while rendering the live tail block of a streaming document. */
234
+ live?: boolean;
235
+ }
236
+
237
+ interface FontsMeasureLike {
238
+ layout(
239
+ content: TextRun[] | string,
240
+ style: Record<string, unknown>,
241
+ options?: Record<string, unknown>,
242
+ ): { width: number };
243
+ }
244
+
245
+ function richtext(
246
+ key: string | number,
247
+ runs: TextRun[],
248
+ style?: Style,
249
+ wrap = true,
250
+ ): ReactElement {
251
+ const props: RichTextProps & { key?: string | number } = { runs };
252
+ if (!wrap) props.wrap = false;
253
+ if (style) props.style = style;
254
+ return h(RICHTEXT_ELEMENT, { ...props, key } as Record<string, unknown>);
255
+ }
256
+
257
+ function inlineStyles(
258
+ ctx: RenderCtx,
259
+ over: Partial<InlineStyles>,
260
+ ): InlineStyles {
261
+ return { ...ctx.look.inline, ...over };
262
+ }
263
+
264
+ function renderBlocks(blocks: BlockNode[], ctx: RenderCtx): ReactNode[] {
265
+ return blocks.map((b, i) => renderBlock(b, ctx, i));
266
+ }
267
+
268
+ function renderBlock(block: BlockNode, ctx: RenderCtx, key: number): ReactNode {
269
+ const look = ctx.look;
270
+ switch (block.type) {
271
+ case 'paragraph':
272
+ return richtext(key, runsOf(block.children, look.inline));
273
+
274
+ case 'heading': {
275
+ const scale = look.headingScales[block.depth - 1] ?? 1;
276
+ const s = inlineStyles(ctx, {
277
+ size: Math.round(look.inline.size * scale),
278
+ weight: 700,
279
+ });
280
+ return richtext(key, runsOf(block.children, s), {
281
+ marginTop: key === 0 ? 0 : Math.round(look.blockGap * 0.6),
282
+ });
283
+ }
284
+
285
+ case 'code':
286
+ return renderCode(block.text, block.lang, ctx, key);
287
+
288
+ case 'quote': {
289
+ const quoted: RenderCtx = {
290
+ ...ctx,
291
+ look: {
292
+ ...look,
293
+ inline: { ...look.inline, color: look.dim, codeColor: look.dim },
294
+ },
295
+ };
296
+ return hx(
297
+ 'box',
298
+ {
299
+ key,
300
+ style: {
301
+ ...STYLES.column,
302
+ gap: look.blockGap,
303
+ borderLeftWidth: 3,
304
+ borderLeftColor: look.border,
305
+ paddingLeft: 10,
306
+ },
307
+ },
308
+ ...renderBlocks(block.children, quoted),
309
+ );
310
+ }
311
+
312
+ case 'list':
313
+ return renderList(block, ctx, key);
314
+
315
+ case 'rule':
316
+ return hx('box', {
317
+ key,
318
+ style: {
319
+ height: 1,
320
+ backgroundColor: look.border,
321
+ marginTop: 2,
322
+ marginBottom: 2,
323
+ },
324
+ });
325
+
326
+ case 'table':
327
+ return renderTable(block, ctx, key);
328
+ }
329
+ }
330
+
331
+ function renderCode(
332
+ text: string,
333
+ lang: string,
334
+ ctx: RenderCtx,
335
+ key: number,
336
+ ): ReactNode {
337
+ const custom = ctx.fences?.[lang];
338
+ if (custom) {
339
+ // the fragment carries the key, so a renderer returns bare elements —
340
+ // the same courtesy `<Tree>`'s render seams extend
341
+ return h(
342
+ React.Fragment,
343
+ { key },
344
+ custom({ lang, text, partial: ctx.live === true }),
345
+ );
346
+ }
347
+ const code = ctx.look.code;
348
+ const runs = codeBlockRuns(text, code, {
349
+ lang,
350
+ highlight: ctx.look.highlight,
351
+ ...(ctx.resolveLanguage ? { resolveLanguage: ctx.resolveLanguage } : null),
352
+ });
353
+ // The block scrolls horizontally rather than wrapping — code is code.
354
+ return hx(
355
+ 'box',
356
+ {
357
+ key,
358
+ style: {
359
+ ...codeBlockStyle(code),
360
+ overflow: 'scroll',
361
+ flexDirection: 'column',
362
+ },
363
+ },
364
+ richtext('code', runs, codeTextStyle(code), false),
365
+ );
366
+ }
367
+
368
+ function renderList(list: ListBlock, ctx: RenderCtx, key: number): ReactNode {
369
+ const look = ctx.look;
370
+ const gap = list.tight ? Math.round(look.blockGap * 0.25) : look.blockGap;
371
+ const markerWidth = list.ordered
372
+ ? Math.max(String(list.start + list.items.length - 1).length, 1) *
373
+ Math.ceil(look.inline.size * 0.62) +
374
+ 10
375
+ : Math.round(look.inline.size * 1.15);
376
+ // The bullet or the number is chrome, not text: `selectable={false}` keeps
377
+ // it out of what a drag across the list lights up *and* out of what the
378
+ // drag copies. CSS spells this `user-select: none`.
379
+ const markerStyle: Style = { ...STYLES.markerBox, width: markerWidth };
380
+ const items = list.items.map((item, i) => {
381
+ let marker: ReactNode;
382
+ if (item.checked !== null) {
383
+ marker = hx(
384
+ 'box',
385
+ { selectable: false, style: markerStyle },
386
+ h(
387
+ 'box',
388
+ {
389
+ style: {
390
+ width: 12,
391
+ height: 12,
392
+ borderWidth: 1,
393
+ borderColor: item.checked ? look.inline.linkColor : look.border,
394
+ borderRadius: 3,
395
+ backgroundColor: item.checked ? look.inline.linkColor : undefined,
396
+ alignItems: 'center',
397
+ justifyContent: 'center',
398
+ marginTop: Math.round(look.inline.size * 0.25),
399
+ },
400
+ },
401
+ item.checked
402
+ ? h(Icon, { name: 'check', size: 10, color: 'white' })
403
+ : null,
404
+ ),
405
+ );
406
+ } else {
407
+ marker = hx(
408
+ 'box',
409
+ { selectable: false, style: markerStyle },
410
+ hx(
411
+ 'text',
412
+ {
413
+ style: {
414
+ color: look.dim,
415
+ fontSize: look.inline.size,
416
+ fontFamily: look.inline.family,
417
+ },
418
+ },
419
+ list.ordered ? `${list.start + i}.` : '•',
420
+ ),
421
+ );
422
+ }
423
+ return hx(
424
+ 'box',
425
+ { key: i, style: STYLES.itemRow },
426
+ marker,
427
+ hx(
428
+ 'box',
429
+ {
430
+ style: {
431
+ ...STYLES.column,
432
+ gap: Math.round(look.blockGap * 0.4),
433
+ flexGrow: 1,
434
+ flexShrink: 1,
435
+ },
436
+ },
437
+ ...renderBlocks(item.children, ctx),
438
+ ),
439
+ );
440
+ });
441
+ return hx('box', { key, style: { ...STYLES.column, gap } }, ...items);
442
+ }
443
+
444
+ function renderTable(
445
+ table: TableBlock,
446
+ ctx: RenderCtx,
447
+ key: number,
448
+ ): ReactNode {
449
+ const look = ctx.look;
450
+ const size = look.inline.size;
451
+ const padX = Math.round(size * 0.6);
452
+ const cols = table.align.length;
453
+
454
+ // Column widths: max-content per column, measured through the app's font
455
+ // manager, capped so one long cell cannot starve the rest. Without a
456
+ // font manager (the mock backend) an even fallback keeps the shape.
457
+ const widths: number[] = new Array<number>(cols).fill(0);
458
+ const headStyles = inlineStyles(ctx, { weight: 700 });
459
+ const measure = (cells: InlineNode[][], s: InlineStyles): void => {
460
+ for (let c = 0; c < cols; c += 1) {
461
+ let w: number;
462
+ if (ctx.fonts) {
463
+ w = ctx.fonts.layout(runsOf(cells[c], s), {
464
+ family: s.family,
465
+ size: s.size,
466
+ }).width;
467
+ } else {
468
+ w = plainTextOf(cells[c]).length * size * 0.55;
469
+ }
470
+ widths[c] = Math.max(widths[c], Math.min(Math.ceil(w), size * 26));
471
+ }
472
+ };
473
+ measure(table.header, headStyles);
474
+ for (const row of table.rows) measure(row, look.inline);
475
+ for (let c = 0; c < cols; c += 1)
476
+ widths[c] = Math.max(widths[c] + padX * 2 + 2, size * 2.5);
477
+
478
+ // Nothing here says "these are cells and those are rows": a copy reads the
479
+ // boxes below, where two cells share a band of pixels and the next row
480
+ // starts under them, and joins them with tabs and newlines accordingly.
481
+ const renderRow = (
482
+ cells: InlineNode[][],
483
+ s: InlineStyles,
484
+ rowKey: string | number,
485
+ bg?: string,
486
+ divided?: boolean,
487
+ ): ReactNode =>
488
+ hx(
489
+ 'box',
490
+ {
491
+ key: rowKey,
492
+ style: {
493
+ flexDirection: 'row',
494
+ backgroundColor: bg,
495
+ borderTopWidth: divided ? 1 : undefined,
496
+ borderTopColor: divided ? look.border : undefined,
497
+ },
498
+ },
499
+ ...cells.map((cell, c) =>
500
+ h(
501
+ 'box',
502
+ {
503
+ key: c,
504
+ style: {
505
+ width: widths[c],
506
+ paddingLeft: padX,
507
+ paddingRight: padX,
508
+ paddingTop: Math.round(size * 0.35),
509
+ paddingBottom: Math.round(size * 0.35),
510
+ },
511
+ },
512
+ richtext('c', runsOf(cell, s), {
513
+ textAlign: table.align[c] ?? undefined,
514
+ flexGrow: 1,
515
+ }),
516
+ ),
517
+ ),
518
+ );
519
+
520
+ const children: ReactNode[] = [];
521
+ children.push(renderRow(table.header, headStyles, 'h', look.headerBg));
522
+ table.rows.forEach((row, r) => {
523
+ children.push(renderRow(row, look.inline, r, undefined, true));
524
+ });
525
+
526
+ // A wide table scrolls inside its own viewport instead of forcing the
527
+ // document wider (the root stays vertical-only).
528
+ return hx(
529
+ 'box',
530
+ { key, style: { overflow: 'scroll', flexDirection: 'column' } },
531
+ hx(
532
+ 'box',
533
+ {
534
+ style: {
535
+ ...STYLES.column,
536
+ borderWidth: 1,
537
+ borderColor: look.border,
538
+ borderRadius: 6,
539
+ alignSelf: 'flex-start',
540
+ },
541
+ },
542
+ ...children,
543
+ ),
544
+ );
545
+ }
546
+
547
+ const STYLES = {
548
+ column: { flexDirection: 'column' },
549
+ itemRow: { flexDirection: 'row' },
550
+ markerBox: { flexDirection: 'row', flexShrink: 0 },
551
+ } as const satisfies Record<string, Style>;
552
+
553
+ // --- the component ---------------------------------------------------------
554
+
555
+ interface BlockCache {
556
+ epoch: string;
557
+ map: Map<string, ReactNode>;
558
+ }
559
+
560
+ /**
561
+ * A markdown document. Feed it a growing `source` while `partial` and it
562
+ * renders each chunk as it arrives without flashing raw syntax; text is
563
+ * selectable across every block — mouse (double/triple click for
564
+ * word/block), Ctrl+A, Ctrl+C, and X11 PRIMARY on release.
565
+ *
566
+ * ```jsx
567
+ * <box style={{ overflow: 'scroll', flexGrow: 1 }}>
568
+ * <Markdown source={streamed} partial={stillStreaming}
569
+ * onLink={(href) => openInBrowser(href)} />
570
+ * </box>
571
+ * ```
572
+ */
573
+ export function Markdown(props: MarkdownProps): ReactElement {
574
+ const { source, partial = true, selectable = true, onLink, style } = props;
575
+ // `Theme` is an interface, so it has no implicit index signature — the
576
+ // same widening `hx.ts` documents for the `theme` prop.
577
+ const theme = useTheme() as unknown as Record<string, unknown>;
578
+ const app = useApp() as { fonts?: FontsMeasureLike } | null;
579
+
580
+ const links = useLinkClicks(onLink);
581
+ const menu = useSelectionMenu(selectable);
582
+
583
+ const look = React.useMemo(
584
+ () => deriveLook(theme, props),
585
+ [
586
+ theme,
587
+ props.fontSize,
588
+ props.fontFamily,
589
+ props.monoFamily,
590
+ props.highlight,
591
+ ],
592
+ );
593
+
594
+ const doc: Document = React.useMemo(
595
+ () => parse(source, { partial }),
596
+ [source, partial],
597
+ );
598
+
599
+ // Per-block element cache, keyed on the block's raw source (+ whether it
600
+ // is the live tail). Streaming appends re-render only the block that
601
+ // changed; everything else is the same ReactElement, so React bails out
602
+ // and the retained nodes keep their layout caches.
603
+ const cacheRef = React.useRef<BlockCache | null>(null);
604
+ const fonts = app?.fonts ?? null;
605
+ // Neither the fences map nor `resolveLanguage` can be part of a string
606
+ // key, so their *identity* is counted instead: a new one is a new epoch,
607
+ // and every cached block that might have rendered through it is re-derived.
608
+ const seamsRef = React.useRef<{
609
+ fences: MarkdownProps['fences'];
610
+ resolveLanguage: MarkdownProps['resolveLanguage'];
611
+ gen: number;
612
+ }>({
613
+ fences: props.fences,
614
+ resolveLanguage: props.resolveLanguage,
615
+ gen: 0,
616
+ });
617
+ if (
618
+ seamsRef.current.fences !== props.fences ||
619
+ seamsRef.current.resolveLanguage !== props.resolveLanguage
620
+ ) {
621
+ seamsRef.current = {
622
+ fences: props.fences,
623
+ resolveLanguage: props.resolveLanguage,
624
+ gen: seamsRef.current.gen + 1,
625
+ };
626
+ }
627
+ const epoch = `${look.key}|${fonts ? 'f' : '-'}|${seamsRef.current.gen}`;
628
+ if (!cacheRef.current || cacheRef.current.epoch !== epoch) {
629
+ cacheRef.current = { epoch, map: new Map() };
630
+ }
631
+ const cache = cacheRef.current;
632
+
633
+ const children: ReactNode[] = [];
634
+ {
635
+ const nextMap = new Map<string, ReactNode>();
636
+ const ctx: RenderCtx = {
637
+ look,
638
+ fonts,
639
+ fences: props.fences,
640
+ resolveLanguage: props.resolveLanguage,
641
+ };
642
+ for (let i = 0; i < doc.blocks.length; i += 1) {
643
+ const live = partial && i === doc.blocks.length - 1;
644
+ const cacheKey = `${i}|${live ? 'L' : '.'}|${doc.raws[i]}`;
645
+ const hit = cache.map.get(cacheKey) ?? nextMap.get(cacheKey);
646
+ if (hit !== undefined) {
647
+ children.push(hit);
648
+ nextMap.set(cacheKey, hit);
649
+ continue;
650
+ }
651
+ const element = renderBlock(
652
+ doc.blocks[i],
653
+ live ? { ...ctx, live } : ctx,
654
+ i,
655
+ );
656
+ children.push(element);
657
+ nextMap.set(cacheKey, element);
658
+ }
659
+ cache.map = nextMap; // old entries fall away with the text that made them
660
+ }
661
+
662
+ const rootStyle: Style = {
663
+ flexDirection: 'column',
664
+ gap: look.blockGap,
665
+ alignItems: 'stretch',
666
+ };
667
+
668
+ return hx(
669
+ 'box',
670
+ {
671
+ style: style
672
+ ? [rootStyle, ...(Array.isArray(style) ? style : [style])]
673
+ : rootStyle,
674
+ // The whole selection: a drag across blocks, word and block
675
+ // granularity, Ctrl+A, Ctrl+C, PRIMARY on release, and one visible
676
+ // selection per application. The surface is a focus target and shows
677
+ // an I-beam because it said this.
678
+ selectable,
679
+ selectionColor: props.selectionColor,
680
+ ...links,
681
+ ...menu,
682
+ 'data-testname': props['data-testname'],
683
+ } as Record<string, unknown>,
684
+ ...children,
685
+ );
686
+ }