@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,606 @@
1
+ // The cascade: which declarations reach an element, in what order, and what
2
+ // they compute to.
3
+ //
4
+ // Matching is `css-select`'s. That is the one part of a CSS engine where a
5
+ // hand-written version is reliably both slower and wronger — `css-select`
6
+ // compiles a selector to a closure once and the closure is what runs per
7
+ // element, and it has the combinator, `:nth-child(an+b)` and attribute-
8
+ // operator cases right — so it is imported, through an adapter that answers
9
+ // `:hover` from this renderer's own pointer state.
10
+ //
11
+ // What is *not* delegated is the choice of which selectors to try. Testing
12
+ // every rule against every element is O(rules × elements) and is what makes
13
+ // a naive engine quadratic on a real page; rules are indexed here by their
14
+ // rightmost simple selector, so an element tries the handful of rules that
15
+ // could possibly match it. That is the same index a browser keeps, and it is
16
+ // the difference between a 3 ms and a 300 ms first paint on a document with
17
+ // a framework stylesheet attached.
18
+ import { compile } from 'css-select';
19
+ import * as DomUtils from 'domutils';
20
+ import { Element as DomElement, isTag } from 'domhandler';
21
+ import type { Element } from 'domhandler';
22
+
23
+ import { attr, tagOf } from '../dom.js';
24
+ import { mediaMatches } from './parse.js';
25
+ import type { Declaration, StyleRule, Stylesheet } from './parse.js';
26
+ import { applyDeclaration, blockify, inherit, initialStyle } from './style.js';
27
+ import type { ComputedStyle, RootLook } from './style.js';
28
+ import { parseDeclarations } from './parse.js';
29
+ import type { UnitContext } from './values.js';
30
+
31
+ /** Where a declaration came from. Higher wins before specificity is asked. */
32
+ const enum Origin {
33
+ UserAgent = 0,
34
+ Presentation = 1,
35
+ Author = 2,
36
+ Inline = 3,
37
+ AuthorImportant = 4,
38
+ InlineImportant = 5,
39
+ }
40
+
41
+ interface Candidate {
42
+ origin: Origin;
43
+ specificity: number;
44
+ order: number;
45
+ declarations: Declaration[];
46
+ /** Only this declaration is taken from `declarations`, for the `!important`
47
+ * passes where a rule contributes some of its declarations at one level
48
+ * and the rest at another. `-1` takes them all. */
49
+ only: number;
50
+ }
51
+
52
+ /** What `css-select` is handed. Its `Adapter` is generic over the node type
53
+ * and this only ever passes domhandler's, so the shape is spelled out
54
+ * rather than threaded through two type parameters at every call. */
55
+ type CssSelectAdapter = typeof DomUtils & {
56
+ isTag: typeof isTag;
57
+ isHovered(el: Element): boolean;
58
+ isActive(el: Element): boolean;
59
+ isVisited(el: Element): boolean;
60
+ };
61
+
62
+ /** A compiled matcher, kept beside the rule it came from. */
63
+ interface IndexedRule {
64
+ rule: StyleRule;
65
+ match: ((el: Element) => boolean) | null;
66
+ /** Set once compilation has been attempted, so a selector `css-select`
67
+ * refuses is not recompiled once per element for the rest of the pass. */
68
+ compiled: boolean;
69
+ }
70
+
71
+ /**
72
+ * Rules bucketed by the key of their rightmost compound selector. An element
73
+ * only ever tries `id`, its classes, its tag and the universal bucket.
74
+ */
75
+ class RuleIndex {
76
+ readonly byId = new Map<string, IndexedRule[]>();
77
+ readonly byClass = new Map<string, IndexedRule[]>();
78
+ readonly byTag = new Map<string, IndexedRule[]>();
79
+ readonly universal: IndexedRule[] = [];
80
+ /** Whether any rule in here is pointer-sensitive, so the renderer knows
81
+ * whether a pointer move can change the cascade at all. */
82
+ hoverSensitive = false;
83
+
84
+ add(rule: StyleRule): void {
85
+ const indexed: IndexedRule = { rule, match: null, compiled: false };
86
+ if (rule.selector.includes(':hover') || rule.selector.includes(':active')) {
87
+ this.hoverSensitive = true;
88
+ }
89
+ const key = rightmostKey(rule.selector);
90
+ const bucket =
91
+ key.kind === 'id'
92
+ ? mapBucket(this.byId, key.name)
93
+ : key.kind === 'class'
94
+ ? mapBucket(this.byClass, key.name)
95
+ : key.kind === 'tag'
96
+ ? mapBucket(this.byTag, key.name)
97
+ : this.universal;
98
+ bucket.push(indexed);
99
+ }
100
+ }
101
+
102
+ function mapBucket(
103
+ map: Map<string, IndexedRule[]>,
104
+ key: string,
105
+ ): IndexedRule[] {
106
+ let bucket = map.get(key);
107
+ if (!bucket) {
108
+ bucket = [];
109
+ map.set(key, bucket);
110
+ }
111
+ return bucket;
112
+ }
113
+
114
+ /**
115
+ * The rightmost compound selector's most selective key. `#id` beats `.class`
116
+ * beats a tag name; a selector ending in `*`, a pseudo-class or an attribute
117
+ * test alone lands in the universal bucket, which is the correct fallback
118
+ * rather than a failure.
119
+ */
120
+ function rightmostKey(selector: string): {
121
+ kind: 'id' | 'class' | 'tag' | 'any';
122
+ name: string;
123
+ } {
124
+ // Scan to the last top-level combinator; everything after it is the
125
+ // compound this rule finally has to match.
126
+ let start = 0;
127
+ let depth = 0;
128
+ let quote = '';
129
+ for (let i = 0; i < selector.length; i += 1) {
130
+ const c = selector[i];
131
+ if (quote) {
132
+ if (c === quote && selector[i - 1] !== '\\') quote = '';
133
+ continue;
134
+ }
135
+ if (c === '"' || c === "'") quote = c;
136
+ else if (c === '(' || c === '[') depth += 1;
137
+ else if (c === ')' || c === ']') depth = Math.max(0, depth - 1);
138
+ else if (
139
+ depth === 0 &&
140
+ (c === ' ' || c === '>' || c === '+' || c === '~')
141
+ ) {
142
+ start = i + 1;
143
+ }
144
+ }
145
+ const compound = selector.slice(start);
146
+ let id: string | null = null;
147
+ let cls: string | null = null;
148
+ let tag: string | null = null;
149
+ let i = 0;
150
+ while (i < compound.length) {
151
+ const c = compound[i];
152
+ if (c === '#') {
153
+ const end = identEnd(compound, i + 1);
154
+ if (!id) id = compound.slice(i + 1, end);
155
+ i = end;
156
+ } else if (c === '.') {
157
+ const end = identEnd(compound, i + 1);
158
+ if (!cls) cls = compound.slice(i + 1, end);
159
+ i = end;
160
+ } else if (c === '[') {
161
+ i = balancedEnd(compound, i, '[', ']');
162
+ } else if (c === ':') {
163
+ const skip = compound[i + 1] === ':' ? 2 : 1;
164
+ const end = identEnd(compound, i + skip);
165
+ i = compound[end] === '(' ? balancedEnd(compound, end, '(', ')') : end;
166
+ } else if (/[a-zA-Z]/.test(c)) {
167
+ const end = identEnd(compound, i);
168
+ if (!tag) tag = compound.slice(i, end).toLowerCase();
169
+ i = end;
170
+ } else {
171
+ i += 1;
172
+ }
173
+ }
174
+ if (id) return { kind: 'id', name: id };
175
+ if (cls) return { kind: 'class', name: cls };
176
+ if (tag && tag !== '*') return { kind: 'tag', name: tag };
177
+ return { kind: 'any', name: '' };
178
+ }
179
+
180
+ function identEnd(text: string, from: number): number {
181
+ let i = from;
182
+ while (i < text.length && /[a-zA-Z0-9_\-\\]/.test(text[i])) i += 1;
183
+ return i;
184
+ }
185
+
186
+ function balancedEnd(
187
+ text: string,
188
+ from: number,
189
+ open: string,
190
+ close: string,
191
+ ): number {
192
+ let depth = 0;
193
+ for (let i = from; i < text.length; i += 1) {
194
+ if (text[i] === open) depth += 1;
195
+ else if (text[i] === close) {
196
+ depth -= 1;
197
+ if (depth === 0) return i + 1;
198
+ }
199
+ }
200
+ return text.length;
201
+ }
202
+
203
+ /** What the pointer is over, for `:hover`. A chain rather than one element,
204
+ * because `li:hover a` has to light up while the pointer is on the `li`. */
205
+ export interface PointerState {
206
+ hovered: ReadonlySet<Element>;
207
+ active: ReadonlySet<Element>;
208
+ }
209
+
210
+ const NO_POINTER: PointerState = { hovered: new Set(), active: new Set() };
211
+
212
+ /**
213
+ * A cascade over a fixed set of stylesheets. Rebuilt when the sheets change;
214
+ * re-run when the DOM, the viewport band or the pointer state does.
215
+ */
216
+ export class Cascade {
217
+ private _index = new RuleIndex();
218
+ private _adapter: CssSelectAdapter;
219
+ private _pointer: PointerState = NO_POINTER;
220
+ readonly initial: ComputedStyle;
221
+ readonly look: RootLook;
222
+ /** Viewport width the media queries were evaluated at. */
223
+ viewportWidth: number;
224
+ viewportHeight: number;
225
+ /** Every width at which some `@media` rule changes its mind. */
226
+ readonly breakpoints: number[];
227
+
228
+ constructor(
229
+ sheets: Stylesheet[],
230
+ look: RootLook,
231
+ viewportWidth: number,
232
+ viewportHeight: number,
233
+ ) {
234
+ this.look = look;
235
+ this.initial = initialStyle(look);
236
+ this.viewportWidth = viewportWidth;
237
+ this.viewportHeight = viewportHeight;
238
+ const breakpoints = new Set<number>();
239
+ for (const sheet of sheets) {
240
+ for (const rule of sheet.rules) this._index.add(rule);
241
+ for (const bp of sheet.breakpoints) breakpoints.add(bp);
242
+ }
243
+ this.breakpoints = [...breakpoints].sort((a, b) => a - b);
244
+ // css-select's default adapter is domutils; `isHovered` and `isActive`
245
+ // are its documented hooks for exactly this, so `:hover` costs an
246
+ // adapter field rather than a fork of the matcher.
247
+ // `{ ...DomUtils, isTag }` is css-select's own default adapter, spelled
248
+ // out because domutils 4 no longer carries `isTag` — it moved to
249
+ // domhandler — and because the three pointer hooks are the whole reason
250
+ // for building one at all.
251
+ this._adapter = {
252
+ ...DomUtils,
253
+ isTag,
254
+ isHovered: (el: Element) => this._pointer.hovered.has(el),
255
+ isActive: (el: Element) => this._pointer.active.has(el),
256
+ isVisited: () => false,
257
+ };
258
+ }
259
+
260
+ /** Whether a pointer move can change what this cascade produces. */
261
+ get hoverSensitive(): boolean {
262
+ return this._index.hoverSensitive;
263
+ }
264
+
265
+ setPointer(pointer: PointerState): void {
266
+ this._pointer = pointer;
267
+ }
268
+
269
+ /** Which media band a width falls in. Two widths in the same band produce
270
+ * identical styles, which is what lets a resize skip restyling. */
271
+ mediaBand(width: number): number {
272
+ let band = 0;
273
+ for (const bp of this.breakpoints) {
274
+ if (width >= bp) band += 1;
275
+ else break;
276
+ }
277
+ return band;
278
+ }
279
+
280
+ /**
281
+ * The computed style for one element, given its parent's. Called once per
282
+ * element per style pass, in document order — the box builder drives it,
283
+ * so there is no second traversal and no map of styles to allocate.
284
+ */
285
+ styleFor(
286
+ el: Element,
287
+ parentStyle: ComputedStyle,
288
+ inFlexContainer: boolean,
289
+ ): ComputedStyle {
290
+ const style = inherit(parentStyle, this.initial);
291
+ const candidates = this._candidates(el);
292
+
293
+ // The unit context has to be built twice: once with the parent's font
294
+ // size, so a `font-size: 1.2em` in the cascade resolves against the
295
+ // right em, and again after the font size is settled so every *other*
296
+ // em-relative length in the same rule resolves against this element's.
297
+ const ctxParent: UnitContext = {
298
+ em: parentStyle.fontSize,
299
+ rem: this.initial.fontSize,
300
+ vw: this.viewportWidth,
301
+ vh: this.viewportHeight,
302
+ };
303
+ for (const c of candidates) {
304
+ for (const d of pick(c)) {
305
+ if (d.prop === 'font-size' || d.prop === 'font') {
306
+ applyDeclaration(style, parentStyle, d.prop, d.value, ctxParent);
307
+ }
308
+ }
309
+ }
310
+ const ctx: UnitContext = { ...ctxParent, em: style.fontSize };
311
+ for (const c of candidates) {
312
+ for (const d of pick(c)) {
313
+ if (d.prop === 'font-size') continue;
314
+ applyDeclaration(style, parentStyle, d.prop, d.value, ctx);
315
+ }
316
+ }
317
+
318
+ blockify(style, inFlexContainer);
319
+ return style;
320
+ }
321
+
322
+ /**
323
+ * The root's style — nothing above it to inherit from.
324
+ *
325
+ * When the document has no `<body>` of its own, which is every fragment
326
+ * and so the common case for this component, the root box takes the style
327
+ * a `<body>` would have had: the UA sheet's margin and font, and any
328
+ * author `body { … }` rule. Without it a fragment renders hard against the
329
+ * left edge while the same markup inside `<html><body>` does not, which
330
+ * reads as a bug in the renderer rather than as a missing element.
331
+ */
332
+ rootStyle(hasBody: boolean): ComputedStyle {
333
+ const style = { ...this.initial };
334
+ style.display = 'block';
335
+ if (hasBody) return style;
336
+ const synthetic = new DomElement('body', {}, []);
337
+ const bodyStyle = this.styleFor(synthetic, style, false);
338
+ // Only the box the body would have drawn is taken, not its layout role:
339
+ // the root is still the initial containing block.
340
+ bodyStyle.display = 'block';
341
+ bodyStyle.position = 'static';
342
+ bodyStyle.float = 'none';
343
+ return bodyStyle;
344
+ }
345
+
346
+ private _candidates(el: Element): Candidate[] {
347
+ const out: Candidate[] = [];
348
+ const width = this.viewportWidth;
349
+
350
+ const consider = (bucket: IndexedRule[] | undefined): void => {
351
+ if (!bucket) return;
352
+ for (const indexed of bucket) {
353
+ const rule = indexed.rule;
354
+ if (!mediaMatches(rule.media, width)) continue;
355
+ if (!indexed.compiled) {
356
+ indexed.compiled = true;
357
+ try {
358
+ indexed.match = compile(rule.selector, {
359
+ adapter: this._adapter,
360
+ xmlMode: false,
361
+ } as unknown as Parameters<typeof compile>[1]) as unknown as (
362
+ node: Element,
363
+ ) => boolean;
364
+ } catch {
365
+ // A selector this matcher does not know (`::-moz-…`, a CSS4 form
366
+ // it has not learnt) drops out of the cascade rather than out of
367
+ // the render.
368
+ indexed.match = null;
369
+ }
370
+ }
371
+ if (!indexed.match || !indexed.match(el)) continue;
372
+ const origin = rule.order < 0 ? Origin.UserAgent : Origin.Author;
373
+ pushRule(out, rule, origin);
374
+ }
375
+ };
376
+
377
+ const id = attr(el, 'id');
378
+ if (id) consider(this._index.byId.get(id));
379
+ const className = attr(el, 'class');
380
+ if (className) {
381
+ for (const name of className.split(/\s+/)) {
382
+ if (name) consider(this._index.byClass.get(name));
383
+ }
384
+ }
385
+ consider(this._index.byTag.get(tagOf(el)));
386
+ consider(this._index.universal);
387
+
388
+ const hints = presentationHints(el);
389
+ if (hints.length) {
390
+ out.push({
391
+ origin: Origin.Presentation,
392
+ specificity: 0,
393
+ order: 0,
394
+ declarations: hints,
395
+ only: -1,
396
+ });
397
+ }
398
+
399
+ const inline = attr(el, 'style');
400
+ if (inline) {
401
+ const declarations = parseDeclarations(inline);
402
+ const normal = declarations.filter((d) => !d.important);
403
+ const important = declarations.filter((d) => d.important);
404
+ if (normal.length) {
405
+ out.push({
406
+ origin: Origin.Inline,
407
+ specificity: 0,
408
+ order: 0,
409
+ declarations: normal,
410
+ only: -1,
411
+ });
412
+ }
413
+ if (important.length) {
414
+ out.push({
415
+ origin: Origin.InlineImportant,
416
+ specificity: 0,
417
+ order: 0,
418
+ declarations: important,
419
+ only: -1,
420
+ });
421
+ }
422
+ }
423
+
424
+ out.sort(byCascade);
425
+ return out;
426
+ }
427
+ }
428
+
429
+ function pick(c: Candidate): Declaration[] {
430
+ return c.only < 0 ? c.declarations : [c.declarations[c.only]];
431
+ }
432
+
433
+ function pushRule(out: Candidate[], rule: StyleRule, origin: Origin): void {
434
+ let hasImportant = false;
435
+ for (const d of rule.declarations) {
436
+ if (d.important) {
437
+ hasImportant = true;
438
+ break;
439
+ }
440
+ }
441
+ if (!hasImportant) {
442
+ out.push({
443
+ origin,
444
+ specificity: rule.specificity,
445
+ order: rule.order,
446
+ declarations: rule.declarations,
447
+ only: -1,
448
+ });
449
+ return;
450
+ }
451
+ // A rule with a mix contributes at two levels, so `!important` on one
452
+ // declaration does not drag the rest of the block up with it.
453
+ for (let i = 0; i < rule.declarations.length; i += 1) {
454
+ const d = rule.declarations[i];
455
+ out.push({
456
+ origin: d.important
457
+ ? origin === Origin.UserAgent
458
+ ? Origin.UserAgent
459
+ : Origin.AuthorImportant
460
+ : origin,
461
+ specificity: rule.specificity,
462
+ order: rule.order,
463
+ declarations: rule.declarations,
464
+ only: i,
465
+ });
466
+ }
467
+ }
468
+
469
+ function byCascade(a: Candidate, b: Candidate): number {
470
+ if (a.origin !== b.origin) return a.origin - b.origin;
471
+ if (a.specificity !== b.specificity) return a.specificity - b.specificity;
472
+ return a.order - b.order;
473
+ }
474
+
475
+ /**
476
+ * The presentational attributes, as declarations. They sit above the UA
477
+ * sheet and below every author rule, which is where HTML says they go — and
478
+ * they matter more here than they would in a modern browser, because the
479
+ * documents a desktop application is handed (mail, exported reports,
480
+ * anything generated by a template from 2009) are full of them.
481
+ */
482
+ function presentationHints(el: Element): Declaration[] {
483
+ const out: Declaration[] = [];
484
+ const tag = tagOf(el);
485
+ const push = (prop: string, value: string): void => {
486
+ out.push({ prop, value, important: false });
487
+ };
488
+
489
+ const align = attr(el, 'align');
490
+ if (align) {
491
+ const v = align.toLowerCase();
492
+ if (tag === 'img' && (v === 'left' || v === 'right')) push('float', v);
493
+ else if (v === 'center' || v === 'middle') push('text-align', 'center');
494
+ else if (v === 'left' || v === 'right' || v === 'justify')
495
+ push('text-align', v);
496
+ }
497
+ const valign = attr(el, 'valign');
498
+ if (valign) push('vertical-align', valign.toLowerCase());
499
+
500
+ const bgcolor = attr(el, 'bgcolor');
501
+ if (bgcolor) push('background-color', bgcolor);
502
+ const color = attr(el, 'color');
503
+ if (color && (tag === 'font' || tag === 'basefont')) push('color', color);
504
+ const face = attr(el, 'face');
505
+ if (face && tag === 'font') push('font-family', face);
506
+ const size = attr(el, 'size');
507
+ if (size && tag === 'font') {
508
+ const n = Number(size.replace('+', ''));
509
+ if (Number.isFinite(n))
510
+ push('font-size', `${FONT_SIZE_STEPS[Math.max(1, Math.min(7, n))]}em`);
511
+ }
512
+
513
+ // `width`/`height` are lengths on the replaced and table elements and mean
514
+ // nothing anywhere else, which is what stops a `<input width>` from
515
+ // becoming a CSS width the widget then disagrees with.
516
+ if (SIZED.has(tag)) {
517
+ const width = attr(el, 'width');
518
+ if (width) push('width', lengthAttr(width));
519
+ const height = attr(el, 'height');
520
+ if (height) push('height', lengthAttr(height));
521
+ }
522
+
523
+ if (tag === 'table') {
524
+ const border = attr(el, 'border');
525
+ if (border && border !== '0')
526
+ push('border', `${Number(border) || 1}px solid currentColor`);
527
+ const spacing = attr(el, 'cellspacing');
528
+ if (spacing) push('border-spacing', lengthAttr(spacing));
529
+ }
530
+ if ((tag === 'td' || tag === 'th') && el.parent) {
531
+ // `cellpadding` lives on the table and applies to its cells, which is the
532
+ // one presentational attribute that is not on the element it styles.
533
+ const table = closestTable(el);
534
+ const padding = table ? attr(table, 'cellpadding') : undefined;
535
+ if (padding) push('padding', lengthAttr(padding));
536
+ const border = table ? attr(table, 'border') : undefined;
537
+ if (border && border !== '0') push('border', '1px solid currentColor');
538
+ }
539
+ if (tag === 'hr') {
540
+ const noshade = attr(el, 'noshade');
541
+ if (noshade !== undefined) push('border-top-width', '2px');
542
+ }
543
+ if (tag === 'ol') {
544
+ const type = attr(el, 'type');
545
+ const mapped = OL_TYPES[type ?? ''];
546
+ if (mapped) push('list-style-type', mapped);
547
+ const start = attr(el, 'start');
548
+ if (start) push('counter-reset', start);
549
+ }
550
+ if (tag === 'img' || tag === 'object') {
551
+ const hspace = attr(el, 'hspace');
552
+ if (hspace) {
553
+ push('margin-left', lengthAttr(hspace));
554
+ push('margin-right', lengthAttr(hspace));
555
+ }
556
+ const vspace = attr(el, 'vspace');
557
+ if (vspace) {
558
+ push('margin-top', lengthAttr(vspace));
559
+ push('margin-bottom', lengthAttr(vspace));
560
+ }
561
+ }
562
+ return out;
563
+ }
564
+
565
+ const SIZED = new Set([
566
+ 'img',
567
+ 'table',
568
+ 'td',
569
+ 'th',
570
+ 'col',
571
+ 'colgroup',
572
+ 'iframe',
573
+ 'video',
574
+ 'canvas',
575
+ 'object',
576
+ 'embed',
577
+ 'hr',
578
+ ]);
579
+
580
+ const OL_TYPES: Record<string, string> = {
581
+ '1': 'decimal',
582
+ a: 'lower-alpha',
583
+ A: 'upper-alpha',
584
+ i: 'lower-roman',
585
+ I: 'upper-roman',
586
+ };
587
+
588
+ const FONT_SIZE_STEPS = [1, 0.63, 0.82, 1, 1.13, 1.5, 2, 3];
589
+
590
+ /** A presentational length: bare numbers are pixels, `50%` stays a percent. */
591
+ function lengthAttr(value: string): string {
592
+ const v = value.trim();
593
+ if (v.endsWith('%')) return v;
594
+ const n = parseFloat(v);
595
+ return Number.isFinite(n) ? `${n}px` : v;
596
+ }
597
+
598
+ function closestTable(el: Element): Element | null {
599
+ let node = el.parent;
600
+ while (node) {
601
+ if (node.type === 'tag' && (node as Element).name === 'table')
602
+ return node as Element;
603
+ node = node.parent;
604
+ }
605
+ return null;
606
+ }