@react-x11/components 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (788) hide show
  1. package/README.md +979 -21
  2. package/dist/ansi/cast.d.ts +48 -0
  3. package/dist/ansi/cast.d.ts.map +1 -0
  4. package/dist/ansi/cast.js +135 -0
  5. package/dist/ansi/cast.js.map +1 -0
  6. package/dist/ansi/index.d.ts +10 -0
  7. package/dist/ansi/index.d.ts.map +1 -0
  8. package/dist/ansi/index.js +27 -0
  9. package/dist/ansi/index.js.map +1 -0
  10. package/dist/ansi/palette.d.ts +79 -0
  11. package/dist/ansi/palette.d.ts.map +1 -0
  12. package/dist/ansi/palette.js +155 -0
  13. package/dist/ansi/palette.js.map +1 -0
  14. package/dist/ansi/parse.d.ts +114 -0
  15. package/dist/ansi/parse.d.ts.map +1 -0
  16. package/dist/ansi/parse.js +687 -0
  17. package/dist/ansi/parse.js.map +1 -0
  18. package/dist/ansi/sgr.d.ts +87 -0
  19. package/dist/ansi/sgr.d.ts.map +1 -0
  20. package/dist/ansi/sgr.js +302 -0
  21. package/dist/ansi/sgr.js.map +1 -0
  22. package/dist/ansi/utf8.d.ts +15 -0
  23. package/dist/ansi/utf8.d.ts.map +1 -0
  24. package/dist/ansi/utf8.js +82 -0
  25. package/dist/ansi/utf8.js.map +1 -0
  26. package/dist/calendar/Calendar.d.ts +136 -0
  27. package/dist/calendar/Calendar.d.ts.map +1 -0
  28. package/dist/calendar/Calendar.js +460 -0
  29. package/dist/calendar/Calendar.js.map +1 -0
  30. package/dist/calendar/DatePicker.d.ts +52 -0
  31. package/dist/calendar/DatePicker.d.ts.map +1 -0
  32. package/dist/calendar/DatePicker.js +257 -0
  33. package/dist/calendar/DatePicker.js.map +1 -0
  34. package/dist/calendar/dates.d.ts +90 -0
  35. package/dist/calendar/dates.d.ts.map +1 -0
  36. package/dist/calendar/dates.js +236 -0
  37. package/dist/calendar/dates.js.map +1 -0
  38. package/dist/calendar/index.d.ts +8 -0
  39. package/dist/calendar/index.d.ts.map +1 -0
  40. package/dist/calendar/index.js +15 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/charts/components.d.ts +141 -0
  43. package/dist/charts/components.d.ts.map +1 -0
  44. package/dist/charts/components.js +580 -0
  45. package/dist/charts/components.js.map +1 -0
  46. package/dist/charts/data.d.ts +198 -0
  47. package/dist/charts/data.d.ts.map +1 -0
  48. package/dist/charts/data.js +616 -0
  49. package/dist/charts/data.js.map +1 -0
  50. package/dist/charts/hx.d.ts +21 -0
  51. package/dist/charts/hx.d.ts.map +1 -0
  52. package/dist/charts/hx.js +15 -0
  53. package/dist/charts/hx.js.map +1 -0
  54. package/dist/charts/index.d.ts +27 -0
  55. package/dist/charts/index.d.ts.map +1 -0
  56. package/dist/charts/index.js +38 -0
  57. package/dist/charts/index.js.map +1 -0
  58. package/dist/charts/node.d.ts +96 -0
  59. package/dist/charts/node.d.ts.map +1 -0
  60. package/dist/charts/node.js +720 -0
  61. package/dist/charts/node.js.map +1 -0
  62. package/dist/charts/render.d.ts +153 -0
  63. package/dist/charts/render.d.ts.map +1 -0
  64. package/dist/charts/render.js +762 -0
  65. package/dist/charts/render.js.map +1 -0
  66. package/dist/charts/scale.d.ts +42 -0
  67. package/dist/charts/scale.d.ts.map +1 -0
  68. package/dist/charts/scale.js +173 -0
  69. package/dist/charts/scale.js.map +1 -0
  70. package/dist/charts/spec.d.ts +91 -0
  71. package/dist/charts/spec.d.ts.map +1 -0
  72. package/dist/charts/spec.js +33 -0
  73. package/dist/charts/spec.js.map +1 -0
  74. package/dist/charts/timers.d.ts +6 -0
  75. package/dist/charts/timers.d.ts.map +1 -0
  76. package/dist/charts/timers.js +14 -0
  77. package/dist/charts/timers.js.map +1 -0
  78. package/dist/code/hx.d.ts +24 -0
  79. package/dist/code/hx.d.ts.map +1 -0
  80. package/dist/code/hx.js +25 -0
  81. package/dist/code/hx.js.map +1 -0
  82. package/dist/code/index.d.ts +45 -0
  83. package/dist/code/index.d.ts.map +1 -0
  84. package/dist/code/index.js +93 -0
  85. package/dist/code/index.js.map +1 -0
  86. package/dist/code-editor/completion.d.ts +26 -0
  87. package/dist/code-editor/completion.d.ts.map +1 -0
  88. package/dist/code-editor/completion.js +129 -0
  89. package/dist/code-editor/completion.js.map +1 -0
  90. package/dist/code-editor/doc.d.ts +35 -0
  91. package/dist/code-editor/doc.d.ts.map +1 -0
  92. package/dist/code-editor/doc.js +162 -0
  93. package/dist/code-editor/doc.js.map +1 -0
  94. package/dist/code-editor/hx.d.ts +13 -0
  95. package/dist/code-editor/hx.d.ts.map +1 -0
  96. package/dist/code-editor/hx.js +10 -0
  97. package/dist/code-editor/hx.js.map +1 -0
  98. package/dist/code-editor/index.d.ts +88 -0
  99. package/dist/code-editor/index.d.ts.map +1 -0
  100. package/dist/code-editor/index.js +401 -0
  101. package/dist/code-editor/index.js.map +1 -0
  102. package/dist/code-editor/node.d.ts +343 -0
  103. package/dist/code-editor/node.d.ts.map +1 -0
  104. package/dist/code-editor/node.js +1521 -0
  105. package/dist/code-editor/node.js.map +1 -0
  106. package/dist/code-language/hljs.d.ts +47 -0
  107. package/dist/code-language/hljs.d.ts.map +1 -0
  108. package/dist/code-language/hljs.js +211 -0
  109. package/dist/code-language/hljs.js.map +1 -0
  110. package/dist/code-language/index.d.ts +22 -0
  111. package/dist/code-language/index.d.ts.map +1 -0
  112. package/dist/code-language/index.js +20 -0
  113. package/dist/code-language/index.js.map +1 -0
  114. package/dist/code-language/languages/glsl.d.ts +4 -0
  115. package/dist/code-language/languages/glsl.d.ts.map +1 -0
  116. package/dist/code-language/languages/glsl.js +99 -0
  117. package/dist/code-language/languages/glsl.js.map +1 -0
  118. package/dist/code-language/languages/javascript.d.ts +10 -0
  119. package/dist/code-language/languages/javascript.d.ts.map +1 -0
  120. package/dist/code-language/languages/javascript.js +360 -0
  121. package/dist/code-language/languages/javascript.js.map +1 -0
  122. package/dist/code-language/languages/json.d.ts +4 -0
  123. package/dist/code-language/languages/json.d.ts.map +1 -0
  124. package/dist/code-language/languages/json.js +68 -0
  125. package/dist/code-language/languages/json.js.map +1 -0
  126. package/dist/code-language/languages/shell.d.ts +4 -0
  127. package/dist/code-language/languages/shell.d.ts.map +1 -0
  128. package/dist/code-language/languages/shell.js +189 -0
  129. package/dist/code-language/languages/shell.js.map +1 -0
  130. package/dist/code-language/languages/sql.d.ts +11 -0
  131. package/dist/code-language/languages/sql.d.ts.map +1 -0
  132. package/dist/code-language/languages/sql.js +133 -0
  133. package/dist/code-language/languages/sql.js.map +1 -0
  134. package/dist/code-language/lezer.d.ts +24 -0
  135. package/dist/code-language/lezer.d.ts.map +1 -0
  136. package/dist/code-language/lezer.js +148 -0
  137. package/dist/code-language/lezer.js.map +1 -0
  138. package/dist/code-language/registry.d.ts +19 -0
  139. package/dist/code-language/registry.d.ts.map +1 -0
  140. package/dist/code-language/registry.js +56 -0
  141. package/dist/code-language/registry.js.map +1 -0
  142. package/dist/code-language/runs.d.ts +35 -0
  143. package/dist/code-language/runs.d.ts.map +1 -0
  144. package/dist/code-language/runs.js +88 -0
  145. package/dist/code-language/runs.js.map +1 -0
  146. package/dist/code-language/stream.d.ts +70 -0
  147. package/dist/code-language/stream.d.ts.map +1 -0
  148. package/dist/code-language/stream.js +243 -0
  149. package/dist/code-language/stream.js.map +1 -0
  150. package/dist/code-language/textmate.d.ts +27 -0
  151. package/dist/code-language/textmate.d.ts.map +1 -0
  152. package/dist/code-language/textmate.js +86 -0
  153. package/dist/code-language/textmate.js.map +1 -0
  154. package/dist/code-language/theme.d.ts +26 -0
  155. package/dist/code-language/theme.d.ts.map +1 -0
  156. package/dist/code-language/theme.js +108 -0
  157. package/dist/code-language/theme.js.map +1 -0
  158. package/dist/code-language/timers.d.ts +7 -0
  159. package/dist/code-language/timers.d.ts.map +1 -0
  160. package/dist/code-language/timers.js +22 -0
  161. package/dist/code-language/timers.js.map +1 -0
  162. package/dist/code-language/types.d.ts +173 -0
  163. package/dist/code-language/types.d.ts.map +1 -0
  164. package/dist/code-language/types.js +41 -0
  165. package/dist/code-language/types.js.map +1 -0
  166. package/dist/codeblock/index.d.ts +69 -0
  167. package/dist/codeblock/index.d.ts.map +1 -0
  168. package/dist/codeblock/index.js +85 -0
  169. package/dist/codeblock/index.js.map +1 -0
  170. package/dist/color-picker/ColorField.d.ts +39 -0
  171. package/dist/color-picker/ColorField.d.ts.map +1 -0
  172. package/dist/color-picker/ColorField.js +239 -0
  173. package/dist/color-picker/ColorField.js.map +1 -0
  174. package/dist/color-picker/ColorPicker.d.ts +109 -0
  175. package/dist/color-picker/ColorPicker.d.ts.map +1 -0
  176. package/dist/color-picker/ColorPicker.js +757 -0
  177. package/dist/color-picker/ColorPicker.js.map +1 -0
  178. package/dist/color-picker/color.d.ts +105 -0
  179. package/dist/color-picker/color.d.ts.map +1 -0
  180. package/dist/color-picker/color.js +313 -0
  181. package/dist/color-picker/color.js.map +1 -0
  182. package/dist/color-picker/index.d.ts +8 -0
  183. package/dist/color-picker/index.d.ts.map +1 -0
  184. package/dist/color-picker/index.js +19 -0
  185. package/dist/color-picker/index.js.map +1 -0
  186. package/dist/desktop-calendar/eds.d.ts +102 -0
  187. package/dist/desktop-calendar/eds.d.ts.map +1 -0
  188. package/dist/desktop-calendar/eds.js +356 -0
  189. package/dist/desktop-calendar/eds.js.map +1 -0
  190. package/dist/desktop-calendar/ical.d.ts +63 -0
  191. package/dist/desktop-calendar/ical.d.ts.map +1 -0
  192. package/dist/desktop-calendar/ical.js +57 -0
  193. package/dist/desktop-calendar/ical.js.map +1 -0
  194. package/dist/desktop-calendar/index.d.ts +72 -0
  195. package/dist/desktop-calendar/index.d.ts.map +1 -0
  196. package/dist/desktop-calendar/index.js +213 -0
  197. package/dist/desktop-calendar/index.js.map +1 -0
  198. package/dist/embed/client.d.ts +121 -0
  199. package/dist/embed/client.d.ts.map +1 -0
  200. package/dist/embed/client.js +203 -0
  201. package/dist/embed/client.js.map +1 -0
  202. package/dist/embed/host.d.ts +96 -0
  203. package/dist/embed/host.d.ts.map +1 -0
  204. package/dist/embed/host.js +266 -0
  205. package/dist/embed/host.js.map +1 -0
  206. package/dist/embed/index.d.ts +5 -0
  207. package/dist/embed/index.d.ts.map +1 -0
  208. package/dist/embed/index.js +13 -0
  209. package/dist/embed/index.js.map +1 -0
  210. package/dist/embed/timers.d.ts +6 -0
  211. package/dist/embed/timers.d.ts.map +1 -0
  212. package/dist/embed/timers.js +16 -0
  213. package/dist/embed/timers.js.map +1 -0
  214. package/dist/flow/draw.d.ts +45 -0
  215. package/dist/flow/draw.d.ts.map +1 -0
  216. package/dist/flow/draw.js +295 -0
  217. package/dist/flow/draw.js.map +1 -0
  218. package/dist/flow/index.d.ts +64 -0
  219. package/dist/flow/index.d.ts.map +1 -0
  220. package/dist/flow/index.js +306 -0
  221. package/dist/flow/index.js.map +1 -0
  222. package/dist/flow/model.d.ts +158 -0
  223. package/dist/flow/model.d.ts.map +1 -0
  224. package/dist/flow/model.js +566 -0
  225. package/dist/flow/model.js.map +1 -0
  226. package/dist/flow/node.d.ts +429 -0
  227. package/dist/flow/node.d.ts.map +1 -0
  228. package/dist/flow/node.js +3025 -0
  229. package/dist/flow/node.js.map +1 -0
  230. package/dist/flow/paths.d.ts +43 -0
  231. package/dist/flow/paths.d.ts.map +1 -0
  232. package/dist/flow/paths.js +327 -0
  233. package/dist/flow/paths.js.map +1 -0
  234. package/dist/flow/types.d.ts +561 -0
  235. package/dist/flow/types.d.ts.map +1 -0
  236. package/dist/flow/types.js +2 -0
  237. package/dist/flow/types.js.map +1 -0
  238. package/dist/formula/hx.d.ts +24 -0
  239. package/dist/formula/hx.d.ts.map +1 -0
  240. package/dist/formula/hx.js +25 -0
  241. package/dist/formula/hx.js.map +1 -0
  242. package/dist/formula/index.d.ts +74 -0
  243. package/dist/formula/index.d.ts.map +1 -0
  244. package/dist/formula/index.js +155 -0
  245. package/dist/formula/index.js.map +1 -0
  246. package/dist/formula/katex.d.ts +78 -0
  247. package/dist/formula/katex.d.ts.map +1 -0
  248. package/dist/formula/katex.js +130 -0
  249. package/dist/formula/katex.js.map +1 -0
  250. package/dist/formula/layout.d.ts +103 -0
  251. package/dist/formula/layout.d.ts.map +1 -0
  252. package/dist/formula/layout.js +716 -0
  253. package/dist/formula/layout.js.map +1 -0
  254. package/dist/formula/node.d.ts +50 -0
  255. package/dist/formula/node.d.ts.map +1 -0
  256. package/dist/formula/node.js +351 -0
  257. package/dist/formula/node.js.map +1 -0
  258. package/dist/html/controls.d.ts +48 -0
  259. package/dist/html/controls.d.ts.map +1 -0
  260. package/dist/html/controls.js +195 -0
  261. package/dist/html/controls.js.map +1 -0
  262. package/dist/html/css/cascade.d.ts +51 -0
  263. package/dist/html/css/cascade.d.ts.map +1 -0
  264. package/dist/html/css/cascade.js +552 -0
  265. package/dist/html/css/cascade.js.map +1 -0
  266. package/dist/html/css/parse.d.ts +74 -0
  267. package/dist/html/css/parse.d.ts.map +1 -0
  268. package/dist/html/css/parse.js +464 -0
  269. package/dist/html/css/parse.js.map +1 -0
  270. package/dist/html/css/style.d.ts +142 -0
  271. package/dist/html/css/style.d.ts.map +1 -0
  272. package/dist/html/css/style.js +1145 -0
  273. package/dist/html/css/style.js.map +1 -0
  274. package/dist/html/css/ua.d.ts +5 -0
  275. package/dist/html/css/ua.d.ts.map +1 -0
  276. package/dist/html/css/ua.js +171 -0
  277. package/dist/html/css/ua.js.map +1 -0
  278. package/dist/html/css/values.d.ts +78 -0
  279. package/dist/html/css/values.d.ts.map +1 -0
  280. package/dist/html/css/values.js +330 -0
  281. package/dist/html/css/values.js.map +1 -0
  282. package/dist/html/dom.d.ts +112 -0
  283. package/dist/html/dom.d.ts.map +1 -0
  284. package/dist/html/dom.js +374 -0
  285. package/dist/html/dom.js.map +1 -0
  286. package/dist/html/hx.d.ts +24 -0
  287. package/dist/html/hx.d.ts.map +1 -0
  288. package/dist/html/hx.js +29 -0
  289. package/dist/html/hx.js.map +1 -0
  290. package/dist/html/index.d.ts +137 -0
  291. package/dist/html/index.d.ts.map +1 -0
  292. package/dist/html/index.js +339 -0
  293. package/dist/html/index.js.map +1 -0
  294. package/dist/html/layout/block.d.ts +58 -0
  295. package/dist/html/layout/block.d.ts.map +1 -0
  296. package/dist/html/layout/block.js +724 -0
  297. package/dist/html/layout/block.js.map +1 -0
  298. package/dist/html/layout/boxes.d.ts +261 -0
  299. package/dist/html/layout/boxes.d.ts.map +1 -0
  300. package/dist/html/layout/boxes.js +725 -0
  301. package/dist/html/layout/boxes.js.map +1 -0
  302. package/dist/html/layout/flex.d.ts +16 -0
  303. package/dist/html/layout/flex.d.ts.map +1 -0
  304. package/dist/html/layout/flex.js +242 -0
  305. package/dist/html/layout/flex.js.map +1 -0
  306. package/dist/html/layout/floats.d.ts +50 -0
  307. package/dist/html/layout/floats.d.ts.map +1 -0
  308. package/dist/html/layout/floats.js +110 -0
  309. package/dist/html/layout/floats.js.map +1 -0
  310. package/dist/html/layout/inline.d.ts +44 -0
  311. package/dist/html/layout/inline.d.ts.map +1 -0
  312. package/dist/html/layout/inline.js +700 -0
  313. package/dist/html/layout/inline.js.map +1 -0
  314. package/dist/html/layout/table.d.ts +5 -0
  315. package/dist/html/layout/table.d.ts.map +1 -0
  316. package/dist/html/layout/table.js +340 -0
  317. package/dist/html/layout/table.js.map +1 -0
  318. package/dist/html/node.d.ts +149 -0
  319. package/dist/html/node.d.ts.map +1 -0
  320. package/dist/html/node.js +861 -0
  321. package/dist/html/node.js.map +1 -0
  322. package/dist/html/paint.d.ts +48 -0
  323. package/dist/html/paint.d.ts.map +1 -0
  324. package/dist/html/paint.js +495 -0
  325. package/dist/html/paint.js.map +1 -0
  326. package/dist/html/resources.d.ts +48 -0
  327. package/dist/html/resources.d.ts.map +1 -0
  328. package/dist/html/resources.js +156 -0
  329. package/dist/html/resources.js.map +1 -0
  330. package/dist/index.d.ts +48 -0
  331. package/dist/index.d.ts.map +1 -0
  332. package/dist/index.js +92 -0
  333. package/dist/index.js.map +1 -0
  334. package/dist/internal/heights.d.ts +88 -0
  335. package/dist/internal/heights.d.ts.map +1 -0
  336. package/dist/internal/heights.js +203 -0
  337. package/dist/internal/heights.js.map +1 -0
  338. package/dist/internal/hx.d.ts +24 -0
  339. package/dist/internal/hx.d.ts.map +1 -0
  340. package/dist/internal/hx.js +27 -0
  341. package/dist/internal/hx.js.map +1 -0
  342. package/dist/internal/scroll.d.ts +62 -0
  343. package/dist/internal/scroll.d.ts.map +1 -0
  344. package/dist/internal/scroll.js +224 -0
  345. package/dist/internal/scroll.js.map +1 -0
  346. package/dist/internal/text.d.ts +6 -0
  347. package/dist/internal/text.d.ts.map +1 -0
  348. package/dist/internal/text.js +44 -0
  349. package/dist/internal/text.js.map +1 -0
  350. package/dist/internal/timers.d.ts +8 -0
  351. package/dist/internal/timers.d.ts.map +1 -0
  352. package/dist/internal/timers.js +22 -0
  353. package/dist/internal/timers.js.map +1 -0
  354. package/dist/internal/widget.d.ts +40 -0
  355. package/dist/internal/widget.d.ts.map +1 -0
  356. package/dist/internal/widget.js +44 -0
  357. package/dist/internal/widget.js.map +1 -0
  358. package/dist/markdown/ast.d.ts +126 -0
  359. package/dist/markdown/ast.d.ts.map +1 -0
  360. package/dist/markdown/ast.js +8 -0
  361. package/dist/markdown/ast.js.map +1 -0
  362. package/dist/markdown/hx.d.ts +24 -0
  363. package/dist/markdown/hx.d.ts.map +1 -0
  364. package/dist/markdown/hx.js +25 -0
  365. package/dist/markdown/hx.js.map +1 -0
  366. package/dist/markdown/index.d.ts +90 -0
  367. package/dist/markdown/index.d.ts.map +1 -0
  368. package/dist/markdown/index.js +413 -0
  369. package/dist/markdown/index.js.map +1 -0
  370. package/dist/markdown/parse.d.ts +8 -0
  371. package/dist/markdown/parse.d.ts.map +1 -0
  372. package/dist/markdown/parse.js +911 -0
  373. package/dist/markdown/parse.js.map +1 -0
  374. package/dist/markdown/spans.d.ts +20 -0
  375. package/dist/markdown/spans.d.ts.map +1 -0
  376. package/dist/markdown/spans.js +96 -0
  377. package/dist/markdown/spans.js.map +1 -0
  378. package/dist/media-player/backends.d.ts +64 -0
  379. package/dist/media-player/backends.d.ts.map +1 -0
  380. package/dist/media-player/backends.js +110 -0
  381. package/dist/media-player/backends.js.map +1 -0
  382. package/dist/media-player/control.d.ts +40 -0
  383. package/dist/media-player/control.d.ts.map +1 -0
  384. package/dist/media-player/control.js +44 -0
  385. package/dist/media-player/control.js.map +1 -0
  386. package/dist/media-player/hx.d.ts +24 -0
  387. package/dist/media-player/hx.d.ts.map +1 -0
  388. package/dist/media-player/hx.js +25 -0
  389. package/dist/media-player/hx.js.map +1 -0
  390. package/dist/media-player/index.d.ts +107 -0
  391. package/dist/media-player/index.d.ts.map +1 -0
  392. package/dist/media-player/index.js +219 -0
  393. package/dist/media-player/index.js.map +1 -0
  394. package/dist/media-player/mpv.d.ts +4 -0
  395. package/dist/media-player/mpv.d.ts.map +1 -0
  396. package/dist/media-player/mpv.js +120 -0
  397. package/dist/media-player/mpv.js.map +1 -0
  398. package/dist/media-player/vlc.d.ts +8 -0
  399. package/dist/media-player/vlc.d.ts.map +1 -0
  400. package/dist/media-player/vlc.js +83 -0
  401. package/dist/media-player/vlc.js.map +1 -0
  402. package/dist/richtext/index.d.ts +19 -0
  403. package/dist/richtext/index.d.ts.map +1 -0
  404. package/dist/richtext/index.js +4 -0
  405. package/dist/richtext/index.js.map +1 -0
  406. package/dist/richtext/links.d.ts +12 -0
  407. package/dist/richtext/links.d.ts.map +1 -0
  408. package/dist/richtext/links.js +64 -0
  409. package/dist/richtext/links.js.map +1 -0
  410. package/dist/richtext/menu.d.ts +11 -0
  411. package/dist/richtext/menu.d.ts.map +1 -0
  412. package/dist/richtext/menu.js +43 -0
  413. package/dist/richtext/menu.js.map +1 -0
  414. package/dist/richtext/node.d.ts +151 -0
  415. package/dist/richtext/node.d.ts.map +1 -0
  416. package/dist/richtext/node.js +255 -0
  417. package/dist/richtext/node.js.map +1 -0
  418. package/dist/richtext/runs.d.ts +92 -0
  419. package/dist/richtext/runs.d.ts.map +1 -0
  420. package/dist/richtext/runs.js +158 -0
  421. package/dist/richtext/runs.js.map +1 -0
  422. package/dist/table/hx.d.ts +24 -0
  423. package/dist/table/hx.d.ts.map +1 -0
  424. package/dist/table/hx.js +25 -0
  425. package/dist/table/hx.js.map +1 -0
  426. package/dist/table/index.d.ts +169 -0
  427. package/dist/table/index.d.ts.map +1 -0
  428. package/dist/table/index.js +890 -0
  429. package/dist/table/index.js.map +1 -0
  430. package/dist/table/rows.d.ts +136 -0
  431. package/dist/table/rows.d.ts.map +1 -0
  432. package/dist/table/rows.js +146 -0
  433. package/dist/table/rows.js.map +1 -0
  434. package/dist/terminal/backends.d.ts +105 -0
  435. package/dist/terminal/backends.d.ts.map +1 -0
  436. package/dist/terminal/backends.js +185 -0
  437. package/dist/terminal/backends.js.map +1 -0
  438. package/dist/terminal/hx.d.ts +24 -0
  439. package/dist/terminal/hx.d.ts.map +1 -0
  440. package/dist/terminal/hx.js +25 -0
  441. package/dist/terminal/hx.js.map +1 -0
  442. package/dist/terminal/index.d.ts +160 -0
  443. package/dist/terminal/index.d.ts.map +1 -0
  444. package/dist/terminal/index.js +344 -0
  445. package/dist/terminal/index.js.map +1 -0
  446. package/dist/terminal/title.d.ts +24 -0
  447. package/dist/terminal/title.d.ts.map +1 -0
  448. package/dist/terminal/title.js +129 -0
  449. package/dist/terminal/title.js.map +1 -0
  450. package/dist/terminal/vt/colors.d.ts +63 -0
  451. package/dist/terminal/vt/colors.d.ts.map +1 -0
  452. package/dist/terminal/vt/colors.js +203 -0
  453. package/dist/terminal/vt/colors.js.map +1 -0
  454. package/dist/terminal/vt/diff.d.ts +117 -0
  455. package/dist/terminal/vt/diff.d.ts.map +1 -0
  456. package/dist/terminal/vt/diff.js +358 -0
  457. package/dist/terminal/vt/diff.js.map +1 -0
  458. package/dist/terminal/vt/fonts.d.ts +92 -0
  459. package/dist/terminal/vt/fonts.d.ts.map +1 -0
  460. package/dist/terminal/vt/fonts.js +178 -0
  461. package/dist/terminal/vt/fonts.js.map +1 -0
  462. package/dist/terminal/vt/index.d.ts +78 -0
  463. package/dist/terminal/vt/index.d.ts.map +1 -0
  464. package/dist/terminal/vt/index.js +312 -0
  465. package/dist/terminal/vt/index.js.map +1 -0
  466. package/dist/terminal/vt/keys.d.ts +74 -0
  467. package/dist/terminal/vt/keys.d.ts.map +1 -0
  468. package/dist/terminal/vt/keys.js +309 -0
  469. package/dist/terminal/vt/keys.js.map +1 -0
  470. package/dist/terminal/vt/mouse.d.ts +44 -0
  471. package/dist/terminal/vt/mouse.d.ts.map +1 -0
  472. package/dist/terminal/vt/mouse.js +106 -0
  473. package/dist/terminal/vt/mouse.js.map +1 -0
  474. package/dist/terminal/vt/node.d.ts +246 -0
  475. package/dist/terminal/vt/node.d.ts.map +1 -0
  476. package/dist/terminal/vt/node.js +1068 -0
  477. package/dist/terminal/vt/node.js.map +1 -0
  478. package/dist/terminal/vt/pty.d.ts +81 -0
  479. package/dist/terminal/vt/pty.d.ts.map +1 -0
  480. package/dist/terminal/vt/pty.js +201 -0
  481. package/dist/terminal/vt/pty.js.map +1 -0
  482. package/dist/terminal/vt/renderer.d.ts +179 -0
  483. package/dist/terminal/vt/renderer.d.ts.map +1 -0
  484. package/dist/terminal/vt/renderer.js +357 -0
  485. package/dist/terminal/vt/renderer.js.map +1 -0
  486. package/dist/terminal/vt/timers.d.ts +6 -0
  487. package/dist/terminal/vt/timers.d.ts.map +1 -0
  488. package/dist/terminal/vt/timers.js +16 -0
  489. package/dist/terminal/vt/timers.js.map +1 -0
  490. package/dist/terminal/vt/xterm.d.ts +142 -0
  491. package/dist/terminal/vt/xterm.d.ts.map +1 -0
  492. package/dist/terminal/vt/xterm.js +32 -0
  493. package/dist/terminal/vt/xterm.js.map +1 -0
  494. package/dist/terminal-output/hx.d.ts +24 -0
  495. package/dist/terminal-output/hx.d.ts.map +1 -0
  496. package/dist/terminal-output/hx.js +25 -0
  497. package/dist/terminal-output/hx.js.map +1 -0
  498. package/dist/terminal-output/index.d.ts +92 -0
  499. package/dist/terminal-output/index.d.ts.map +1 -0
  500. package/dist/terminal-output/index.js +179 -0
  501. package/dist/terminal-output/index.js.map +1 -0
  502. package/dist/terminal-output/runs.d.ts +27 -0
  503. package/dist/terminal-output/runs.d.ts.map +1 -0
  504. package/dist/terminal-output/runs.js +66 -0
  505. package/dist/terminal-output/runs.js.map +1 -0
  506. package/dist/three/canvas.d.ts +46 -0
  507. package/dist/three/canvas.d.ts.map +1 -0
  508. package/dist/three/canvas.js +305 -0
  509. package/dist/three/canvas.js.map +1 -0
  510. package/dist/three/events.d.ts +64 -0
  511. package/dist/three/events.d.ts.map +1 -0
  512. package/dist/three/events.js +146 -0
  513. package/dist/three/events.js.map +1 -0
  514. package/dist/three/geometries.d.ts +89 -0
  515. package/dist/three/geometries.d.ts.map +1 -0
  516. package/dist/three/geometries.js +345 -0
  517. package/dist/three/geometries.js.map +1 -0
  518. package/dist/three/globals.d.ts +7 -0
  519. package/dist/three/globals.d.ts.map +1 -0
  520. package/dist/three/globals.js +20 -0
  521. package/dist/three/globals.js.map +1 -0
  522. package/dist/three/hx.d.ts +9 -0
  523. package/dist/three/hx.d.ts.map +1 -0
  524. package/dist/three/hx.js +10 -0
  525. package/dist/three/hx.js.map +1 -0
  526. package/dist/three/index.d.ts +22 -0
  527. package/dist/three/index.d.ts.map +1 -0
  528. package/dist/three/index.js +24 -0
  529. package/dist/three/index.js.map +1 -0
  530. package/dist/three/jsx-dev-runtime.d.ts +19 -0
  531. package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
  532. package/dist/three/jsx-dev-runtime.js +2 -0
  533. package/dist/three/jsx-dev-runtime.js.map +1 -0
  534. package/dist/three/jsx-runtime.d.ts +19 -0
  535. package/dist/three/jsx-runtime.d.ts.map +1 -0
  536. package/dist/three/jsx-runtime.js +2 -0
  537. package/dist/three/jsx-runtime.js.map +1 -0
  538. package/dist/three/jsx.d.ts +198 -0
  539. package/dist/three/jsx.d.ts.map +1 -0
  540. package/dist/three/jsx.js +2 -0
  541. package/dist/three/jsx.js.map +1 -0
  542. package/dist/three/materials.d.ts +125 -0
  543. package/dist/three/materials.d.ts.map +1 -0
  544. package/dist/three/materials.js +229 -0
  545. package/dist/three/materials.js.map +1 -0
  546. package/dist/three/math.d.ts +146 -0
  547. package/dist/three/math.d.ts.map +1 -0
  548. package/dist/three/math.js +464 -0
  549. package/dist/three/math.js.map +1 -0
  550. package/dist/three/objects.d.ts +185 -0
  551. package/dist/three/objects.d.ts.map +1 -0
  552. package/dist/three/objects.js +309 -0
  553. package/dist/three/objects.js.map +1 -0
  554. package/dist/three/passes.d.ts +54 -0
  555. package/dist/three/passes.d.ts.map +1 -0
  556. package/dist/three/passes.js +78 -0
  557. package/dist/three/passes.js.map +1 -0
  558. package/dist/three/postprocess.d.ts +85 -0
  559. package/dist/three/postprocess.d.ts.map +1 -0
  560. package/dist/three/postprocess.js +503 -0
  561. package/dist/three/postprocess.js.map +1 -0
  562. package/dist/three/raycast.d.ts +24 -0
  563. package/dist/three/raycast.d.ts.map +1 -0
  564. package/dist/three/raycast.js +138 -0
  565. package/dist/three/raycast.js.map +1 -0
  566. package/dist/three/reconciler.d.ts +48 -0
  567. package/dist/three/reconciler.d.ts.map +1 -0
  568. package/dist/three/reconciler.js +416 -0
  569. package/dist/three/reconciler.js.map +1 -0
  570. package/dist/three/renderer-direct.d.ts +102 -0
  571. package/dist/three/renderer-direct.d.ts.map +1 -0
  572. package/dist/three/renderer-direct.js +782 -0
  573. package/dist/three/renderer-direct.js.map +1 -0
  574. package/dist/three/renderer-indirect.d.ts +68 -0
  575. package/dist/three/renderer-indirect.d.ts.map +1 -0
  576. package/dist/three/renderer-indirect.js +438 -0
  577. package/dist/three/renderer-indirect.js.map +1 -0
  578. package/dist/three/store.d.ts +81 -0
  579. package/dist/three/store.d.ts.map +1 -0
  580. package/dist/three/store.js +110 -0
  581. package/dist/three/store.js.map +1 -0
  582. package/dist/timeline/hx.d.ts +18 -0
  583. package/dist/timeline/hx.d.ts.map +1 -0
  584. package/dist/timeline/hx.js +10 -0
  585. package/dist/timeline/hx.js.map +1 -0
  586. package/dist/timeline/index.d.ts +152 -0
  587. package/dist/timeline/index.d.ts.map +1 -0
  588. package/dist/timeline/index.js +383 -0
  589. package/dist/timeline/index.js.map +1 -0
  590. package/dist/tray-host/hx.d.ts +24 -0
  591. package/dist/tray-host/hx.d.ts.map +1 -0
  592. package/dist/tray-host/hx.js +25 -0
  593. package/dist/tray-host/hx.js.map +1 -0
  594. package/dist/tray-host/index.d.ts +110 -0
  595. package/dist/tray-host/index.d.ts.map +1 -0
  596. package/dist/tray-host/index.js +191 -0
  597. package/dist/tray-host/index.js.map +1 -0
  598. package/dist/tray-host/manager.d.ts +137 -0
  599. package/dist/tray-host/manager.d.ts.map +1 -0
  600. package/dist/tray-host/manager.js +462 -0
  601. package/dist/tray-host/manager.js.map +1 -0
  602. package/dist/tray-host/notify.d.ts +22 -0
  603. package/dist/tray-host/notify.d.ts.map +1 -0
  604. package/dist/tray-host/notify.js +74 -0
  605. package/dist/tray-host/notify.js.map +1 -0
  606. package/dist/tray-host/protocol.d.ts +106 -0
  607. package/dist/tray-host/protocol.d.ts.map +1 -0
  608. package/dist/tray-host/protocol.js +191 -0
  609. package/dist/tray-host/protocol.js.map +1 -0
  610. package/dist/tree/hx.d.ts +24 -0
  611. package/dist/tree/hx.d.ts.map +1 -0
  612. package/dist/tree/hx.js +25 -0
  613. package/dist/tree/hx.js.map +1 -0
  614. package/dist/tree/index.d.ts +221 -0
  615. package/dist/tree/index.d.ts.map +1 -0
  616. package/dist/tree/index.js +751 -0
  617. package/dist/tree/index.js.map +1 -0
  618. package/dist/tree/internal.d.ts +18 -0
  619. package/dist/tree/internal.d.ts.map +1 -0
  620. package/dist/tree/internal.js +66 -0
  621. package/dist/tree/internal.js.map +1 -0
  622. package/dist/tree/rows.d.ts +177 -0
  623. package/dist/tree/rows.d.ts.map +1 -0
  624. package/dist/tree/rows.js +179 -0
  625. package/dist/tree/rows.js.map +1 -0
  626. package/package.json +166 -12
  627. package/src/ansi/cast.ts +159 -0
  628. package/src/ansi/index.ts +53 -0
  629. package/src/ansi/palette.ts +226 -0
  630. package/src/ansi/parse.ts +780 -0
  631. package/src/ansi/sgr.ts +380 -0
  632. package/src/ansi/utf8.ts +84 -0
  633. package/src/calendar/Calendar.ts +744 -0
  634. package/src/calendar/DatePicker.ts +368 -0
  635. package/src/calendar/dates.ts +307 -0
  636. package/src/calendar/index.ts +51 -0
  637. package/src/charts/components.ts +864 -0
  638. package/src/charts/data.ts +776 -0
  639. package/src/charts/hx.ts +39 -0
  640. package/src/charts/index.ts +99 -0
  641. package/src/charts/node.ts +932 -0
  642. package/src/charts/render.ts +982 -0
  643. package/src/charts/scale.ts +214 -0
  644. package/src/charts/spec.ts +122 -0
  645. package/src/charts/timers.ts +24 -0
  646. package/src/code/hx.ts +51 -0
  647. package/src/code/index.ts +174 -0
  648. package/src/code-editor/completion.ts +161 -0
  649. package/src/code-editor/doc.ts +198 -0
  650. package/src/code-editor/hx.ts +26 -0
  651. package/src/code-editor/index.ts +615 -0
  652. package/src/code-editor/node.ts +1926 -0
  653. package/src/code-language/hljs.ts +302 -0
  654. package/src/code-language/index.ts +51 -0
  655. package/src/code-language/languages/glsl.ts +120 -0
  656. package/src/code-language/languages/javascript.ts +419 -0
  657. package/src/code-language/languages/json.ts +72 -0
  658. package/src/code-language/languages/shell.ts +221 -0
  659. package/src/code-language/languages/sql.ts +165 -0
  660. package/src/code-language/lezer.ts +190 -0
  661. package/src/code-language/registry.ts +66 -0
  662. package/src/code-language/runs.ts +128 -0
  663. package/src/code-language/stream.ts +306 -0
  664. package/src/code-language/textmate.ts +134 -0
  665. package/src/code-language/theme.ts +124 -0
  666. package/src/code-language/timers.ts +36 -0
  667. package/src/code-language/types.ts +252 -0
  668. package/src/codeblock/index.ts +146 -0
  669. package/src/color-picker/ColorField.ts +333 -0
  670. package/src/color-picker/ColorPicker.ts +1069 -0
  671. package/src/color-picker/color.ts +399 -0
  672. package/src/color-picker/index.ts +50 -0
  673. package/src/desktop-calendar/eds.ts +484 -0
  674. package/src/desktop-calendar/ical.ts +119 -0
  675. package/src/desktop-calendar/index.ts +287 -0
  676. package/src/embed/client.ts +311 -0
  677. package/src/embed/host.ts +432 -0
  678. package/src/embed/index.ts +33 -0
  679. package/src/embed/timers.ts +32 -0
  680. package/src/flow/draw.ts +418 -0
  681. package/src/flow/index.ts +473 -0
  682. package/src/flow/model.ts +687 -0
  683. package/src/flow/node.ts +3694 -0
  684. package/src/flow/paths.ts +403 -0
  685. package/src/flow/types.ts +634 -0
  686. package/src/formula/hx.ts +51 -0
  687. package/src/formula/index.ts +243 -0
  688. package/src/formula/katex.ts +209 -0
  689. package/src/formula/layout.ts +876 -0
  690. package/src/formula/node.ts +467 -0
  691. package/src/html/controls.ts +244 -0
  692. package/src/html/css/cascade.ts +606 -0
  693. package/src/html/css/parse.ts +500 -0
  694. package/src/html/css/style.ts +1371 -0
  695. package/src/html/css/ua.ts +174 -0
  696. package/src/html/css/values.ts +358 -0
  697. package/src/html/dom.ts +410 -0
  698. package/src/html/hx.ts +55 -0
  699. package/src/html/index.ts +545 -0
  700. package/src/html/layout/block.ts +876 -0
  701. package/src/html/layout/boxes.ts +981 -0
  702. package/src/html/layout/flex.ts +297 -0
  703. package/src/html/layout/floats.ts +125 -0
  704. package/src/html/layout/inline.ts +870 -0
  705. package/src/html/layout/table.ts +380 -0
  706. package/src/html/node.ts +967 -0
  707. package/src/html/paint.ts +605 -0
  708. package/src/html/resources.ts +214 -0
  709. package/src/index.ts +638 -0
  710. package/src/internal/heights.ts +222 -0
  711. package/src/internal/hx.ts +53 -0
  712. package/src/internal/scroll.ts +288 -0
  713. package/src/internal/text.ts +44 -0
  714. package/src/internal/timers.ts +44 -0
  715. package/src/internal/widget.ts +92 -0
  716. package/src/markdown/ast.ts +163 -0
  717. package/src/markdown/hx.ts +51 -0
  718. package/src/markdown/index.ts +686 -0
  719. package/src/markdown/parse.ts +1037 -0
  720. package/src/markdown/spans.ts +143 -0
  721. package/src/media-player/backends.ts +155 -0
  722. package/src/media-player/control.ts +70 -0
  723. package/src/media-player/hx.ts +51 -0
  724. package/src/media-player/index.ts +378 -0
  725. package/src/media-player/mpv.ts +146 -0
  726. package/src/media-player/vlc.ts +97 -0
  727. package/src/richtext/index.ts +42 -0
  728. package/src/richtext/links.ts +78 -0
  729. package/src/richtext/menu.ts +49 -0
  730. package/src/richtext/node.ts +406 -0
  731. package/src/richtext/runs.ts +253 -0
  732. package/src/table/hx.ts +51 -0
  733. package/src/table/index.ts +1270 -0
  734. package/src/table/rows.ts +275 -0
  735. package/src/terminal/backends.ts +242 -0
  736. package/src/terminal/hx.ts +51 -0
  737. package/src/terminal/index.ts +574 -0
  738. package/src/terminal/title.ts +172 -0
  739. package/src/terminal/vt/colors.ts +247 -0
  740. package/src/terminal/vt/diff.ts +467 -0
  741. package/src/terminal/vt/fonts.ts +233 -0
  742. package/src/terminal/vt/index.ts +443 -0
  743. package/src/terminal/vt/keys.ts +369 -0
  744. package/src/terminal/vt/mouse.ts +144 -0
  745. package/src/terminal/vt/node.ts +1242 -0
  746. package/src/terminal/vt/pty.ts +334 -0
  747. package/src/terminal/vt/renderer.ts +555 -0
  748. package/src/terminal/vt/timers.ts +31 -0
  749. package/src/terminal/vt/xterm.ts +193 -0
  750. package/src/terminal-output/hx.ts +51 -0
  751. package/src/terminal-output/index.ts +340 -0
  752. package/src/terminal-output/runs.ts +79 -0
  753. package/src/three/canvas.ts +451 -0
  754. package/src/three/events.ts +197 -0
  755. package/src/three/geometries.ts +429 -0
  756. package/src/three/globals.ts +34 -0
  757. package/src/three/hx.ts +22 -0
  758. package/src/three/index.ts +98 -0
  759. package/src/three/jsx-dev-runtime.ts +27 -0
  760. package/src/three/jsx-runtime.ts +38 -0
  761. package/src/three/jsx.ts +275 -0
  762. package/src/three/materials.ts +270 -0
  763. package/src/three/math.ts +585 -0
  764. package/src/three/objects.ts +397 -0
  765. package/src/three/passes.ts +90 -0
  766. package/src/three/postprocess.ts +677 -0
  767. package/src/three/raycast.ts +189 -0
  768. package/src/three/react-reconciler.d.ts +50 -0
  769. package/src/three/reconciler.ts +624 -0
  770. package/src/three/renderer-direct.ts +1055 -0
  771. package/src/three/renderer-indirect.ts +570 -0
  772. package/src/three/store.ts +207 -0
  773. package/src/timeline/hx.ts +31 -0
  774. package/src/timeline/index.ts +603 -0
  775. package/src/tray-host/hx.ts +51 -0
  776. package/src/tray-host/index.ts +331 -0
  777. package/src/tray-host/manager.ts +639 -0
  778. package/src/tray-host/notify.ts +102 -0
  779. package/src/tray-host/protocol.ts +235 -0
  780. package/src/tree/hx.ts +51 -0
  781. package/src/tree/index.ts +1127 -0
  782. package/src/tree/internal.ts +87 -0
  783. package/src/tree/rows.ts +334 -0
  784. package/src/index.d.ts +0 -2
  785. package/src/index.js +0 -9
  786. package/src/sparkline/index.d.ts +0 -29
  787. package/src/sparkline/index.js +0 -50
  788. package/src/sparkline/node.js +0 -72
@@ -0,0 +1,462 @@
1
+ // The manager selection, and everything that arrives because of it.
2
+ //
3
+ // A tray host is three things on the wire: it owns `_NET_SYSTEM_TRAY_S<n>`,
4
+ // it publishes two properties saying how it wants to be drawn into, and it
5
+ // answers `_NET_SYSTEM_TRAY_OPCODE` messages addressed to the window that
6
+ // owns that selection. None of it is React-shaped, so none of it is in the
7
+ // component — `./index.ts` owns the icon list as state and this owns the
8
+ // protocol that changes it.
9
+ //
10
+ // ### Why this listens on `X.on('event')` rather than `onClientMessage`
11
+ //
12
+ // Core has an element-scoped ClientMessage seam now, and it is the right
13
+ // thing for an application — but it is a **`<window>`** prop, and the window
14
+ // the tray opcodes are addressed to is not an element. It cannot be: the
15
+ // selection has to be held on something that outlives the render, so this
16
+ // creates its own window with `X.CreateWindow` rather than rendering one. A
17
+ // `<TrayHost>` that unmounted while its panel stayed up would otherwise take
18
+ // the selection with it and leave the desktop with no tray.
19
+ //
20
+ // That is exactly the case core's own `src/clientmessage.js` carves out:
21
+ // filtering `X.on('event')` "is the right shape *there*, because a settings
22
+ // daemon's window is nobody's element". A tray's manager window is the same
23
+ // kind of window.
24
+ //
25
+ // The timestamp is the other half, and that one core does answer:
26
+ // `serverTime()` is a current server timestamp for an operation no user
27
+ // action caused, and its own documentation names a tray taking its manager
28
+ // selection as the case. ICCCM 2.1 forbids `CurrentTime` here.
29
+ import { serverTime } from 'react-x11';
30
+ import { BalloonAssembler, MANAGER_ATOM, MESSAGE_DATA_ATOM, OPCODE_ATOM, ORIENTATION_ATOM, SYSTEM_TRAY_BEGIN_MESSAGE, SYSTEM_TRAY_CANCEL_MESSAGE, SYSTEM_TRAY_REQUEST_DOCK, VISUAL_ATOM, argbVisualOf, orientationValue, selectionNameFor, } from './protocol.js';
31
+ // Core event codes and masks, written out for the same reason
32
+ // `src/xsettings.js` writes them out: they are protocol constants, and
33
+ // naming them here is cheaper than reaching into node-x11 for a number that
34
+ // has not changed since 1987.
35
+ const SELECTION_CLEAR = 29;
36
+ const CLIENT_MESSAGE = 33;
37
+ const STRUCTURE_NOTIFY_MASK = 131072; // x11.eventMask.StructureNotify
38
+ const INPUT_ONLY = 2;
39
+ /** Predefined atoms — no InternAtom round trip for these. */
40
+ const XA_CARDINAL = 6;
41
+ const XA_VISUALID = 32;
42
+ /**
43
+ * The tray host's half of the system tray protocol.
44
+ *
45
+ * ```ts
46
+ * const manager = new TrayManager(app, 0);
47
+ * manager.handlers = { onIcons: setIcons };
48
+ * await manager.start({ orientation: 'horizontal', hostWindowId: id });
49
+ * // …
50
+ * manager.stop();
51
+ * ```
52
+ *
53
+ * Public because a panel that draws its own tray — one that does not want
54
+ * `<TrayHost>`'s layout — should not have to reimplement selection
55
+ * ownership, and because it is what the tests drive. Same reason
56
+ * `ProcessHost` is exported from `../embed/`.
57
+ */
58
+ export class TrayManager {
59
+ #app;
60
+ #screen;
61
+ #X;
62
+ #root;
63
+ #selectionAtom = 0;
64
+ #opcodeAtom = 0;
65
+ #orientationAtom = 0;
66
+ #visualAtom = 0;
67
+ #messageDataAtom = 0;
68
+ #managerAtom = 0;
69
+ /** The window that owns the selection, and the address the opcodes are
70
+ * sent to. Created here rather than rendered, because a selection held on
71
+ * a node that can unmount is a tray that silently stops being one. */
72
+ #window = 0;
73
+ /** The timestamp the selection was taken with; ICCCM 2.3 wants it back
74
+ * when the selection is given up. */
75
+ #ownedAt = 0;
76
+ #icons = [];
77
+ #balloons = new BalloonAssembler();
78
+ #status = 'starting';
79
+ #conflict = null;
80
+ #orientation = 'horizontal';
81
+ #visual = 0;
82
+ /**
83
+ * The current run, or `null` between `stop()` and the next `start()`.
84
+ *
85
+ * A token rather than a pair of booleans for the reason `ForeignNode._start`
86
+ * uses one: taking the selection is a chain of round trips, and a run that
87
+ * was stopped part-way through must not have its stale continuation report
88
+ * success or leave a window behind. It is also what makes the manager
89
+ * genuinely restartable — React remounts an effect on the same instance in
90
+ * development, and a one-shot manager would come back dead.
91
+ */
92
+ #run = null;
93
+ #listener = null;
94
+ /** Assign, do not construct with: the component replaces these every
95
+ * render so an inline handler is not a reason to restart anything. */
96
+ handlers = {};
97
+ constructor(app, screen = 0) {
98
+ this.#app = app;
99
+ this.#screen = screen;
100
+ this.#X = app?.X ?? null;
101
+ this.#root = app?.display?.screen?.[screen]?.root ?? 0;
102
+ }
103
+ get status() {
104
+ return this.#status;
105
+ }
106
+ get conflict() {
107
+ return this.#conflict;
108
+ }
109
+ /** The manager selection window, once there is one. */
110
+ get windowId() {
111
+ return this.#window || 0;
112
+ }
113
+ get icons() {
114
+ return this.#icons;
115
+ }
116
+ /**
117
+ * Take the selection, if nobody else has it.
118
+ *
119
+ * The order is the spec's: publish the properties, *then* take the
120
+ * selection, *then* broadcast `MANAGER`. A client that starts docking on
121
+ * the broadcast reads the properties immediately afterwards, so they have
122
+ * to be there before the announcement rather than after it.
123
+ */
124
+ async start(options) {
125
+ if (this.#run)
126
+ return;
127
+ const run = {};
128
+ this.#run = run;
129
+ /** Still the run that started this line? */
130
+ const live = () => this.#run === run;
131
+ this.#orientation = options.orientation;
132
+ this.#setStatus('starting', null);
133
+ const X = this.#X;
134
+ // No raw protocol on this connection — a headless mock. Not an error to
135
+ // report: there is simply no display to be the tray of.
136
+ if (!X || typeof X.SetSelectionOwner !== 'function' || !this.#root) {
137
+ this.#setStatus('unavailable', null);
138
+ return;
139
+ }
140
+ try {
141
+ await this.#internAtoms(X);
142
+ if (!live())
143
+ return;
144
+ const existing = await this.#selectionOwner(X);
145
+ if (!live())
146
+ return;
147
+ if (existing) {
148
+ // A second panel on one display is a configuration mistake, not an
149
+ // exception. It says so and embeds nothing.
150
+ this.#setStatus('conflict', { owner: existing, screen: this.#screen });
151
+ return;
152
+ }
153
+ this.#window = X.AllocID();
154
+ // InputOnly, never mapped, 1x1 off-screen: this window exists to be an
155
+ // address and to hold two properties, which InputOnly windows do. It
156
+ // selects nothing — a ClientMessage reaches the client that created the
157
+ // window whatever its event mask is, which is how the opcodes arrive.
158
+ X.CreateWindow(this.#window, this.#root, -1, -1, 1, 1, 0, 0, INPUT_ONLY, 0, {
159
+ eventMask: 0,
160
+ });
161
+ this.#visual = await this.#resolveVisual(X, options.hostWindowId);
162
+ // Stopped mid-flight: the window above is ours and nothing else will
163
+ // drop it, because `stop()` ran before there was one to drop.
164
+ if (!live()) {
165
+ this.#destroyWindow();
166
+ return;
167
+ }
168
+ this.#writeOrientation();
169
+ this.#writeVisual();
170
+ // ICCCM 2.1: never `CurrentTime`. Nothing the user did caused this, so
171
+ // it is a fresh server timestamp rather than `lastInputTime()`.
172
+ const time = await serverTime(this.#app);
173
+ if (!live()) {
174
+ this.#destroyWindow();
175
+ return;
176
+ }
177
+ X.SetSelectionOwner(this.#window, this.#selectionAtom, time);
178
+ this.#ownedAt = time;
179
+ // Ask rather than assume. Two panels starting together both saw an
180
+ // unowned selection above, and only one of them has it now.
181
+ const owner = await this.#selectionOwner(X);
182
+ if (!live()) {
183
+ X.SetSelectionOwner(0, this.#selectionAtom, time);
184
+ this.#destroyWindow();
185
+ return;
186
+ }
187
+ if (owner !== this.#window) {
188
+ this.#setStatus('conflict', { owner, screen: this.#screen });
189
+ this.#destroyWindow();
190
+ return;
191
+ }
192
+ this.#listen(X);
193
+ this.#broadcastManager(X, time);
194
+ this.#setStatus('owned', null);
195
+ }
196
+ catch (err) {
197
+ this.#fail(err);
198
+ }
199
+ }
200
+ /**
201
+ * Give the selection back and drop the manager window.
202
+ *
203
+ * The icons are *not* reparented here: each one is a `<foreign>`, and
204
+ * handing a client back untouched on unmount is that element's promise.
205
+ * All this does is stop being the tray.
206
+ */
207
+ stop() {
208
+ if (!this.#run)
209
+ return;
210
+ this.#run = null;
211
+ const X = this.#X;
212
+ this.#unlisten();
213
+ this.#balloons.clear();
214
+ this.#replaceIcons([]);
215
+ if (X && this.#window) {
216
+ try {
217
+ // ICCCM 2.3: relinquish with the timestamp it was acquired at.
218
+ X.SetSelectionOwner(0, this.#selectionAtom, this.#ownedAt);
219
+ }
220
+ catch {
221
+ // the connection is going away, which releases it anyway
222
+ }
223
+ }
224
+ this.#destroyWindow();
225
+ this.#setStatus('released', null);
226
+ }
227
+ /** Republish `_NET_SYSTEM_TRAY_ORIENTATION`. Cheap and idempotent. */
228
+ setOrientation(orientation) {
229
+ if (orientation === this.#orientation)
230
+ return;
231
+ this.#orientation = orientation;
232
+ this.#writeOrientation();
233
+ }
234
+ /**
235
+ * The icon's client went away — `<foreign onClientGone>`, which is the
236
+ * ordinary case here rather than an error: tray icons come and go with the
237
+ * applications that own them.
238
+ */
239
+ undock(id) {
240
+ const icon = this.#icons.find((entry) => entry.id === id);
241
+ if (!icon)
242
+ return;
243
+ // A new array, never a splice: the component holds this as state, and
244
+ // React compares identities — mutating in place removes the icon from
245
+ // the list and leaves it on screen.
246
+ this.#icons = this.#icons.filter((entry) => entry !== icon);
247
+ this.#balloons.forget(id);
248
+ this.#emitIcons();
249
+ this.#safely(() => this.handlers.onUndock?.(icon));
250
+ }
251
+ // --- the wire ------------------------------------------------------
252
+ #listen(X) {
253
+ const listener = (ev) => {
254
+ if (!this.#run)
255
+ return;
256
+ try {
257
+ this.#onEvent(ev);
258
+ }
259
+ catch (err) {
260
+ this.#fail(err);
261
+ }
262
+ };
263
+ this.#listener = listener;
264
+ X.on('event', listener);
265
+ }
266
+ #unlisten() {
267
+ const listener = this.#listener;
268
+ this.#listener = null;
269
+ if (listener)
270
+ this.#X?.removeListener?.('event', listener);
271
+ }
272
+ #onEvent(ev) {
273
+ if (ev.type === SELECTION_CLEAR) {
274
+ // Another tray took over. Letting the icons go is the whole job here:
275
+ // a panel that keeps drawing dead icons after losing the selection is
276
+ // the failure users report as "my tray is empty".
277
+ if (ev.selection !== this.#selectionAtom)
278
+ return;
279
+ if (this.#window && ev.owner !== this.#window)
280
+ return;
281
+ this.#unlisten();
282
+ this.#balloons.clear();
283
+ this.#replaceIcons([]);
284
+ this.#destroyWindow();
285
+ this.#setStatus('released', null);
286
+ return;
287
+ }
288
+ if (ev.type !== CLIENT_MESSAGE)
289
+ return;
290
+ if (ev.message_type === this.#opcodeAtom) {
291
+ // A dock request names the manager window; a balloon message names the
292
+ // icon it is about, and both are *sent to* the manager window. So the
293
+ // event's window field is only ever one of those two.
294
+ const from = ev.wid ?? 0;
295
+ if (from !== this.#window && !this.#hasIcon(from))
296
+ return;
297
+ this.#onOpcode(from, ev.data ?? []);
298
+ return;
299
+ }
300
+ if (ev.message_type === this.#messageDataAtom && ev.format === 8) {
301
+ const from = ev.wid ?? 0;
302
+ if (!this.#hasIcon(from))
303
+ return;
304
+ const message = this.#balloons.data(from, ev.data ?? []);
305
+ if (message)
306
+ this.#safely(() => this.handlers.onMessage?.(message));
307
+ }
308
+ }
309
+ #onOpcode(from, data) {
310
+ const opcode = data[1];
311
+ if (opcode === SYSTEM_TRAY_REQUEST_DOCK) {
312
+ this.#dock(data[2] ?? 0);
313
+ return;
314
+ }
315
+ if (opcode === SYSTEM_TRAY_BEGIN_MESSAGE) {
316
+ if (!this.#hasIcon(from))
317
+ return;
318
+ const message = this.#balloons.begin(from, {
319
+ timeout: data[2] ?? 0,
320
+ length: data[3] ?? 0,
321
+ id: data[4] ?? 0,
322
+ });
323
+ if (message)
324
+ this.#safely(() => this.handlers.onMessage?.(message));
325
+ return;
326
+ }
327
+ if (opcode === SYSTEM_TRAY_CANCEL_MESSAGE) {
328
+ if (!this.#hasIcon(from))
329
+ return;
330
+ const id = data[2] ?? 0;
331
+ if (this.#balloons.cancel(from, id)) {
332
+ this.#safely(() => this.handlers.onCancelMessage?.({ windowId: from, id }));
333
+ }
334
+ }
335
+ }
336
+ #dock(id) {
337
+ if (!id || this.#status !== 'owned' || this.#hasIcon(id))
338
+ return;
339
+ const icon = { id };
340
+ this.#icons = [...this.#icons, icon];
341
+ this.#emitIcons();
342
+ this.#safely(() => this.handlers.onDock?.(icon));
343
+ }
344
+ #hasIcon(id) {
345
+ return this.#icons.some((icon) => icon.id === id);
346
+ }
347
+ #replaceIcons(next) {
348
+ if (this.#icons.length === 0 && next.length === 0)
349
+ return;
350
+ const gone = this.#icons;
351
+ this.#icons = next;
352
+ this.#emitIcons();
353
+ for (const icon of gone) {
354
+ if (!next.includes(icon))
355
+ this.#safely(() => this.handlers.onUndock?.(icon));
356
+ }
357
+ }
358
+ #emitIcons() {
359
+ const icons = this.#icons;
360
+ this.#safely(() => this.handlers.onIcons?.(icons));
361
+ }
362
+ /**
363
+ * ICCCM 2.8's `MANAGER` broadcast: clients that were waiting for a tray
364
+ * start docking on this, which is the only reason an application launched
365
+ * before the panel ever gets an icon.
366
+ */
367
+ #broadcastManager(X, time) {
368
+ X.SendEvent(this.#root, 0, STRUCTURE_NOTIFY_MASK, {
369
+ name: 'ClientMessage',
370
+ format: 32,
371
+ wid: this.#root,
372
+ message_type: this.#managerAtom,
373
+ data: [time, this.#selectionAtom, this.#window, 0, 0],
374
+ });
375
+ }
376
+ #writeOrientation() {
377
+ const X = this.#X;
378
+ if (!X || !this.#window)
379
+ return;
380
+ X.ChangeProperty(0, this.#window, this.#orientationAtom, XA_CARDINAL, 32, [
381
+ orientationValue(this.#orientation),
382
+ ]);
383
+ }
384
+ #writeVisual() {
385
+ const X = this.#X;
386
+ // Absent rather than zero when there is nothing honest to say: a client
387
+ // reads "is the property there" and a 0 visual id is not a visual.
388
+ if (!X || !this.#window || !this.#visual)
389
+ return;
390
+ X.ChangeProperty(0, this.#window, this.#visualAtom, XA_VISUALID, 32, [
391
+ this.#visual,
392
+ ]);
393
+ }
394
+ async #resolveVisual(X, hostWindowId) {
395
+ if (!hostWindowId)
396
+ return 0;
397
+ try {
398
+ const attrs = await new Promise((resolve, reject) => X.GetWindowAttributes(hostWindowId, (err, value) => err ? reject(err) : resolve(value)));
399
+ const screen = this.#app.display?.screen?.[this.#screen];
400
+ return argbVisualOf(screen, attrs?.visual ?? 0);
401
+ }
402
+ catch {
403
+ // The window went away, or the server would not say. No property, and
404
+ // the icons fall back to guessing a background — which always worked.
405
+ return 0;
406
+ }
407
+ }
408
+ #selectionOwner(X) {
409
+ return new Promise((resolve, reject) => X.GetSelectionOwner(this.#selectionAtom, (err, owner) => err ? reject(err) : resolve(owner >>> 0)));
410
+ }
411
+ async #internAtoms(X) {
412
+ const intern = (name) => new Promise((resolve, reject) => X.InternAtom(false, name, (err, atom) => err ? reject(err) : resolve(atom)));
413
+ const [selection, opcode, orientation, visual, messageData, manager] = await Promise.all([
414
+ intern(selectionNameFor(this.#screen)),
415
+ intern(OPCODE_ATOM),
416
+ intern(ORIENTATION_ATOM),
417
+ intern(VISUAL_ATOM),
418
+ intern(MESSAGE_DATA_ATOM),
419
+ intern(MANAGER_ATOM),
420
+ ]);
421
+ this.#selectionAtom = selection ?? 0;
422
+ this.#opcodeAtom = opcode ?? 0;
423
+ this.#orientationAtom = orientation ?? 0;
424
+ this.#visualAtom = visual ?? 0;
425
+ this.#messageDataAtom = messageData ?? 0;
426
+ this.#managerAtom = manager ?? 0;
427
+ }
428
+ #destroyWindow() {
429
+ const id = this.#window;
430
+ this.#window = 0;
431
+ if (!id)
432
+ return;
433
+ try {
434
+ this.#X?.DestroyWindow(id);
435
+ }
436
+ catch {
437
+ // the connection is closing; the server drops it with us
438
+ }
439
+ }
440
+ #setStatus(status, conflict) {
441
+ if (this.#status === status && this.#conflict === conflict)
442
+ return;
443
+ this.#status = status;
444
+ this.#conflict = conflict;
445
+ this.#safely(() => this.handlers.onStatus?.(status, conflict));
446
+ }
447
+ #fail(err) {
448
+ const wrapped = err instanceof Error ? err : new Error(String(err));
449
+ this.#safely(() => this.handlers.onError?.(wrapped));
450
+ }
451
+ /** One handler throwing must not take the X event loop with it — the same
452
+ * rule `xsettings.js` applies to its subscribers. */
453
+ #safely(fn) {
454
+ try {
455
+ fn();
456
+ }
457
+ catch {
458
+ /* a listener's problem, not the tray's */
459
+ }
460
+ }
461
+ }
462
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/tray-host/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { TrayMessage } from './protocol.js';
2
+ /**
3
+ * A lazily-acquired claim on the session bus, and the `Notify` call over it.
4
+ *
5
+ * Lazy on purpose: a panel that never receives a balloon message never dials
6
+ * the bus, and `sessionBus()` is shared, so the claim costs a reference
7
+ * rather than a connection.
8
+ */
9
+ export declare class BalloonNotifier {
10
+ #private;
11
+ /**
12
+ * Show `message`. Resolves false when there was nothing to show it with.
13
+ *
14
+ * The balloon's timeout passes straight through: both protocols measure it
15
+ * in milliseconds and both read 0 as "until the user dismisses it".
16
+ */
17
+ send(message: TrayMessage, appName?: string): Promise<boolean>;
18
+ /** Drop the claim. Never closes the connection — that is the app's call,
19
+ * and every other consumer is on the same socket. */
20
+ dispose(): Promise<void>;
21
+ }
22
+ //# sourceMappingURL=notify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/tray-host/notify.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAoBjD;;;;;;GAMG;AACH,qBAAa,eAAe;;IAqB1B;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,SAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB1E;IAED;0DACsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;CACF"}
@@ -0,0 +1,74 @@
1
+ // Balloon messages, forwarded to the desktop's notification service.
2
+ //
3
+ // `SYSTEM_TRAY_BEGIN_MESSAGE` is the pre-notification-daemon way an icon says
4
+ // something, and older applications still emit it. A host that ignores it
5
+ // leaves them silently unable to speak — so the default is to hand the text
6
+ // to whatever the desktop already uses for notifications, and `onMessage` is
7
+ // the seam for a panel that would rather draw its own bubble.
8
+ //
9
+ // **Nothing here opens a bus.** `sessionBus()` hands over react-x11's shared
10
+ // connection, so the tray, the app's exported service and its menu are one
11
+ // name on the bus rather than three. No bus, or no notification service, is
12
+ // an ordinary state of a healthy machine: the message is dropped, and the
13
+ // error says so for a caller that wants to know.
14
+ import { sessionBus } from 'react-x11';
15
+ const SERVICE = 'org.freedesktop.Notifications';
16
+ const PATH = '/org/freedesktop/Notifications';
17
+ /**
18
+ * A lazily-acquired claim on the session bus, and the `Notify` call over it.
19
+ *
20
+ * Lazy on purpose: a panel that never receives a balloon message never dials
21
+ * the bus, and `sessionBus()` is shared, so the claim costs a reference
22
+ * rather than a connection.
23
+ */
24
+ export class BalloonNotifier {
25
+ #ref = null;
26
+ #acquiring = null;
27
+ #disposed = false;
28
+ async #bus() {
29
+ if (this.#ref)
30
+ return this.#ref;
31
+ // Not cached as a failure: `sessionBus()` never caches one either, so a
32
+ // bus that appears later is found.
33
+ this.#acquiring ??= sessionBus().finally(() => {
34
+ this.#acquiring = null;
35
+ });
36
+ const ref = await this.#acquiring;
37
+ if (this.#disposed) {
38
+ void ref?.release();
39
+ return null;
40
+ }
41
+ this.#ref = ref;
42
+ return ref;
43
+ }
44
+ /**
45
+ * Show `message`. Resolves false when there was nothing to show it with.
46
+ *
47
+ * The balloon's timeout passes straight through: both protocols measure it
48
+ * in milliseconds and both read 0 as "until the user dismisses it".
49
+ */
50
+ async send(message, appName = 'System Tray') {
51
+ const ref = await this.#bus();
52
+ if (!ref || this.#disposed)
53
+ return false;
54
+ const iface = (await ref.bus
55
+ .getService(SERVICE)
56
+ .getInterface(PATH, SERVICE));
57
+ // A balloon is one string. The first line reads as a title everywhere a
58
+ // notification is drawn, so it is used as one rather than padding the
59
+ // summary with the application's name.
60
+ const [summary = '', ...rest] = message.text.split('\n');
61
+ await iface.Notify(appName, 0, '', summary, rest.join('\n'), [], [], message.timeout);
62
+ return true;
63
+ }
64
+ /** Drop the claim. Never closes the connection — that is the app's call,
65
+ * and every other consumer is on the same socket. */
66
+ async dispose() {
67
+ this.#disposed = true;
68
+ const ref = this.#ref;
69
+ this.#ref = null;
70
+ if (ref)
71
+ await ref.release();
72
+ }
73
+ }
74
+ //# sourceMappingURL=notify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/tray-host/notify.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,8DAA8D;AAC9D,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,iDAAiD;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAKvC,MAAM,OAAO,GAAG,+BAA+B,CAAC;AAChD,MAAM,IAAI,GAAG,gCAAgC,CAAC;AAiB9C;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IAC1B,IAAI,GAAkB,IAAI,CAAC;IAC3B,UAAU,GAAkC,IAAI,CAAC;IACjD,SAAS,GAAG,KAAK,CAAC;IAElB,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAChC,wEAAwE;QACxE,mCAAmC;QACnC,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,OAAoB,EAAE,OAAO,GAAG,aAAa;QACtD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACzC,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG;aACzB,UAAU,CAAC,OAAO,CAAC;aACnB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAuB,CAAC;QACtD,wEAAwE;QACxE,sEAAsE;QACtE,uCAAuC;QACvC,MAAM,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC,MAAM,CAChB,OAAO,EACP,CAAC,EACD,EAAE,EACF,OAAO,EACP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACf,EAAE,EACF,EAAE,EACF,OAAO,CAAC,OAAO,CAChB,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;0DACsD;IACtD,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,GAAG;YAAE,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;CACF"}