@react-x11/components 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (783) hide show
  1. package/README.md +979 -21
  2. package/dist/ansi/cast.d.ts +48 -0
  3. package/dist/ansi/cast.d.ts.map +1 -0
  4. package/dist/ansi/cast.js +135 -0
  5. package/dist/ansi/cast.js.map +1 -0
  6. package/dist/ansi/index.d.ts +10 -0
  7. package/dist/ansi/index.d.ts.map +1 -0
  8. package/dist/ansi/index.js +27 -0
  9. package/dist/ansi/index.js.map +1 -0
  10. package/dist/ansi/palette.d.ts +79 -0
  11. package/dist/ansi/palette.d.ts.map +1 -0
  12. package/dist/ansi/palette.js +155 -0
  13. package/dist/ansi/palette.js.map +1 -0
  14. package/dist/ansi/parse.d.ts +114 -0
  15. package/dist/ansi/parse.d.ts.map +1 -0
  16. package/dist/ansi/parse.js +687 -0
  17. package/dist/ansi/parse.js.map +1 -0
  18. package/dist/ansi/sgr.d.ts +87 -0
  19. package/dist/ansi/sgr.d.ts.map +1 -0
  20. package/dist/ansi/sgr.js +302 -0
  21. package/dist/ansi/sgr.js.map +1 -0
  22. package/dist/ansi/utf8.d.ts +15 -0
  23. package/dist/ansi/utf8.d.ts.map +1 -0
  24. package/dist/ansi/utf8.js +82 -0
  25. package/dist/ansi/utf8.js.map +1 -0
  26. package/dist/calendar/Calendar.d.ts +136 -0
  27. package/dist/calendar/Calendar.d.ts.map +1 -0
  28. package/dist/calendar/Calendar.js +460 -0
  29. package/dist/calendar/Calendar.js.map +1 -0
  30. package/dist/calendar/DatePicker.d.ts +52 -0
  31. package/dist/calendar/DatePicker.d.ts.map +1 -0
  32. package/dist/calendar/DatePicker.js +257 -0
  33. package/dist/calendar/DatePicker.js.map +1 -0
  34. package/dist/calendar/dates.d.ts +90 -0
  35. package/dist/calendar/dates.d.ts.map +1 -0
  36. package/dist/calendar/dates.js +236 -0
  37. package/dist/calendar/dates.js.map +1 -0
  38. package/dist/calendar/index.d.ts +8 -0
  39. package/dist/calendar/index.d.ts.map +1 -0
  40. package/dist/calendar/index.js +15 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/charts/components.d.ts +141 -0
  43. package/dist/charts/components.d.ts.map +1 -0
  44. package/dist/charts/components.js +580 -0
  45. package/dist/charts/components.js.map +1 -0
  46. package/dist/charts/data.d.ts +198 -0
  47. package/dist/charts/data.d.ts.map +1 -0
  48. package/dist/charts/data.js +616 -0
  49. package/dist/charts/data.js.map +1 -0
  50. package/dist/charts/hx.d.ts +21 -0
  51. package/dist/charts/hx.d.ts.map +1 -0
  52. package/dist/charts/hx.js +15 -0
  53. package/dist/charts/hx.js.map +1 -0
  54. package/dist/charts/index.d.ts +27 -0
  55. package/dist/charts/index.d.ts.map +1 -0
  56. package/dist/charts/index.js +38 -0
  57. package/dist/charts/index.js.map +1 -0
  58. package/dist/charts/node.d.ts +96 -0
  59. package/dist/charts/node.d.ts.map +1 -0
  60. package/dist/charts/node.js +720 -0
  61. package/dist/charts/node.js.map +1 -0
  62. package/dist/charts/render.d.ts +153 -0
  63. package/dist/charts/render.d.ts.map +1 -0
  64. package/dist/charts/render.js +762 -0
  65. package/dist/charts/render.js.map +1 -0
  66. package/dist/charts/scale.d.ts +42 -0
  67. package/dist/charts/scale.d.ts.map +1 -0
  68. package/dist/charts/scale.js +173 -0
  69. package/dist/charts/scale.js.map +1 -0
  70. package/dist/charts/spec.d.ts +91 -0
  71. package/dist/charts/spec.d.ts.map +1 -0
  72. package/dist/charts/spec.js +33 -0
  73. package/dist/charts/spec.js.map +1 -0
  74. package/dist/charts/timers.d.ts +6 -0
  75. package/dist/charts/timers.d.ts.map +1 -0
  76. package/dist/charts/timers.js +14 -0
  77. package/dist/charts/timers.js.map +1 -0
  78. package/dist/code/hx.d.ts +24 -0
  79. package/dist/code/hx.d.ts.map +1 -0
  80. package/dist/code/hx.js +25 -0
  81. package/dist/code/hx.js.map +1 -0
  82. package/dist/code/index.d.ts +45 -0
  83. package/dist/code/index.d.ts.map +1 -0
  84. package/dist/code/index.js +93 -0
  85. package/dist/code/index.js.map +1 -0
  86. package/dist/code-editor/completion.d.ts +26 -0
  87. package/dist/code-editor/completion.d.ts.map +1 -0
  88. package/dist/code-editor/completion.js +129 -0
  89. package/dist/code-editor/completion.js.map +1 -0
  90. package/dist/code-editor/doc.d.ts +35 -0
  91. package/dist/code-editor/doc.d.ts.map +1 -0
  92. package/dist/code-editor/doc.js +162 -0
  93. package/dist/code-editor/doc.js.map +1 -0
  94. package/dist/code-editor/hx.d.ts +13 -0
  95. package/dist/code-editor/hx.d.ts.map +1 -0
  96. package/dist/code-editor/hx.js +10 -0
  97. package/dist/code-editor/hx.js.map +1 -0
  98. package/dist/code-editor/index.d.ts +88 -0
  99. package/dist/code-editor/index.d.ts.map +1 -0
  100. package/dist/code-editor/index.js +401 -0
  101. package/dist/code-editor/index.js.map +1 -0
  102. package/dist/code-editor/node.d.ts +343 -0
  103. package/dist/code-editor/node.d.ts.map +1 -0
  104. package/dist/code-editor/node.js +1521 -0
  105. package/dist/code-editor/node.js.map +1 -0
  106. package/dist/code-language/hljs.d.ts +47 -0
  107. package/dist/code-language/hljs.d.ts.map +1 -0
  108. package/dist/code-language/hljs.js +211 -0
  109. package/dist/code-language/hljs.js.map +1 -0
  110. package/dist/code-language/index.d.ts +22 -0
  111. package/dist/code-language/index.d.ts.map +1 -0
  112. package/dist/code-language/index.js +20 -0
  113. package/dist/code-language/index.js.map +1 -0
  114. package/dist/code-language/languages/glsl.d.ts +4 -0
  115. package/dist/code-language/languages/glsl.d.ts.map +1 -0
  116. package/dist/code-language/languages/glsl.js +99 -0
  117. package/dist/code-language/languages/glsl.js.map +1 -0
  118. package/dist/code-language/languages/javascript.d.ts +10 -0
  119. package/dist/code-language/languages/javascript.d.ts.map +1 -0
  120. package/dist/code-language/languages/javascript.js +360 -0
  121. package/dist/code-language/languages/javascript.js.map +1 -0
  122. package/dist/code-language/languages/json.d.ts +4 -0
  123. package/dist/code-language/languages/json.d.ts.map +1 -0
  124. package/dist/code-language/languages/json.js +68 -0
  125. package/dist/code-language/languages/json.js.map +1 -0
  126. package/dist/code-language/languages/shell.d.ts +4 -0
  127. package/dist/code-language/languages/shell.d.ts.map +1 -0
  128. package/dist/code-language/languages/shell.js +189 -0
  129. package/dist/code-language/languages/shell.js.map +1 -0
  130. package/dist/code-language/languages/sql.d.ts +11 -0
  131. package/dist/code-language/languages/sql.d.ts.map +1 -0
  132. package/dist/code-language/languages/sql.js +133 -0
  133. package/dist/code-language/languages/sql.js.map +1 -0
  134. package/dist/code-language/lezer.d.ts +24 -0
  135. package/dist/code-language/lezer.d.ts.map +1 -0
  136. package/dist/code-language/lezer.js +148 -0
  137. package/dist/code-language/lezer.js.map +1 -0
  138. package/dist/code-language/registry.d.ts +19 -0
  139. package/dist/code-language/registry.d.ts.map +1 -0
  140. package/dist/code-language/registry.js +56 -0
  141. package/dist/code-language/registry.js.map +1 -0
  142. package/dist/code-language/runs.d.ts +35 -0
  143. package/dist/code-language/runs.d.ts.map +1 -0
  144. package/dist/code-language/runs.js +88 -0
  145. package/dist/code-language/runs.js.map +1 -0
  146. package/dist/code-language/stream.d.ts +70 -0
  147. package/dist/code-language/stream.d.ts.map +1 -0
  148. package/dist/code-language/stream.js +243 -0
  149. package/dist/code-language/stream.js.map +1 -0
  150. package/dist/code-language/textmate.d.ts +27 -0
  151. package/dist/code-language/textmate.d.ts.map +1 -0
  152. package/dist/code-language/textmate.js +86 -0
  153. package/dist/code-language/textmate.js.map +1 -0
  154. package/dist/code-language/theme.d.ts +26 -0
  155. package/dist/code-language/theme.d.ts.map +1 -0
  156. package/dist/code-language/theme.js +108 -0
  157. package/dist/code-language/theme.js.map +1 -0
  158. package/dist/code-language/timers.d.ts +7 -0
  159. package/dist/code-language/timers.d.ts.map +1 -0
  160. package/dist/code-language/timers.js +22 -0
  161. package/dist/code-language/timers.js.map +1 -0
  162. package/dist/code-language/types.d.ts +173 -0
  163. package/dist/code-language/types.d.ts.map +1 -0
  164. package/dist/code-language/types.js +41 -0
  165. package/dist/code-language/types.js.map +1 -0
  166. package/dist/codeblock/index.d.ts +69 -0
  167. package/dist/codeblock/index.d.ts.map +1 -0
  168. package/dist/codeblock/index.js +85 -0
  169. package/dist/codeblock/index.js.map +1 -0
  170. package/dist/color-picker/ColorField.d.ts +39 -0
  171. package/dist/color-picker/ColorField.d.ts.map +1 -0
  172. package/dist/color-picker/ColorField.js +239 -0
  173. package/dist/color-picker/ColorField.js.map +1 -0
  174. package/dist/color-picker/ColorPicker.d.ts +109 -0
  175. package/dist/color-picker/ColorPicker.d.ts.map +1 -0
  176. package/dist/color-picker/ColorPicker.js +757 -0
  177. package/dist/color-picker/ColorPicker.js.map +1 -0
  178. package/dist/color-picker/color.d.ts +105 -0
  179. package/dist/color-picker/color.d.ts.map +1 -0
  180. package/dist/color-picker/color.js +313 -0
  181. package/dist/color-picker/color.js.map +1 -0
  182. package/dist/color-picker/index.d.ts +8 -0
  183. package/dist/color-picker/index.d.ts.map +1 -0
  184. package/dist/color-picker/index.js +19 -0
  185. package/dist/color-picker/index.js.map +1 -0
  186. package/dist/desktop-calendar/eds.d.ts +102 -0
  187. package/dist/desktop-calendar/eds.d.ts.map +1 -0
  188. package/dist/desktop-calendar/eds.js +356 -0
  189. package/dist/desktop-calendar/eds.js.map +1 -0
  190. package/dist/desktop-calendar/ical.d.ts +63 -0
  191. package/dist/desktop-calendar/ical.d.ts.map +1 -0
  192. package/dist/desktop-calendar/ical.js +57 -0
  193. package/dist/desktop-calendar/ical.js.map +1 -0
  194. package/dist/desktop-calendar/index.d.ts +72 -0
  195. package/dist/desktop-calendar/index.d.ts.map +1 -0
  196. package/dist/desktop-calendar/index.js +213 -0
  197. package/dist/desktop-calendar/index.js.map +1 -0
  198. package/dist/embed/client.d.ts +121 -0
  199. package/dist/embed/client.d.ts.map +1 -0
  200. package/dist/embed/client.js +203 -0
  201. package/dist/embed/client.js.map +1 -0
  202. package/dist/embed/host.d.ts +96 -0
  203. package/dist/embed/host.d.ts.map +1 -0
  204. package/dist/embed/host.js +266 -0
  205. package/dist/embed/host.js.map +1 -0
  206. package/dist/embed/index.d.ts +5 -0
  207. package/dist/embed/index.d.ts.map +1 -0
  208. package/dist/embed/index.js +13 -0
  209. package/dist/embed/index.js.map +1 -0
  210. package/dist/embed/timers.d.ts +6 -0
  211. package/dist/embed/timers.d.ts.map +1 -0
  212. package/dist/embed/timers.js +16 -0
  213. package/dist/embed/timers.js.map +1 -0
  214. package/dist/flow/draw.d.ts +45 -0
  215. package/dist/flow/draw.d.ts.map +1 -0
  216. package/dist/flow/draw.js +295 -0
  217. package/dist/flow/draw.js.map +1 -0
  218. package/dist/flow/index.d.ts +64 -0
  219. package/dist/flow/index.d.ts.map +1 -0
  220. package/dist/flow/index.js +306 -0
  221. package/dist/flow/index.js.map +1 -0
  222. package/dist/flow/model.d.ts +158 -0
  223. package/dist/flow/model.d.ts.map +1 -0
  224. package/dist/flow/model.js +566 -0
  225. package/dist/flow/model.js.map +1 -0
  226. package/dist/flow/node.d.ts +429 -0
  227. package/dist/flow/node.d.ts.map +1 -0
  228. package/dist/flow/node.js +3025 -0
  229. package/dist/flow/node.js.map +1 -0
  230. package/dist/flow/paths.d.ts +43 -0
  231. package/dist/flow/paths.d.ts.map +1 -0
  232. package/dist/flow/paths.js +327 -0
  233. package/dist/flow/paths.js.map +1 -0
  234. package/dist/flow/types.d.ts +561 -0
  235. package/dist/flow/types.d.ts.map +1 -0
  236. package/dist/flow/types.js +2 -0
  237. package/dist/flow/types.js.map +1 -0
  238. package/dist/formula/hx.d.ts +24 -0
  239. package/dist/formula/hx.d.ts.map +1 -0
  240. package/dist/formula/hx.js +25 -0
  241. package/dist/formula/hx.js.map +1 -0
  242. package/dist/formula/index.d.ts +74 -0
  243. package/dist/formula/index.d.ts.map +1 -0
  244. package/dist/formula/index.js +155 -0
  245. package/dist/formula/index.js.map +1 -0
  246. package/dist/formula/katex.d.ts +78 -0
  247. package/dist/formula/katex.d.ts.map +1 -0
  248. package/dist/formula/katex.js +130 -0
  249. package/dist/formula/katex.js.map +1 -0
  250. package/dist/formula/layout.d.ts +103 -0
  251. package/dist/formula/layout.d.ts.map +1 -0
  252. package/dist/formula/layout.js +716 -0
  253. package/dist/formula/layout.js.map +1 -0
  254. package/dist/formula/node.d.ts +50 -0
  255. package/dist/formula/node.d.ts.map +1 -0
  256. package/dist/formula/node.js +351 -0
  257. package/dist/formula/node.js.map +1 -0
  258. package/dist/html/controls.d.ts +48 -0
  259. package/dist/html/controls.d.ts.map +1 -0
  260. package/dist/html/controls.js +195 -0
  261. package/dist/html/controls.js.map +1 -0
  262. package/dist/html/css/cascade.d.ts +51 -0
  263. package/dist/html/css/cascade.d.ts.map +1 -0
  264. package/dist/html/css/cascade.js +552 -0
  265. package/dist/html/css/cascade.js.map +1 -0
  266. package/dist/html/css/parse.d.ts +74 -0
  267. package/dist/html/css/parse.d.ts.map +1 -0
  268. package/dist/html/css/parse.js +464 -0
  269. package/dist/html/css/parse.js.map +1 -0
  270. package/dist/html/css/style.d.ts +142 -0
  271. package/dist/html/css/style.d.ts.map +1 -0
  272. package/dist/html/css/style.js +1145 -0
  273. package/dist/html/css/style.js.map +1 -0
  274. package/dist/html/css/ua.d.ts +5 -0
  275. package/dist/html/css/ua.d.ts.map +1 -0
  276. package/dist/html/css/ua.js +171 -0
  277. package/dist/html/css/ua.js.map +1 -0
  278. package/dist/html/css/values.d.ts +78 -0
  279. package/dist/html/css/values.d.ts.map +1 -0
  280. package/dist/html/css/values.js +330 -0
  281. package/dist/html/css/values.js.map +1 -0
  282. package/dist/html/dom.d.ts +112 -0
  283. package/dist/html/dom.d.ts.map +1 -0
  284. package/dist/html/dom.js +374 -0
  285. package/dist/html/dom.js.map +1 -0
  286. package/dist/html/hx.d.ts +24 -0
  287. package/dist/html/hx.d.ts.map +1 -0
  288. package/dist/html/hx.js +29 -0
  289. package/dist/html/hx.js.map +1 -0
  290. package/dist/html/index.d.ts +137 -0
  291. package/dist/html/index.d.ts.map +1 -0
  292. package/dist/html/index.js +339 -0
  293. package/dist/html/index.js.map +1 -0
  294. package/dist/html/layout/block.d.ts +58 -0
  295. package/dist/html/layout/block.d.ts.map +1 -0
  296. package/dist/html/layout/block.js +724 -0
  297. package/dist/html/layout/block.js.map +1 -0
  298. package/dist/html/layout/boxes.d.ts +261 -0
  299. package/dist/html/layout/boxes.d.ts.map +1 -0
  300. package/dist/html/layout/boxes.js +725 -0
  301. package/dist/html/layout/boxes.js.map +1 -0
  302. package/dist/html/layout/flex.d.ts +16 -0
  303. package/dist/html/layout/flex.d.ts.map +1 -0
  304. package/dist/html/layout/flex.js +242 -0
  305. package/dist/html/layout/flex.js.map +1 -0
  306. package/dist/html/layout/floats.d.ts +50 -0
  307. package/dist/html/layout/floats.d.ts.map +1 -0
  308. package/dist/html/layout/floats.js +110 -0
  309. package/dist/html/layout/floats.js.map +1 -0
  310. package/dist/html/layout/inline.d.ts +44 -0
  311. package/dist/html/layout/inline.d.ts.map +1 -0
  312. package/dist/html/layout/inline.js +700 -0
  313. package/dist/html/layout/inline.js.map +1 -0
  314. package/dist/html/layout/table.d.ts +5 -0
  315. package/dist/html/layout/table.d.ts.map +1 -0
  316. package/dist/html/layout/table.js +340 -0
  317. package/dist/html/layout/table.js.map +1 -0
  318. package/dist/html/node.d.ts +149 -0
  319. package/dist/html/node.d.ts.map +1 -0
  320. package/dist/html/node.js +861 -0
  321. package/dist/html/node.js.map +1 -0
  322. package/dist/html/paint.d.ts +48 -0
  323. package/dist/html/paint.d.ts.map +1 -0
  324. package/dist/html/paint.js +495 -0
  325. package/dist/html/paint.js.map +1 -0
  326. package/dist/html/resources.d.ts +48 -0
  327. package/dist/html/resources.d.ts.map +1 -0
  328. package/dist/html/resources.js +156 -0
  329. package/dist/html/resources.js.map +1 -0
  330. package/dist/index.d.ts +48 -0
  331. package/dist/index.d.ts.map +1 -0
  332. package/dist/index.js +92 -0
  333. package/dist/index.js.map +1 -0
  334. package/dist/internal/heights.d.ts +81 -0
  335. package/dist/internal/heights.d.ts.map +1 -0
  336. package/dist/internal/heights.js +193 -0
  337. package/dist/internal/heights.js.map +1 -0
  338. package/dist/internal/hx.d.ts +24 -0
  339. package/dist/internal/hx.d.ts.map +1 -0
  340. package/dist/internal/hx.js +27 -0
  341. package/dist/internal/hx.js.map +1 -0
  342. package/dist/internal/text.d.ts +6 -0
  343. package/dist/internal/text.d.ts.map +1 -0
  344. package/dist/internal/text.js +44 -0
  345. package/dist/internal/text.js.map +1 -0
  346. package/dist/internal/timers.d.ts +8 -0
  347. package/dist/internal/timers.d.ts.map +1 -0
  348. package/dist/internal/timers.js +22 -0
  349. package/dist/internal/timers.js.map +1 -0
  350. package/dist/internal/widget.d.ts +40 -0
  351. package/dist/internal/widget.d.ts.map +1 -0
  352. package/dist/internal/widget.js +44 -0
  353. package/dist/internal/widget.js.map +1 -0
  354. package/dist/markdown/ast.d.ts +126 -0
  355. package/dist/markdown/ast.d.ts.map +1 -0
  356. package/dist/markdown/ast.js +8 -0
  357. package/dist/markdown/ast.js.map +1 -0
  358. package/dist/markdown/hx.d.ts +24 -0
  359. package/dist/markdown/hx.d.ts.map +1 -0
  360. package/dist/markdown/hx.js +25 -0
  361. package/dist/markdown/hx.js.map +1 -0
  362. package/dist/markdown/index.d.ts +90 -0
  363. package/dist/markdown/index.d.ts.map +1 -0
  364. package/dist/markdown/index.js +413 -0
  365. package/dist/markdown/index.js.map +1 -0
  366. package/dist/markdown/parse.d.ts +8 -0
  367. package/dist/markdown/parse.d.ts.map +1 -0
  368. package/dist/markdown/parse.js +911 -0
  369. package/dist/markdown/parse.js.map +1 -0
  370. package/dist/markdown/spans.d.ts +20 -0
  371. package/dist/markdown/spans.d.ts.map +1 -0
  372. package/dist/markdown/spans.js +96 -0
  373. package/dist/markdown/spans.js.map +1 -0
  374. package/dist/media-player/backends.d.ts +64 -0
  375. package/dist/media-player/backends.d.ts.map +1 -0
  376. package/dist/media-player/backends.js +110 -0
  377. package/dist/media-player/backends.js.map +1 -0
  378. package/dist/media-player/control.d.ts +40 -0
  379. package/dist/media-player/control.d.ts.map +1 -0
  380. package/dist/media-player/control.js +44 -0
  381. package/dist/media-player/control.js.map +1 -0
  382. package/dist/media-player/hx.d.ts +24 -0
  383. package/dist/media-player/hx.d.ts.map +1 -0
  384. package/dist/media-player/hx.js +25 -0
  385. package/dist/media-player/hx.js.map +1 -0
  386. package/dist/media-player/index.d.ts +107 -0
  387. package/dist/media-player/index.d.ts.map +1 -0
  388. package/dist/media-player/index.js +219 -0
  389. package/dist/media-player/index.js.map +1 -0
  390. package/dist/media-player/mpv.d.ts +4 -0
  391. package/dist/media-player/mpv.d.ts.map +1 -0
  392. package/dist/media-player/mpv.js +120 -0
  393. package/dist/media-player/mpv.js.map +1 -0
  394. package/dist/media-player/vlc.d.ts +8 -0
  395. package/dist/media-player/vlc.d.ts.map +1 -0
  396. package/dist/media-player/vlc.js +83 -0
  397. package/dist/media-player/vlc.js.map +1 -0
  398. package/dist/richtext/index.d.ts +19 -0
  399. package/dist/richtext/index.d.ts.map +1 -0
  400. package/dist/richtext/index.js +4 -0
  401. package/dist/richtext/index.js.map +1 -0
  402. package/dist/richtext/links.d.ts +12 -0
  403. package/dist/richtext/links.d.ts.map +1 -0
  404. package/dist/richtext/links.js +64 -0
  405. package/dist/richtext/links.js.map +1 -0
  406. package/dist/richtext/menu.d.ts +11 -0
  407. package/dist/richtext/menu.d.ts.map +1 -0
  408. package/dist/richtext/menu.js +43 -0
  409. package/dist/richtext/menu.js.map +1 -0
  410. package/dist/richtext/node.d.ts +151 -0
  411. package/dist/richtext/node.d.ts.map +1 -0
  412. package/dist/richtext/node.js +255 -0
  413. package/dist/richtext/node.js.map +1 -0
  414. package/dist/richtext/runs.d.ts +92 -0
  415. package/dist/richtext/runs.d.ts.map +1 -0
  416. package/dist/richtext/runs.js +158 -0
  417. package/dist/richtext/runs.js.map +1 -0
  418. package/dist/table/hx.d.ts +24 -0
  419. package/dist/table/hx.d.ts.map +1 -0
  420. package/dist/table/hx.js +25 -0
  421. package/dist/table/hx.js.map +1 -0
  422. package/dist/table/index.d.ts +169 -0
  423. package/dist/table/index.d.ts.map +1 -0
  424. package/dist/table/index.js +844 -0
  425. package/dist/table/index.js.map +1 -0
  426. package/dist/table/rows.d.ts +136 -0
  427. package/dist/table/rows.d.ts.map +1 -0
  428. package/dist/table/rows.js +146 -0
  429. package/dist/table/rows.js.map +1 -0
  430. package/dist/terminal/backends.d.ts +105 -0
  431. package/dist/terminal/backends.d.ts.map +1 -0
  432. package/dist/terminal/backends.js +185 -0
  433. package/dist/terminal/backends.js.map +1 -0
  434. package/dist/terminal/hx.d.ts +24 -0
  435. package/dist/terminal/hx.d.ts.map +1 -0
  436. package/dist/terminal/hx.js +25 -0
  437. package/dist/terminal/hx.js.map +1 -0
  438. package/dist/terminal/index.d.ts +160 -0
  439. package/dist/terminal/index.d.ts.map +1 -0
  440. package/dist/terminal/index.js +344 -0
  441. package/dist/terminal/index.js.map +1 -0
  442. package/dist/terminal/title.d.ts +24 -0
  443. package/dist/terminal/title.d.ts.map +1 -0
  444. package/dist/terminal/title.js +129 -0
  445. package/dist/terminal/title.js.map +1 -0
  446. package/dist/terminal/vt/colors.d.ts +63 -0
  447. package/dist/terminal/vt/colors.d.ts.map +1 -0
  448. package/dist/terminal/vt/colors.js +203 -0
  449. package/dist/terminal/vt/colors.js.map +1 -0
  450. package/dist/terminal/vt/diff.d.ts +117 -0
  451. package/dist/terminal/vt/diff.d.ts.map +1 -0
  452. package/dist/terminal/vt/diff.js +358 -0
  453. package/dist/terminal/vt/diff.js.map +1 -0
  454. package/dist/terminal/vt/fonts.d.ts +92 -0
  455. package/dist/terminal/vt/fonts.d.ts.map +1 -0
  456. package/dist/terminal/vt/fonts.js +178 -0
  457. package/dist/terminal/vt/fonts.js.map +1 -0
  458. package/dist/terminal/vt/index.d.ts +78 -0
  459. package/dist/terminal/vt/index.d.ts.map +1 -0
  460. package/dist/terminal/vt/index.js +312 -0
  461. package/dist/terminal/vt/index.js.map +1 -0
  462. package/dist/terminal/vt/keys.d.ts +74 -0
  463. package/dist/terminal/vt/keys.d.ts.map +1 -0
  464. package/dist/terminal/vt/keys.js +309 -0
  465. package/dist/terminal/vt/keys.js.map +1 -0
  466. package/dist/terminal/vt/mouse.d.ts +44 -0
  467. package/dist/terminal/vt/mouse.d.ts.map +1 -0
  468. package/dist/terminal/vt/mouse.js +106 -0
  469. package/dist/terminal/vt/mouse.js.map +1 -0
  470. package/dist/terminal/vt/node.d.ts +246 -0
  471. package/dist/terminal/vt/node.d.ts.map +1 -0
  472. package/dist/terminal/vt/node.js +1068 -0
  473. package/dist/terminal/vt/node.js.map +1 -0
  474. package/dist/terminal/vt/pty.d.ts +81 -0
  475. package/dist/terminal/vt/pty.d.ts.map +1 -0
  476. package/dist/terminal/vt/pty.js +201 -0
  477. package/dist/terminal/vt/pty.js.map +1 -0
  478. package/dist/terminal/vt/renderer.d.ts +179 -0
  479. package/dist/terminal/vt/renderer.d.ts.map +1 -0
  480. package/dist/terminal/vt/renderer.js +357 -0
  481. package/dist/terminal/vt/renderer.js.map +1 -0
  482. package/dist/terminal/vt/timers.d.ts +6 -0
  483. package/dist/terminal/vt/timers.d.ts.map +1 -0
  484. package/dist/terminal/vt/timers.js +16 -0
  485. package/dist/terminal/vt/timers.js.map +1 -0
  486. package/dist/terminal/vt/xterm.d.ts +142 -0
  487. package/dist/terminal/vt/xterm.d.ts.map +1 -0
  488. package/dist/terminal/vt/xterm.js +32 -0
  489. package/dist/terminal/vt/xterm.js.map +1 -0
  490. package/dist/terminal-output/hx.d.ts +24 -0
  491. package/dist/terminal-output/hx.d.ts.map +1 -0
  492. package/dist/terminal-output/hx.js +25 -0
  493. package/dist/terminal-output/hx.js.map +1 -0
  494. package/dist/terminal-output/index.d.ts +92 -0
  495. package/dist/terminal-output/index.d.ts.map +1 -0
  496. package/dist/terminal-output/index.js +179 -0
  497. package/dist/terminal-output/index.js.map +1 -0
  498. package/dist/terminal-output/runs.d.ts +27 -0
  499. package/dist/terminal-output/runs.d.ts.map +1 -0
  500. package/dist/terminal-output/runs.js +66 -0
  501. package/dist/terminal-output/runs.js.map +1 -0
  502. package/dist/three/canvas.d.ts +46 -0
  503. package/dist/three/canvas.d.ts.map +1 -0
  504. package/dist/three/canvas.js +305 -0
  505. package/dist/three/canvas.js.map +1 -0
  506. package/dist/three/events.d.ts +64 -0
  507. package/dist/three/events.d.ts.map +1 -0
  508. package/dist/three/events.js +146 -0
  509. package/dist/three/events.js.map +1 -0
  510. package/dist/three/geometries.d.ts +89 -0
  511. package/dist/three/geometries.d.ts.map +1 -0
  512. package/dist/three/geometries.js +345 -0
  513. package/dist/three/geometries.js.map +1 -0
  514. package/dist/three/globals.d.ts +7 -0
  515. package/dist/three/globals.d.ts.map +1 -0
  516. package/dist/three/globals.js +20 -0
  517. package/dist/three/globals.js.map +1 -0
  518. package/dist/three/hx.d.ts +9 -0
  519. package/dist/three/hx.d.ts.map +1 -0
  520. package/dist/three/hx.js +10 -0
  521. package/dist/three/hx.js.map +1 -0
  522. package/dist/three/index.d.ts +22 -0
  523. package/dist/three/index.d.ts.map +1 -0
  524. package/dist/three/index.js +24 -0
  525. package/dist/three/index.js.map +1 -0
  526. package/dist/three/jsx-dev-runtime.d.ts +19 -0
  527. package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
  528. package/dist/three/jsx-dev-runtime.js +2 -0
  529. package/dist/three/jsx-dev-runtime.js.map +1 -0
  530. package/dist/three/jsx-runtime.d.ts +19 -0
  531. package/dist/three/jsx-runtime.d.ts.map +1 -0
  532. package/dist/three/jsx-runtime.js +2 -0
  533. package/dist/three/jsx-runtime.js.map +1 -0
  534. package/dist/three/jsx.d.ts +198 -0
  535. package/dist/three/jsx.d.ts.map +1 -0
  536. package/dist/three/jsx.js +2 -0
  537. package/dist/three/jsx.js.map +1 -0
  538. package/dist/three/materials.d.ts +125 -0
  539. package/dist/three/materials.d.ts.map +1 -0
  540. package/dist/three/materials.js +229 -0
  541. package/dist/three/materials.js.map +1 -0
  542. package/dist/three/math.d.ts +146 -0
  543. package/dist/three/math.d.ts.map +1 -0
  544. package/dist/three/math.js +464 -0
  545. package/dist/three/math.js.map +1 -0
  546. package/dist/three/objects.d.ts +185 -0
  547. package/dist/three/objects.d.ts.map +1 -0
  548. package/dist/three/objects.js +309 -0
  549. package/dist/three/objects.js.map +1 -0
  550. package/dist/three/passes.d.ts +54 -0
  551. package/dist/three/passes.d.ts.map +1 -0
  552. package/dist/three/passes.js +78 -0
  553. package/dist/three/passes.js.map +1 -0
  554. package/dist/three/postprocess.d.ts +85 -0
  555. package/dist/three/postprocess.d.ts.map +1 -0
  556. package/dist/three/postprocess.js +503 -0
  557. package/dist/three/postprocess.js.map +1 -0
  558. package/dist/three/raycast.d.ts +24 -0
  559. package/dist/three/raycast.d.ts.map +1 -0
  560. package/dist/three/raycast.js +138 -0
  561. package/dist/three/raycast.js.map +1 -0
  562. package/dist/three/reconciler.d.ts +48 -0
  563. package/dist/three/reconciler.d.ts.map +1 -0
  564. package/dist/three/reconciler.js +416 -0
  565. package/dist/three/reconciler.js.map +1 -0
  566. package/dist/three/renderer-direct.d.ts +102 -0
  567. package/dist/three/renderer-direct.d.ts.map +1 -0
  568. package/dist/three/renderer-direct.js +782 -0
  569. package/dist/three/renderer-direct.js.map +1 -0
  570. package/dist/three/renderer-indirect.d.ts +68 -0
  571. package/dist/three/renderer-indirect.d.ts.map +1 -0
  572. package/dist/three/renderer-indirect.js +438 -0
  573. package/dist/three/renderer-indirect.js.map +1 -0
  574. package/dist/three/store.d.ts +81 -0
  575. package/dist/three/store.d.ts.map +1 -0
  576. package/dist/three/store.js +110 -0
  577. package/dist/three/store.js.map +1 -0
  578. package/dist/timeline/hx.d.ts +18 -0
  579. package/dist/timeline/hx.d.ts.map +1 -0
  580. package/dist/timeline/hx.js +10 -0
  581. package/dist/timeline/hx.js.map +1 -0
  582. package/dist/timeline/index.d.ts +152 -0
  583. package/dist/timeline/index.d.ts.map +1 -0
  584. package/dist/timeline/index.js +383 -0
  585. package/dist/timeline/index.js.map +1 -0
  586. package/dist/tray-host/hx.d.ts +24 -0
  587. package/dist/tray-host/hx.d.ts.map +1 -0
  588. package/dist/tray-host/hx.js +25 -0
  589. package/dist/tray-host/hx.js.map +1 -0
  590. package/dist/tray-host/index.d.ts +110 -0
  591. package/dist/tray-host/index.d.ts.map +1 -0
  592. package/dist/tray-host/index.js +191 -0
  593. package/dist/tray-host/index.js.map +1 -0
  594. package/dist/tray-host/manager.d.ts +137 -0
  595. package/dist/tray-host/manager.d.ts.map +1 -0
  596. package/dist/tray-host/manager.js +462 -0
  597. package/dist/tray-host/manager.js.map +1 -0
  598. package/dist/tray-host/notify.d.ts +22 -0
  599. package/dist/tray-host/notify.d.ts.map +1 -0
  600. package/dist/tray-host/notify.js +74 -0
  601. package/dist/tray-host/notify.js.map +1 -0
  602. package/dist/tray-host/protocol.d.ts +106 -0
  603. package/dist/tray-host/protocol.d.ts.map +1 -0
  604. package/dist/tray-host/protocol.js +191 -0
  605. package/dist/tray-host/protocol.js.map +1 -0
  606. package/dist/tree/hx.d.ts +24 -0
  607. package/dist/tree/hx.d.ts.map +1 -0
  608. package/dist/tree/hx.js +25 -0
  609. package/dist/tree/hx.js.map +1 -0
  610. package/dist/tree/index.d.ts +221 -0
  611. package/dist/tree/index.d.ts.map +1 -0
  612. package/dist/tree/index.js +716 -0
  613. package/dist/tree/index.js.map +1 -0
  614. package/dist/tree/internal.d.ts +18 -0
  615. package/dist/tree/internal.d.ts.map +1 -0
  616. package/dist/tree/internal.js +66 -0
  617. package/dist/tree/internal.js.map +1 -0
  618. package/dist/tree/rows.d.ts +177 -0
  619. package/dist/tree/rows.d.ts.map +1 -0
  620. package/dist/tree/rows.js +179 -0
  621. package/dist/tree/rows.js.map +1 -0
  622. package/package.json +166 -12
  623. package/src/ansi/cast.ts +159 -0
  624. package/src/ansi/index.ts +53 -0
  625. package/src/ansi/palette.ts +226 -0
  626. package/src/ansi/parse.ts +780 -0
  627. package/src/ansi/sgr.ts +380 -0
  628. package/src/ansi/utf8.ts +84 -0
  629. package/src/calendar/Calendar.ts +744 -0
  630. package/src/calendar/DatePicker.ts +368 -0
  631. package/src/calendar/dates.ts +307 -0
  632. package/src/calendar/index.ts +51 -0
  633. package/src/charts/components.ts +864 -0
  634. package/src/charts/data.ts +776 -0
  635. package/src/charts/hx.ts +39 -0
  636. package/src/charts/index.ts +99 -0
  637. package/src/charts/node.ts +932 -0
  638. package/src/charts/render.ts +982 -0
  639. package/src/charts/scale.ts +214 -0
  640. package/src/charts/spec.ts +122 -0
  641. package/src/charts/timers.ts +24 -0
  642. package/src/code/hx.ts +51 -0
  643. package/src/code/index.ts +174 -0
  644. package/src/code-editor/completion.ts +161 -0
  645. package/src/code-editor/doc.ts +198 -0
  646. package/src/code-editor/hx.ts +26 -0
  647. package/src/code-editor/index.ts +615 -0
  648. package/src/code-editor/node.ts +1926 -0
  649. package/src/code-language/hljs.ts +302 -0
  650. package/src/code-language/index.ts +51 -0
  651. package/src/code-language/languages/glsl.ts +120 -0
  652. package/src/code-language/languages/javascript.ts +419 -0
  653. package/src/code-language/languages/json.ts +72 -0
  654. package/src/code-language/languages/shell.ts +221 -0
  655. package/src/code-language/languages/sql.ts +165 -0
  656. package/src/code-language/lezer.ts +190 -0
  657. package/src/code-language/registry.ts +66 -0
  658. package/src/code-language/runs.ts +128 -0
  659. package/src/code-language/stream.ts +306 -0
  660. package/src/code-language/textmate.ts +134 -0
  661. package/src/code-language/theme.ts +124 -0
  662. package/src/code-language/timers.ts +36 -0
  663. package/src/code-language/types.ts +252 -0
  664. package/src/codeblock/index.ts +146 -0
  665. package/src/color-picker/ColorField.ts +333 -0
  666. package/src/color-picker/ColorPicker.ts +1069 -0
  667. package/src/color-picker/color.ts +399 -0
  668. package/src/color-picker/index.ts +50 -0
  669. package/src/desktop-calendar/eds.ts +484 -0
  670. package/src/desktop-calendar/ical.ts +119 -0
  671. package/src/desktop-calendar/index.ts +287 -0
  672. package/src/embed/client.ts +311 -0
  673. package/src/embed/host.ts +432 -0
  674. package/src/embed/index.ts +33 -0
  675. package/src/embed/timers.ts +32 -0
  676. package/src/flow/draw.ts +418 -0
  677. package/src/flow/index.ts +473 -0
  678. package/src/flow/model.ts +687 -0
  679. package/src/flow/node.ts +3694 -0
  680. package/src/flow/paths.ts +403 -0
  681. package/src/flow/types.ts +634 -0
  682. package/src/formula/hx.ts +51 -0
  683. package/src/formula/index.ts +243 -0
  684. package/src/formula/katex.ts +209 -0
  685. package/src/formula/layout.ts +876 -0
  686. package/src/formula/node.ts +467 -0
  687. package/src/html/controls.ts +244 -0
  688. package/src/html/css/cascade.ts +606 -0
  689. package/src/html/css/parse.ts +500 -0
  690. package/src/html/css/style.ts +1371 -0
  691. package/src/html/css/ua.ts +174 -0
  692. package/src/html/css/values.ts +358 -0
  693. package/src/html/dom.ts +410 -0
  694. package/src/html/hx.ts +55 -0
  695. package/src/html/index.ts +545 -0
  696. package/src/html/layout/block.ts +876 -0
  697. package/src/html/layout/boxes.ts +981 -0
  698. package/src/html/layout/flex.ts +297 -0
  699. package/src/html/layout/floats.ts +125 -0
  700. package/src/html/layout/inline.ts +870 -0
  701. package/src/html/layout/table.ts +380 -0
  702. package/src/html/node.ts +967 -0
  703. package/src/html/paint.ts +605 -0
  704. package/src/html/resources.ts +214 -0
  705. package/src/index.ts +638 -0
  706. package/src/internal/heights.ts +211 -0
  707. package/src/internal/hx.ts +53 -0
  708. package/src/internal/text.ts +44 -0
  709. package/src/internal/timers.ts +44 -0
  710. package/src/internal/widget.ts +92 -0
  711. package/src/markdown/ast.ts +163 -0
  712. package/src/markdown/hx.ts +51 -0
  713. package/src/markdown/index.ts +686 -0
  714. package/src/markdown/parse.ts +1037 -0
  715. package/src/markdown/spans.ts +143 -0
  716. package/src/media-player/backends.ts +155 -0
  717. package/src/media-player/control.ts +70 -0
  718. package/src/media-player/hx.ts +51 -0
  719. package/src/media-player/index.ts +378 -0
  720. package/src/media-player/mpv.ts +146 -0
  721. package/src/media-player/vlc.ts +97 -0
  722. package/src/richtext/index.ts +42 -0
  723. package/src/richtext/links.ts +78 -0
  724. package/src/richtext/menu.ts +49 -0
  725. package/src/richtext/node.ts +406 -0
  726. package/src/richtext/runs.ts +253 -0
  727. package/src/table/hx.ts +51 -0
  728. package/src/table/index.ts +1219 -0
  729. package/src/table/rows.ts +275 -0
  730. package/src/terminal/backends.ts +242 -0
  731. package/src/terminal/hx.ts +51 -0
  732. package/src/terminal/index.ts +574 -0
  733. package/src/terminal/title.ts +172 -0
  734. package/src/terminal/vt/colors.ts +247 -0
  735. package/src/terminal/vt/diff.ts +467 -0
  736. package/src/terminal/vt/fonts.ts +233 -0
  737. package/src/terminal/vt/index.ts +443 -0
  738. package/src/terminal/vt/keys.ts +369 -0
  739. package/src/terminal/vt/mouse.ts +144 -0
  740. package/src/terminal/vt/node.ts +1242 -0
  741. package/src/terminal/vt/pty.ts +334 -0
  742. package/src/terminal/vt/renderer.ts +555 -0
  743. package/src/terminal/vt/timers.ts +31 -0
  744. package/src/terminal/vt/xterm.ts +193 -0
  745. package/src/terminal-output/hx.ts +51 -0
  746. package/src/terminal-output/index.ts +340 -0
  747. package/src/terminal-output/runs.ts +79 -0
  748. package/src/three/canvas.ts +451 -0
  749. package/src/three/events.ts +197 -0
  750. package/src/three/geometries.ts +429 -0
  751. package/src/three/globals.ts +34 -0
  752. package/src/three/hx.ts +22 -0
  753. package/src/three/index.ts +98 -0
  754. package/src/three/jsx-dev-runtime.ts +27 -0
  755. package/src/three/jsx-runtime.ts +38 -0
  756. package/src/three/jsx.ts +275 -0
  757. package/src/three/materials.ts +270 -0
  758. package/src/three/math.ts +585 -0
  759. package/src/three/objects.ts +397 -0
  760. package/src/three/passes.ts +90 -0
  761. package/src/three/postprocess.ts +677 -0
  762. package/src/three/raycast.ts +189 -0
  763. package/src/three/react-reconciler.d.ts +50 -0
  764. package/src/three/reconciler.ts +624 -0
  765. package/src/three/renderer-direct.ts +1055 -0
  766. package/src/three/renderer-indirect.ts +570 -0
  767. package/src/three/store.ts +207 -0
  768. package/src/timeline/hx.ts +31 -0
  769. package/src/timeline/index.ts +603 -0
  770. package/src/tray-host/hx.ts +51 -0
  771. package/src/tray-host/index.ts +331 -0
  772. package/src/tray-host/manager.ts +639 -0
  773. package/src/tray-host/notify.ts +102 -0
  774. package/src/tray-host/protocol.ts +235 -0
  775. package/src/tree/hx.ts +51 -0
  776. package/src/tree/index.ts +1087 -0
  777. package/src/tree/internal.ts +87 -0
  778. package/src/tree/rows.ts +334 -0
  779. package/src/index.d.ts +0 -2
  780. package/src/index.js +0 -9
  781. package/src/sparkline/index.d.ts +0 -29
  782. package/src/sparkline/index.js +0 -50
  783. package/src/sparkline/node.js +0 -72
@@ -0,0 +1,724 @@
1
+ // Block layout: the driver, and the formatting context everything else hangs
2
+ // off.
3
+ //
4
+ // Boxes are laid out into **absolute document coordinates** in one pass. The
5
+ // alternative — relative offsets resolved by a second walk — buys incremental
6
+ // relayout of a subtree, and it is not worth it here: paint, hit testing and
7
+ // the selection accessors all want absolute rectangles, and every one of them
8
+ // runs far more often than layout does. So layout writes what they read.
9
+ //
10
+ // Float coordinates are absolute for the same reason, which is what lets the
11
+ // inline pass ask "how wide is the line at this y" without knowing whose
12
+ // formatting context it is inside.
13
+ import { AUTO, isPct, resolve, resolveOrNull } from '../css/values.js';
14
+ import { Box } from './boxes.js';
15
+ import { FloatContext } from './floats.js';
16
+ import { layoutInline } from './inline.js';
17
+ import { layoutFlex } from './flex.js';
18
+ import { layoutTable } from './table.js';
19
+ import { computePaintBounds } from '../paint.js';
20
+ /** Lay the whole document out at a width. */
21
+ export function layoutDocument(tree, fonts, viewportWidth, viewportHeight) {
22
+ const ctx = {
23
+ fonts,
24
+ viewportWidth,
25
+ viewportHeight,
26
+ positioned: [],
27
+ layoutSubtree: (box, width) => layoutSubtree(box, ctx, width),
28
+ };
29
+ const root = tree.root;
30
+ root.x = 0;
31
+ root.y = 0;
32
+ root.width = viewportWidth;
33
+ // The root box stands in for `<body>` when the document has none (see
34
+ // `Cascade.rootStyle`), so it may carry a margin — and a margin on the
35
+ // initial containing block has nothing to collapse against and nothing to
36
+ // sit inside. Folding it into the padding is what a browser's body margin
37
+ // amounts to, and it keeps `contentX` the one thing layout reads.
38
+ resolveEdges(root, viewportWidth);
39
+ root.padTop += root.marginTop;
40
+ root.padRight += root.marginRight;
41
+ root.padBottom += root.marginBottom;
42
+ root.padLeft += root.marginLeft;
43
+ root.marginTop = 0;
44
+ root.marginRight = 0;
45
+ root.marginBottom = 0;
46
+ root.marginLeft = 0;
47
+ const contentWidth = Math.max(0, viewportWidth - root.horizontalExtra);
48
+ const floats = new FloatContext(root.contentX, root.contentX + contentWidth);
49
+ const flow = layoutChildren(root, ctx, floats, root.contentY, contentWidth);
50
+ const floatBottom = floats.bottom === -Infinity ? 0 : floats.bottom - root.contentY;
51
+ root.height = Math.max(flow.height, floatBottom) + root.verticalExtra;
52
+ // Positioned boxes last, and in the order they were found, so a later one
53
+ // can be positioned against an earlier one's resolved rectangle.
54
+ for (let i = 0; i < ctx.positioned.length; i += 1) {
55
+ const { box, containing } = ctx.positioned[i];
56
+ layoutPositioned(box, containing, ctx);
57
+ }
58
+ // `position: relative` moves a box after everything else has been placed
59
+ // against where it *was* — which is the whole of what makes it relative —
60
+ // and the ink bounds are computed after that, so culling sees where boxes
61
+ // ended up rather than where they were laid out.
62
+ applyRelativeOffsets(root);
63
+ computePaintBounds(root);
64
+ let bottom = root.height;
65
+ for (const { box } of ctx.positioned) {
66
+ if (box.style.position !== 'fixed')
67
+ bottom = Math.max(bottom, box.y + box.height);
68
+ }
69
+ return { width: viewportWidth, height: bottom };
70
+ }
71
+ /**
72
+ * The collapsed value of two adjoining margins: the largest positive plus
73
+ * the most negative — CSS 8.3.1's rule, whole. Both-positive takes the max,
74
+ * both-negative the min, and a mixed pair genuinely adds, which is what
75
+ * makes a `-8px` pull work against a `40px` push and come out at `32`.
76
+ */
77
+ function collapseMargins(a, b) {
78
+ return Math.max(0, Math.max(a, b)) + Math.min(0, Math.min(a, b));
79
+ }
80
+ /**
81
+ * Lay out a box's children as a block formatting context's contents, or as
82
+ * one inline formatting context when they are all inline-level.
83
+ */
84
+ function layoutChildren(box, ctx, floats, contentTop, contentWidth) {
85
+ const contentLeft = box.contentX;
86
+ if (establishesInlineContext(box)) {
87
+ const height = layoutInlineContent(box, ctx, floats, contentTop, contentWidth, contentLeft);
88
+ return { height, hanging: 0 };
89
+ }
90
+ let y = contentTop;
91
+ /** The margin left hanging by the previous sibling, for collapsing. */
92
+ let pendingMargin = 0;
93
+ let first = true;
94
+ for (const child of box.children) {
95
+ if (child.kind === 'text' && !child.text.trim())
96
+ continue;
97
+ if (child.outOfFlow) {
98
+ ctx.positioned.push({
99
+ box: child,
100
+ containing: containingBlockFor(child) ?? box,
101
+ });
102
+ continue;
103
+ }
104
+ if (child.isFloat) {
105
+ layoutFloat(child, ctx, floats, y + pendingMargin, contentWidth);
106
+ continue;
107
+ }
108
+ resolveEdges(child, contentWidth);
109
+ const top = child.marginTop;
110
+ const collapsed = first ? top : collapseMargins(pendingMargin, top);
111
+ let childY = y + collapsed;
112
+ const clearance = floats.clearance(child.style.clear);
113
+ if (clearance > -Infinity && clearance > childY)
114
+ childY = clearance;
115
+ layoutBlockLevel(child, ctx, floats, contentLeft, childY, contentWidth);
116
+ y = child.y + child.height;
117
+ pendingMargin = child.marginBottom;
118
+ first = false;
119
+ }
120
+ // The last child's bottom margin collapses through the parent's bottom
121
+ // edge unless a border, padding, a specified height or a formatting
122
+ // context of its own stops it — which is why a `<div>` around a `<p>` is
123
+ // not 16px taller than the paragraph. The margin is not *lost*, though: it
124
+ // escapes, and the caller merges it into the box's own bottom margin so
125
+ // the next sibling still sees it. Dropping it here was the bug that made
126
+ // `<div><p>…</p></div><p>…</p>` set the two paragraphs solid.
127
+ if (!first &&
128
+ !box.borderBottom &&
129
+ !box.padBottom &&
130
+ box.style.height === AUTO &&
131
+ !establishesBFC(box)) {
132
+ return { height: y - contentTop, hanging: pendingMargin };
133
+ }
134
+ return { height: y + pendingMargin - contentTop, hanging: 0 };
135
+ }
136
+ function layoutInlineContent(box, ctx, floats, contentTop, contentWidth, contentLeft) {
137
+ // Floats inside an inline context are placed before the lines are built,
138
+ // so the lines already know to avoid them.
139
+ for (const child of box.children) {
140
+ if (child.outOfFlow) {
141
+ ctx.positioned.push({
142
+ box: child,
143
+ containing: containingBlockFor(child) ?? box,
144
+ });
145
+ }
146
+ else if (child.isFloat) {
147
+ layoutFloat(child, ctx, floats, contentTop, contentWidth);
148
+ }
149
+ }
150
+ // Atomics have to be sized before the line breaker can place them.
151
+ sizeAtomics(box, ctx, contentWidth);
152
+ const result = layoutInline(box, {
153
+ fonts: ctx.fonts,
154
+ width: contentWidth,
155
+ startY: contentTop,
156
+ floats,
157
+ originX: contentLeft,
158
+ });
159
+ // The inline pass works in content-box coordinates; move the result into
160
+ // document space now, so nothing below this line has to know the
161
+ // difference.
162
+ for (const line of result.lines) {
163
+ line.x += contentLeft;
164
+ line.y += contentTop;
165
+ for (const placed of line.atomics) {
166
+ placed.x += contentLeft;
167
+ placed.y += contentTop;
168
+ moveTo(placed.box, placed.x, placed.y + placed.box.marginTop);
169
+ }
170
+ for (const text of line.texts) {
171
+ text.drawX += contentLeft;
172
+ text.drawY += contentTop;
173
+ }
174
+ }
175
+ box.lines = result.lines;
176
+ return result.height;
177
+ }
178
+ /** Size every atomic in an inline context. */
179
+ function sizeAtomics(box, ctx, contentWidth) {
180
+ for (const child of box.children) {
181
+ if (child.outOfFlow || child.isFloat)
182
+ continue;
183
+ if (child.kind === 'inline') {
184
+ sizeAtomics(child, ctx, contentWidth);
185
+ continue;
186
+ }
187
+ if (child.kind === 'text' || child.kind === 'break')
188
+ continue;
189
+ resolveEdges(child, contentWidth);
190
+ layoutAtomic(child, ctx, contentWidth);
191
+ }
192
+ }
193
+ /** An inline-level box that lays out as a block inside: `inline-block`, a
194
+ * replaced element, an `inline-table`. */
195
+ function layoutAtomic(box, ctx, availableWidth) {
196
+ if (box.kind === 'replaced') {
197
+ sizeReplaced(box, availableWidth);
198
+ return;
199
+ }
200
+ const width = shrinkToFitWidth(box, ctx, availableWidth);
201
+ layoutInternals(box, ctx, width, 0, 0);
202
+ }
203
+ function layoutBlockLevel(box, ctx, outerFloats, contentLeft, y, containingWidth) {
204
+ resolveEdges(box, containingWidth);
205
+ if (box.kind === 'replaced') {
206
+ sizeReplaced(box, containingWidth);
207
+ placeBlock(box, contentLeft, y, containingWidth);
208
+ return;
209
+ }
210
+ const width = blockWidth(box, containingWidth);
211
+ box.width = width;
212
+ placeBlock(box, contentLeft, y, containingWidth);
213
+ layoutInternals(box, ctx, width, box.x, box.y, outerFloats);
214
+ }
215
+ /**
216
+ * Lay a box out at a width and report the widest thing it drew.
217
+ *
218
+ * This is what a table column asks twice — once unbounded for max-content,
219
+ * once at a hair's width for min-content — and it exists rather than the
220
+ * caller reading `box.width` because a `width: auto` box laid out unbounded
221
+ * *is* unbounded: it fills its containing block, and its containing block was
222
+ * `Infinity`. The answer has to come from what the content came to, which is
223
+ * exactly what `intrinsicWidth` walks.
224
+ */
225
+ export function measureIntrinsicWidth(box, ctx, available) {
226
+ ctx.layoutSubtree(box, available);
227
+ const specified = box.style.width;
228
+ if (specified !== AUTO && Number.isFinite(box.width))
229
+ return box.width;
230
+ return intrinsicWidth(box) + box.horizontalExtra;
231
+ }
232
+ /**
233
+ * Lay a box and everything under it out at a width, at the origin — what
234
+ * `LayoutContext.layoutSubtree` hands to `flex.ts` and `table.ts`, and what
235
+ * the shrink-to-fit probe uses. A replaced box is sized rather than laid out,
236
+ * because there is nothing inside it to lay out.
237
+ */
238
+ function layoutSubtree(box, ctx, width) {
239
+ resolveEdges(box, Number.isFinite(width) ? width : 0);
240
+ if (box.kind === 'replaced') {
241
+ sizeReplaced(box, width);
242
+ box.x = 0;
243
+ box.y = 0;
244
+ return;
245
+ }
246
+ const borderBox = Number.isFinite(width)
247
+ ? clampWidth(box, width, width)
248
+ : Infinity;
249
+ layoutInternals(box, ctx, borderBox, 0, 0);
250
+ }
251
+ /**
252
+ * Lay a box's inside out and give it a height. `outerFloats` is the parent's
253
+ * float context, passed only when this box does *not* establish one of its
254
+ * own — which is the difference between text flowing beside a float that
255
+ * started in an earlier sibling and text that starts below it.
256
+ */
257
+ function layoutInternals(box, ctx, borderBoxWidth, x, y, outerFloats) {
258
+ box.x = x;
259
+ box.y = y;
260
+ box.width = borderBoxWidth;
261
+ const contentWidth = box.contentWidth;
262
+ if (box.kind === 'flex') {
263
+ const height = layoutFlex(box, ctx, contentWidth);
264
+ finishHeight(box, height);
265
+ return;
266
+ }
267
+ if (box.kind === 'table') {
268
+ const height = layoutTable(box, ctx, contentWidth);
269
+ finishHeight(box, height);
270
+ return;
271
+ }
272
+ const ownFloats = establishesBFC(box) || !outerFloats;
273
+ const floats = ownFloats
274
+ ? new FloatContext(box.contentX, box.contentX + contentWidth)
275
+ : outerFloats;
276
+ const flow = layoutChildren(box, ctx, floats, box.contentY, contentWidth);
277
+ // A box that establishes a formatting context contains its own floats, so
278
+ // it has to be at least as tall as they are. One that does not, does not —
279
+ // that is the classic "collapsed parent" every author has met.
280
+ const withFloats = ownFloats
281
+ ? Math.max(flow.height, floats.bottom === -Infinity ? 0 : floats.bottom - box.contentY)
282
+ : flow.height;
283
+ finishHeight(box, withFloats);
284
+ // The margin that escaped through this box's bottom edge becomes part of
285
+ // its own: the parent's flow loop reads `child.marginBottom` for the next
286
+ // sibling's collapse, which is exactly where an escaped margin goes.
287
+ if (flow.hanging) {
288
+ box.marginBottom = collapseMargins(box.marginBottom, flow.hanging);
289
+ }
290
+ if (box.markerText)
291
+ layoutMarker(box, ctx);
292
+ }
293
+ /** The first line box anywhere under a box, in layout order. */
294
+ function firstLineIn(box) {
295
+ if (box.lines?.length)
296
+ return box.lines[0];
297
+ for (const child of box.children) {
298
+ if (child.outOfFlow || child.isFloat)
299
+ continue;
300
+ const found = firstLineIn(child);
301
+ if (found)
302
+ return found;
303
+ }
304
+ return null;
305
+ }
306
+ /**
307
+ * A list item's marker.
308
+ *
309
+ * `outside` — the default, and what `<ul>`'s padding leaves room for — sits
310
+ * in the padding to the left of the content, right-aligned against it so a
311
+ * list numbered past 9 stays lined up. `inside` sits at the content edge and
312
+ * the text does not reserve room for it, which is what the keyword means.
313
+ *
314
+ * The marker is laid out here rather than being a box because it is not
315
+ * content: it must not join the selection, or copying a list would paste a
316
+ * bullet before every line.
317
+ */
318
+ function layoutMarker(box, ctx) {
319
+ const fonts = ctx.fonts;
320
+ if (!fonts)
321
+ return;
322
+ const style = box.style;
323
+ const layout = fonts.layout([
324
+ {
325
+ text: box.markerText,
326
+ family: style.fontFamily,
327
+ size: style.fontSize,
328
+ color: style.color,
329
+ },
330
+ ], { family: style.fontFamily, size: style.fontSize, color: style.color }, {});
331
+ box.markerLayout = layout;
332
+ const gap = Math.round(style.fontSize * 0.4);
333
+ // The marker sits on the first line of the item's *content*, which is not
334
+ // always the item's own: an `<li>` holding a paragraph, or one holding text
335
+ // and a nested list, has its inline content in an anonymous block. Looking
336
+ // only at `box.lines` puts the marker of every such item at the content
337
+ // top, which reads as a missing bullet rather than a misplaced one.
338
+ const first = firstLineIn(box);
339
+ const baselineY = first ? first.y + first.baseline : box.contentY;
340
+ const own = layout.lines[0];
341
+ box.markerY = baselineY - (own ? own.baseline : style.fontSize);
342
+ box.markerX =
343
+ style.listStylePosition === 'inside'
344
+ ? box.contentX
345
+ : box.contentX - gap - layout.width;
346
+ }
347
+ function finishHeight(box, contentHeight) {
348
+ const specified = resolveOrNull(box.style.height, NaN);
349
+ const height = specified ?? contentHeight;
350
+ const borderBox = box.style.boxSizing === 'border-box' && specified !== null
351
+ ? Math.max(height, box.verticalExtra)
352
+ : height + box.verticalExtra;
353
+ box.height = clampHeight(box, borderBox);
354
+ }
355
+ function clampHeight(box, height) {
356
+ let out = height;
357
+ const min = resolveOrNull(box.style.minHeight, NaN);
358
+ const max = box.style.maxHeight === 'none'
359
+ ? null
360
+ : resolveOrNull(box.style.maxHeight, NaN);
361
+ if (max !== null)
362
+ out = Math.min(out, max + (box.style.boxSizing === 'border-box' ? 0 : box.verticalExtra));
363
+ if (min !== null)
364
+ out = Math.max(out, min + (box.style.boxSizing === 'border-box' ? 0 : box.verticalExtra));
365
+ return Math.max(0, out);
366
+ }
367
+ /** Place a block-level box horizontally, honouring `margin: auto`. */
368
+ function placeBlock(box, contentLeft, y, containingWidth) {
369
+ const style = box.style;
370
+ const leftAuto = style.marginLeft === AUTO;
371
+ const rightAuto = style.marginRight === AUTO;
372
+ const slack = containingWidth - box.width - box.marginLeft - box.marginRight;
373
+ let left = contentLeft + box.marginLeft;
374
+ if (slack > 0) {
375
+ if (leftAuto && rightAuto)
376
+ left = contentLeft + slack / 2 + box.marginLeft;
377
+ else if (leftAuto)
378
+ left = contentLeft + slack + box.marginLeft;
379
+ }
380
+ box.x = left;
381
+ box.y = y;
382
+ }
383
+ /** The border-box width of an in-flow block-level box. */
384
+ function blockWidth(box, containingWidth) {
385
+ const style = box.style;
386
+ const available = containingWidth - box.marginLeft - box.marginRight;
387
+ if (style.width === AUTO) {
388
+ return clampWidth(box, Math.max(0, available), containingWidth);
389
+ }
390
+ const specified = resolve(style.width, containingWidth, 0);
391
+ const borderBox = style.boxSizing === 'border-box'
392
+ ? Math.max(specified, box.horizontalExtra)
393
+ : specified + box.horizontalExtra;
394
+ return clampWidth(box, borderBox, containingWidth);
395
+ }
396
+ function clampWidth(box, width, containingWidth) {
397
+ const style = box.style;
398
+ const extra = style.boxSizing === 'border-box' ? 0 : box.horizontalExtra;
399
+ let out = width;
400
+ const max = style.maxWidth === 'none'
401
+ ? null
402
+ : resolveOrNull(style.maxWidth, containingWidth);
403
+ if (max !== null)
404
+ out = Math.min(out, max + extra);
405
+ const min = resolveOrNull(style.minWidth, containingWidth);
406
+ if (min !== null)
407
+ out = Math.max(out, min + extra);
408
+ return Math.max(0, out);
409
+ }
410
+ /**
411
+ * Shrink-to-fit: the width a float, an inline-block or a positioned box with
412
+ * `width: auto` takes.
413
+ *
414
+ * CSS says `min(max(preferred-minimum, available), preferred)`, where the two
415
+ * preferred widths are the max-content and min-content sizes. This computes
416
+ * the max-content size by laying the box out unconstrained and skips the
417
+ * min-content one, which costs a second full pass and only changes the answer
418
+ * when a single unbreakable word is wider than the space — where the box
419
+ * overflows either way. The measured pass is thrown away; the caller lays the
420
+ * box out again at the width this returns.
421
+ */
422
+ function shrinkToFitWidth(box, ctx, available) {
423
+ const style = box.style;
424
+ if (style.width !== AUTO) {
425
+ const specified = resolve(style.width, available, 0);
426
+ const borderBox = style.boxSizing === 'border-box'
427
+ ? Math.max(specified, box.horizontalExtra)
428
+ : specified + box.horizontalExtra;
429
+ return clampWidth(box, borderBox, available);
430
+ }
431
+ const probe = new FloatContext(0, Infinity);
432
+ const saved = box.lines;
433
+ layoutInternals(box, ctx, Infinity, 0, 0, probe);
434
+ const preferred = intrinsicWidth(box) + box.horizontalExtra;
435
+ box.lines = saved;
436
+ return clampWidth(box, Math.min(Math.max(preferred, 0), available), available);
437
+ }
438
+ /**
439
+ * The widest thing a laid-out box drew — its max-content width.
440
+ *
441
+ * A block child laid out at an unbounded width *has* an unbounded width (a
442
+ * `width: auto` block fills its containing block, and its containing block
443
+ * was `Infinity`), so its own width says nothing and only what it drew does.
444
+ * Skipping the non-finite ones is what stops the probe from answering
445
+ * `Infinity` for every box that contains a paragraph.
446
+ */
447
+ function intrinsicWidth(box) {
448
+ let widest = 0;
449
+ if (box.lines) {
450
+ for (const line of box.lines)
451
+ widest = Math.max(widest, line.width);
452
+ }
453
+ for (const child of box.children) {
454
+ if (child.kind === 'text' || child.kind === 'break')
455
+ continue;
456
+ if (child.outOfFlow)
457
+ continue;
458
+ const margins = child.marginLeft + child.marginRight;
459
+ const inner = intrinsicWidth(child) + child.horizontalExtra + margins;
460
+ const own = Number.isFinite(child.width) ? child.width + margins : 0;
461
+ widest = Math.max(widest, inner, own);
462
+ }
463
+ return widest;
464
+ }
465
+ /** A replaced box's size: the style wins, then the attributes, then the
466
+ * intrinsic size, and an aspect ratio is kept when only one axis is given. */
467
+ function sizeReplaced(box, containingWidth) {
468
+ const style = box.style;
469
+ const intrinsicW = box.intrinsicWidth || 0;
470
+ const intrinsicH = box.intrinsicHeight || 0;
471
+ const ratio = intrinsicW > 0 && intrinsicH > 0 ? intrinsicH / intrinsicW : 0;
472
+ let width = resolveOrNull(style.width, containingWidth);
473
+ let height = resolveOrNull(style.height, NaN);
474
+ if (width === null && height === null) {
475
+ width = intrinsicW;
476
+ height = intrinsicH;
477
+ }
478
+ else if (width === null) {
479
+ width = ratio ? height / ratio : intrinsicW;
480
+ }
481
+ else if (height === null) {
482
+ height = ratio ? width * ratio : intrinsicH;
483
+ }
484
+ const contentW = Math.max(0, width ?? 0);
485
+ const contentH = Math.max(0, height ?? 0);
486
+ const borderBoxW = style.boxSizing === 'border-box'
487
+ ? Math.max(contentW, box.horizontalExtra)
488
+ : contentW + box.horizontalExtra;
489
+ const borderBoxH = style.boxSizing === 'border-box'
490
+ ? Math.max(contentH, box.verticalExtra)
491
+ : contentH + box.verticalExtra;
492
+ box.width = clampWidth(box, borderBoxW, containingWidth);
493
+ box.height = clampHeight(box, borderBoxH);
494
+ // `hr` has no intrinsic size and its whole appearance is its border, so a
495
+ // zero content height is the right answer rather than a missing one.
496
+ if (box.replaced === 'hr' && box.style.height === AUTO) {
497
+ box.height = box.verticalExtra;
498
+ }
499
+ }
500
+ /** Place and size a float, and register it with the formatting context. */
501
+ function layoutFloat(box, ctx, floats, y, containingWidth) {
502
+ resolveEdges(box, containingWidth);
503
+ if (box.kind === 'replaced')
504
+ sizeReplaced(box, containingWidth);
505
+ else {
506
+ const width = shrinkToFitWidth(box, ctx, containingWidth);
507
+ layoutInternals(box, ctx, width, 0, 0);
508
+ }
509
+ const outerWidth = box.width + box.marginLeft + box.marginRight;
510
+ const clearance = floats.clearance(box.style.clear);
511
+ const from = Math.max(y, clearance === -Infinity ? y : clearance);
512
+ const top = floats.placeAt(from, outerWidth, box.style.float === 'right' ? 'right' : 'left');
513
+ const band = floats.bandAt(top, 1);
514
+ const x = box.style.float === 'right'
515
+ ? band.right - outerWidth + box.marginLeft
516
+ : band.left + box.marginLeft;
517
+ moveTo(box, x, top + box.marginTop);
518
+ floats.add({
519
+ left: x - box.marginLeft,
520
+ right: x - box.marginLeft + outerWidth,
521
+ top,
522
+ bottom: top + box.height + box.marginTop + box.marginBottom,
523
+ side: box.style.float === 'right' ? 'right' : 'left',
524
+ });
525
+ }
526
+ /**
527
+ * An absolutely positioned box, against its containing block.
528
+ *
529
+ * The static position — where the box would have been in flow — is not
530
+ * tracked: a box with neither `top` nor `bottom` is placed at its containing
531
+ * block's content top rather than where its markup sat. That is the one
532
+ * deliberate simplification in positioning, and it is invisible for the
533
+ * overwhelmingly common `position: absolute` with an explicit offset, which
534
+ * is how a badge, a tooltip and an overlay are all written.
535
+ */
536
+ function layoutPositioned(box, containing, ctx) {
537
+ const cbWidth = containing.contentWidth;
538
+ const cbHeight = containing.contentHeight;
539
+ const cbX = containing.contentX;
540
+ const cbY = containing.contentY;
541
+ resolveEdges(box, cbWidth);
542
+ const style = box.style;
543
+ const left = resolveOrNull(style.left, cbWidth);
544
+ const right = resolveOrNull(style.right, cbWidth);
545
+ const top = resolveOrNull(style.top, cbHeight);
546
+ const bottom = resolveOrNull(style.bottom, cbHeight);
547
+ let width;
548
+ if (style.width !== AUTO) {
549
+ width = blockWidth(box, cbWidth);
550
+ }
551
+ else if (left !== null && right !== null) {
552
+ width = Math.max(0, cbWidth - left - right - box.marginLeft - box.marginRight);
553
+ }
554
+ else {
555
+ width = shrinkToFitWidth(box, ctx, cbWidth);
556
+ }
557
+ if (box.kind === 'replaced')
558
+ sizeReplaced(box, cbWidth);
559
+ else
560
+ layoutInternals(box, ctx, width, 0, 0);
561
+ const x = left !== null
562
+ ? cbX + left + box.marginLeft
563
+ : right !== null
564
+ ? cbX + cbWidth - right - box.width - box.marginRight
565
+ : cbX;
566
+ const y = top !== null
567
+ ? cbY + top + box.marginTop
568
+ : bottom !== null
569
+ ? cbY + cbHeight - bottom - box.height - box.marginBottom
570
+ : cbY;
571
+ moveTo(box, x, y);
572
+ }
573
+ /** The nearest positioned ancestor, or null for the initial containing
574
+ * block. Walks the box tree rather than the DOM, so an anonymous box in
575
+ * between is transparent — which is what the spec means by "the nearest
576
+ * positioned ancestor". */
577
+ function containingBlockFor(box) {
578
+ let node = box.parent;
579
+ while (node) {
580
+ if (node.style.position !== 'static' || node.parent === null)
581
+ return node;
582
+ node = node.parent;
583
+ }
584
+ return null;
585
+ }
586
+ /** Move a box and everything under it, keeping the subtree's shape. */
587
+ export function moveTo(box, x, y) {
588
+ translate(box, x - box.x, y - box.y);
589
+ }
590
+ function translate(box, dx, dy) {
591
+ if (!dx && !dy)
592
+ return;
593
+ box.x += dx;
594
+ box.y += dy;
595
+ if (box.lines) {
596
+ for (const line of box.lines) {
597
+ line.x += dx;
598
+ line.y += dy;
599
+ for (const text of line.texts) {
600
+ text.drawX += dx;
601
+ text.drawY += dy;
602
+ }
603
+ for (const placed of line.atomics) {
604
+ placed.x += dx;
605
+ placed.y += dy;
606
+ }
607
+ }
608
+ }
609
+ for (const child of box.children)
610
+ translate(child, dx, dy);
611
+ }
612
+ /** Resolve the margin, border and padding edges against a containing width.
613
+ * Percentages on *every* one of them are of the containing block's width,
614
+ * vertical padding included — which surprises everyone once. */
615
+ export function resolveEdges(box, containingWidth) {
616
+ const style = box.style;
617
+ box.borderTop =
618
+ style.borderTopStyle === 'none' || style.borderTopStyle === 'hidden'
619
+ ? 0
620
+ : style.borderTopWidth;
621
+ box.borderRight =
622
+ style.borderRightStyle === 'none' || style.borderRightStyle === 'hidden'
623
+ ? 0
624
+ : style.borderRightWidth;
625
+ box.borderBottom =
626
+ style.borderBottomStyle === 'none' || style.borderBottomStyle === 'hidden'
627
+ ? 0
628
+ : style.borderBottomWidth;
629
+ box.borderLeft =
630
+ style.borderLeftStyle === 'none' || style.borderLeftStyle === 'hidden'
631
+ ? 0
632
+ : style.borderLeftWidth;
633
+ box.padTop = edge(style.paddingTop, containingWidth);
634
+ box.padRight = edge(style.paddingRight, containingWidth);
635
+ box.padBottom = edge(style.paddingBottom, containingWidth);
636
+ box.padLeft = edge(style.paddingLeft, containingWidth);
637
+ box.marginTop = edge(style.marginTop, containingWidth);
638
+ box.marginRight = edge(style.marginRight, containingWidth);
639
+ box.marginBottom = edge(style.marginBottom, containingWidth);
640
+ box.marginLeft = edge(style.marginLeft, containingWidth);
641
+ }
642
+ function edge(len, containingWidth) {
643
+ if (len === AUTO)
644
+ return 0;
645
+ if (isPct(len))
646
+ return Number.isFinite(containingWidth)
647
+ ? (len.pct / 100) * containingWidth
648
+ : 0;
649
+ return len;
650
+ }
651
+ /** Whether every in-flow child is inline-level, which is what makes this box
652
+ * an inline formatting context rather than a block one. */
653
+ function establishesInlineContext(box) {
654
+ if (box.kind === 'table' || box.kind === 'flex')
655
+ return false;
656
+ let sawInline = false;
657
+ for (const child of box.children) {
658
+ if (child.outOfFlow || child.isFloat)
659
+ continue;
660
+ switch (child.kind) {
661
+ case 'text':
662
+ case 'inline':
663
+ case 'break':
664
+ sawInline = true;
665
+ break;
666
+ case 'replaced':
667
+ sawInline = true;
668
+ break;
669
+ default:
670
+ if (isInlineLevel(child))
671
+ sawInline = true;
672
+ else
673
+ return false;
674
+ break;
675
+ }
676
+ }
677
+ return sawInline;
678
+ }
679
+ function isInlineLevel(box) {
680
+ const d = box.style.display;
681
+ return (d === 'inline' ||
682
+ d === 'inline-block' ||
683
+ d === 'inline-flex' ||
684
+ d === 'inline-table');
685
+ }
686
+ /** Whether a box establishes a block formatting context — contains its own
687
+ * floats, and does not collapse margins through its edges. */
688
+ export function establishesBFC(box) {
689
+ const style = box.style;
690
+ if (style.overflowX !== 'visible' || style.overflowY !== 'visible')
691
+ return true;
692
+ if (style.float !== 'none')
693
+ return true;
694
+ if (style.position === 'absolute' || style.position === 'fixed')
695
+ return true;
696
+ if (style.display === 'inline-block' ||
697
+ style.display === 'flex' ||
698
+ style.display === 'inline-flex') {
699
+ return true;
700
+ }
701
+ if (box.kind === 'table-cell' || box.kind === 'table')
702
+ return true;
703
+ return box.parent === null;
704
+ }
705
+ /** What a box's `position: relative` offset moves it by, applied after
706
+ * layout so it does not affect anything else's position — which is the
707
+ * whole of what makes it *relative*. */
708
+ export function applyRelativeOffsets(box) {
709
+ for (const child of box.children)
710
+ applyRelativeOffsets(child);
711
+ const style = box.style;
712
+ if (style.position !== 'relative' && style.position !== 'sticky')
713
+ return;
714
+ const parentWidth = box.parent ? box.parent.contentWidth : 0;
715
+ const parentHeight = box.parent ? box.parent.contentHeight : 0;
716
+ const left = resolveOrNull(style.left, parentWidth);
717
+ const right = resolveOrNull(style.right, parentWidth);
718
+ const top = resolveOrNull(style.top, parentHeight);
719
+ const bottom = resolveOrNull(style.bottom, parentHeight);
720
+ const dx = left ?? (right !== null ? -right : 0);
721
+ const dy = top ?? (bottom !== null ? -bottom : 0);
722
+ translate(box, dx, dy);
723
+ }
724
+ //# sourceMappingURL=block.js.map