@react-x11/components 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (783) hide show
  1. package/README.md +979 -21
  2. package/dist/ansi/cast.d.ts +48 -0
  3. package/dist/ansi/cast.d.ts.map +1 -0
  4. package/dist/ansi/cast.js +135 -0
  5. package/dist/ansi/cast.js.map +1 -0
  6. package/dist/ansi/index.d.ts +10 -0
  7. package/dist/ansi/index.d.ts.map +1 -0
  8. package/dist/ansi/index.js +27 -0
  9. package/dist/ansi/index.js.map +1 -0
  10. package/dist/ansi/palette.d.ts +79 -0
  11. package/dist/ansi/palette.d.ts.map +1 -0
  12. package/dist/ansi/palette.js +155 -0
  13. package/dist/ansi/palette.js.map +1 -0
  14. package/dist/ansi/parse.d.ts +114 -0
  15. package/dist/ansi/parse.d.ts.map +1 -0
  16. package/dist/ansi/parse.js +687 -0
  17. package/dist/ansi/parse.js.map +1 -0
  18. package/dist/ansi/sgr.d.ts +87 -0
  19. package/dist/ansi/sgr.d.ts.map +1 -0
  20. package/dist/ansi/sgr.js +302 -0
  21. package/dist/ansi/sgr.js.map +1 -0
  22. package/dist/ansi/utf8.d.ts +15 -0
  23. package/dist/ansi/utf8.d.ts.map +1 -0
  24. package/dist/ansi/utf8.js +82 -0
  25. package/dist/ansi/utf8.js.map +1 -0
  26. package/dist/calendar/Calendar.d.ts +136 -0
  27. package/dist/calendar/Calendar.d.ts.map +1 -0
  28. package/dist/calendar/Calendar.js +460 -0
  29. package/dist/calendar/Calendar.js.map +1 -0
  30. package/dist/calendar/DatePicker.d.ts +52 -0
  31. package/dist/calendar/DatePicker.d.ts.map +1 -0
  32. package/dist/calendar/DatePicker.js +257 -0
  33. package/dist/calendar/DatePicker.js.map +1 -0
  34. package/dist/calendar/dates.d.ts +90 -0
  35. package/dist/calendar/dates.d.ts.map +1 -0
  36. package/dist/calendar/dates.js +236 -0
  37. package/dist/calendar/dates.js.map +1 -0
  38. package/dist/calendar/index.d.ts +8 -0
  39. package/dist/calendar/index.d.ts.map +1 -0
  40. package/dist/calendar/index.js +15 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/charts/components.d.ts +141 -0
  43. package/dist/charts/components.d.ts.map +1 -0
  44. package/dist/charts/components.js +580 -0
  45. package/dist/charts/components.js.map +1 -0
  46. package/dist/charts/data.d.ts +198 -0
  47. package/dist/charts/data.d.ts.map +1 -0
  48. package/dist/charts/data.js +616 -0
  49. package/dist/charts/data.js.map +1 -0
  50. package/dist/charts/hx.d.ts +21 -0
  51. package/dist/charts/hx.d.ts.map +1 -0
  52. package/dist/charts/hx.js +15 -0
  53. package/dist/charts/hx.js.map +1 -0
  54. package/dist/charts/index.d.ts +27 -0
  55. package/dist/charts/index.d.ts.map +1 -0
  56. package/dist/charts/index.js +38 -0
  57. package/dist/charts/index.js.map +1 -0
  58. package/dist/charts/node.d.ts +96 -0
  59. package/dist/charts/node.d.ts.map +1 -0
  60. package/dist/charts/node.js +720 -0
  61. package/dist/charts/node.js.map +1 -0
  62. package/dist/charts/render.d.ts +153 -0
  63. package/dist/charts/render.d.ts.map +1 -0
  64. package/dist/charts/render.js +762 -0
  65. package/dist/charts/render.js.map +1 -0
  66. package/dist/charts/scale.d.ts +42 -0
  67. package/dist/charts/scale.d.ts.map +1 -0
  68. package/dist/charts/scale.js +173 -0
  69. package/dist/charts/scale.js.map +1 -0
  70. package/dist/charts/spec.d.ts +91 -0
  71. package/dist/charts/spec.d.ts.map +1 -0
  72. package/dist/charts/spec.js +33 -0
  73. package/dist/charts/spec.js.map +1 -0
  74. package/dist/charts/timers.d.ts +6 -0
  75. package/dist/charts/timers.d.ts.map +1 -0
  76. package/dist/charts/timers.js +14 -0
  77. package/dist/charts/timers.js.map +1 -0
  78. package/dist/code/hx.d.ts +24 -0
  79. package/dist/code/hx.d.ts.map +1 -0
  80. package/dist/code/hx.js +25 -0
  81. package/dist/code/hx.js.map +1 -0
  82. package/dist/code/index.d.ts +45 -0
  83. package/dist/code/index.d.ts.map +1 -0
  84. package/dist/code/index.js +93 -0
  85. package/dist/code/index.js.map +1 -0
  86. package/dist/code-editor/completion.d.ts +26 -0
  87. package/dist/code-editor/completion.d.ts.map +1 -0
  88. package/dist/code-editor/completion.js +129 -0
  89. package/dist/code-editor/completion.js.map +1 -0
  90. package/dist/code-editor/doc.d.ts +35 -0
  91. package/dist/code-editor/doc.d.ts.map +1 -0
  92. package/dist/code-editor/doc.js +162 -0
  93. package/dist/code-editor/doc.js.map +1 -0
  94. package/dist/code-editor/hx.d.ts +13 -0
  95. package/dist/code-editor/hx.d.ts.map +1 -0
  96. package/dist/code-editor/hx.js +10 -0
  97. package/dist/code-editor/hx.js.map +1 -0
  98. package/dist/code-editor/index.d.ts +88 -0
  99. package/dist/code-editor/index.d.ts.map +1 -0
  100. package/dist/code-editor/index.js +401 -0
  101. package/dist/code-editor/index.js.map +1 -0
  102. package/dist/code-editor/node.d.ts +343 -0
  103. package/dist/code-editor/node.d.ts.map +1 -0
  104. package/dist/code-editor/node.js +1521 -0
  105. package/dist/code-editor/node.js.map +1 -0
  106. package/dist/code-language/hljs.d.ts +47 -0
  107. package/dist/code-language/hljs.d.ts.map +1 -0
  108. package/dist/code-language/hljs.js +211 -0
  109. package/dist/code-language/hljs.js.map +1 -0
  110. package/dist/code-language/index.d.ts +22 -0
  111. package/dist/code-language/index.d.ts.map +1 -0
  112. package/dist/code-language/index.js +20 -0
  113. package/dist/code-language/index.js.map +1 -0
  114. package/dist/code-language/languages/glsl.d.ts +4 -0
  115. package/dist/code-language/languages/glsl.d.ts.map +1 -0
  116. package/dist/code-language/languages/glsl.js +99 -0
  117. package/dist/code-language/languages/glsl.js.map +1 -0
  118. package/dist/code-language/languages/javascript.d.ts +10 -0
  119. package/dist/code-language/languages/javascript.d.ts.map +1 -0
  120. package/dist/code-language/languages/javascript.js +360 -0
  121. package/dist/code-language/languages/javascript.js.map +1 -0
  122. package/dist/code-language/languages/json.d.ts +4 -0
  123. package/dist/code-language/languages/json.d.ts.map +1 -0
  124. package/dist/code-language/languages/json.js +68 -0
  125. package/dist/code-language/languages/json.js.map +1 -0
  126. package/dist/code-language/languages/shell.d.ts +4 -0
  127. package/dist/code-language/languages/shell.d.ts.map +1 -0
  128. package/dist/code-language/languages/shell.js +189 -0
  129. package/dist/code-language/languages/shell.js.map +1 -0
  130. package/dist/code-language/languages/sql.d.ts +11 -0
  131. package/dist/code-language/languages/sql.d.ts.map +1 -0
  132. package/dist/code-language/languages/sql.js +133 -0
  133. package/dist/code-language/languages/sql.js.map +1 -0
  134. package/dist/code-language/lezer.d.ts +24 -0
  135. package/dist/code-language/lezer.d.ts.map +1 -0
  136. package/dist/code-language/lezer.js +148 -0
  137. package/dist/code-language/lezer.js.map +1 -0
  138. package/dist/code-language/registry.d.ts +19 -0
  139. package/dist/code-language/registry.d.ts.map +1 -0
  140. package/dist/code-language/registry.js +56 -0
  141. package/dist/code-language/registry.js.map +1 -0
  142. package/dist/code-language/runs.d.ts +35 -0
  143. package/dist/code-language/runs.d.ts.map +1 -0
  144. package/dist/code-language/runs.js +88 -0
  145. package/dist/code-language/runs.js.map +1 -0
  146. package/dist/code-language/stream.d.ts +70 -0
  147. package/dist/code-language/stream.d.ts.map +1 -0
  148. package/dist/code-language/stream.js +243 -0
  149. package/dist/code-language/stream.js.map +1 -0
  150. package/dist/code-language/textmate.d.ts +27 -0
  151. package/dist/code-language/textmate.d.ts.map +1 -0
  152. package/dist/code-language/textmate.js +86 -0
  153. package/dist/code-language/textmate.js.map +1 -0
  154. package/dist/code-language/theme.d.ts +26 -0
  155. package/dist/code-language/theme.d.ts.map +1 -0
  156. package/dist/code-language/theme.js +108 -0
  157. package/dist/code-language/theme.js.map +1 -0
  158. package/dist/code-language/timers.d.ts +7 -0
  159. package/dist/code-language/timers.d.ts.map +1 -0
  160. package/dist/code-language/timers.js +22 -0
  161. package/dist/code-language/timers.js.map +1 -0
  162. package/dist/code-language/types.d.ts +173 -0
  163. package/dist/code-language/types.d.ts.map +1 -0
  164. package/dist/code-language/types.js +41 -0
  165. package/dist/code-language/types.js.map +1 -0
  166. package/dist/codeblock/index.d.ts +69 -0
  167. package/dist/codeblock/index.d.ts.map +1 -0
  168. package/dist/codeblock/index.js +85 -0
  169. package/dist/codeblock/index.js.map +1 -0
  170. package/dist/color-picker/ColorField.d.ts +39 -0
  171. package/dist/color-picker/ColorField.d.ts.map +1 -0
  172. package/dist/color-picker/ColorField.js +239 -0
  173. package/dist/color-picker/ColorField.js.map +1 -0
  174. package/dist/color-picker/ColorPicker.d.ts +109 -0
  175. package/dist/color-picker/ColorPicker.d.ts.map +1 -0
  176. package/dist/color-picker/ColorPicker.js +757 -0
  177. package/dist/color-picker/ColorPicker.js.map +1 -0
  178. package/dist/color-picker/color.d.ts +105 -0
  179. package/dist/color-picker/color.d.ts.map +1 -0
  180. package/dist/color-picker/color.js +313 -0
  181. package/dist/color-picker/color.js.map +1 -0
  182. package/dist/color-picker/index.d.ts +8 -0
  183. package/dist/color-picker/index.d.ts.map +1 -0
  184. package/dist/color-picker/index.js +19 -0
  185. package/dist/color-picker/index.js.map +1 -0
  186. package/dist/desktop-calendar/eds.d.ts +102 -0
  187. package/dist/desktop-calendar/eds.d.ts.map +1 -0
  188. package/dist/desktop-calendar/eds.js +356 -0
  189. package/dist/desktop-calendar/eds.js.map +1 -0
  190. package/dist/desktop-calendar/ical.d.ts +63 -0
  191. package/dist/desktop-calendar/ical.d.ts.map +1 -0
  192. package/dist/desktop-calendar/ical.js +57 -0
  193. package/dist/desktop-calendar/ical.js.map +1 -0
  194. package/dist/desktop-calendar/index.d.ts +72 -0
  195. package/dist/desktop-calendar/index.d.ts.map +1 -0
  196. package/dist/desktop-calendar/index.js +213 -0
  197. package/dist/desktop-calendar/index.js.map +1 -0
  198. package/dist/embed/client.d.ts +121 -0
  199. package/dist/embed/client.d.ts.map +1 -0
  200. package/dist/embed/client.js +203 -0
  201. package/dist/embed/client.js.map +1 -0
  202. package/dist/embed/host.d.ts +96 -0
  203. package/dist/embed/host.d.ts.map +1 -0
  204. package/dist/embed/host.js +266 -0
  205. package/dist/embed/host.js.map +1 -0
  206. package/dist/embed/index.d.ts +5 -0
  207. package/dist/embed/index.d.ts.map +1 -0
  208. package/dist/embed/index.js +13 -0
  209. package/dist/embed/index.js.map +1 -0
  210. package/dist/embed/timers.d.ts +6 -0
  211. package/dist/embed/timers.d.ts.map +1 -0
  212. package/dist/embed/timers.js +16 -0
  213. package/dist/embed/timers.js.map +1 -0
  214. package/dist/flow/draw.d.ts +45 -0
  215. package/dist/flow/draw.d.ts.map +1 -0
  216. package/dist/flow/draw.js +295 -0
  217. package/dist/flow/draw.js.map +1 -0
  218. package/dist/flow/index.d.ts +64 -0
  219. package/dist/flow/index.d.ts.map +1 -0
  220. package/dist/flow/index.js +306 -0
  221. package/dist/flow/index.js.map +1 -0
  222. package/dist/flow/model.d.ts +158 -0
  223. package/dist/flow/model.d.ts.map +1 -0
  224. package/dist/flow/model.js +566 -0
  225. package/dist/flow/model.js.map +1 -0
  226. package/dist/flow/node.d.ts +429 -0
  227. package/dist/flow/node.d.ts.map +1 -0
  228. package/dist/flow/node.js +3025 -0
  229. package/dist/flow/node.js.map +1 -0
  230. package/dist/flow/paths.d.ts +43 -0
  231. package/dist/flow/paths.d.ts.map +1 -0
  232. package/dist/flow/paths.js +327 -0
  233. package/dist/flow/paths.js.map +1 -0
  234. package/dist/flow/types.d.ts +561 -0
  235. package/dist/flow/types.d.ts.map +1 -0
  236. package/dist/flow/types.js +2 -0
  237. package/dist/flow/types.js.map +1 -0
  238. package/dist/formula/hx.d.ts +24 -0
  239. package/dist/formula/hx.d.ts.map +1 -0
  240. package/dist/formula/hx.js +25 -0
  241. package/dist/formula/hx.js.map +1 -0
  242. package/dist/formula/index.d.ts +74 -0
  243. package/dist/formula/index.d.ts.map +1 -0
  244. package/dist/formula/index.js +155 -0
  245. package/dist/formula/index.js.map +1 -0
  246. package/dist/formula/katex.d.ts +78 -0
  247. package/dist/formula/katex.d.ts.map +1 -0
  248. package/dist/formula/katex.js +130 -0
  249. package/dist/formula/katex.js.map +1 -0
  250. package/dist/formula/layout.d.ts +103 -0
  251. package/dist/formula/layout.d.ts.map +1 -0
  252. package/dist/formula/layout.js +716 -0
  253. package/dist/formula/layout.js.map +1 -0
  254. package/dist/formula/node.d.ts +50 -0
  255. package/dist/formula/node.d.ts.map +1 -0
  256. package/dist/formula/node.js +351 -0
  257. package/dist/formula/node.js.map +1 -0
  258. package/dist/html/controls.d.ts +48 -0
  259. package/dist/html/controls.d.ts.map +1 -0
  260. package/dist/html/controls.js +195 -0
  261. package/dist/html/controls.js.map +1 -0
  262. package/dist/html/css/cascade.d.ts +51 -0
  263. package/dist/html/css/cascade.d.ts.map +1 -0
  264. package/dist/html/css/cascade.js +552 -0
  265. package/dist/html/css/cascade.js.map +1 -0
  266. package/dist/html/css/parse.d.ts +74 -0
  267. package/dist/html/css/parse.d.ts.map +1 -0
  268. package/dist/html/css/parse.js +464 -0
  269. package/dist/html/css/parse.js.map +1 -0
  270. package/dist/html/css/style.d.ts +142 -0
  271. package/dist/html/css/style.d.ts.map +1 -0
  272. package/dist/html/css/style.js +1145 -0
  273. package/dist/html/css/style.js.map +1 -0
  274. package/dist/html/css/ua.d.ts +5 -0
  275. package/dist/html/css/ua.d.ts.map +1 -0
  276. package/dist/html/css/ua.js +171 -0
  277. package/dist/html/css/ua.js.map +1 -0
  278. package/dist/html/css/values.d.ts +78 -0
  279. package/dist/html/css/values.d.ts.map +1 -0
  280. package/dist/html/css/values.js +330 -0
  281. package/dist/html/css/values.js.map +1 -0
  282. package/dist/html/dom.d.ts +112 -0
  283. package/dist/html/dom.d.ts.map +1 -0
  284. package/dist/html/dom.js +374 -0
  285. package/dist/html/dom.js.map +1 -0
  286. package/dist/html/hx.d.ts +24 -0
  287. package/dist/html/hx.d.ts.map +1 -0
  288. package/dist/html/hx.js +29 -0
  289. package/dist/html/hx.js.map +1 -0
  290. package/dist/html/index.d.ts +137 -0
  291. package/dist/html/index.d.ts.map +1 -0
  292. package/dist/html/index.js +339 -0
  293. package/dist/html/index.js.map +1 -0
  294. package/dist/html/layout/block.d.ts +58 -0
  295. package/dist/html/layout/block.d.ts.map +1 -0
  296. package/dist/html/layout/block.js +724 -0
  297. package/dist/html/layout/block.js.map +1 -0
  298. package/dist/html/layout/boxes.d.ts +261 -0
  299. package/dist/html/layout/boxes.d.ts.map +1 -0
  300. package/dist/html/layout/boxes.js +725 -0
  301. package/dist/html/layout/boxes.js.map +1 -0
  302. package/dist/html/layout/flex.d.ts +16 -0
  303. package/dist/html/layout/flex.d.ts.map +1 -0
  304. package/dist/html/layout/flex.js +242 -0
  305. package/dist/html/layout/flex.js.map +1 -0
  306. package/dist/html/layout/floats.d.ts +50 -0
  307. package/dist/html/layout/floats.d.ts.map +1 -0
  308. package/dist/html/layout/floats.js +110 -0
  309. package/dist/html/layout/floats.js.map +1 -0
  310. package/dist/html/layout/inline.d.ts +44 -0
  311. package/dist/html/layout/inline.d.ts.map +1 -0
  312. package/dist/html/layout/inline.js +700 -0
  313. package/dist/html/layout/inline.js.map +1 -0
  314. package/dist/html/layout/table.d.ts +5 -0
  315. package/dist/html/layout/table.d.ts.map +1 -0
  316. package/dist/html/layout/table.js +340 -0
  317. package/dist/html/layout/table.js.map +1 -0
  318. package/dist/html/node.d.ts +149 -0
  319. package/dist/html/node.d.ts.map +1 -0
  320. package/dist/html/node.js +861 -0
  321. package/dist/html/node.js.map +1 -0
  322. package/dist/html/paint.d.ts +48 -0
  323. package/dist/html/paint.d.ts.map +1 -0
  324. package/dist/html/paint.js +495 -0
  325. package/dist/html/paint.js.map +1 -0
  326. package/dist/html/resources.d.ts +48 -0
  327. package/dist/html/resources.d.ts.map +1 -0
  328. package/dist/html/resources.js +156 -0
  329. package/dist/html/resources.js.map +1 -0
  330. package/dist/index.d.ts +48 -0
  331. package/dist/index.d.ts.map +1 -0
  332. package/dist/index.js +92 -0
  333. package/dist/index.js.map +1 -0
  334. package/dist/internal/heights.d.ts +81 -0
  335. package/dist/internal/heights.d.ts.map +1 -0
  336. package/dist/internal/heights.js +193 -0
  337. package/dist/internal/heights.js.map +1 -0
  338. package/dist/internal/hx.d.ts +24 -0
  339. package/dist/internal/hx.d.ts.map +1 -0
  340. package/dist/internal/hx.js +27 -0
  341. package/dist/internal/hx.js.map +1 -0
  342. package/dist/internal/text.d.ts +6 -0
  343. package/dist/internal/text.d.ts.map +1 -0
  344. package/dist/internal/text.js +44 -0
  345. package/dist/internal/text.js.map +1 -0
  346. package/dist/internal/timers.d.ts +8 -0
  347. package/dist/internal/timers.d.ts.map +1 -0
  348. package/dist/internal/timers.js +22 -0
  349. package/dist/internal/timers.js.map +1 -0
  350. package/dist/internal/widget.d.ts +40 -0
  351. package/dist/internal/widget.d.ts.map +1 -0
  352. package/dist/internal/widget.js +44 -0
  353. package/dist/internal/widget.js.map +1 -0
  354. package/dist/markdown/ast.d.ts +126 -0
  355. package/dist/markdown/ast.d.ts.map +1 -0
  356. package/dist/markdown/ast.js +8 -0
  357. package/dist/markdown/ast.js.map +1 -0
  358. package/dist/markdown/hx.d.ts +24 -0
  359. package/dist/markdown/hx.d.ts.map +1 -0
  360. package/dist/markdown/hx.js +25 -0
  361. package/dist/markdown/hx.js.map +1 -0
  362. package/dist/markdown/index.d.ts +90 -0
  363. package/dist/markdown/index.d.ts.map +1 -0
  364. package/dist/markdown/index.js +413 -0
  365. package/dist/markdown/index.js.map +1 -0
  366. package/dist/markdown/parse.d.ts +8 -0
  367. package/dist/markdown/parse.d.ts.map +1 -0
  368. package/dist/markdown/parse.js +911 -0
  369. package/dist/markdown/parse.js.map +1 -0
  370. package/dist/markdown/spans.d.ts +20 -0
  371. package/dist/markdown/spans.d.ts.map +1 -0
  372. package/dist/markdown/spans.js +96 -0
  373. package/dist/markdown/spans.js.map +1 -0
  374. package/dist/media-player/backends.d.ts +64 -0
  375. package/dist/media-player/backends.d.ts.map +1 -0
  376. package/dist/media-player/backends.js +110 -0
  377. package/dist/media-player/backends.js.map +1 -0
  378. package/dist/media-player/control.d.ts +40 -0
  379. package/dist/media-player/control.d.ts.map +1 -0
  380. package/dist/media-player/control.js +44 -0
  381. package/dist/media-player/control.js.map +1 -0
  382. package/dist/media-player/hx.d.ts +24 -0
  383. package/dist/media-player/hx.d.ts.map +1 -0
  384. package/dist/media-player/hx.js +25 -0
  385. package/dist/media-player/hx.js.map +1 -0
  386. package/dist/media-player/index.d.ts +107 -0
  387. package/dist/media-player/index.d.ts.map +1 -0
  388. package/dist/media-player/index.js +219 -0
  389. package/dist/media-player/index.js.map +1 -0
  390. package/dist/media-player/mpv.d.ts +4 -0
  391. package/dist/media-player/mpv.d.ts.map +1 -0
  392. package/dist/media-player/mpv.js +120 -0
  393. package/dist/media-player/mpv.js.map +1 -0
  394. package/dist/media-player/vlc.d.ts +8 -0
  395. package/dist/media-player/vlc.d.ts.map +1 -0
  396. package/dist/media-player/vlc.js +83 -0
  397. package/dist/media-player/vlc.js.map +1 -0
  398. package/dist/richtext/index.d.ts +19 -0
  399. package/dist/richtext/index.d.ts.map +1 -0
  400. package/dist/richtext/index.js +4 -0
  401. package/dist/richtext/index.js.map +1 -0
  402. package/dist/richtext/links.d.ts +12 -0
  403. package/dist/richtext/links.d.ts.map +1 -0
  404. package/dist/richtext/links.js +64 -0
  405. package/dist/richtext/links.js.map +1 -0
  406. package/dist/richtext/menu.d.ts +11 -0
  407. package/dist/richtext/menu.d.ts.map +1 -0
  408. package/dist/richtext/menu.js +43 -0
  409. package/dist/richtext/menu.js.map +1 -0
  410. package/dist/richtext/node.d.ts +151 -0
  411. package/dist/richtext/node.d.ts.map +1 -0
  412. package/dist/richtext/node.js +255 -0
  413. package/dist/richtext/node.js.map +1 -0
  414. package/dist/richtext/runs.d.ts +92 -0
  415. package/dist/richtext/runs.d.ts.map +1 -0
  416. package/dist/richtext/runs.js +158 -0
  417. package/dist/richtext/runs.js.map +1 -0
  418. package/dist/table/hx.d.ts +24 -0
  419. package/dist/table/hx.d.ts.map +1 -0
  420. package/dist/table/hx.js +25 -0
  421. package/dist/table/hx.js.map +1 -0
  422. package/dist/table/index.d.ts +169 -0
  423. package/dist/table/index.d.ts.map +1 -0
  424. package/dist/table/index.js +844 -0
  425. package/dist/table/index.js.map +1 -0
  426. package/dist/table/rows.d.ts +136 -0
  427. package/dist/table/rows.d.ts.map +1 -0
  428. package/dist/table/rows.js +146 -0
  429. package/dist/table/rows.js.map +1 -0
  430. package/dist/terminal/backends.d.ts +105 -0
  431. package/dist/terminal/backends.d.ts.map +1 -0
  432. package/dist/terminal/backends.js +185 -0
  433. package/dist/terminal/backends.js.map +1 -0
  434. package/dist/terminal/hx.d.ts +24 -0
  435. package/dist/terminal/hx.d.ts.map +1 -0
  436. package/dist/terminal/hx.js +25 -0
  437. package/dist/terminal/hx.js.map +1 -0
  438. package/dist/terminal/index.d.ts +160 -0
  439. package/dist/terminal/index.d.ts.map +1 -0
  440. package/dist/terminal/index.js +344 -0
  441. package/dist/terminal/index.js.map +1 -0
  442. package/dist/terminal/title.d.ts +24 -0
  443. package/dist/terminal/title.d.ts.map +1 -0
  444. package/dist/terminal/title.js +129 -0
  445. package/dist/terminal/title.js.map +1 -0
  446. package/dist/terminal/vt/colors.d.ts +63 -0
  447. package/dist/terminal/vt/colors.d.ts.map +1 -0
  448. package/dist/terminal/vt/colors.js +203 -0
  449. package/dist/terminal/vt/colors.js.map +1 -0
  450. package/dist/terminal/vt/diff.d.ts +117 -0
  451. package/dist/terminal/vt/diff.d.ts.map +1 -0
  452. package/dist/terminal/vt/diff.js +358 -0
  453. package/dist/terminal/vt/diff.js.map +1 -0
  454. package/dist/terminal/vt/fonts.d.ts +92 -0
  455. package/dist/terminal/vt/fonts.d.ts.map +1 -0
  456. package/dist/terminal/vt/fonts.js +178 -0
  457. package/dist/terminal/vt/fonts.js.map +1 -0
  458. package/dist/terminal/vt/index.d.ts +78 -0
  459. package/dist/terminal/vt/index.d.ts.map +1 -0
  460. package/dist/terminal/vt/index.js +312 -0
  461. package/dist/terminal/vt/index.js.map +1 -0
  462. package/dist/terminal/vt/keys.d.ts +74 -0
  463. package/dist/terminal/vt/keys.d.ts.map +1 -0
  464. package/dist/terminal/vt/keys.js +309 -0
  465. package/dist/terminal/vt/keys.js.map +1 -0
  466. package/dist/terminal/vt/mouse.d.ts +44 -0
  467. package/dist/terminal/vt/mouse.d.ts.map +1 -0
  468. package/dist/terminal/vt/mouse.js +106 -0
  469. package/dist/terminal/vt/mouse.js.map +1 -0
  470. package/dist/terminal/vt/node.d.ts +246 -0
  471. package/dist/terminal/vt/node.d.ts.map +1 -0
  472. package/dist/terminal/vt/node.js +1068 -0
  473. package/dist/terminal/vt/node.js.map +1 -0
  474. package/dist/terminal/vt/pty.d.ts +81 -0
  475. package/dist/terminal/vt/pty.d.ts.map +1 -0
  476. package/dist/terminal/vt/pty.js +201 -0
  477. package/dist/terminal/vt/pty.js.map +1 -0
  478. package/dist/terminal/vt/renderer.d.ts +179 -0
  479. package/dist/terminal/vt/renderer.d.ts.map +1 -0
  480. package/dist/terminal/vt/renderer.js +357 -0
  481. package/dist/terminal/vt/renderer.js.map +1 -0
  482. package/dist/terminal/vt/timers.d.ts +6 -0
  483. package/dist/terminal/vt/timers.d.ts.map +1 -0
  484. package/dist/terminal/vt/timers.js +16 -0
  485. package/dist/terminal/vt/timers.js.map +1 -0
  486. package/dist/terminal/vt/xterm.d.ts +142 -0
  487. package/dist/terminal/vt/xterm.d.ts.map +1 -0
  488. package/dist/terminal/vt/xterm.js +32 -0
  489. package/dist/terminal/vt/xterm.js.map +1 -0
  490. package/dist/terminal-output/hx.d.ts +24 -0
  491. package/dist/terminal-output/hx.d.ts.map +1 -0
  492. package/dist/terminal-output/hx.js +25 -0
  493. package/dist/terminal-output/hx.js.map +1 -0
  494. package/dist/terminal-output/index.d.ts +92 -0
  495. package/dist/terminal-output/index.d.ts.map +1 -0
  496. package/dist/terminal-output/index.js +179 -0
  497. package/dist/terminal-output/index.js.map +1 -0
  498. package/dist/terminal-output/runs.d.ts +27 -0
  499. package/dist/terminal-output/runs.d.ts.map +1 -0
  500. package/dist/terminal-output/runs.js +66 -0
  501. package/dist/terminal-output/runs.js.map +1 -0
  502. package/dist/three/canvas.d.ts +46 -0
  503. package/dist/three/canvas.d.ts.map +1 -0
  504. package/dist/three/canvas.js +305 -0
  505. package/dist/three/canvas.js.map +1 -0
  506. package/dist/three/events.d.ts +64 -0
  507. package/dist/three/events.d.ts.map +1 -0
  508. package/dist/three/events.js +146 -0
  509. package/dist/three/events.js.map +1 -0
  510. package/dist/three/geometries.d.ts +89 -0
  511. package/dist/three/geometries.d.ts.map +1 -0
  512. package/dist/three/geometries.js +345 -0
  513. package/dist/three/geometries.js.map +1 -0
  514. package/dist/three/globals.d.ts +7 -0
  515. package/dist/three/globals.d.ts.map +1 -0
  516. package/dist/three/globals.js +20 -0
  517. package/dist/three/globals.js.map +1 -0
  518. package/dist/three/hx.d.ts +9 -0
  519. package/dist/three/hx.d.ts.map +1 -0
  520. package/dist/three/hx.js +10 -0
  521. package/dist/three/hx.js.map +1 -0
  522. package/dist/three/index.d.ts +22 -0
  523. package/dist/three/index.d.ts.map +1 -0
  524. package/dist/three/index.js +24 -0
  525. package/dist/three/index.js.map +1 -0
  526. package/dist/three/jsx-dev-runtime.d.ts +19 -0
  527. package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
  528. package/dist/three/jsx-dev-runtime.js +2 -0
  529. package/dist/three/jsx-dev-runtime.js.map +1 -0
  530. package/dist/three/jsx-runtime.d.ts +19 -0
  531. package/dist/three/jsx-runtime.d.ts.map +1 -0
  532. package/dist/three/jsx-runtime.js +2 -0
  533. package/dist/three/jsx-runtime.js.map +1 -0
  534. package/dist/three/jsx.d.ts +198 -0
  535. package/dist/three/jsx.d.ts.map +1 -0
  536. package/dist/three/jsx.js +2 -0
  537. package/dist/three/jsx.js.map +1 -0
  538. package/dist/three/materials.d.ts +125 -0
  539. package/dist/three/materials.d.ts.map +1 -0
  540. package/dist/three/materials.js +229 -0
  541. package/dist/three/materials.js.map +1 -0
  542. package/dist/three/math.d.ts +146 -0
  543. package/dist/three/math.d.ts.map +1 -0
  544. package/dist/three/math.js +464 -0
  545. package/dist/three/math.js.map +1 -0
  546. package/dist/three/objects.d.ts +185 -0
  547. package/dist/three/objects.d.ts.map +1 -0
  548. package/dist/three/objects.js +309 -0
  549. package/dist/three/objects.js.map +1 -0
  550. package/dist/three/passes.d.ts +54 -0
  551. package/dist/three/passes.d.ts.map +1 -0
  552. package/dist/three/passes.js +78 -0
  553. package/dist/three/passes.js.map +1 -0
  554. package/dist/three/postprocess.d.ts +85 -0
  555. package/dist/three/postprocess.d.ts.map +1 -0
  556. package/dist/three/postprocess.js +503 -0
  557. package/dist/three/postprocess.js.map +1 -0
  558. package/dist/three/raycast.d.ts +24 -0
  559. package/dist/three/raycast.d.ts.map +1 -0
  560. package/dist/three/raycast.js +138 -0
  561. package/dist/three/raycast.js.map +1 -0
  562. package/dist/three/reconciler.d.ts +48 -0
  563. package/dist/three/reconciler.d.ts.map +1 -0
  564. package/dist/three/reconciler.js +416 -0
  565. package/dist/three/reconciler.js.map +1 -0
  566. package/dist/three/renderer-direct.d.ts +102 -0
  567. package/dist/three/renderer-direct.d.ts.map +1 -0
  568. package/dist/three/renderer-direct.js +782 -0
  569. package/dist/three/renderer-direct.js.map +1 -0
  570. package/dist/three/renderer-indirect.d.ts +68 -0
  571. package/dist/three/renderer-indirect.d.ts.map +1 -0
  572. package/dist/three/renderer-indirect.js +438 -0
  573. package/dist/three/renderer-indirect.js.map +1 -0
  574. package/dist/three/store.d.ts +81 -0
  575. package/dist/three/store.d.ts.map +1 -0
  576. package/dist/three/store.js +110 -0
  577. package/dist/three/store.js.map +1 -0
  578. package/dist/timeline/hx.d.ts +18 -0
  579. package/dist/timeline/hx.d.ts.map +1 -0
  580. package/dist/timeline/hx.js +10 -0
  581. package/dist/timeline/hx.js.map +1 -0
  582. package/dist/timeline/index.d.ts +152 -0
  583. package/dist/timeline/index.d.ts.map +1 -0
  584. package/dist/timeline/index.js +383 -0
  585. package/dist/timeline/index.js.map +1 -0
  586. package/dist/tray-host/hx.d.ts +24 -0
  587. package/dist/tray-host/hx.d.ts.map +1 -0
  588. package/dist/tray-host/hx.js +25 -0
  589. package/dist/tray-host/hx.js.map +1 -0
  590. package/dist/tray-host/index.d.ts +110 -0
  591. package/dist/tray-host/index.d.ts.map +1 -0
  592. package/dist/tray-host/index.js +191 -0
  593. package/dist/tray-host/index.js.map +1 -0
  594. package/dist/tray-host/manager.d.ts +137 -0
  595. package/dist/tray-host/manager.d.ts.map +1 -0
  596. package/dist/tray-host/manager.js +462 -0
  597. package/dist/tray-host/manager.js.map +1 -0
  598. package/dist/tray-host/notify.d.ts +22 -0
  599. package/dist/tray-host/notify.d.ts.map +1 -0
  600. package/dist/tray-host/notify.js +74 -0
  601. package/dist/tray-host/notify.js.map +1 -0
  602. package/dist/tray-host/protocol.d.ts +106 -0
  603. package/dist/tray-host/protocol.d.ts.map +1 -0
  604. package/dist/tray-host/protocol.js +191 -0
  605. package/dist/tray-host/protocol.js.map +1 -0
  606. package/dist/tree/hx.d.ts +24 -0
  607. package/dist/tree/hx.d.ts.map +1 -0
  608. package/dist/tree/hx.js +25 -0
  609. package/dist/tree/hx.js.map +1 -0
  610. package/dist/tree/index.d.ts +221 -0
  611. package/dist/tree/index.d.ts.map +1 -0
  612. package/dist/tree/index.js +716 -0
  613. package/dist/tree/index.js.map +1 -0
  614. package/dist/tree/internal.d.ts +18 -0
  615. package/dist/tree/internal.d.ts.map +1 -0
  616. package/dist/tree/internal.js +66 -0
  617. package/dist/tree/internal.js.map +1 -0
  618. package/dist/tree/rows.d.ts +177 -0
  619. package/dist/tree/rows.d.ts.map +1 -0
  620. package/dist/tree/rows.js +179 -0
  621. package/dist/tree/rows.js.map +1 -0
  622. package/package.json +166 -12
  623. package/src/ansi/cast.ts +159 -0
  624. package/src/ansi/index.ts +53 -0
  625. package/src/ansi/palette.ts +226 -0
  626. package/src/ansi/parse.ts +780 -0
  627. package/src/ansi/sgr.ts +380 -0
  628. package/src/ansi/utf8.ts +84 -0
  629. package/src/calendar/Calendar.ts +744 -0
  630. package/src/calendar/DatePicker.ts +368 -0
  631. package/src/calendar/dates.ts +307 -0
  632. package/src/calendar/index.ts +51 -0
  633. package/src/charts/components.ts +864 -0
  634. package/src/charts/data.ts +776 -0
  635. package/src/charts/hx.ts +39 -0
  636. package/src/charts/index.ts +99 -0
  637. package/src/charts/node.ts +932 -0
  638. package/src/charts/render.ts +982 -0
  639. package/src/charts/scale.ts +214 -0
  640. package/src/charts/spec.ts +122 -0
  641. package/src/charts/timers.ts +24 -0
  642. package/src/code/hx.ts +51 -0
  643. package/src/code/index.ts +174 -0
  644. package/src/code-editor/completion.ts +161 -0
  645. package/src/code-editor/doc.ts +198 -0
  646. package/src/code-editor/hx.ts +26 -0
  647. package/src/code-editor/index.ts +615 -0
  648. package/src/code-editor/node.ts +1926 -0
  649. package/src/code-language/hljs.ts +302 -0
  650. package/src/code-language/index.ts +51 -0
  651. package/src/code-language/languages/glsl.ts +120 -0
  652. package/src/code-language/languages/javascript.ts +419 -0
  653. package/src/code-language/languages/json.ts +72 -0
  654. package/src/code-language/languages/shell.ts +221 -0
  655. package/src/code-language/languages/sql.ts +165 -0
  656. package/src/code-language/lezer.ts +190 -0
  657. package/src/code-language/registry.ts +66 -0
  658. package/src/code-language/runs.ts +128 -0
  659. package/src/code-language/stream.ts +306 -0
  660. package/src/code-language/textmate.ts +134 -0
  661. package/src/code-language/theme.ts +124 -0
  662. package/src/code-language/timers.ts +36 -0
  663. package/src/code-language/types.ts +252 -0
  664. package/src/codeblock/index.ts +146 -0
  665. package/src/color-picker/ColorField.ts +333 -0
  666. package/src/color-picker/ColorPicker.ts +1069 -0
  667. package/src/color-picker/color.ts +399 -0
  668. package/src/color-picker/index.ts +50 -0
  669. package/src/desktop-calendar/eds.ts +484 -0
  670. package/src/desktop-calendar/ical.ts +119 -0
  671. package/src/desktop-calendar/index.ts +287 -0
  672. package/src/embed/client.ts +311 -0
  673. package/src/embed/host.ts +432 -0
  674. package/src/embed/index.ts +33 -0
  675. package/src/embed/timers.ts +32 -0
  676. package/src/flow/draw.ts +418 -0
  677. package/src/flow/index.ts +473 -0
  678. package/src/flow/model.ts +687 -0
  679. package/src/flow/node.ts +3694 -0
  680. package/src/flow/paths.ts +403 -0
  681. package/src/flow/types.ts +634 -0
  682. package/src/formula/hx.ts +51 -0
  683. package/src/formula/index.ts +243 -0
  684. package/src/formula/katex.ts +209 -0
  685. package/src/formula/layout.ts +876 -0
  686. package/src/formula/node.ts +467 -0
  687. package/src/html/controls.ts +244 -0
  688. package/src/html/css/cascade.ts +606 -0
  689. package/src/html/css/parse.ts +500 -0
  690. package/src/html/css/style.ts +1371 -0
  691. package/src/html/css/ua.ts +174 -0
  692. package/src/html/css/values.ts +358 -0
  693. package/src/html/dom.ts +410 -0
  694. package/src/html/hx.ts +55 -0
  695. package/src/html/index.ts +545 -0
  696. package/src/html/layout/block.ts +876 -0
  697. package/src/html/layout/boxes.ts +981 -0
  698. package/src/html/layout/flex.ts +297 -0
  699. package/src/html/layout/floats.ts +125 -0
  700. package/src/html/layout/inline.ts +870 -0
  701. package/src/html/layout/table.ts +380 -0
  702. package/src/html/node.ts +967 -0
  703. package/src/html/paint.ts +605 -0
  704. package/src/html/resources.ts +214 -0
  705. package/src/index.ts +638 -0
  706. package/src/internal/heights.ts +211 -0
  707. package/src/internal/hx.ts +53 -0
  708. package/src/internal/text.ts +44 -0
  709. package/src/internal/timers.ts +44 -0
  710. package/src/internal/widget.ts +92 -0
  711. package/src/markdown/ast.ts +163 -0
  712. package/src/markdown/hx.ts +51 -0
  713. package/src/markdown/index.ts +686 -0
  714. package/src/markdown/parse.ts +1037 -0
  715. package/src/markdown/spans.ts +143 -0
  716. package/src/media-player/backends.ts +155 -0
  717. package/src/media-player/control.ts +70 -0
  718. package/src/media-player/hx.ts +51 -0
  719. package/src/media-player/index.ts +378 -0
  720. package/src/media-player/mpv.ts +146 -0
  721. package/src/media-player/vlc.ts +97 -0
  722. package/src/richtext/index.ts +42 -0
  723. package/src/richtext/links.ts +78 -0
  724. package/src/richtext/menu.ts +49 -0
  725. package/src/richtext/node.ts +406 -0
  726. package/src/richtext/runs.ts +253 -0
  727. package/src/table/hx.ts +51 -0
  728. package/src/table/index.ts +1219 -0
  729. package/src/table/rows.ts +275 -0
  730. package/src/terminal/backends.ts +242 -0
  731. package/src/terminal/hx.ts +51 -0
  732. package/src/terminal/index.ts +574 -0
  733. package/src/terminal/title.ts +172 -0
  734. package/src/terminal/vt/colors.ts +247 -0
  735. package/src/terminal/vt/diff.ts +467 -0
  736. package/src/terminal/vt/fonts.ts +233 -0
  737. package/src/terminal/vt/index.ts +443 -0
  738. package/src/terminal/vt/keys.ts +369 -0
  739. package/src/terminal/vt/mouse.ts +144 -0
  740. package/src/terminal/vt/node.ts +1242 -0
  741. package/src/terminal/vt/pty.ts +334 -0
  742. package/src/terminal/vt/renderer.ts +555 -0
  743. package/src/terminal/vt/timers.ts +31 -0
  744. package/src/terminal/vt/xterm.ts +193 -0
  745. package/src/terminal-output/hx.ts +51 -0
  746. package/src/terminal-output/index.ts +340 -0
  747. package/src/terminal-output/runs.ts +79 -0
  748. package/src/three/canvas.ts +451 -0
  749. package/src/three/events.ts +197 -0
  750. package/src/three/geometries.ts +429 -0
  751. package/src/three/globals.ts +34 -0
  752. package/src/three/hx.ts +22 -0
  753. package/src/three/index.ts +98 -0
  754. package/src/three/jsx-dev-runtime.ts +27 -0
  755. package/src/three/jsx-runtime.ts +38 -0
  756. package/src/three/jsx.ts +275 -0
  757. package/src/three/materials.ts +270 -0
  758. package/src/three/math.ts +585 -0
  759. package/src/three/objects.ts +397 -0
  760. package/src/three/passes.ts +90 -0
  761. package/src/three/postprocess.ts +677 -0
  762. package/src/three/raycast.ts +189 -0
  763. package/src/three/react-reconciler.d.ts +50 -0
  764. package/src/three/reconciler.ts +624 -0
  765. package/src/three/renderer-direct.ts +1055 -0
  766. package/src/three/renderer-indirect.ts +570 -0
  767. package/src/three/store.ts +207 -0
  768. package/src/timeline/hx.ts +31 -0
  769. package/src/timeline/index.ts +603 -0
  770. package/src/tray-host/hx.ts +51 -0
  771. package/src/tray-host/index.ts +331 -0
  772. package/src/tray-host/manager.ts +639 -0
  773. package/src/tray-host/notify.ts +102 -0
  774. package/src/tray-host/protocol.ts +235 -0
  775. package/src/tree/hx.ts +51 -0
  776. package/src/tree/index.ts +1087 -0
  777. package/src/tree/internal.ts +87 -0
  778. package/src/tree/rows.ts +334 -0
  779. package/src/index.d.ts +0 -2
  780. package/src/index.js +0 -9
  781. package/src/sparkline/index.d.ts +0 -29
  782. package/src/sparkline/index.js +0 -50
  783. package/src/sparkline/node.js +0 -72
@@ -0,0 +1,634 @@
1
+ // The vocabulary `<Flow>` speaks. Deliberately close to react-flow's, so
2
+ // that a graph described for one describes the same graph for the other:
3
+ // nodes carry a position and free-form `data`, edges name a source and a
4
+ // target, and every mutation reaches the app as a *change* it applies to its
5
+ // own state (see `./model.ts`).
6
+ //
7
+ // Three names differ, and only because the barrel already owns them or
8
+ // because they are too generic to put in it:
9
+ //
10
+ // react-flow here
11
+ // ------------------ ------------------
12
+ // Position HandlePosition (`Position` is the editor's line/ch)
13
+ // Rect FlowRect
14
+ // ReactFlowInstance FlowInstance
15
+ //
16
+ // Nothing in this file has a runtime half, so it costs no bundle.
17
+ import type { ReactNode, Ref } from 'react';
18
+ import type { Style } from 'react-x11/style';
19
+ import type {
20
+ DrawnNode,
21
+ FocusEvent,
22
+ KeyboardEvent,
23
+ MouseEvent,
24
+ WheelEvent,
25
+ } from 'react-x11';
26
+
27
+ /** A point in graph space — the coordinate system node positions live in. */
28
+ export interface XYPosition {
29
+ x: number;
30
+ y: number;
31
+ }
32
+
33
+ /** A box in graph space unless the field it is on says screen pixels. */
34
+ export interface FlowRect {
35
+ x: number;
36
+ y: number;
37
+ width: number;
38
+ height: number;
39
+ }
40
+
41
+ /**
42
+ * The pane's transform: graph point `p` is drawn at `p * zoom + (x, y)`,
43
+ * relative to the pane's top-left corner. Translate-then-scale, the same
44
+ * order react-flow uses, so a viewport copied from one lands in the other.
45
+ */
46
+ export interface Viewport {
47
+ x: number;
48
+ y: number;
49
+ zoom: number;
50
+ }
51
+
52
+ /** Which side of a node a handle sits on, and which way its edge leaves. */
53
+ export type HandlePosition = 'top' | 'right' | 'bottom' | 'left';
54
+
55
+ /** A handle either starts edges or receives them. */
56
+ export type HandleType = 'source' | 'target';
57
+
58
+ /**
59
+ * One connection point on a node. A node that declares none gets the pair
60
+ * its type asks for — a target and a source — which is what makes the
61
+ * common case (`{ id, position, data: { label } }`) a complete node.
62
+ */
63
+ export interface HandleSpec {
64
+ /** Names this handle in `Connection.sourceHandle`/`targetHandle`. A node
65
+ * with one handle per type can leave it out and connect by node id. */
66
+ id?: string | null;
67
+ type: HandleType;
68
+ position: HandlePosition;
69
+ /** Where along that side, 0 at the top/left corner and 1 at the other.
70
+ * Default `0.5`. This is how a node grows a row of typed inputs. */
71
+ offset?: number;
72
+ /** Drawn beside the handle when the zoom is high enough to read it. */
73
+ label?: string;
74
+ }
75
+
76
+ /** A handle resolved against its node: the spec, plus where it is. */
77
+ export interface HandleAnchor extends HandleSpec {
78
+ nodeId: string;
79
+ /** Centre of the handle, in graph space. */
80
+ x: number;
81
+ y: number;
82
+ }
83
+
84
+ /** What the built-in node types read out of `data`. */
85
+ export interface FlowNodeData {
86
+ label?: string;
87
+ /** A second line under the label, in the dim colour. */
88
+ description?: string;
89
+ }
90
+
91
+ /** Per-node paint overrides. Colours only: anything that could change the
92
+ * node's *size* belongs in `width`/`height`, which the layout reads. */
93
+ export interface NodeAppearance {
94
+ background?: string;
95
+ borderColor?: string;
96
+ borderWidth?: number;
97
+ borderRadius?: number;
98
+ color?: string;
99
+ /** A stripe down the leading edge — how a type or a status reads at a
100
+ * glance without a legend. */
101
+ accent?: string;
102
+ }
103
+
104
+ export interface FlowNode<Data = FlowNodeData> {
105
+ id: string;
106
+ /** Top-left corner, in graph space. */
107
+ position: XYPosition;
108
+ data?: Data;
109
+ /** Key into `nodeTypes`; `'default'`, `'input'` and `'output'` are built
110
+ * in and differ only in which handles they carry. */
111
+ type?: string;
112
+ /** Explicit size. Left out, the node is measured from its label once and
113
+ * remembered — see `FlowNodeType.size`. */
114
+ width?: number;
115
+ height?: number;
116
+ /** Smallest the resize gesture may make it. Defaults to 48×32. */
117
+ minWidth?: number;
118
+ minHeight?: number;
119
+ selected?: boolean;
120
+ hidden?: boolean;
121
+ /** All default to the pane-wide prop (`nodesDraggable`, …). */
122
+ draggable?: boolean;
123
+ selectable?: boolean;
124
+ connectable?: boolean;
125
+ deletable?: boolean;
126
+ /** Grow handles on its border while it is selected. Off by default —
127
+ * a graph of fixed cards should not sprout eight dots the moment one is
128
+ * clicked. `<Flow nodesResizable>` turns it on for every node. */
129
+ resizable?: boolean;
130
+ /** Higher paints later, and is hit first. */
131
+ zIndex?: number;
132
+ /** Where the built-in handles sit. Defaults: target `'top'`, source
133
+ * `'bottom'` — react-flow's, so a graph laid out for it reads the same. */
134
+ sourcePosition?: HandlePosition;
135
+ targetPosition?: HandlePosition;
136
+ /** Replaces the type's handles outright, for a node whose ports are data
137
+ * rather than shape. */
138
+ handles?: readonly HandleSpec[];
139
+ style?: NodeAppearance;
140
+ }
141
+
142
+ export type EdgeType = 'bezier' | 'smoothstep' | 'step' | 'straight';
143
+
144
+ /** The arrowhead vocabulary: an outline, or a filled triangle. */
145
+ export type MarkerType = 'arrow' | 'arrowclosed';
146
+
147
+ export interface EdgeMarker {
148
+ type: MarkerType;
149
+ /** Length along the edge, in graph units. Default 12. */
150
+ size?: number;
151
+ /** Defaults to the edge's own stroke. */
152
+ color?: string;
153
+ }
154
+
155
+ export interface EdgeAppearance {
156
+ stroke?: string;
157
+ strokeWidth?: number;
158
+ /** On/off run lengths, in graph units. An `animated` edge that names none
159
+ * gets the default dash. */
160
+ dash?: readonly number[];
161
+ labelColor?: string;
162
+ labelBackground?: string;
163
+ }
164
+
165
+ export interface FlowEdge<Data = unknown> {
166
+ id: string;
167
+ source: string;
168
+ target: string;
169
+ /** Which handle on each end. `null`/absent means "the only one of its
170
+ * type", which is what a node built from the defaults has. */
171
+ sourceHandle?: string | null;
172
+ targetHandle?: string | null;
173
+ /** Default `'bezier'`. */
174
+ type?: EdgeType;
175
+ label?: string;
176
+ /** Marches the dash along the edge. Costs a repaint timer while any
177
+ * animated edge is on screen, and nothing when none is. */
178
+ animated?: boolean;
179
+ selected?: boolean;
180
+ hidden?: boolean;
181
+ selectable?: boolean;
182
+ deletable?: boolean;
183
+ /** Default `'arrowclosed'` — this is a *directed* graph, and an edge you
184
+ * cannot read a direction off is a line. `null` opts out. */
185
+ markerEnd?: MarkerType | EdgeMarker | null;
186
+ markerStart?: MarkerType | EdgeMarker | null;
187
+ zIndex?: number;
188
+ style?: EdgeAppearance;
189
+ data?: Data;
190
+ }
191
+
192
+ /** What a finished connection gesture describes. Handed to `onConnect`, and
193
+ * what `addEdge` turns into an edge. */
194
+ export interface Connection {
195
+ source: string;
196
+ target: string;
197
+ sourceHandle: string | null;
198
+ targetHandle: string | null;
199
+ }
200
+
201
+ /** Where a connection gesture started, for `onConnectStart`/`onConnectEnd`. */
202
+ export interface ConnectionStart {
203
+ nodeId: string;
204
+ handleId: string | null;
205
+ handleType: HandleType;
206
+ }
207
+
208
+ // --- changes ---------------------------------------------------------------
209
+ //
210
+ // The pane never mutates the arrays it was given. It describes what happened
211
+ // and the app applies it, which is what makes `nodes`/`edges` an ordinary
212
+ // controlled prop and undo a matter of not applying something.
213
+
214
+ export type NodeChange<Data = FlowNodeData> =
215
+ | {
216
+ type: 'position';
217
+ id: string;
218
+ position?: XYPosition;
219
+ /** True for every step of a drag, false on the one that ends it —
220
+ * so an app can skip persisting the intermediate positions. */
221
+ dragging?: boolean;
222
+ }
223
+ | {
224
+ type: 'dimensions';
225
+ id: string;
226
+ dimensions: { width: number; height: number };
227
+ /** The drag/settle pair {@link NodeChange.dragging} makes for a move. */
228
+ resizing?: boolean;
229
+ }
230
+ | { type: 'select'; id: string; selected: boolean }
231
+ | { type: 'remove'; id: string }
232
+ | { type: 'add'; item: FlowNode<Data>; index?: number }
233
+ | { type: 'replace'; id: string; item: FlowNode<Data> };
234
+
235
+ export type EdgeChange<Data = unknown> =
236
+ | { type: 'select'; id: string; selected: boolean }
237
+ | { type: 'remove'; id: string }
238
+ | { type: 'add'; item: FlowEdge<Data>; index?: number }
239
+ | { type: 'replace'; id: string; item: FlowEdge<Data> };
240
+
241
+ // --- painting --------------------------------------------------------------
242
+
243
+ /**
244
+ * The colours the pane draws with. Derived from the nearest `theme` so a
245
+ * graph on a dark desktop is dark, and overridable a token at a time through
246
+ * `<Flow palette>`.
247
+ */
248
+ export interface FlowPalette {
249
+ /** The pane behind everything. */
250
+ background: string;
251
+ /** The dot/line grid on it. */
252
+ grid: string;
253
+ text: string;
254
+ dim: string;
255
+ nodeBackground: string;
256
+ nodeBorder: string;
257
+ /** Border and handle fill of a selected node, and the connection line. */
258
+ accent: string;
259
+ edge: string;
260
+ edgeSelected: string;
261
+ handle: string;
262
+ /** Panels that float over the graph: the minimap, the controls. */
263
+ surface: string;
264
+ surfaceBorder: string;
265
+ /** The box-selection rectangle's fill. */
266
+ selection: string;
267
+ }
268
+
269
+ export interface TextOptions {
270
+ size?: number;
271
+ color?: string;
272
+ weight?: number | 'normal' | 'bold';
273
+ family?: string;
274
+ /** Default `'left'`. */
275
+ align?: 'left' | 'center' | 'right';
276
+ /** Where `y` is measured: the top of the line, or its middle. Default
277
+ * `'top'`. */
278
+ baseline?: 'top' | 'middle';
279
+ /** Ellipsize past this many pixels. */
280
+ maxWidth?: number;
281
+ }
282
+
283
+ export interface StrokeOptions {
284
+ stroke?: string;
285
+ lineWidth?: number;
286
+ dash?: readonly number[];
287
+ dashOffset?: number;
288
+ }
289
+
290
+ export interface ShapeOptions extends StrokeOptions {
291
+ fill?: string;
292
+ }
293
+
294
+ /**
295
+ * What a custom node type draws through. Everything is in **screen pixels**,
296
+ * already scaled by the zoom — a node type multiplies its own sizes by
297
+ * `zoom` and otherwise ignores the viewport.
298
+ *
299
+ * It is a facade rather than ntk's context because the mock backend used by
300
+ * headless tests has no path API: a node type written against this one is
301
+ * exercised by `renderX11(..., { backend: 'mock' })` without throwing, and
302
+ * `raw` is there for the drawing this does not cover.
303
+ */
304
+ export interface FlowPainter {
305
+ /** ntk's 2d context, for anything the facade does not offer. Null on a
306
+ * backend that cannot draw paths. */
307
+ readonly raw: unknown;
308
+ save(): void;
309
+ restore(): void;
310
+ clipRect(x: number, y: number, w: number, h: number, radius?: number): void;
311
+ rect(
312
+ x: number,
313
+ y: number,
314
+ w: number,
315
+ h: number,
316
+ radius: number,
317
+ options: ShapeOptions,
318
+ ): void;
319
+ circle(x: number, y: number, r: number, options: ShapeOptions): void;
320
+ polyline(points: readonly XYPosition[], options: StrokeOptions): void;
321
+ polygon(points: readonly XYPosition[], options: ShapeOptions): void;
322
+ /**
323
+ * Many disjoint strokes as one path and one `stroke()`, and many small
324
+ * squares as one path and one `fill()`. A background grid is thousands of
325
+ * marks, and one X request per mark is the difference between a pan that
326
+ * keeps up and one that does not.
327
+ */
328
+ strokeRuns(
329
+ runs: readonly (readonly XYPosition[])[],
330
+ options: StrokeOptions,
331
+ ): void;
332
+ dots(centres: readonly XYPosition[], size: number, color: string): void;
333
+ /** Many closed shapes as one path and one `fill()` — every arrowhead of a
334
+ * colour in a single request instead of one apiece. */
335
+ polygons(
336
+ shapes: readonly (readonly XYPosition[])[],
337
+ options: ShapeOptions,
338
+ ): void;
339
+ text(text: string, x: number, y: number, options?: TextOptions): void;
340
+ measureText(
341
+ text: string,
342
+ options?: TextOptions,
343
+ ): { width: number; height: number };
344
+ }
345
+
346
+ /** What a node type is handed to draw one node. */
347
+ export interface NodePaintContext<Data = FlowNodeData> {
348
+ node: FlowNode<Data>;
349
+ /** The node's box, in screen pixels. */
350
+ rect: FlowRect;
351
+ zoom: number;
352
+ selected: boolean;
353
+ hovered: boolean;
354
+ palette: FlowPalette;
355
+ painter: FlowPainter;
356
+ /** The node's handles, resolved and in screen pixels. Drawn by the pane
357
+ * after `paint` returns, so a type that wants them somewhere else moves
358
+ * them with `handles`, not by drawing its own. */
359
+ handles: readonly HandleAnchor[];
360
+ }
361
+
362
+ /** What {@link FlowNodeType.render} is handed. */
363
+ export interface NodeRenderContext<Data = FlowNodeData> {
364
+ node: FlowNode<Data>;
365
+ selected: boolean;
366
+ zoom: number;
367
+ /** The box the returned tree is mounted in and laid out to, in pixels
368
+ * relative to the pane's top-left corner. Its size is the useful half;
369
+ * the position is there for a body that wants to know where it is. */
370
+ rect: FlowRect;
371
+ }
372
+
373
+ /**
374
+ * A node type: what the node is shaped like, where it connects, how it is
375
+ * drawn — and, when drawing is not enough, what it *mounts*.
376
+ *
377
+ * react-flow's `nodeTypes` maps a name to a React component, because there
378
+ * the node body is a DOM subtree the browser transforms. Here the pane draws
379
+ * the graph — zoom is not a transform this renderer has, so it is arithmetic
380
+ * — and `paint` is the analogue that costs nothing. `render` is the other
381
+ * half: real host elements, laid out by yoga, for the nodes that need a
382
+ * `<textarea>` or a `<Checkbox>` rather than a picture of one. Everything
383
+ * else about the seam is react-flow's: the registry is a prop, the name
384
+ * lives on the node, and an app that needs none of it writes none of it.
385
+ */
386
+ export interface FlowNodeType<Data = FlowNodeData> {
387
+ /** The node's size when it carries no `width`/`height`. A function is
388
+ * called once per node and may measure text through the painter it is
389
+ * given. */
390
+ size?:
391
+ | { width: number; height: number }
392
+ | ((
393
+ node: FlowNode<Data>,
394
+ measure: (text: string, options?: TextOptions) => number,
395
+ ) => { width: number; height: number });
396
+ /** The handles nodes of this type carry, overriding the built-in pair. */
397
+ handles?:
398
+ readonly HandleSpec[] | ((node: FlowNode<Data>) => readonly HandleSpec[]);
399
+ /** Draw the body. Leave it out for the built-in card. */
400
+ paint?: (context: NodePaintContext<Data>) => void;
401
+ /**
402
+ * Real React content for the node's body — `<Checkbox>`, `<Button>`,
403
+ * `<textarea>`, anything. Mounted in a `<box>` the pane positions and
404
+ * sizes over the node, laid out by yoga inside it, and clipped to it.
405
+ *
406
+ * Three things follow from it being a real subtree rather than a picture,
407
+ * and all three are the point:
408
+ *
409
+ * - **It is interactive.** The widgets take focus, keys and clicks
410
+ * themselves; the pane never sees those events.
411
+ * - **The node re-renders as the viewport moves.** This is the cost the
412
+ * drawn path exists to avoid, so it is paid only by the nodes that ask
413
+ * for it, and only while they are on screen.
414
+ * - **It does not scale with the zoom.** The *box* does — there is no
415
+ * transform in this renderer, which is the whole reason `paint` is the
416
+ * default — so content is laid out to the zoomed box at its natural
417
+ * size, and clipped. Below `zoom` 0.6 it is not mounted at all and the
418
+ * node is drawn instead.
419
+ *
420
+ * `headerHeight` is what leaves the node draggable: the body starts below
421
+ * it, so there is always somewhere to grab that is not a text field.
422
+ */
423
+ render?: (context: NodeRenderContext<Data>) => ReactNode;
424
+ /** The strip along the top of the node that {@link FlowNodeType.render}
425
+ * does not cover — where the pane draws the title, and what the node is
426
+ * dragged by. Graph units; default 26. `0` hands the whole box over, and
427
+ * then only the keyboard can move the node. */
428
+ headerHeight?: number;
429
+ }
430
+
431
+ // --- pane furniture --------------------------------------------------------
432
+
433
+ export type BackgroundVariant = 'dots' | 'lines' | 'cross' | 'none';
434
+
435
+ export interface BackgroundOptions {
436
+ variant?: BackgroundVariant;
437
+ /** Grid pitch in graph units. Default 20. */
438
+ gap?: number;
439
+ /** Dot radius / cross arm, in graph units. Default 1. */
440
+ size?: number;
441
+ color?: string;
442
+ }
443
+
444
+ export type PanePosition =
445
+ 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
446
+
447
+ export interface MiniMapOptions {
448
+ width?: number;
449
+ height?: number;
450
+ /** Default `'bottom-right'`. */
451
+ position?: PanePosition;
452
+ nodeColor?: string | ((node: FlowNode<never>) => string);
453
+ maskColor?: string;
454
+ }
455
+
456
+ export interface ControlsOptions {
457
+ /** Default `'bottom-left'`. */
458
+ position?: PanePosition;
459
+ showZoom?: boolean;
460
+ showFitView?: boolean;
461
+ }
462
+
463
+ export interface FitViewOptions {
464
+ /** Fraction of the pane left as margin. Default `0.1`. */
465
+ padding?: number;
466
+ minZoom?: number;
467
+ maxZoom?: number;
468
+ /** Fit only these nodes. */
469
+ nodes?: readonly { id: string }[];
470
+ }
471
+
472
+ /**
473
+ * Where one node's React body goes: the box `<Flow>` mounts
474
+ * {@link FlowNodeType.render}'s tree into, in pixels relative to the pane's
475
+ * own top-left corner.
476
+ *
477
+ * This is the seam between the two halves. The pane owns node geometry —
478
+ * sizes it measured, a drag it is mid-way through, the viewport it has not
479
+ * told React about — so it is the only thing that can answer "where is this
480
+ * node right now", and it answers by handing the whole list over whenever
481
+ * it changes. `<Flow>` wires it up; an app never sees it.
482
+ */
483
+ export interface NodeBodyRect extends FlowRect {
484
+ id: string;
485
+ zoom: number;
486
+ selected: boolean;
487
+ }
488
+
489
+ // --- the imperative surface ------------------------------------------------
490
+
491
+ /**
492
+ * What a `<Flow ref>` hands back — react-flow's `useReactFlow()`, as a ref
493
+ * rather than a context hook, because a ref needs no provider above the pane
494
+ * and there is exactly one pane to talk to.
495
+ */
496
+ export interface FlowInstance {
497
+ getViewport(): Viewport;
498
+ setViewport(viewport: Partial<Viewport>): void;
499
+ zoomIn(step?: number): void;
500
+ zoomOut(step?: number): void;
501
+ zoomTo(zoom: number): void;
502
+ /** Frame the graph. A no-op while the pane has no size yet — which is why
503
+ * the `fitView` prop exists: it waits for the first layout. */
504
+ fitView(options?: FitViewOptions): void;
505
+ setCenter(x: number, y: number, options?: { zoom?: number }): void;
506
+ /** Window coordinates — what an event carries — to graph space. */
507
+ screenToFlowPosition(point: XYPosition): XYPosition;
508
+ flowToScreenPosition(point: XYPosition): XYPosition;
509
+ /** The node's box in graph space, including a measured size. */
510
+ getNodeBounds(id: string): FlowRect | null;
511
+ /** The box around every node, or around the ones named. */
512
+ getNodesBounds(ids?: readonly string[]): FlowRect | null;
513
+ }
514
+
515
+ // --- component props -------------------------------------------------------
516
+
517
+ /** `(event, node)` — react-flow's argument order. */
518
+ export type NodeMouseHandler<Data> = (
519
+ event: MouseEvent<DrawnNode>,
520
+ node: FlowNode<Data>,
521
+ ) => void;
522
+
523
+ export type EdgeMouseHandler<Data> = (
524
+ event: MouseEvent<DrawnNode>,
525
+ edge: FlowEdge<Data>,
526
+ ) => void;
527
+
528
+ export interface FlowProps<N = FlowNodeData, E = unknown> {
529
+ /** Controlled. Pair with `onNodesChange` and `applyNodeChanges`. */
530
+ nodes?: readonly FlowNode<N>[];
531
+ /** Uncontrolled: the pane owns the array from here on. */
532
+ defaultNodes?: readonly FlowNode<N>[];
533
+ edges?: readonly FlowEdge<E>[];
534
+ defaultEdges?: readonly FlowEdge<E>[];
535
+ onNodesChange?: (changes: NodeChange<N>[]) => void;
536
+ onEdgesChange?: (changes: EdgeChange<E>[]) => void;
537
+ /** A connection gesture landed on a valid handle. Turn it into an edge
538
+ * with `addEdge`; refuse it by doing nothing. */
539
+ onConnect?: (connection: Connection) => void;
540
+ onConnectStart?: (start: ConnectionStart) => void;
541
+ /** The gesture ended, connected or not. */
542
+ onConnectEnd?: (connection: Connection | null) => void;
543
+ /** Vetoes a connection before `onConnect`, and greys the line while the
544
+ * pointer is over a handle it would refuse. */
545
+ isValidConnection?: (connection: Connection) => boolean;
546
+ /** `'strict'` (default) only joins a source to a target; `'loose'` lets
547
+ * either end start, for graphs whose handles are not typed. */
548
+ connectionMode?: 'strict' | 'loose';
549
+
550
+ nodeTypes?: Readonly<Record<string, FlowNodeType<N>>>;
551
+ /** Merged under every edge — where `markerEnd`, `type` and `style` for a
552
+ * whole graph belong. */
553
+ defaultEdgeOptions?: Partial<FlowEdge<E>>;
554
+
555
+ onNodeClick?: NodeMouseHandler<N>;
556
+ onNodeDoubleClick?: NodeMouseHandler<N>;
557
+ onNodeContextMenu?: NodeMouseHandler<N>;
558
+ onNodeDragStart?: NodeMouseHandler<N>;
559
+ onNodeDragStop?: NodeMouseHandler<N>;
560
+ onEdgeClick?: EdgeMouseHandler<E>;
561
+ onEdgeContextMenu?: EdgeMouseHandler<E>;
562
+ onPaneClick?: (event: MouseEvent<DrawnNode>) => void;
563
+ onPaneContextMenu?: (event: MouseEvent<DrawnNode>) => void;
564
+ onSelectionChange?: (selection: {
565
+ nodes: FlowNode<N>[];
566
+ edges: FlowEdge<E>[];
567
+ }) => void;
568
+
569
+ /** Controlled viewport. Left out, the pane owns it — which is what keeps
570
+ * panning off the React render path entirely. */
571
+ viewport?: Viewport;
572
+ defaultViewport?: Viewport;
573
+ onViewportChange?: (viewport: Viewport) => void;
574
+ /** Frame the graph once, on the first layout that has a size. */
575
+ fitView?: boolean;
576
+ fitViewOptions?: FitViewOptions;
577
+ minZoom?: number;
578
+ maxZoom?: number;
579
+
580
+ /** All default to `true`. */
581
+ nodesDraggable?: boolean;
582
+ nodesConnectable?: boolean;
583
+ elementsSelectable?: boolean;
584
+ /** The default for {@link FlowNode.resizable}. `false`. */
585
+ nodesResizable?: boolean;
586
+ panOnDrag?: boolean;
587
+ zoomOnScroll?: boolean;
588
+ zoomOnDoubleClick?: boolean;
589
+ /** Drag on the pane draws a selection box instead of panning; Shift+drag
590
+ * does it either way. */
591
+ selectionOnDrag?: boolean;
592
+ /** Delete/Backspace removes the selection. Default `true`. */
593
+ deleteOnKey?: boolean;
594
+
595
+ snapToGrid?: boolean;
596
+ /** `[x, y]` pitch. Default `[16, 16]`. */
597
+ snapGrid?: readonly [number, number];
598
+
599
+ background?: BackgroundOptions | BackgroundVariant | false;
600
+ minimap?: MiniMapOptions | boolean;
601
+ controls?: ControlsOptions | boolean;
602
+ palette?: Partial<FlowPalette>;
603
+
604
+ /** The pane fills its parent unless this gives it a height or a
605
+ * `flexGrow` of its own. */
606
+ style?: Style | Style[];
607
+ tabIndex?: number;
608
+ focusable?: boolean;
609
+ disabled?: boolean;
610
+ 'aria-label'?: string;
611
+ /** What `react-x11/test`'s `getByTestName` finds the pane by. */
612
+ 'data-testname'?: string;
613
+ /** Runs before the pane's own wheel handling; `preventDefault()` keeps
614
+ * the pane from zooming or panning. */
615
+ onWheel?: (event: WheelEvent<DrawnNode>) => void;
616
+ /** Runs before the pane's own keys, same veto. */
617
+ onKeyDown?: (event: KeyboardEvent<DrawnNode>) => void;
618
+ onFocus?: (event: FocusEvent<DrawnNode>) => void;
619
+ onBlur?: (event: FocusEvent<DrawnNode>) => void;
620
+ ref?: Ref<FlowInstance>;
621
+ /**
622
+ * Where the bodies of the nodes whose type has a `render` should be
623
+ * mounted, whenever that changes. Wired by `<Flow>` — this is the seam
624
+ * between the drawn half and the mounted one, and the raw `<flowgraph>`
625
+ * element is the only reason it is a prop rather than a private method.
626
+ *
627
+ * `sync` is true when the change came out of a live gesture — a drag
628
+ * step, a wheel tick, an arrow key. Motion dispatches at continuous
629
+ * priority, which React may hold across several frames while the pane
630
+ * paints each step immediately; a gesture-time receiver must commit
631
+ * synchronously or the mounted bodies visibly trail the drawn cards.
632
+ */
633
+ onNodeBodies?: (bodies: readonly NodeBodyRect[], sync: boolean) => void;
634
+ }
@@ -0,0 +1,51 @@
1
+ // `React.createElement`, typed against react-x11's host elements.
2
+ //
3
+ // The library writes `h(...)` rather than JSX — a convention inherited from
4
+ // core, and worth keeping so moving code between the two repos stays a
5
+ // rename. But `React.createElement`'s own overloads are `@types/react`'s, and
6
+ // they describe the DOM: a `<box onKeyDown>` handler is checked against
7
+ // React's `KeyboardEvent`, not react-x11's, and the whole props object is
8
+ // measured against `DOMAttributes`. Everything interesting fails.
9
+ //
10
+ // So the element name is looked up in react-x11's own element table instead.
11
+ // `hx('box', …)` gets `<box>`'s real props — `ev.keysym` on a key handler,
12
+ // `onDraw` on a `<canvas>` — and `hx('div', …)` is an error, which is the
13
+ // same guarantee the JSX namespace gives `examples/` and `test/types/`.
14
+ import React from 'react';
15
+ import type { Key, ReactElement, ReactNode } from 'react';
16
+ import type { ReactX11Elements, Theme } from 'react-x11';
17
+
18
+ /** The host elements, by name. */
19
+ export type Host = ReactX11Elements;
20
+
21
+ /**
22
+ * What every element takes on top of its own props.
23
+ *
24
+ * `theme` is honoured by **every** node — `Node.theme` merges `props.theme`
25
+ * over the inherited palette, whatever the kind — but react-x11's element
26
+ * declarations only put it on `<window>`. A widget re-declares the theme it
27
+ * read from context onto its own root so that `$token` values still resolve
28
+ * inside a `<popup>`, which is a separate window and does not inherit the
29
+ * trigger's node tree. So the prop is real; only the declaration is narrow.
30
+ */
31
+ interface CommonProps {
32
+ key?: Key;
33
+ /** `Theme` is listed alongside the record because it is an interface, and
34
+ * an interface has no implicit index signature — so the palette `useTheme`
35
+ * hands back is not assignable to the record react-x11 declares. */
36
+ theme?: Theme | Record<string, string | number>;
37
+ }
38
+
39
+ export function hx<K extends keyof Host>(
40
+ type: K,
41
+ // `theme` is dropped from the element's own props before the merge:
42
+ // `<window>` and `<popup>` already declare it, narrower, and intersecting
43
+ // the two would demand a value satisfying both.
44
+ props?: (Omit<Host[K], 'theme'> & CommonProps) | null,
45
+ ...children: ReactNode[]
46
+ ): ReactElement {
47
+ // The cast is the whole point of the wrapper: `createElement`'s string
48
+ // overload insists on DOM props, and the signature above has already
49
+ // checked these against the element that will actually receive them.
50
+ return React.createElement(type as string, props as never, ...children);
51
+ }