@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,687 @@
1
+ // The graph model, as pure functions over the arrays the app owns.
2
+ //
3
+ // Nothing here touches a node, a context or the DOM-shaped world: it is the
4
+ // half of `<Flow>` that can be reasoned about — and tested — without an X
5
+ // server, which is most of the interesting arithmetic. `./node.ts` is the
6
+ // only caller that has state.
7
+ import * as ntk from 'react-x11/ntk';
8
+ import { tint } from 'react-x11/style';
9
+
10
+ import type {
11
+ BackgroundOptions,
12
+ Connection,
13
+ EdgeChange,
14
+ EdgeMarker,
15
+ FitViewOptions,
16
+ FlowEdge,
17
+ FlowNode,
18
+ FlowNodeData,
19
+ FlowNodeType,
20
+ FlowPalette,
21
+ FlowRect,
22
+ HandleAnchor,
23
+ HandlePosition,
24
+ HandleSpec,
25
+ MarkerType,
26
+ NodeChange,
27
+ TextOptions,
28
+ Viewport,
29
+ XYPosition,
30
+ } from './types.js';
31
+
32
+ // The built-in card's geometry. A node with no size is measured against
33
+ // these, and a node type that draws its own body still gets them unless it
34
+ // says otherwise — so a graph of mixed types lines up.
35
+ export const NODE_PAD_X = 14;
36
+ export const NODE_PAD_Y = 11;
37
+ export const NODE_LABEL_SIZE = 13;
38
+ export const NODE_DESC_SIZE = 11;
39
+ export const NODE_MIN_WIDTH = 110;
40
+ export const NODE_MAX_WIDTH = 260;
41
+ export const NODE_MIN_HEIGHT = 40;
42
+ /** Handle radius in graph units. */
43
+ export const HANDLE_RADIUS = 4.5;
44
+ /** Resize grip half-width, and how far outside one a press still grabs it. */
45
+ export const RESIZE_GRIP = 3.5;
46
+ export const RESIZE_SLOP = 4;
47
+ /** Floors for a resize, when the node names none. Small enough to be a
48
+ * badge, big enough that a node cannot be dragged out of existence. */
49
+ export const MIN_NODE_WIDTH = 48;
50
+ export const MIN_NODE_HEIGHT = 32;
51
+ /** The strip a `render` node keeps for its title and for dragging. */
52
+ export const NODE_HEADER = 26;
53
+ /** How far a `render` node's body is inset from its own border, so the
54
+ * resize grips and the border stay the pane's to hit. */
55
+ export const NODE_BODY_INSET = 5;
56
+ /** Below this the mounted body is not worth showing: it is laid out at its
57
+ * natural size, so a small box would show a corner of a form. */
58
+ export const RENDER_ZOOM = 0.6;
59
+ /** How far outside a handle a press still counts as grabbing it. */
60
+ export const HANDLE_SLOP = 5;
61
+ /** How far from an edge a press still counts as hitting it. */
62
+ export const EDGE_SLOP = 6;
63
+ /** How far a step/smoothstep edge leaves a node before it turns. */
64
+ export const EDGE_STEP_OFFSET = 18;
65
+ export const DEFAULT_MARKER_SIZE = 11;
66
+
67
+ export const DEFAULT_MIN_ZOOM = 0.2;
68
+ export const DEFAULT_MAX_ZOOM = 2.5;
69
+ export const ZOOM_STEP = 1.2;
70
+
71
+ // --- changes ---------------------------------------------------------------
72
+
73
+ /**
74
+ * Fold position/select/remove/add/replace changes into a node array — the
75
+ * reducer half of the controlled contract, and the body of `useNodesState`.
76
+ *
77
+ * Returns the array it was given when nothing applied, so a `useMemo` or a
78
+ * `React.memo` above it is not defeated by an edit that changed nothing.
79
+ */
80
+ export function applyNodeChanges<Data = FlowNodeData>(
81
+ changes: readonly NodeChange<Data>[],
82
+ nodes: readonly FlowNode<Data>[],
83
+ ): FlowNode<Data>[] {
84
+ if (changes.length === 0) return nodes as FlowNode<Data>[];
85
+ const removed = new Set<string>();
86
+ const byId = new Map<string, FlowNode<Data>>();
87
+ for (const node of nodes) byId.set(node.id, node);
88
+ const added: { item: FlowNode<Data>; index?: number }[] = [];
89
+ let touched = false;
90
+
91
+ for (const change of changes) {
92
+ if (change.type === 'add') {
93
+ added.push({ item: change.item, index: change.index });
94
+ touched = true;
95
+ continue;
96
+ }
97
+ if (change.type === 'remove') {
98
+ if (byId.has(change.id)) {
99
+ removed.add(change.id);
100
+ touched = true;
101
+ }
102
+ continue;
103
+ }
104
+ const current = byId.get(change.id);
105
+ if (!current) continue;
106
+ if (change.type === 'replace') {
107
+ byId.set(change.id, change.item);
108
+ touched = true;
109
+ } else if (change.type === 'select') {
110
+ if ((current.selected ?? false) === change.selected) continue;
111
+ byId.set(change.id, { ...current, selected: change.selected });
112
+ touched = true;
113
+ } else if (change.type === 'dimensions') {
114
+ const { width, height } = change.dimensions;
115
+ if (current.width === width && current.height === height) continue;
116
+ byId.set(change.id, { ...current, width, height });
117
+ touched = true;
118
+ } else if (change.position) {
119
+ const { x, y } = change.position;
120
+ if (current.position.x === x && current.position.y === y) continue;
121
+ byId.set(change.id, { ...current, position: { x, y } });
122
+ touched = true;
123
+ }
124
+ }
125
+ if (!touched) return nodes as FlowNode<Data>[];
126
+
127
+ const next: FlowNode<Data>[] = [];
128
+ for (const node of nodes) {
129
+ if (removed.has(node.id)) continue;
130
+ next.push(byId.get(node.id) ?? node);
131
+ }
132
+ for (const { item, index } of added) {
133
+ if (index === undefined || index >= next.length) next.push(item);
134
+ else next.splice(Math.max(0, index), 0, item);
135
+ }
136
+ return next;
137
+ }
138
+
139
+ /** {@link applyNodeChanges} for edges. Removing a node does *not* remove its
140
+ * edges — that is the app's call, and `removeConnectedEdges` is the helper. */
141
+ export function applyEdgeChanges<Data = unknown>(
142
+ changes: readonly EdgeChange<Data>[],
143
+ edges: readonly FlowEdge<Data>[],
144
+ ): FlowEdge<Data>[] {
145
+ if (changes.length === 0) return edges as FlowEdge<Data>[];
146
+ const removed = new Set<string>();
147
+ const byId = new Map<string, FlowEdge<Data>>();
148
+ for (const edge of edges) byId.set(edge.id, edge);
149
+ const added: { item: FlowEdge<Data>; index?: number }[] = [];
150
+ let touched = false;
151
+
152
+ for (const change of changes) {
153
+ if (change.type === 'add') {
154
+ added.push({ item: change.item, index: change.index });
155
+ touched = true;
156
+ continue;
157
+ }
158
+ if (change.type === 'remove') {
159
+ if (byId.has(change.id)) {
160
+ removed.add(change.id);
161
+ touched = true;
162
+ }
163
+ continue;
164
+ }
165
+ const current = byId.get(change.id);
166
+ if (!current) continue;
167
+ if (change.type === 'replace') {
168
+ byId.set(change.id, change.item);
169
+ touched = true;
170
+ } else if ((current.selected ?? false) !== change.selected) {
171
+ byId.set(change.id, { ...current, selected: change.selected });
172
+ touched = true;
173
+ }
174
+ }
175
+ if (!touched) return edges as FlowEdge<Data>[];
176
+
177
+ const next: FlowEdge<Data>[] = [];
178
+ for (const edge of edges) {
179
+ if (removed.has(edge.id)) continue;
180
+ next.push(byId.get(edge.id) ?? edge);
181
+ }
182
+ for (const { item, index } of added) {
183
+ if (index === undefined || index >= next.length) next.push(item);
184
+ else next.splice(Math.max(0, index), 0, item);
185
+ }
186
+ return next;
187
+ }
188
+
189
+ /** The id `addEdge` gives a connection it turned into an edge. Derived from
190
+ * the endpoints so that connecting the same two handles twice is idempotent
191
+ * rather than a duplicate nobody can tell apart. */
192
+ export function connectionId(connection: Connection): string {
193
+ const from = `${connection.source}${connection.sourceHandle ? `:${connection.sourceHandle}` : ''}`;
194
+ const to = `${connection.target}${connection.targetHandle ? `:${connection.targetHandle}` : ''}`;
195
+ return `edge__${from}->${to}`;
196
+ }
197
+
198
+ /**
199
+ * Add the edge a connection describes, unless it is already there. Takes an
200
+ * edge as well as a `Connection`, so `addEdge({ ...connection, animated:
201
+ * true }, edges)` reads the way it does in react-flow.
202
+ */
203
+ export function addEdge<Data = unknown>(
204
+ connection: Connection | (Partial<FlowEdge<Data>> & Connection),
205
+ edges: readonly FlowEdge<Data>[],
206
+ ): FlowEdge<Data>[] {
207
+ const { source, target } = connection;
208
+ if (!source || !target) return edges as FlowEdge<Data>[];
209
+ const sourceHandle = connection.sourceHandle ?? null;
210
+ const targetHandle = connection.targetHandle ?? null;
211
+ const exists = edges.some(
212
+ (e) =>
213
+ e.source === source &&
214
+ e.target === target &&
215
+ (e.sourceHandle ?? null) === sourceHandle &&
216
+ (e.targetHandle ?? null) === targetHandle,
217
+ );
218
+ if (exists) return edges as FlowEdge<Data>[];
219
+ const extras = connection as Partial<FlowEdge<Data>>;
220
+ const edge = {
221
+ ...extras,
222
+ id:
223
+ extras.id ?? connectionId({ source, target, sourceHandle, targetHandle }),
224
+ source,
225
+ target,
226
+ sourceHandle,
227
+ targetHandle,
228
+ } as FlowEdge<Data>;
229
+ return [...edges, edge];
230
+ }
231
+
232
+ /** Every edge with an end on one of these nodes — what a delete usually
233
+ * wants to take with it. */
234
+ export function connectedEdges<Data = unknown>(
235
+ ids: readonly string[],
236
+ edges: readonly FlowEdge<Data>[],
237
+ ): FlowEdge<Data>[] {
238
+ const set = new Set(ids);
239
+ return edges.filter((e) => set.has(e.source) || set.has(e.target));
240
+ }
241
+
242
+ // --- geometry --------------------------------------------------------------
243
+
244
+ export function snapTo(value: number, grid: number): number {
245
+ return grid > 0 ? Math.round(value / grid) * grid : value;
246
+ }
247
+
248
+ /** Which way an edge leaves a side. */
249
+ export function handleDirection(position: HandlePosition): XYPosition {
250
+ switch (position) {
251
+ case 'top':
252
+ return { x: 0, y: -1 };
253
+ case 'bottom':
254
+ return { x: 0, y: 1 };
255
+ case 'left':
256
+ return { x: -1, y: 0 };
257
+ default:
258
+ return { x: 1, y: 0 };
259
+ }
260
+ }
261
+
262
+ /** The handles a node carries: its own, else its type's, else the pair every
263
+ * node has — a target in and a source out. */
264
+ export function resolveHandles<Data>(
265
+ node: FlowNode<Data>,
266
+ type: FlowNodeType<Data> | undefined,
267
+ ): readonly HandleSpec[] {
268
+ if (node.handles) return node.handles;
269
+ const fromType =
270
+ typeof type?.handles === 'function' ? type.handles(node) : type?.handles;
271
+ if (fromType) return fromType;
272
+ return [
273
+ { type: 'target', position: node.targetPosition ?? 'top' },
274
+ { type: 'source', position: node.sourcePosition ?? 'bottom' },
275
+ ];
276
+ }
277
+
278
+ /** Place a handle on a node's box. Graph space, and the centre of the dot. */
279
+ export function handleAnchor(
280
+ nodeId: string,
281
+ rect: FlowRect,
282
+ spec: HandleSpec,
283
+ ): HandleAnchor {
284
+ const t = spec.offset ?? 0.5;
285
+ switch (spec.position) {
286
+ case 'top':
287
+ return { ...spec, nodeId, x: rect.x + rect.width * t, y: rect.y };
288
+ case 'bottom':
289
+ return {
290
+ ...spec,
291
+ nodeId,
292
+ x: rect.x + rect.width * t,
293
+ y: rect.y + rect.height,
294
+ };
295
+ case 'left':
296
+ return { ...spec, nodeId, x: rect.x, y: rect.y + rect.height * t };
297
+ default:
298
+ return {
299
+ ...spec,
300
+ nodeId,
301
+ x: rect.x + rect.width,
302
+ y: rect.y + rect.height * t,
303
+ };
304
+ }
305
+ }
306
+
307
+ /**
308
+ * How big a node is when it does not say. The label decides the width, one
309
+ * or two lines decide the height, and both are clamped — an unbounded label
310
+ * would otherwise turn one long string into a node wider than the pane.
311
+ */
312
+ export function measureNode<Data>(
313
+ node: FlowNode<Data>,
314
+ type: FlowNodeType<Data> | undefined,
315
+ measure: (text: string, options?: TextOptions) => number,
316
+ ): { width: number; height: number } {
317
+ if (node.width != null && node.height != null) {
318
+ return { width: node.width, height: node.height };
319
+ }
320
+ let width: number;
321
+ let height: number;
322
+ const size =
323
+ typeof type?.size === 'function' ? type.size(node, measure) : type?.size;
324
+ if (size) {
325
+ width = size.width;
326
+ height = size.height;
327
+ } else {
328
+ const data = node.data as FlowNodeData | undefined;
329
+ const label = data?.label ?? node.id;
330
+ const description = data?.description;
331
+ const labelW = measure(label, { size: NODE_LABEL_SIZE, weight: 'bold' });
332
+ const descW = description
333
+ ? measure(description, { size: NODE_DESC_SIZE })
334
+ : 0;
335
+ width = Math.max(
336
+ NODE_MIN_WIDTH,
337
+ Math.min(
338
+ NODE_MAX_WIDTH,
339
+ Math.ceil(Math.max(labelW, descW)) + NODE_PAD_X * 2,
340
+ ),
341
+ );
342
+ height = Math.max(
343
+ NODE_MIN_HEIGHT,
344
+ NODE_PAD_Y * 2 +
345
+ Math.round(NODE_LABEL_SIZE * 1.3) +
346
+ (description ? Math.round(NODE_DESC_SIZE * 1.5) : 0),
347
+ );
348
+ }
349
+ return { width: node.width ?? width, height: node.height ?? height };
350
+ }
351
+
352
+ /** The box around a set of rects, or null when there are none. */
353
+ export function boundsOf(rects: readonly FlowRect[]): FlowRect | null {
354
+ if (rects.length === 0) return null;
355
+ let minX = Infinity;
356
+ let minY = Infinity;
357
+ let maxX = -Infinity;
358
+ let maxY = -Infinity;
359
+ for (const r of rects) {
360
+ if (r.x < minX) minX = r.x;
361
+ if (r.y < minY) minY = r.y;
362
+ if (r.x + r.width > maxX) maxX = r.x + r.width;
363
+ if (r.y + r.height > maxY) maxY = r.y + r.height;
364
+ }
365
+ return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
366
+ }
367
+
368
+ /** The box around two boxes. */
369
+ export function unionRects(a: FlowRect, b: FlowRect): FlowRect {
370
+ const x = Math.min(a.x, b.x);
371
+ const y = Math.min(a.y, b.y);
372
+ return {
373
+ x,
374
+ y,
375
+ width: Math.max(a.x + a.width, b.x + b.width) - x,
376
+ height: Math.max(a.y + a.height, b.y + b.height) - y,
377
+ };
378
+ }
379
+
380
+ /** A box grown by `m` on every side; negative shrinks. */
381
+ export function inflateRect(r: FlowRect, m: number): FlowRect {
382
+ return {
383
+ x: r.x - m,
384
+ y: r.y - m,
385
+ width: r.width + m * 2,
386
+ height: r.height + m * 2,
387
+ };
388
+ }
389
+
390
+ /** The overlap of two boxes, or null when they have none. */
391
+ export function intersectRects(a: FlowRect, b: FlowRect): FlowRect | null {
392
+ const x = Math.max(a.x, b.x);
393
+ const y = Math.max(a.y, b.y);
394
+ const right = Math.min(a.x + a.width, b.x + b.width);
395
+ const bottom = Math.min(a.y + a.height, b.y + b.height);
396
+ if (right <= x || bottom <= y) return null;
397
+ return { x, y, width: right - x, height: bottom - y };
398
+ }
399
+
400
+ export function rectsOverlap(a: FlowRect, b: FlowRect): boolean {
401
+ return (
402
+ a.x < b.x + b.width &&
403
+ a.x + a.width > b.x &&
404
+ a.y < b.y + b.height &&
405
+ a.y + a.height > b.y
406
+ );
407
+ }
408
+
409
+ export function rectContains(r: FlowRect, p: XYPosition): boolean {
410
+ return (
411
+ p.x >= r.x && p.x <= r.x + r.width && p.y >= r.y && p.y <= r.y + r.height
412
+ );
413
+ }
414
+
415
+ export function clamp(value: number, lo: number, hi: number): number {
416
+ return value < lo ? lo : value > hi ? hi : value;
417
+ }
418
+
419
+ /**
420
+ * The viewport that frames `bounds` inside a pane of `size`. Zoom first —
421
+ * the smaller of the two axis ratios, so nothing is cut — then translate so
422
+ * the scaled bounds land centred.
423
+ */
424
+ export function fitViewport(
425
+ bounds: FlowRect,
426
+ size: { width: number; height: number },
427
+ options: FitViewOptions = {},
428
+ limits: { minZoom: number; maxZoom: number },
429
+ ): Viewport {
430
+ const padding = options.padding ?? 0.1;
431
+ const minZoom = options.minZoom ?? limits.minZoom;
432
+ const maxZoom = options.maxZoom ?? limits.maxZoom;
433
+ const usableW = Math.max(1, size.width * (1 - padding * 2));
434
+ const usableH = Math.max(1, size.height * (1 - padding * 2));
435
+ const zoom = clamp(
436
+ Math.min(
437
+ usableW / Math.max(1, bounds.width),
438
+ usableH / Math.max(1, bounds.height),
439
+ ),
440
+ minZoom,
441
+ maxZoom,
442
+ );
443
+ return {
444
+ zoom,
445
+ x: size.width / 2 - (bounds.x + bounds.width / 2) * zoom,
446
+ y: size.height / 2 - (bounds.y + bounds.height / 2) * zoom,
447
+ };
448
+ }
449
+
450
+ /** The eight grips on a node's border, as unit directions. */
451
+ export const RESIZE_DIRECTIONS: readonly XYPosition[] = [
452
+ { x: -1, y: -1 },
453
+ { x: 0, y: -1 },
454
+ { x: 1, y: -1 },
455
+ { x: 1, y: 0 },
456
+ { x: 1, y: 1 },
457
+ { x: 0, y: 1 },
458
+ { x: -1, y: 1 },
459
+ { x: -1, y: 0 },
460
+ ];
461
+
462
+ /** Where a grip sits on a box. */
463
+ export function gripPoint(rect: FlowRect, dir: XYPosition): XYPosition {
464
+ return {
465
+ x: rect.x + (rect.width * (dir.x + 1)) / 2,
466
+ y: rect.y + (rect.height * (dir.y + 1)) / 2,
467
+ };
468
+ }
469
+
470
+ /**
471
+ * Drag one grip and get the box it makes. The edges the grip does not own
472
+ * stay exactly where they were — which is what makes a resize from the
473
+ * top-left move the node's origin and one from the bottom-right not.
474
+ *
475
+ * Clamped to the minimum by moving the dragged edge back, never by moving
476
+ * the opposite one: a node held at its floor must not creep across the
477
+ * canvas while the pointer keeps going.
478
+ */
479
+ export function resizeRect(
480
+ origin: FlowRect,
481
+ dir: XYPosition,
482
+ dx: number,
483
+ dy: number,
484
+ limits: { minWidth: number; minHeight: number },
485
+ snap?: (value: number, axis: 0 | 1) => number,
486
+ ): FlowRect {
487
+ let { x, y, width, height } = origin;
488
+ if (dir.x < 0) {
489
+ const right = origin.x + origin.width;
490
+ x = snap ? snap(origin.x + dx, 0) : origin.x + dx;
491
+ x = Math.min(x, right - limits.minWidth);
492
+ width = right - x;
493
+ } else if (dir.x > 0) {
494
+ const edge = snap
495
+ ? snap(origin.x + origin.width + dx, 0)
496
+ : origin.x + origin.width + dx;
497
+ width = Math.max(limits.minWidth, edge - origin.x);
498
+ }
499
+ if (dir.y < 0) {
500
+ const bottom = origin.y + origin.height;
501
+ y = snap ? snap(origin.y + dy, 1) : origin.y + dy;
502
+ y = Math.min(y, bottom - limits.minHeight);
503
+ height = bottom - y;
504
+ } else if (dir.y > 0) {
505
+ const edge = snap
506
+ ? snap(origin.y + origin.height + dy, 1)
507
+ : origin.y + origin.height + dy;
508
+ height = Math.max(limits.minHeight, edge - origin.y);
509
+ }
510
+ return { x, y, width, height };
511
+ }
512
+
513
+ // --- connections -----------------------------------------------------------
514
+
515
+ /**
516
+ * Can these two handles be joined? A source only meets a target in
517
+ * `'strict'` mode; `'loose'` asks only that the two ends are different
518
+ * nodes, for graphs whose handles are not typed.
519
+ */
520
+ export function canConnect(
521
+ from: { nodeId: string; type: 'source' | 'target' },
522
+ to: { nodeId: string; type: 'source' | 'target' },
523
+ mode: 'strict' | 'loose',
524
+ ): boolean {
525
+ if (from.nodeId === to.nodeId) return false;
526
+ if (mode === 'loose') return true;
527
+ return from.type !== to.type;
528
+ }
529
+
530
+ /** Orient a finished gesture into a `Connection`: whichever end is the
531
+ * source becomes `source`, whichever way round the user dragged. */
532
+ export function orientConnection(
533
+ from: { nodeId: string; handleId: string | null; type: 'source' | 'target' },
534
+ to: { nodeId: string; handleId: string | null; type: 'source' | 'target' },
535
+ ): Connection {
536
+ const forward = from.type !== 'target';
537
+ const s = forward ? from : to;
538
+ const t = forward ? to : from;
539
+ return {
540
+ source: s.nodeId,
541
+ sourceHandle: s.handleId,
542
+ target: t.nodeId,
543
+ targetHandle: t.handleId,
544
+ };
545
+ }
546
+
547
+ // --- colours ---------------------------------------------------------------
548
+
549
+ /**
550
+ * `[r, g, b, a]`, 0-1, unassociated. ntk's parser is reached through
551
+ * react-x11's re-export rather than a second `ntk` dependency, and read off
552
+ * the namespace rather than declared through `declare module` — an
553
+ * augmentation would be emitted into this package's own `.d.ts` and then
554
+ * seen twice by a program holding both `src/` and `dist/`. `src/calendar/`
555
+ * has the same three paragraphs for the same reason.
556
+ *
557
+ * Only `lightness` needs it now: the `tint` that used to sit beside it is
558
+ * `react-x11/style`'s, and every surface here imports it from there.
559
+ */
560
+ type StraightColor = [number, number, number, number];
561
+
562
+ const cssColorStraight = (
563
+ ntk as unknown as {
564
+ cssColorStraight?: (color: string) => StraightColor | null;
565
+ }
566
+ ).cssColorStraight;
567
+
568
+ /** Perceived lightness, 0-1, or null for a colour that would not parse. Only
569
+ * used to pick between two hard-coded fallbacks, never to compute one. */
570
+ export function lightness(color: string | undefined): number | null {
571
+ if (!color) return null;
572
+ const c = cssColorStraight?.(color);
573
+ if (!c) return null;
574
+ return 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];
575
+ }
576
+
577
+ const LIGHT_PALETTE: FlowPalette = {
578
+ background: '#f4f5f7',
579
+ grid: '#d3d7de',
580
+ text: '#1c2024',
581
+ dim: '#697280',
582
+ nodeBackground: '#ffffff',
583
+ nodeBorder: '#c6cad2',
584
+ accent: '#2f6feb',
585
+ edge: '#8b93a1',
586
+ edgeSelected: '#2f6feb',
587
+ handle: '#8b93a1',
588
+ surface: '#ffffff',
589
+ surfaceBorder: '#c6cad2',
590
+ selection: 'rgba(47, 111, 235, 0.14)',
591
+ };
592
+
593
+ const DARK_PALETTE: FlowPalette = {
594
+ background: '#1a1c20',
595
+ grid: '#2e3238',
596
+ text: '#e6e8ec',
597
+ dim: '#9aa1ad',
598
+ nodeBackground: '#23262c',
599
+ nodeBorder: '#3a3f47',
600
+ accent: '#5b8cff',
601
+ edge: '#6d7482',
602
+ edgeSelected: '#5b8cff',
603
+ handle: '#8891a0',
604
+ surface: '#23262c',
605
+ surfaceBorder: '#3a3f47',
606
+ selection: 'rgba(91, 140, 255, 0.18)',
607
+ };
608
+
609
+ function themeString(
610
+ theme: Record<string, unknown> | null,
611
+ token: string,
612
+ ): string | undefined {
613
+ const v = theme?.[token];
614
+ return typeof v === 'string' ? v : undefined;
615
+ }
616
+
617
+ /**
618
+ * The pane's colours: the desktop palette where it has an opinion, a
619
+ * hard-coded scheme where it does not, and the app's `palette` prop over
620
+ * both.
621
+ *
622
+ * Every token is taken by its own name. A node is `surface` and the pane is
623
+ * `background` — "the ground" and "what is raised off it", which is exactly
624
+ * the distinction core's palette draws, and the reason a card on a dark
625
+ * desktop is a card you can see.
626
+ */
627
+ export function resolvePalette(
628
+ theme: Record<string, unknown> | null,
629
+ overrides?: Partial<FlowPalette>,
630
+ ): FlowPalette {
631
+ const base =
632
+ (lightness(themeString(theme, 'background')) ?? 1) < 0.5
633
+ ? DARK_PALETTE
634
+ : LIGHT_PALETTE;
635
+ const accent = themeString(theme, 'accent') ?? base.accent;
636
+ // `textMuted`, not `dim`: core renamed it (react-x11#290) and a stale read
637
+ // here would not fail — it would fall through to the hard-coded scheme and
638
+ // quietly stop following the desktop.
639
+ const muted = themeString(theme, 'textMuted');
640
+ const surface = themeString(theme, 'surface');
641
+ const border = themeString(theme, 'border');
642
+ const palette: FlowPalette = {
643
+ background: themeString(theme, 'background') ?? base.background,
644
+ grid: border ?? base.grid,
645
+ text: themeString(theme, 'text') ?? base.text,
646
+ dim: muted ?? base.dim,
647
+ nodeBackground: surface ?? base.nodeBackground,
648
+ nodeBorder: border ?? base.nodeBorder,
649
+ accent,
650
+ edge: muted ?? base.edge,
651
+ edgeSelected: accent,
652
+ handle: muted ?? base.handle,
653
+ surface: surface ?? base.surface,
654
+ surfaceBorder: border ?? base.surfaceBorder,
655
+ selection: tint(accent, 0.16),
656
+ };
657
+ return overrides ? { ...palette, ...overrides } : palette;
658
+ }
659
+
660
+ // --- prop normalisation ----------------------------------------------------
661
+
662
+ export function normalizeBackground(
663
+ value: BackgroundOptions | string | boolean | undefined,
664
+ ): Required<Omit<BackgroundOptions, 'color'>> & { color?: string } {
665
+ const opts: BackgroundOptions =
666
+ typeof value === 'string'
667
+ ? { variant: value as BackgroundOptions['variant'] }
668
+ : value === false
669
+ ? { variant: 'none' }
670
+ : typeof value === 'object' && value !== null
671
+ ? value
672
+ : {};
673
+ return {
674
+ variant: opts.variant ?? 'dots',
675
+ gap: opts.gap ?? 20,
676
+ size: opts.size ?? 1,
677
+ color: opts.color,
678
+ };
679
+ }
680
+
681
+ export function normalizeMarker(
682
+ marker: MarkerType | EdgeMarker | null | undefined,
683
+ ): EdgeMarker | null {
684
+ if (marker == null) return null;
685
+ if (typeof marker === 'string') return { type: marker };
686
+ return marker;
687
+ }