@react-x11/components 0.8.0 → 0.10.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 (721) hide show
  1. package/README.md +105 -38
  2. package/dist/charts/node.d.ts +12 -2
  3. package/dist/charts/node.d.ts.map +1 -1
  4. package/dist/charts/node.js +50 -16
  5. package/dist/charts/node.js.map +1 -1
  6. package/dist/charts/render.d.ts +12 -3
  7. package/dist/charts/render.d.ts.map +1 -1
  8. package/dist/charts/render.js +94 -25
  9. package/dist/charts/render.js.map +1 -1
  10. package/dist/code/index.d.ts.map +1 -1
  11. package/dist/code/index.js +3 -1
  12. package/dist/code/index.js.map +1 -1
  13. package/dist/code-editor/completion.d.ts.map +1 -1
  14. package/dist/code-editor/completion.js +3 -2
  15. package/dist/code-editor/completion.js.map +1 -1
  16. package/dist/code-editor/index.d.ts.map +1 -1
  17. package/dist/code-editor/index.js +19 -0
  18. package/dist/code-editor/index.js.map +1 -1
  19. package/dist/code-editor/node.d.ts +177 -7
  20. package/dist/code-editor/node.d.ts.map +1 -1
  21. package/dist/code-editor/node.js +1329 -164
  22. package/dist/code-editor/node.js.map +1 -1
  23. package/dist/code-language/languages/glsl.d.ts.map +1 -1
  24. package/dist/code-language/languages/glsl.js +10 -2
  25. package/dist/code-language/languages/glsl.js.map +1 -1
  26. package/dist/code-language/languages/javascript.d.ts.map +1 -1
  27. package/dist/code-language/languages/javascript.js +18 -3
  28. package/dist/code-language/languages/javascript.js.map +1 -1
  29. package/dist/code-language/languages/json.d.ts.map +1 -1
  30. package/dist/code-language/languages/json.js +10 -2
  31. package/dist/code-language/languages/json.js.map +1 -1
  32. package/dist/code-language/languages/shell.d.ts.map +1 -1
  33. package/dist/code-language/languages/shell.js +10 -2
  34. package/dist/code-language/languages/shell.js.map +1 -1
  35. package/dist/code-language/languages/sql.d.ts.map +1 -1
  36. package/dist/code-language/languages/sql.js +20 -2
  37. package/dist/code-language/languages/sql.js.map +1 -1
  38. package/dist/code-language/stream.d.ts +22 -0
  39. package/dist/code-language/stream.d.ts.map +1 -1
  40. package/dist/code-language/stream.js +259 -9
  41. package/dist/code-language/stream.js.map +1 -1
  42. package/dist/code-language/types.d.ts +5 -4
  43. package/dist/code-language/types.d.ts.map +1 -1
  44. package/dist/codeblock/index.d.ts +13 -2
  45. package/dist/codeblock/index.d.ts.map +1 -1
  46. package/dist/codeblock/index.js +20 -3
  47. package/dist/codeblock/index.js.map +1 -1
  48. package/dist/embed/client.d.ts +48 -3
  49. package/dist/embed/client.d.ts.map +1 -1
  50. package/dist/embed/client.js +79 -5
  51. package/dist/embed/client.js.map +1 -1
  52. package/dist/embed/index.d.ts +1 -1
  53. package/dist/embed/index.d.ts.map +1 -1
  54. package/dist/embed/index.js +1 -1
  55. package/dist/embed/index.js.map +1 -1
  56. package/dist/flow/draw.d.ts +50 -0
  57. package/dist/flow/draw.d.ts.map +1 -1
  58. package/dist/flow/draw.js +132 -33
  59. package/dist/flow/draw.js.map +1 -1
  60. package/dist/flow/gl/color.d.ts +13 -0
  61. package/dist/flow/gl/color.d.ts.map +1 -0
  62. package/dist/flow/gl/color.js +82 -0
  63. package/dist/flow/gl/color.js.map +1 -0
  64. package/dist/flow/gl/index.d.ts +60 -0
  65. package/dist/flow/gl/index.d.ts.map +1 -0
  66. package/dist/flow/gl/index.js +283 -0
  67. package/dist/flow/gl/index.js.map +1 -0
  68. package/dist/flow/gl/pack.d.ts +133 -0
  69. package/dist/flow/gl/pack.d.ts.map +1 -0
  70. package/dist/flow/gl/pack.js +408 -0
  71. package/dist/flow/gl/pack.js.map +1 -0
  72. package/dist/flow/gl/renderer.d.ts +95 -0
  73. package/dist/flow/gl/renderer.d.ts.map +1 -0
  74. package/dist/flow/gl/renderer.js +459 -0
  75. package/dist/flow/gl/renderer.js.map +1 -0
  76. package/dist/flow/gl/shaders.d.ts +79 -0
  77. package/dist/flow/gl/shaders.d.ts.map +1 -0
  78. package/dist/flow/gl/shaders.js +346 -0
  79. package/dist/flow/gl/shaders.js.map +1 -0
  80. package/dist/flow/gl/text.d.ts +318 -0
  81. package/dist/flow/gl/text.d.ts.map +1 -0
  82. package/dist/flow/gl/text.js +1103 -0
  83. package/dist/flow/gl/text.js.map +1 -0
  84. package/dist/flow/index.d.ts +1 -1
  85. package/dist/flow/index.d.ts.map +1 -1
  86. package/dist/flow/index.js +619 -64
  87. package/dist/flow/index.js.map +1 -1
  88. package/dist/flow/node.d.ts +621 -72
  89. package/dist/flow/node.d.ts.map +1 -1
  90. package/dist/flow/node.js +2253 -1018
  91. package/dist/flow/node.js.map +1 -1
  92. package/dist/flow/paint.d.ts +35 -0
  93. package/dist/flow/paint.d.ts.map +1 -0
  94. package/dist/flow/paint.js +393 -0
  95. package/dist/flow/paint.js.map +1 -0
  96. package/dist/flow/paths.d.ts +14 -0
  97. package/dist/flow/paths.d.ts.map +1 -1
  98. package/dist/flow/paths.js +45 -19
  99. package/dist/flow/paths.js.map +1 -1
  100. package/dist/flow/scene.d.ts +584 -0
  101. package/dist/flow/scene.d.ts.map +1 -0
  102. package/dist/flow/scene.js +1453 -0
  103. package/dist/flow/scene.js.map +1 -0
  104. package/dist/flow/types.d.ts +111 -1
  105. package/dist/flow/types.d.ts.map +1 -1
  106. package/dist/html/controls.d.ts +28 -0
  107. package/dist/html/controls.d.ts.map +1 -1
  108. package/dist/html/controls.js +52 -2
  109. package/dist/html/controls.js.map +1 -1
  110. package/dist/html/css/calc.d.ts +14 -0
  111. package/dist/html/css/calc.d.ts.map +1 -0
  112. package/dist/html/css/calc.js +344 -0
  113. package/dist/html/css/calc.js.map +1 -0
  114. package/dist/html/css/cascade.d.ts +240 -6
  115. package/dist/html/css/cascade.d.ts.map +1 -1
  116. package/dist/html/css/cascade.js +1327 -66
  117. package/dist/html/css/cascade.js.map +1 -1
  118. package/dist/html/css/color.d.ts +23 -0
  119. package/dist/html/css/color.d.ts.map +1 -0
  120. package/dist/html/css/color.js +740 -0
  121. package/dist/html/css/color.js.map +1 -0
  122. package/dist/html/css/content.d.ts +92 -0
  123. package/dist/html/css/content.d.ts.map +1 -0
  124. package/dist/html/css/content.js +388 -0
  125. package/dist/html/css/content.js.map +1 -0
  126. package/dist/html/css/counter-styles.d.ts +76 -0
  127. package/dist/html/css/counter-styles.d.ts.map +1 -0
  128. package/dist/html/css/counter-styles.js +893 -0
  129. package/dist/html/css/counter-styles.js.map +1 -0
  130. package/dist/html/css/decode.d.ts +12 -0
  131. package/dist/html/css/decode.d.ts.map +1 -0
  132. package/dist/html/css/decode.js +116 -0
  133. package/dist/html/css/decode.js.map +1 -0
  134. package/dist/html/css/parse.d.ts +110 -10
  135. package/dist/html/css/parse.d.ts.map +1 -1
  136. package/dist/html/css/parse.js +1473 -180
  137. package/dist/html/css/parse.js.map +1 -1
  138. package/dist/html/css/style.d.ts +498 -15
  139. package/dist/html/css/style.d.ts.map +1 -1
  140. package/dist/html/css/style.js +3698 -206
  141. package/dist/html/css/style.js.map +1 -1
  142. package/dist/html/css/ua.d.ts.map +1 -1
  143. package/dist/html/css/ua.js +57 -11
  144. package/dist/html/css/ua.js.map +1 -1
  145. package/dist/html/css/values.d.ts +37 -3
  146. package/dist/html/css/values.d.ts.map +1 -1
  147. package/dist/html/css/values.js +122 -48
  148. package/dist/html/css/values.js.map +1 -1
  149. package/dist/html/css/vars.d.ts +52 -0
  150. package/dist/html/css/vars.d.ts.map +1 -0
  151. package/dist/html/css/vars.js +358 -0
  152. package/dist/html/css/vars.js.map +1 -0
  153. package/dist/html/dom.d.ts +30 -4
  154. package/dist/html/dom.d.ts.map +1 -1
  155. package/dist/html/dom.js +278 -17
  156. package/dist/html/dom.js.map +1 -1
  157. package/dist/html/fonts.d.ts +106 -0
  158. package/dist/html/fonts.d.ts.map +1 -0
  159. package/dist/html/fonts.js +565 -0
  160. package/dist/html/fonts.js.map +1 -0
  161. package/dist/html/gif.d.ts +15 -0
  162. package/dist/html/gif.d.ts.map +1 -0
  163. package/dist/html/gif.js +229 -0
  164. package/dist/html/gif.js.map +1 -0
  165. package/dist/html/index.d.ts +50 -11
  166. package/dist/html/index.d.ts.map +1 -1
  167. package/dist/html/index.js +115 -9
  168. package/dist/html/index.js.map +1 -1
  169. package/dist/html/layout/block.d.ts +226 -3
  170. package/dist/html/layout/block.d.ts.map +1 -1
  171. package/dist/html/layout/block.js +2937 -197
  172. package/dist/html/layout/block.js.map +1 -1
  173. package/dist/html/layout/boxes.d.ts +340 -17
  174. package/dist/html/layout/boxes.d.ts.map +1 -1
  175. package/dist/html/layout/boxes.js +1714 -182
  176. package/dist/html/layout/boxes.js.map +1 -1
  177. package/dist/html/layout/cache.d.ts +58 -0
  178. package/dist/html/layout/cache.d.ts.map +1 -0
  179. package/dist/html/layout/cache.js +224 -0
  180. package/dist/html/layout/cache.js.map +1 -0
  181. package/dist/html/layout/collapse.d.ts +45 -0
  182. package/dist/html/layout/collapse.d.ts.map +1 -0
  183. package/dist/html/layout/collapse.js +246 -0
  184. package/dist/html/layout/collapse.js.map +1 -0
  185. package/dist/html/layout/css-grid.d.ts +7 -0
  186. package/dist/html/layout/css-grid.d.ts.map +1 -0
  187. package/dist/html/layout/css-grid.js +900 -0
  188. package/dist/html/layout/css-grid.js.map +1 -0
  189. package/dist/html/layout/flex.d.ts.map +1 -1
  190. package/dist/html/layout/flex.js +1025 -89
  191. package/dist/html/layout/flex.js.map +1 -1
  192. package/dist/html/layout/floats.d.ts +45 -6
  193. package/dist/html/layout/floats.d.ts.map +1 -1
  194. package/dist/html/layout/floats.js +113 -14
  195. package/dist/html/layout/floats.js.map +1 -1
  196. package/dist/html/layout/grid-lines.d.ts +39 -0
  197. package/dist/html/layout/grid-lines.d.ts.map +1 -0
  198. package/dist/html/layout/grid-lines.js +119 -0
  199. package/dist/html/layout/grid-lines.js.map +1 -0
  200. package/dist/html/layout/grid.d.ts +53 -0
  201. package/dist/html/layout/grid.d.ts.map +1 -0
  202. package/dist/html/layout/grid.js +153 -0
  203. package/dist/html/layout/grid.js.map +1 -0
  204. package/dist/html/layout/inline.d.ts +151 -1
  205. package/dist/html/layout/inline.d.ts.map +1 -1
  206. package/dist/html/layout/inline.js +3375 -174
  207. package/dist/html/layout/inline.js.map +1 -1
  208. package/dist/html/layout/shaping.d.ts +6 -0
  209. package/dist/html/layout/shaping.d.ts.map +1 -0
  210. package/dist/html/layout/shaping.js +100 -0
  211. package/dist/html/layout/shaping.js.map +1 -0
  212. package/dist/html/layout/table.d.ts +3 -0
  213. package/dist/html/layout/table.d.ts.map +1 -1
  214. package/dist/html/layout/table.js +681 -175
  215. package/dist/html/layout/table.js.map +1 -1
  216. package/dist/html/layout/tracks.d.ts +44 -0
  217. package/dist/html/layout/tracks.d.ts.map +1 -0
  218. package/dist/html/layout/tracks.js +349 -0
  219. package/dist/html/layout/tracks.js.map +1 -0
  220. package/dist/html/node.d.ts +172 -5
  221. package/dist/html/node.d.ts.map +1 -1
  222. package/dist/html/node.js +1336 -103
  223. package/dist/html/node.js.map +1 -1
  224. package/dist/html/paint.d.ts +92 -3
  225. package/dist/html/paint.d.ts.map +1 -1
  226. package/dist/html/paint.js +3503 -141
  227. package/dist/html/paint.js.map +1 -1
  228. package/dist/html/resources.d.ts +60 -14
  229. package/dist/html/resources.d.ts.map +1 -1
  230. package/dist/html/resources.js +122 -36
  231. package/dist/html/resources.js.map +1 -1
  232. package/dist/html/surfaces.d.ts +23 -0
  233. package/dist/html/surfaces.d.ts.map +1 -0
  234. package/dist/html/surfaces.js +68 -0
  235. package/dist/html/surfaces.js.map +1 -0
  236. package/dist/html/svg.d.ts +80 -0
  237. package/dist/html/svg.d.ts.map +1 -0
  238. package/dist/html/svg.js +435 -0
  239. package/dist/html/svg.js.map +1 -0
  240. package/dist/html/url.d.ts +23 -0
  241. package/dist/html/url.d.ts.map +1 -0
  242. package/dist/html/url.js +80 -0
  243. package/dist/html/url.js.map +1 -0
  244. package/dist/index.d.ts +2 -2
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +1 -1
  247. package/dist/index.js.map +1 -1
  248. package/dist/internal/collate.d.ts +3 -0
  249. package/dist/internal/collate.d.ts.map +1 -0
  250. package/dist/internal/collate.js +11 -0
  251. package/dist/internal/collate.js.map +1 -0
  252. package/dist/{markdown → internal/markdown}/ast.d.ts +23 -0
  253. package/dist/internal/markdown/ast.d.ts.map +1 -0
  254. package/dist/internal/markdown/ast.js +22 -0
  255. package/dist/internal/markdown/ast.js.map +1 -0
  256. package/dist/internal/markdown/parse.d.ts.map +1 -0
  257. package/dist/{markdown → internal/markdown}/parse.js +221 -30
  258. package/dist/internal/markdown/parse.js.map +1 -0
  259. package/dist/internal/markdown/stringify.d.ts +4 -0
  260. package/dist/internal/markdown/stringify.d.ts.map +1 -0
  261. package/dist/internal/markdown/stringify.js +684 -0
  262. package/dist/internal/markdown/stringify.js.map +1 -0
  263. package/dist/internal/markdown/tags.d.ts.map +1 -0
  264. package/dist/internal/markdown/tags.js.map +1 -0
  265. package/dist/internal/prewarm.d.ts +18 -0
  266. package/dist/internal/prewarm.d.ts.map +1 -0
  267. package/dist/internal/prewarm.js +42 -0
  268. package/dist/internal/prewarm.js.map +1 -0
  269. package/dist/internal/scroll.d.ts +3 -2
  270. package/dist/internal/scroll.d.ts.map +1 -1
  271. package/dist/internal/scroll.js +1 -0
  272. package/dist/internal/scroll.js.map +1 -1
  273. package/dist/internal/sdf.d.ts +20 -0
  274. package/dist/internal/sdf.d.ts.map +1 -0
  275. package/dist/internal/sdf.js +216 -0
  276. package/dist/internal/sdf.js.map +1 -0
  277. package/dist/internal/splice.d.ts +12 -0
  278. package/dist/internal/splice.d.ts.map +1 -0
  279. package/dist/internal/splice.js +23 -0
  280. package/dist/internal/splice.js.map +1 -0
  281. package/dist/internal/window.d.ts +12 -0
  282. package/dist/internal/window.d.ts.map +1 -1
  283. package/dist/internal/window.js +23 -6
  284. package/dist/internal/window.js.map +1 -1
  285. package/dist/maps/anchors.d.ts +103 -0
  286. package/dist/maps/anchors.d.ts.map +1 -0
  287. package/dist/maps/anchors.js +790 -0
  288. package/dist/maps/anchors.js.map +1 -0
  289. package/dist/maps/controller.d.ts +340 -0
  290. package/dist/maps/controller.d.ts.map +1 -0
  291. package/dist/maps/controller.js +822 -0
  292. package/dist/maps/controller.js.map +1 -0
  293. package/dist/maps/gl/buckets.d.ts +99 -0
  294. package/dist/maps/gl/buckets.d.ts.map +1 -0
  295. package/dist/maps/gl/buckets.js +365 -0
  296. package/dist/maps/gl/buckets.js.map +1 -0
  297. package/dist/maps/gl/build-worker.d.ts +15 -0
  298. package/dist/maps/gl/build-worker.d.ts.map +1 -0
  299. package/dist/maps/gl/build-worker.js +44 -0
  300. package/dist/maps/gl/build-worker.js.map +1 -0
  301. package/dist/maps/gl/color.d.ts +8 -0
  302. package/dist/maps/gl/color.d.ts.map +1 -0
  303. package/dist/maps/gl/color.js +57 -0
  304. package/dist/maps/gl/color.js.map +1 -0
  305. package/dist/maps/gl/cover.d.ts +70 -0
  306. package/dist/maps/gl/cover.d.ts.map +1 -0
  307. package/dist/maps/gl/cover.js +137 -0
  308. package/dist/maps/gl/cover.js.map +1 -0
  309. package/dist/maps/gl/index.d.ts +3 -0
  310. package/dist/maps/gl/index.d.ts.map +1 -0
  311. package/dist/maps/gl/index.js +20 -0
  312. package/dist/maps/gl/index.js.map +1 -0
  313. package/dist/maps/gl/markers.d.ts +28 -0
  314. package/dist/maps/gl/markers.d.ts.map +1 -0
  315. package/dist/maps/gl/markers.js +60 -0
  316. package/dist/maps/gl/markers.js.map +1 -0
  317. package/dist/maps/gl/overlays.d.ts +68 -0
  318. package/dist/maps/gl/overlays.d.ts.map +1 -0
  319. package/dist/maps/gl/overlays.js +300 -0
  320. package/dist/maps/gl/overlays.js.map +1 -0
  321. package/dist/maps/gl/pane.d.ts +12 -0
  322. package/dist/maps/gl/pane.d.ts.map +1 -0
  323. package/dist/maps/gl/pane.js +37 -0
  324. package/dist/maps/gl/pane.js.map +1 -0
  325. package/dist/maps/gl/placement.d.ts +124 -0
  326. package/dist/maps/gl/placement.d.ts.map +1 -0
  327. package/dist/maps/gl/placement.js +642 -0
  328. package/dist/maps/gl/placement.js.map +1 -0
  329. package/dist/maps/gl/renderer.d.ts +384 -0
  330. package/dist/maps/gl/renderer.d.ts.map +1 -0
  331. package/dist/maps/gl/renderer.js +1184 -0
  332. package/dist/maps/gl/renderer.js.map +1 -0
  333. package/dist/maps/gl/shaders.d.ts +121 -0
  334. package/dist/maps/gl/shaders.d.ts.map +1 -0
  335. package/dist/maps/gl/shaders.js +453 -0
  336. package/dist/maps/gl/shaders.js.map +1 -0
  337. package/dist/maps/gl/store.d.ts +125 -0
  338. package/dist/maps/gl/store.d.ts.map +1 -0
  339. package/dist/maps/gl/store.js +512 -0
  340. package/dist/maps/gl/store.js.map +1 -0
  341. package/dist/maps/gl/text.d.ts +283 -0
  342. package/dist/maps/gl/text.d.ts.map +1 -0
  343. package/dist/maps/gl/text.js +698 -0
  344. package/dist/maps/gl/text.js.map +1 -0
  345. package/dist/maps/gl/view.d.ts +345 -0
  346. package/dist/maps/gl/view.d.ts.map +1 -0
  347. package/dist/maps/gl/view.js +1209 -0
  348. package/dist/maps/gl/view.js.map +1 -0
  349. package/dist/maps/icons.d.ts +32 -0
  350. package/dist/maps/icons.d.ts.map +1 -0
  351. package/dist/maps/icons.js +151 -0
  352. package/dist/maps/icons.js.map +1 -0
  353. package/dist/maps/index.d.ts +3 -1
  354. package/dist/maps/index.d.ts.map +1 -1
  355. package/dist/maps/index.js +218 -52
  356. package/dist/maps/index.js.map +1 -1
  357. package/dist/maps/labels.d.ts +91 -18
  358. package/dist/maps/labels.d.ts.map +1 -1
  359. package/dist/maps/labels.js +376 -140
  360. package/dist/maps/labels.js.map +1 -1
  361. package/dist/maps/node.d.ts +179 -56
  362. package/dist/maps/node.d.ts.map +1 -1
  363. package/dist/maps/node.js +663 -537
  364. package/dist/maps/node.js.map +1 -1
  365. package/dist/maps/overlay.d.ts +72 -9
  366. package/dist/maps/overlay.d.ts.map +1 -1
  367. package/dist/maps/overlay.js +108 -28
  368. package/dist/maps/overlay.js.map +1 -1
  369. package/dist/maps/paint.d.ts +3 -0
  370. package/dist/maps/paint.d.ts.map +1 -1
  371. package/dist/maps/paint.js.map +1 -1
  372. package/dist/maps/proj.d.ts +62 -0
  373. package/dist/maps/proj.d.ts.map +1 -1
  374. package/dist/maps/proj.js +101 -0
  375. package/dist/maps/proj.js.map +1 -1
  376. package/dist/maps/renderer.d.ts +69 -0
  377. package/dist/maps/renderer.d.ts.map +1 -0
  378. package/dist/maps/renderer.js +66 -0
  379. package/dist/maps/renderer.js.map +1 -0
  380. package/dist/maps/sources.d.ts +30 -6
  381. package/dist/maps/sources.d.ts.map +1 -1
  382. package/dist/maps/sources.js +22 -3
  383. package/dist/maps/sources.js.map +1 -1
  384. package/dist/maps/style.d.ts +35 -0
  385. package/dist/maps/style.d.ts.map +1 -1
  386. package/dist/maps/style.js.map +1 -1
  387. package/dist/maps/styles.d.ts +12 -0
  388. package/dist/maps/styles.d.ts.map +1 -1
  389. package/dist/maps/styles.js +120 -6
  390. package/dist/maps/styles.js.map +1 -1
  391. package/dist/maps/theme.d.ts +19 -0
  392. package/dist/maps/theme.d.ts.map +1 -0
  393. package/dist/maps/theme.js +44 -0
  394. package/dist/maps/theme.js.map +1 -0
  395. package/dist/maps/tiles.d.ts +147 -27
  396. package/dist/maps/tiles.d.ts.map +1 -1
  397. package/dist/maps/tiles.js +221 -54
  398. package/dist/maps/tiles.js.map +1 -1
  399. package/dist/maps/types.d.ts +213 -21
  400. package/dist/maps/types.d.ts.map +1 -1
  401. package/dist/markdown/expressions.d.ts +1 -1
  402. package/dist/markdown/expressions.d.ts.map +1 -1
  403. package/dist/markdown/expressions.js.map +1 -1
  404. package/dist/markdown/index.d.ts +7 -6
  405. package/dist/markdown/index.d.ts.map +1 -1
  406. package/dist/markdown/index.js +121 -50
  407. package/dist/markdown/index.js.map +1 -1
  408. package/dist/markdown/spans.d.ts +1 -1
  409. package/dist/markdown/spans.d.ts.map +1 -1
  410. package/dist/markdown/spans.js +6 -0
  411. package/dist/markdown/spans.js.map +1 -1
  412. package/dist/media-player/index.d.ts +11 -3
  413. package/dist/media-player/index.d.ts.map +1 -1
  414. package/dist/media-player/index.js +13 -2
  415. package/dist/media-player/index.js.map +1 -1
  416. package/dist/qml/containers.d.ts.map +1 -1
  417. package/dist/qml/containers.js +6 -1
  418. package/dist/qml/containers.js.map +1 -1
  419. package/dist/qml/interaction.d.ts.map +1 -1
  420. package/dist/qml/interaction.js +38 -5
  421. package/dist/qml/interaction.js.map +1 -1
  422. package/dist/qml/layouts.d.ts.map +1 -1
  423. package/dist/qml/layouts.js +21 -6
  424. package/dist/qml/layouts.js.map +1 -1
  425. package/dist/qml/qtquick.d.ts.map +1 -1
  426. package/dist/qml/qtquick.js +9 -2
  427. package/dist/qml/qtquick.js.map +1 -1
  428. package/dist/qml/react.d.ts.map +1 -1
  429. package/dist/qml/react.js +9 -7
  430. package/dist/qml/react.js.map +1 -1
  431. package/dist/reorder/clock.d.ts +7 -0
  432. package/dist/reorder/clock.d.ts.map +1 -0
  433. package/dist/reorder/clock.js +26 -0
  434. package/dist/reorder/clock.js.map +1 -0
  435. package/dist/reorder/index.d.ts +25 -3
  436. package/dist/reorder/index.d.ts.map +1 -1
  437. package/dist/reorder/index.js +64 -19
  438. package/dist/reorder/index.js.map +1 -1
  439. package/dist/rich-text-editor/clipboard.d.ts +23 -0
  440. package/dist/rich-text-editor/clipboard.d.ts.map +1 -0
  441. package/dist/rich-text-editor/clipboard.js +307 -0
  442. package/dist/rich-text-editor/clipboard.js.map +1 -0
  443. package/dist/rich-text-editor/collab.d.ts +32 -0
  444. package/dist/rich-text-editor/collab.d.ts.map +1 -0
  445. package/dist/rich-text-editor/collab.js +55 -0
  446. package/dist/rich-text-editor/collab.js.map +1 -0
  447. package/dist/rich-text-editor/commands.d.ts +50 -0
  448. package/dist/rich-text-editor/commands.d.ts.map +1 -0
  449. package/dist/rich-text-editor/commands.js +376 -0
  450. package/dist/rich-text-editor/commands.js.map +1 -0
  451. package/dist/rich-text-editor/drag.d.ts +68 -0
  452. package/dist/rich-text-editor/drag.d.ts.map +1 -0
  453. package/dist/rich-text-editor/drag.js +148 -0
  454. package/dist/rich-text-editor/drag.js.map +1 -0
  455. package/dist/rich-text-editor/html.d.ts +145 -0
  456. package/dist/rich-text-editor/html.d.ts.map +1 -0
  457. package/dist/rich-text-editor/html.js +516 -0
  458. package/dist/rich-text-editor/html.js.map +1 -0
  459. package/dist/rich-text-editor/index.d.ts +252 -0
  460. package/dist/rich-text-editor/index.d.ts.map +1 -0
  461. package/dist/rich-text-editor/index.js +856 -0
  462. package/dist/rich-text-editor/index.js.map +1 -0
  463. package/dist/rich-text-editor/inline.d.ts +94 -0
  464. package/dist/rich-text-editor/inline.d.ts.map +1 -0
  465. package/dist/rich-text-editor/inline.js +252 -0
  466. package/dist/rich-text-editor/inline.js.map +1 -0
  467. package/dist/rich-text-editor/keymap.d.ts +71 -0
  468. package/dist/rich-text-editor/keymap.d.ts.map +1 -0
  469. package/dist/rich-text-editor/keymap.js +394 -0
  470. package/dist/rich-text-editor/keymap.js.map +1 -0
  471. package/dist/rich-text-editor/keys.d.ts +40 -0
  472. package/dist/rich-text-editor/keys.d.ts.map +1 -0
  473. package/dist/rich-text-editor/keys.js +202 -0
  474. package/dist/rich-text-editor/keys.js.map +1 -0
  475. package/dist/rich-text-editor/look.d.ts +71 -0
  476. package/dist/rich-text-editor/look.d.ts.map +1 -0
  477. package/dist/rich-text-editor/look.js +342 -0
  478. package/dist/rich-text-editor/look.js.map +1 -0
  479. package/dist/rich-text-editor/markdown.d.ts +18 -0
  480. package/dist/rich-text-editor/markdown.d.ts.map +1 -0
  481. package/dist/rich-text-editor/markdown.js +496 -0
  482. package/dist/rich-text-editor/markdown.js.map +1 -0
  483. package/dist/rich-text-editor/marks.d.ts +9 -0
  484. package/dist/rich-text-editor/marks.d.ts.map +1 -0
  485. package/dist/rich-text-editor/marks.js +83 -0
  486. package/dist/rich-text-editor/marks.js.map +1 -0
  487. package/dist/rich-text-editor/nodes.d.ts +135 -0
  488. package/dist/rich-text-editor/nodes.d.ts.map +1 -0
  489. package/dist/rich-text-editor/nodes.js +397 -0
  490. package/dist/rich-text-editor/nodes.js.map +1 -0
  491. package/dist/rich-text-editor/render.d.ts +68 -0
  492. package/dist/rich-text-editor/render.d.ts.map +1 -0
  493. package/dist/rich-text-editor/render.js +518 -0
  494. package/dist/rich-text-editor/render.js.map +1 -0
  495. package/dist/rich-text-editor/schema.d.ts +16 -0
  496. package/dist/rich-text-editor/schema.d.ts.map +1 -0
  497. package/dist/rich-text-editor/schema.js +386 -0
  498. package/dist/rich-text-editor/schema.js.map +1 -0
  499. package/dist/rich-text-editor/store.d.ts +11 -0
  500. package/dist/rich-text-editor/store.d.ts.map +1 -0
  501. package/dist/rich-text-editor/store.js +43 -0
  502. package/dist/rich-text-editor/store.js.map +1 -0
  503. package/dist/rich-text-editor/suggest.d.ts +127 -0
  504. package/dist/rich-text-editor/suggest.d.ts.map +1 -0
  505. package/dist/rich-text-editor/suggest.js +0 -0
  506. package/dist/rich-text-editor/suggest.js.map +1 -0
  507. package/dist/rich-text-editor/tables.d.ts +41 -0
  508. package/dist/rich-text-editor/tables.d.ts.map +1 -0
  509. package/dist/rich-text-editor/tables.js +204 -0
  510. package/dist/rich-text-editor/tables.js.map +1 -0
  511. package/dist/rich-text-editor/toolbar.d.ts +58 -0
  512. package/dist/rich-text-editor/toolbar.d.ts.map +1 -0
  513. package/dist/rich-text-editor/toolbar.js +548 -0
  514. package/dist/rich-text-editor/toolbar.js.map +1 -0
  515. package/dist/rich-text-editor/view.d.ts +368 -0
  516. package/dist/rich-text-editor/view.d.ts.map +1 -0
  517. package/dist/rich-text-editor/view.js +1968 -0
  518. package/dist/rich-text-editor/view.js.map +1 -0
  519. package/dist/rich-text-editor/virtual.d.ts +54 -0
  520. package/dist/rich-text-editor/virtual.d.ts.map +1 -0
  521. package/dist/rich-text-editor/virtual.js +279 -0
  522. package/dist/rich-text-editor/virtual.js.map +1 -0
  523. package/dist/richtext/node.d.ts +71 -4
  524. package/dist/richtext/node.d.ts.map +1 -1
  525. package/dist/richtext/node.js +233 -28
  526. package/dist/richtext/node.js.map +1 -1
  527. package/dist/richtext/runs.d.ts +13 -8
  528. package/dist/richtext/runs.d.ts.map +1 -1
  529. package/dist/richtext/runs.js +18 -8
  530. package/dist/richtext/runs.js.map +1 -1
  531. package/dist/table/index.d.ts.map +1 -1
  532. package/dist/table/index.js +23 -0
  533. package/dist/table/index.js.map +1 -1
  534. package/dist/table/rows.d.ts +3 -2
  535. package/dist/table/rows.d.ts.map +1 -1
  536. package/dist/table/rows.js +20 -6
  537. package/dist/table/rows.js.map +1 -1
  538. package/dist/terminal/backends.d.ts +4 -1
  539. package/dist/terminal/backends.d.ts.map +1 -1
  540. package/dist/terminal/backends.js.map +1 -1
  541. package/dist/terminal/index.d.ts +18 -7
  542. package/dist/terminal/index.d.ts.map +1 -1
  543. package/dist/terminal/index.js +32 -11
  544. package/dist/terminal/index.js.map +1 -1
  545. package/dist/terminal/vt/pty.d.ts +13 -2
  546. package/dist/terminal/vt/pty.d.ts.map +1 -1
  547. package/dist/terminal/vt/pty.js +18 -3
  548. package/dist/terminal/vt/pty.js.map +1 -1
  549. package/dist/terminal-output/index.d.ts.map +1 -1
  550. package/dist/terminal-output/index.js +6 -1
  551. package/dist/terminal-output/index.js.map +1 -1
  552. package/dist/three/canvas.d.ts.map +1 -1
  553. package/dist/three/canvas.js +85 -7
  554. package/dist/three/canvas.js.map +1 -1
  555. package/dist/three/events.d.ts +22 -4
  556. package/dist/three/events.d.ts.map +1 -1
  557. package/dist/three/events.js +34 -4
  558. package/dist/three/events.js.map +1 -1
  559. package/dist/tree/index.d.ts.map +1 -1
  560. package/dist/tree/index.js +17 -0
  561. package/dist/tree/index.js.map +1 -1
  562. package/package.json +59 -31
  563. package/src/charts/node.ts +68 -28
  564. package/src/charts/render.ts +120 -30
  565. package/src/code/index.ts +3 -1
  566. package/src/code-editor/completion.ts +3 -2
  567. package/src/code-editor/index.ts +19 -0
  568. package/src/code-editor/node.ts +1574 -184
  569. package/src/code-language/languages/glsl.ts +12 -2
  570. package/src/code-language/languages/javascript.ts +21 -4
  571. package/src/code-language/languages/json.ts +12 -2
  572. package/src/code-language/languages/shell.ts +12 -2
  573. package/src/code-language/languages/sql.ts +22 -2
  574. package/src/code-language/stream.ts +257 -17
  575. package/src/code-language/types.ts +5 -4
  576. package/src/codeblock/index.ts +20 -3
  577. package/src/embed/client.ts +102 -8
  578. package/src/embed/index.ts +2 -0
  579. package/src/flow/draw.ts +167 -41
  580. package/src/flow/gl/color.ts +85 -0
  581. package/src/flow/gl/index.ts +342 -0
  582. package/src/flow/gl/pack.ts +585 -0
  583. package/src/flow/gl/renderer.ts +679 -0
  584. package/src/flow/gl/shaders.ts +371 -0
  585. package/src/flow/gl/text.ts +1295 -0
  586. package/src/flow/index.ts +794 -67
  587. package/src/flow/node.ts +2496 -1256
  588. package/src/flow/paint.ts +511 -0
  589. package/src/flow/paths.ts +80 -15
  590. package/src/flow/scene.ts +2199 -0
  591. package/src/flow/types.ts +113 -1
  592. package/src/html/controls.ts +73 -2
  593. package/src/html/css/calc.ts +385 -0
  594. package/src/html/css/cascade.ts +1403 -62
  595. package/src/html/css/color.ts +755 -0
  596. package/src/html/css/content.ts +417 -0
  597. package/src/html/css/counter-styles.ts +973 -0
  598. package/src/html/css/decode.ts +130 -0
  599. package/src/html/css/parse.ts +1514 -160
  600. package/src/html/css/style.ts +4102 -222
  601. package/src/html/css/ua.ts +58 -12
  602. package/src/html/css/values.ts +150 -50
  603. package/src/html/css/vars.ts +348 -0
  604. package/src/html/dom.ts +284 -17
  605. package/src/html/fonts.ts +641 -0
  606. package/src/html/gif.ts +233 -0
  607. package/src/html/index.ts +180 -20
  608. package/src/html/layout/block.ts +3456 -230
  609. package/src/html/layout/boxes.ts +2100 -190
  610. package/src/html/layout/cache.ts +289 -0
  611. package/src/html/layout/collapse.ts +317 -0
  612. package/src/html/layout/css-grid.ts +1063 -0
  613. package/src/html/layout/flex.ts +1115 -106
  614. package/src/html/layout/floats.ts +128 -14
  615. package/src/html/layout/grid-lines.ts +141 -0
  616. package/src/html/layout/grid.ts +181 -0
  617. package/src/html/layout/inline.ts +3943 -192
  618. package/src/html/layout/shaping.ts +140 -0
  619. package/src/html/layout/table.ts +696 -186
  620. package/src/html/layout/tracks.ts +437 -0
  621. package/src/html/node.ts +1486 -121
  622. package/src/html/paint.ts +4293 -169
  623. package/src/html/resources.ts +161 -50
  624. package/src/html/surfaces.ts +81 -0
  625. package/src/html/svg.ts +493 -0
  626. package/src/html/url.ts +86 -0
  627. package/src/index.ts +4 -0
  628. package/src/internal/collate.ts +12 -0
  629. package/src/{markdown → internal/markdown}/ast.ts +35 -7
  630. package/src/{markdown → internal/markdown}/parse.ts +288 -35
  631. package/src/internal/markdown/stringify.ts +772 -0
  632. package/src/internal/prewarm.ts +45 -0
  633. package/src/internal/scroll.ts +5 -3
  634. package/src/internal/sdf.ts +227 -0
  635. package/src/internal/splice.ts +25 -0
  636. package/src/internal/window.ts +36 -5
  637. package/src/maps/anchors.ts +913 -0
  638. package/src/maps/controller.ts +1084 -0
  639. package/src/maps/gl/buckets.ts +461 -0
  640. package/src/maps/gl/build-worker.ts +66 -0
  641. package/src/maps/gl/color.ts +62 -0
  642. package/src/maps/gl/cover.ts +205 -0
  643. package/src/maps/gl/index.ts +23 -0
  644. package/src/maps/gl/markers.ts +83 -0
  645. package/src/maps/gl/overlays.ts +379 -0
  646. package/src/maps/gl/pane.ts +42 -0
  647. package/src/maps/gl/placement.ts +968 -0
  648. package/src/maps/gl/renderer.ts +1660 -0
  649. package/src/maps/gl/shaders.ts +489 -0
  650. package/src/maps/gl/store.ts +615 -0
  651. package/src/maps/gl/text.ts +868 -0
  652. package/src/maps/gl/view.ts +1489 -0
  653. package/src/maps/icons.ts +183 -0
  654. package/src/maps/index.ts +274 -81
  655. package/src/maps/labels.ts +457 -144
  656. package/src/maps/node.ts +832 -665
  657. package/src/maps/overlay.ts +148 -43
  658. package/src/maps/paint.ts +3 -0
  659. package/src/maps/proj.ts +118 -0
  660. package/src/maps/renderer.ts +155 -0
  661. package/src/maps/sources.ts +43 -6
  662. package/src/maps/style.ts +32 -0
  663. package/src/maps/styles.ts +215 -4
  664. package/src/maps/theme.ts +51 -0
  665. package/src/maps/tiles.ts +253 -62
  666. package/src/maps/types.ts +213 -21
  667. package/src/markdown/expressions.ts +5 -1
  668. package/src/markdown/index.ts +163 -78
  669. package/src/markdown/spans.ts +6 -1
  670. package/src/media-player/index.ts +18 -4
  671. package/src/qml/containers.tsx +6 -1
  672. package/src/qml/interaction.tsx +42 -5
  673. package/src/qml/layouts.tsx +21 -6
  674. package/src/qml/qtquick.tsx +9 -2
  675. package/src/qml/react.tsx +7 -5
  676. package/src/reorder/clock.ts +27 -0
  677. package/src/reorder/index.ts +100 -27
  678. package/src/rich-text-editor/clipboard.ts +439 -0
  679. package/src/rich-text-editor/collab.ts +91 -0
  680. package/src/rich-text-editor/commands.ts +448 -0
  681. package/src/rich-text-editor/dom-globals.d.ts +23 -0
  682. package/src/rich-text-editor/drag.ts +211 -0
  683. package/src/rich-text-editor/html.ts +619 -0
  684. package/src/rich-text-editor/index.ts +1364 -0
  685. package/src/rich-text-editor/inline.ts +345 -0
  686. package/src/rich-text-editor/keymap.ts +510 -0
  687. package/src/rich-text-editor/keys.ts +228 -0
  688. package/src/rich-text-editor/look.ts +427 -0
  689. package/src/rich-text-editor/markdown.ts +653 -0
  690. package/src/rich-text-editor/marks.ts +101 -0
  691. package/src/rich-text-editor/nodes.ts +497 -0
  692. package/src/rich-text-editor/render.ts +837 -0
  693. package/src/rich-text-editor/schema.ts +431 -0
  694. package/src/rich-text-editor/store.ts +39 -0
  695. package/src/rich-text-editor/suggest.ts +597 -0
  696. package/src/rich-text-editor/tables.ts +272 -0
  697. package/src/rich-text-editor/toolbar.ts +724 -0
  698. package/src/rich-text-editor/view.ts +2287 -0
  699. package/src/rich-text-editor/virtual.ts +372 -0
  700. package/src/richtext/node.ts +294 -44
  701. package/src/richtext/runs.ts +23 -12
  702. package/src/table/index.ts +29 -0
  703. package/src/table/rows.ts +18 -8
  704. package/src/terminal/backends.ts +4 -1
  705. package/src/terminal/index.ts +47 -15
  706. package/src/terminal/vt/pty.ts +16 -2
  707. package/src/terminal-output/index.ts +6 -1
  708. package/src/three/canvas.ts +102 -8
  709. package/src/three/events.ts +49 -9
  710. package/src/tree/index.ts +19 -0
  711. package/dist/markdown/ast.d.ts.map +0 -1
  712. package/dist/markdown/ast.js +0 -17
  713. package/dist/markdown/ast.js.map +0 -1
  714. package/dist/markdown/parse.d.ts.map +0 -1
  715. package/dist/markdown/parse.js.map +0 -1
  716. package/dist/markdown/tags.d.ts.map +0 -1
  717. package/dist/markdown/tags.js.map +0 -1
  718. /package/dist/{markdown → internal/markdown}/parse.d.ts +0 -0
  719. /package/dist/{markdown → internal/markdown}/tags.d.ts +0 -0
  720. /package/dist/{markdown → internal/markdown}/tags.js +0 -0
  721. /package/src/{markdown → internal/markdown}/tags.ts +0 -0
@@ -0,0 +1,900 @@
1
+ // `display: grid`, the subset documents are written in (CSS Grid 1).
2
+ //
3
+ // Tailwind's `grid grid-cols-3 gap-4`, a card list of `repeat(auto-fill,
4
+ // minmax(16rem, 1fr))`, a sidebar and a column in `16rem 1fr`, a page of
5
+ // `auto 1fr auto` rows: tracks of lengths, percentages, `fr`s, `auto`,
6
+ // `minmax()` and `fit-content()`, with `repeat()` by a count or by what
7
+ // fits, sized by what is in them as the track sizing algorithm has it
8
+ // (`tracks.ts`); items placed by line, span, name or area, or in order into
9
+ // the first cell free along the rows or down the columns, `dense` or not
10
+ // (the lines and their names are `grid-lines.ts`'s); gaps; the tracks
11
+ // placed by `justify-content` and `align-content`; and each item stretched
12
+ // to its area or aligned in it. Not here: subgrids, and baseline
13
+ // alignment.
14
+ //
15
+ // A grid container is a flex container to the box tree (`display: grid`
16
+ // reads as `flex` and sets `ComputedStyle.grid`): its children are the
17
+ // same blockified items, it holds its floats, and `flex.ts` hands it here.
18
+ // Unlike flex, the algorithm is written out rather than handed to Yoga,
19
+ // which has none; what it needs of an item — its width at no limit and at
20
+ // the smallest, and its height at a width — is what tables already ask.
21
+ import { AUTO, gapOf, isPct, resolve, resolveOrNull } from '../css/values.js';
22
+ import { scrolls } from '../css/style.js';
23
+ import { Box, GRID_TRACKS, isBlank } from './boxes.js';
24
+ import { FLEXED_HEIGHT, MIN_CONTENT_PROBE, clampHeight, clampWidth, exactMinContent, heightThroughRatio, measureIntrinsicWidth, moveTo, percentBaseInside, percentHeightsIn, positionOutOfFlow, resolveEdges, widthThroughRatio, } from './block.js';
25
+ import { gridLines, placement } from './grid-lines.js';
26
+ import { sizeTracks } from './tracks.js';
27
+ /**
28
+ * Lay out a grid container's children. Returns the content height.
29
+ */
30
+ export function layoutGrid(box, ctx, contentWidth) {
31
+ const style = box.style;
32
+ const boxes = [];
33
+ for (const child of box.children) {
34
+ if (child.kind === 'text' && isBlank(child.text))
35
+ continue;
36
+ if (child.outOfFlow) {
37
+ // where it is as the grid's one item, in an area whose edges are the
38
+ // grid's padding edges (9.1)
39
+ positionOutOfFlow(child, box, ctx, false);
40
+ continue;
41
+ }
42
+ resolveEdges(child, Number.isFinite(contentWidth) ? contentWidth : 0);
43
+ boxes.push(child);
44
+ }
45
+ // the gaps: a percentage of the grid's content size along them, and of
46
+ // nothing where that is not known yet (CSS Box Alignment 3, 8.3)
47
+ const colGap = gapOf(style.columnGap, contentWidth);
48
+ let rowGap = gapOf(style.rowGap, percentBaseInside(box));
49
+ // the explicit grid: the templates' tracks, and as many more as the
50
+ // areas need, sized as the ones the placement makes past it are
51
+ const areas = style.gridAreas;
52
+ // a height of the grid's own, which the rows' `repeat()` counts against
53
+ const definite = percentBaseInside(box);
54
+ const template = trackList(style.gridColumns, contentWidth, colGap);
55
+ const rowList = trackList(style.gridRows, definite, rowGap);
56
+ const explicitCols = Math.max(template.tracks.length, areas?.columns ?? 0);
57
+ const explicitRows = Math.max(rowList.tracks.length, areas?.rows ?? 0);
58
+ const colLines = gridLines(explicitCols, template.names, areas, 'columns');
59
+ const rowLines = gridLines(explicitRows, rowList.names, areas, 'rows');
60
+ const items = place(boxes, colLines, rowLines, style.gridAutoFlow);
61
+ // every row the explicit grid has, whether or not an item is in it
62
+ const allRows = items.reduce((n, item) => Math.max(n, item.row + item.rows), explicitRows);
63
+ const explicit = rowList.tracks;
64
+ const cols = template.tracks.slice();
65
+ // an item placed past the explicit grid makes tracks of its own
66
+ const widest = items.reduce((n, item) => Math.max(n, item.col + item.cols), Math.max(1, explicitCols));
67
+ while (cols.length < widest)
68
+ cols.push(style.gridAutoColumns);
69
+ // An `auto-fit` repetition no item is in collapses (7.2.3.2): it is out
70
+ // of the sizing and the distribution, and the gaps on either side of it
71
+ // are one. The items are placed in the tracks that stay, and the ones
72
+ // that go are put back as nothing where the lines are read.
73
+ const keepCols = keptTracks(cols.length, template.fit, items, true);
74
+ const keepRows = keptTracks(allRows, rowList.fit, items, false);
75
+ const rowDefs = [];
76
+ for (let r = 0; r < allRows; r += 1) {
77
+ if (keepRows?.[r] ?? true)
78
+ rowDefs.push(explicit[r] ?? style.gridAutoRows);
79
+ }
80
+ if (keepCols) {
81
+ const kept = cols.filter((_, c) => keepCols[c]);
82
+ cols.length = 0;
83
+ cols.push(...kept);
84
+ }
85
+ if (keepCols || keepRows) {
86
+ const colAt = indexOfKept(keepCols);
87
+ const rowAt = indexOfKept(keepRows);
88
+ for (const item of items) {
89
+ if (colAt)
90
+ item.col = colAt[item.col];
91
+ if (rowAt)
92
+ item.row = rowAt[item.row];
93
+ }
94
+ }
95
+ const rowCount = rowDefs.length;
96
+ // While the columns are sized, a row whose greatest size is a length is
97
+ // that size, and any other has none (CSS Grid 1, 12.1): what an item's
98
+ // height is then, where it is one — which a ratio makes a width of
99
+ const fixedRows = [];
100
+ for (let r = 0; r < rowCount; r += 1) {
101
+ const { max } = sizing(rowDefs[r], definite);
102
+ fixedRows.push(typeof max === 'number' ? max : null);
103
+ }
104
+ const spanBefore = (item) => {
105
+ let span = rowGap * Math.max(0, item.rows - 1);
106
+ for (let r = item.row; r < item.row + item.rows; r += 1) {
107
+ const fixed = fixedRows[r];
108
+ if (fixed === null || fixed === undefined)
109
+ return NaN;
110
+ span += fixed;
111
+ }
112
+ return span;
113
+ };
114
+ const heightBefore = (item) => heightBeforeRows(item.box, spanBefore(item));
115
+ // An item's percentage heights are of its area's, which the rows it
116
+ // spans are, rather than the grid's: of that where they are known now,
117
+ // and of nothing — `auto` — where they are not, until they are
118
+ for (const item of items)
119
+ item.box.percentHeightBase = spanBefore(item);
120
+ const measure = (item) => {
121
+ if (item.max >= 0)
122
+ return;
123
+ const box = item.box;
124
+ const margins = box.marginLeft + box.marginRight;
125
+ // Measured once in the box's life, as a table cell's are: measured for
126
+ // every layout of the grid, a grid in a grid in a grid laid out its
127
+ // innermost three times a level, and twelve levels took two thirds of
128
+ // a second.
129
+ const style = box.style;
130
+ let widest;
131
+ let narrowest;
132
+ if (typeof style.width === 'number') {
133
+ // a length for a width is its width at its narrowest and its widest
134
+ // — measured at no limit, it was its content's
135
+ const extra = style.boxSizing === 'border-box' ? 0 : box.horizontalExtra;
136
+ widest = narrowest = Math.max(style.width + extra, box.horizontalExtra);
137
+ }
138
+ else {
139
+ const fresh = box.intrinsicMaxContent < 0;
140
+ widest = maxContentOf(box, ctx);
141
+ if (box.intrinsicMinContent < 0) {
142
+ // where its words say it exactly, read from the layout just made —
143
+ // which is the max-content one only if it was made just now
144
+ const exact = fresh && ctx.fonts ? exactMinContent(box, ctx.fonts) : null;
145
+ box.intrinsicMinContent =
146
+ exact ?? measureIntrinsicWidth(box, ctx, MIN_CONTENT_PROBE);
147
+ }
148
+ narrowest = box.intrinsicMinContent;
149
+ }
150
+ // an item with a ratio and a height is as wide as that makes it, its
151
+ // content's sizes both (CSS Sizing 4, 5.1) — and one that is not
152
+ // replaced no narrower for it than its content at its narrowest, where
153
+ // it shows what overflows it (5.2). A scroll container's sizes are
154
+ // none of its content's, and take nothing from its ratio either.
155
+ if (typeof style.width !== 'number' &&
156
+ (box.kind === 'replaced' || !scrolls(style))) {
157
+ const tall = heightBefore(item);
158
+ const wide = tall === null ? null : widthThroughRatio(box, tall);
159
+ if (wide !== null) {
160
+ widest = narrowest =
161
+ box.kind === 'replaced' || !showsOverflow(box)
162
+ ? wide
163
+ : Math.max(wide, narrowest);
164
+ }
165
+ }
166
+ // a width of its content's is that at its narrowest and its widest
167
+ if (style.widthKeyword === 'min-content')
168
+ widest = narrowest;
169
+ else if (style.widthKeyword === 'max-content')
170
+ narrowest = widest;
171
+ // within its own least and greatest widths
172
+ const [least, most] = ownWidths(box, narrowest, widest);
173
+ item.max = Math.min(most, Math.max(least, widest)) + margins;
174
+ item.min = Math.min(most, Math.max(least, narrowest)) + margins;
175
+ };
176
+ const colTracks = cols.map((track) => sizing(track, contentWidth));
177
+ const widths = sizeTracks(colTracks, items.map((item) => ({
178
+ start: item.col,
179
+ span: item.cols,
180
+ minContent: () => (measure(item), item.min),
181
+ maxContent: () => (measure(item), item.max),
182
+ minimum: () => leastWidth(item, colTracks, colGap, measure),
183
+ })), {
184
+ available: contentWidth,
185
+ least: 0,
186
+ gap: colGap,
187
+ stretch: style.justifyContent === 'normal' || style.justifyContent === 'stretch',
188
+ });
189
+ const lefts = starts(widths, colGap, style.justifyContent, contentWidth);
190
+ // each item at its area's width, for its height
191
+ for (const item of items) {
192
+ layoutItem(item, extent(widths, lefts, item.col, item.cols), ctx, heightBefore(item));
193
+ }
194
+ // a height of the grid's own, or else the least it may be, which the
195
+ // `fr` rows and the `auto` ones fill
196
+ const own = Number.isFinite(definite);
197
+ const least = own ? 0 : leastHeight(box);
198
+ // the rows against a height: percentages of it, or `auto` without one
199
+ const sizeRows = (base, available, atLeast) => {
200
+ const rowTracks = [];
201
+ for (let r = 0; r < rowCount; r += 1) {
202
+ rowTracks.push(sizing(rowDefs[r], base));
203
+ }
204
+ return sizeTracks(rowTracks, items.map((item) => rowItem(item, rowTracks, rowGap)), {
205
+ available,
206
+ least: atLeast,
207
+ gap: rowGap,
208
+ stretch: style.alignContent === 'stretch',
209
+ });
210
+ };
211
+ let heights = sizeRows(definite, own ? definite : Infinity, least);
212
+ // with no height of its own, the grid is as tall as its rows come to with
213
+ // their percentages `auto`, and the percentages are of that (7.2.1)
214
+ if (!own && [...explicit, style.gridAutoRows].some(percentTrack)) {
215
+ let tall = rowGap * Math.max(0, heights.length - 1);
216
+ for (const h of heights)
217
+ tall += h;
218
+ tall = Math.max(tall, least);
219
+ heights = sizeRows(tall, tall, 0);
220
+ }
221
+ let height = rowGap * Math.max(0, heights.length - 1);
222
+ for (const h of heights)
223
+ height += h;
224
+ // with no height of its own, a percentage gap is of the height its rows
225
+ // come to without it, and the rows are placed with it where the grid is
226
+ // that tall
227
+ if (!own && isPct(style.rowGap)) {
228
+ rowGap = gapOf(style.rowGap, Math.max(height, least));
229
+ }
230
+ // the rows are placed in the grid's height — which one from its
231
+ // `aspect-ratio` grows to what it holds (CSS Sizing 4, 5.2) — or with no
232
+ // height of its own, in its least height or its rows'
233
+ const grows = own &&
234
+ style.height === AUTO &&
235
+ style.aspectRatio !== null &&
236
+ style.minHeight === AUTO;
237
+ const room = own && !grows ? definite : Math.max(own ? definite : least, height);
238
+ const tops = starts(heights, rowGap, style.alignContent, room);
239
+ // an item that takes a percentage of its area's height, which is known
240
+ // now, is laid out again with it
241
+ for (const item of items) {
242
+ const child = item.box;
243
+ const tall = extent(heights, tops, item.row, item.rows);
244
+ if (Object.is(child.percentHeightBase, tall) || !percentOwn(child))
245
+ continue;
246
+ child.percentHeightBase = tall;
247
+ layoutItem(item, extent(widths, lefts, item.col, item.cols), ctx, heightBeforeRows(child, tall));
248
+ }
249
+ GRID_TRACKS.set(box, {
250
+ cols: tracksOf(widths, lefts, keepCols),
251
+ rows: tracksOf(heights, tops, keepRows),
252
+ colLines,
253
+ rowLines,
254
+ });
255
+ for (const item of items) {
256
+ const child = item.box;
257
+ const area = extent(widths, lefts, item.col, item.cols);
258
+ const tall = extent(heights, tops, item.row, item.rows);
259
+ const justify = child.style.justifySelf === 'auto'
260
+ ? style.justifyItems
261
+ : child.style.justifySelf;
262
+ const align = child.style.alignSelf === AUTO ? style.alignItems : child.style.alignSelf;
263
+ const outerWidth = child.width + child.marginLeft + child.marginRight;
264
+ const outerHeight = child.height + child.marginTop + child.marginBottom;
265
+ // `auto` margins take the free space in the area first (CSS Grid 1,
266
+ // 10.2), and an item with them is not stretched
267
+ const [left, right] = autoMargins(child, 'x');
268
+ const [top, bottom] = autoMargins(child, 'y');
269
+ let dx = 0;
270
+ if (left || right) {
271
+ dx = (area - outerWidth) * (left && right ? 0.5 : left ? 1 : 0);
272
+ }
273
+ else if (justify === 'center')
274
+ dx = (area - outerWidth) / 2;
275
+ else if (justify === 'flex-end')
276
+ dx = area - outerWidth;
277
+ let dy = 0;
278
+ if (top || bottom) {
279
+ dy = (tall - outerHeight) * (top && bottom ? 0.5 : top ? 1 : 0);
280
+ }
281
+ else if (align === 'center')
282
+ dy = (tall - outerHeight) / 2;
283
+ else if (align === 'flex-end')
284
+ dy = tall - outerHeight;
285
+ else if ((align === 'stretch' || align === 'baseline') &&
286
+ child.style.height === AUTO &&
287
+ !child.style.heightKeyword &&
288
+ (child.style.alignSelf === 'stretch' ||
289
+ (child.kind !== 'replaced' && !child.style.aspectRatio))) {
290
+ // a stretched item is its area's height, within its own least and
291
+ // greatest (10.3): taller than what it holds, or shorter where its
292
+ // tracks let it be, what it holds then running past it. An image, a
293
+ // control or a box with an `aspect-ratio` keeps its own height, as
294
+ // `normal` has one with a natural size or a ratio — which is what
295
+ // the grid's `stretch` may be, and the item's own may not.
296
+ const stretched = tall - child.marginTop - child.marginBottom;
297
+ const height = clampHeight(child, Math.max(stretched, child.verticalExtra));
298
+ // and one with a ratio that is not stretched across is as wide as
299
+ // that height makes it (CSS Sizing 4, 5.1)
300
+ const wide = child.style.width === AUTO &&
301
+ !child.style.widthKeyword &&
302
+ !(justify === 'stretch' && !left && !right) &&
303
+ height !== child.height
304
+ ? widthThroughRatio(child, height)
305
+ : null;
306
+ const width = wide === null ? child.width : clampWidth(child, wide, area, ctx);
307
+ // what is in it takes its percentages of that height, which a
308
+ // stretch makes definite, as it does a flex item's
309
+ if (child.kind !== 'replaced' &&
310
+ (wide !== null || percentHeightsIn(child))) {
311
+ FLEXED_HEIGHT.set(child, Math.max(0, height - child.verticalExtra));
312
+ try {
313
+ ctx.layoutSubtree(child, width);
314
+ }
315
+ finally {
316
+ FLEXED_HEIGHT.delete(child);
317
+ }
318
+ }
319
+ child.width = width;
320
+ child.height = height;
321
+ }
322
+ moveTo(child, box.contentX + lefts[item.col] + child.marginLeft + Math.max(0, dx), box.contentY + tops[item.row] + child.marginTop + Math.max(0, dy));
323
+ }
324
+ return height;
325
+ }
326
+ /** An axis's explicit tracks and the names of their lines, a `repeat()`
327
+ * of what fits counted out against its size where it has one, and once
328
+ * where it has none (CSS Grid 1, 7.2.3.2). */
329
+ function trackList(template, width, gap) {
330
+ if (!template)
331
+ return { tracks: [], names: [[]], fit: null };
332
+ const { repeat } = template;
333
+ if (!repeat) {
334
+ return { tracks: template.tracks, names: template.names, fit: null };
335
+ }
336
+ const outer = template.tracks;
337
+ const unit = repeat.tracks;
338
+ // what one repetition takes: its tracks' maximums where those are
339
+ // lengths, and their minimums where not (7.2.3.2)
340
+ const base = Number.isFinite(width) ? width : 0;
341
+ const fixed = (track) => lengthOf(track.max, base) ?? lengthOf(track.min, base) ?? 0;
342
+ const others = outer.reduce((sum, t) => sum + fixed(t), 0);
343
+ const each = unit.reduce((sum, t) => sum + fixed(t), 0);
344
+ let count = 1;
345
+ if (Number.isFinite(width) && each > 0) {
346
+ const room = width - others - gap * outer.length;
347
+ count = Math.max(1, Math.floor((room + gap) / (each + gap * unit.length)));
348
+ }
349
+ // the repetitions' lines where they meet carry the names of both sides
350
+ const tracks = [];
351
+ const names = [];
352
+ for (let i = 0; i < repeat.at; i += 1) {
353
+ names.push(template.names[i]);
354
+ tracks.push(outer[i]);
355
+ }
356
+ let line = [...template.names[repeat.at]];
357
+ for (let k = 0; k < Math.min(count, 1000); k += 1) {
358
+ line.push(...repeat.names[0]);
359
+ for (let j = 0; j < unit.length; j += 1) {
360
+ names.push(line);
361
+ tracks.push(unit[j]);
362
+ line = [...repeat.names[j + 1]];
363
+ }
364
+ }
365
+ line.push(...repeat.after);
366
+ for (let i = repeat.at; i < outer.length; i += 1) {
367
+ names.push(line);
368
+ tracks.push(outer[i]);
369
+ line = [...template.names[i + 1]];
370
+ }
371
+ names.push(line);
372
+ const repeated = Math.min(count, 1000) * unit.length;
373
+ return {
374
+ tracks,
375
+ names,
376
+ fit: repeat.fit ? [repeat.at, repeat.at + repeated] : null,
377
+ };
378
+ }
379
+ /**
380
+ * Place the items (CSS Grid 1, 8.5): an item with both its lines where it
381
+ * says; one that names only the lines across the flow — its row, where the
382
+ * grid fills its rows — in the first place free along them, past the ones
383
+ * placed there before it; and the rest in order from a cursor that moves
384
+ * along the flow and on to the next line of it — to the next where an
385
+ * item's own line is before it — or, `dense`, from the start each time.
386
+ * `grid-auto-flow: column` is the same with the axes turned round.
387
+ */
388
+ function place(boxes, cols, rows, flow) {
389
+ const byColumn = flow.startsWith('column');
390
+ const dense = flow.endsWith('dense');
391
+ // in the flow's terms: `a` along it, `b` across it
392
+ const taken = [];
393
+ const free = (b, a, bs, as) => {
394
+ for (let r = b; r < b + bs; r += 1) {
395
+ for (let c = a; c < a + as; c += 1)
396
+ if (taken[r]?.[c])
397
+ return false;
398
+ }
399
+ return true;
400
+ };
401
+ const take = (b, a, bs, as) => {
402
+ for (let r = b; r < b + bs; r += 1) {
403
+ const line = (taken[r] ??= []);
404
+ for (let c = a; c < a + as; c += 1)
405
+ line[c] = true;
406
+ }
407
+ };
408
+ const placed = boxes.map((box) => {
409
+ const style = box.style;
410
+ const [col, colSpan] = placement(style.gridColumnStart, style.gridColumnEnd, cols);
411
+ const [row, rowSpan] = placement(style.gridRowStart, style.gridRowEnd, rows);
412
+ return byColumn
413
+ ? { box, a: row ?? -1, as: rowSpan, b: col ?? -1, bs: colSpan }
414
+ : { box, a: col ?? -1, as: colSpan, b: row ?? -1, bs: rowSpan };
415
+ });
416
+ // 1. what says both where it goes
417
+ for (const p of placed)
418
+ if (p.a >= 0 && p.b >= 0)
419
+ take(p.b, p.a, p.bs, p.as);
420
+ // 2. what says only which line of the flow
421
+ const past = new Map();
422
+ for (const p of placed) {
423
+ if (p.b < 0 || p.a >= 0)
424
+ continue;
425
+ let a = dense ? 0 : (past.get(p.b) ?? 0);
426
+ while (!free(p.b, a, p.bs, p.as) && a < 10_000)
427
+ a += 1;
428
+ p.a = a;
429
+ take(p.b, a, p.bs, p.as);
430
+ past.set(p.b, a + p.as);
431
+ }
432
+ // 3. how long a line of the flow is: the explicit grid's, and as long as
433
+ // the items with a place along it and the longest span without one need
434
+ let length = byColumn ? rows.tracks : cols.tracks;
435
+ for (const p of placed)
436
+ length = Math.max(length, p.a >= 0 ? p.a + p.as : p.as);
437
+ // 4. the rest, in order, from the cursor
438
+ let cursorB = 0;
439
+ let cursorA = 0;
440
+ for (const p of placed) {
441
+ if (p.b >= 0)
442
+ continue;
443
+ if (dense) {
444
+ cursorB = 0;
445
+ cursorA = 0;
446
+ }
447
+ if (p.a >= 0) {
448
+ let b = p.a < cursorA ? cursorB + 1 : cursorB;
449
+ while (!free(b, p.a, p.bs, p.as))
450
+ b += 1;
451
+ p.b = b;
452
+ }
453
+ else {
454
+ let b = cursorB;
455
+ let a = cursorA;
456
+ for (;;) {
457
+ if (a + p.as > length) {
458
+ b += 1;
459
+ a = 0;
460
+ continue;
461
+ }
462
+ if (free(b, a, p.bs, p.as))
463
+ break;
464
+ a += 1;
465
+ }
466
+ p.b = b;
467
+ p.a = a;
468
+ }
469
+ take(p.b, p.a, p.bs, p.as);
470
+ cursorB = p.b;
471
+ cursorA = p.a + p.as;
472
+ }
473
+ return placed.map((p) => byColumn
474
+ ? {
475
+ box: p.box,
476
+ row: p.a,
477
+ rows: p.as,
478
+ col: p.b,
479
+ cols: p.bs,
480
+ min: -1,
481
+ max: -1,
482
+ }
483
+ : {
484
+ box: p.box,
485
+ row: p.b,
486
+ rows: p.bs,
487
+ col: p.a,
488
+ cols: p.as,
489
+ min: -1,
490
+ max: -1,
491
+ });
492
+ }
493
+ /** A track's minimum or maximum where it is a length or a percentage of
494
+ * `base`, never below zero; null where it is content or an `fr`. */
495
+ function lengthOf(len, base) {
496
+ if (typeof len === 'number')
497
+ return Math.max(0, len);
498
+ if (typeof len === 'object' &&
499
+ len !== null &&
500
+ !('fr' in len) &&
501
+ !('fit' in len) &&
502
+ isPct(len)) {
503
+ return Math.max(0, resolve(len, base));
504
+ }
505
+ return null;
506
+ }
507
+ /** The size of the tracks from one to `count` after it, the gaps and the
508
+ * space distributed between them included. */
509
+ function extent(sizes, at, from, count) {
510
+ const last = Math.min(sizes.length, from + count) - 1;
511
+ return last < from ? 0 : at[last] + sizes[last] - at[from];
512
+ }
513
+ /** An item's max-content width, its border box's: measured once in the
514
+ * box's life, as a table cell's is (`Box.intrinsicMaxContent`). */
515
+ function maxContentOf(box, ctx) {
516
+ if (box.intrinsicMaxContent < 0) {
517
+ box.intrinsicMaxContent = measureIntrinsicWidth(box, ctx, Infinity);
518
+ }
519
+ return box.intrinsicMaxContent;
520
+ }
521
+ /** Lay an item out in its area: stretched across it where its width is
522
+ * `auto` and it is stretched, or at its content's width, no wider than
523
+ * the area, where it is aligned instead. */
524
+ function layoutItem(item, area, ctx,
525
+ /** Its border box's height before the rows are sized, where it has one. */
526
+ tall) {
527
+ const child = item.box;
528
+ const style = child.style;
529
+ const parent = child.parent?.style;
530
+ const justify = style.justifySelf === 'auto'
531
+ ? (parent?.justifyItems ?? 'normal')
532
+ : style.justifySelf;
533
+ const margins = child.marginLeft + child.marginRight;
534
+ const room = Math.max(0, area - margins);
535
+ // its content's widths, border box: measured once in its life
536
+ const content = () => {
537
+ if (child.intrinsicMaxContent < 0)
538
+ maxContentOf(child, ctx);
539
+ if (child.intrinsicMinContent < 0) {
540
+ child.intrinsicMinContent = measureIntrinsicWidth(child, ctx, MIN_CONTENT_PROBE);
541
+ }
542
+ return [child.intrinsicMinContent, child.intrinsicMaxContent];
543
+ };
544
+ const keyword = style.widthKeyword;
545
+ // `stretch` fills its area, and so does `normal` but for a replaced
546
+ // element, which it sizes as a block's is: a box with a ratio is as wide
547
+ // as a block would be where it has no height yet (CSS Grid 1, 6.2)
548
+ const across = (justify === 'stretch' ||
549
+ (justify === 'normal' && child.kind !== 'replaced')) &&
550
+ !autoMargins(child, 'x').some(Boolean);
551
+ // a height it has already, through a ratio: its width, whatever its
552
+ // content says, where `stretch` does not fill its area (CSS Sizing 4,
553
+ // 5.1)
554
+ const fills = justify === 'stretch' && !autoMargins(child, 'x').some(Boolean);
555
+ const through = style.width === AUTO && !fills && tall !== null
556
+ ? widthThroughRatio(child, tall)
557
+ : null;
558
+ let width;
559
+ if (style.width !== AUTO) {
560
+ const extra = style.boxSizing === 'border-box' ? 0 : child.horizontalExtra;
561
+ width = resolve(style.width, area, room - extra) + extra;
562
+ }
563
+ else if (through !== null) {
564
+ width = clampWidth(child, through, area, ctx);
565
+ // and no narrower than its content where it shows what overflows it
566
+ // (5.2), as a block with a ratio is
567
+ if (child.kind !== 'replaced' && showsOverflow(child) && !keyword) {
568
+ width = Math.max(width, content()[0]);
569
+ }
570
+ }
571
+ else if (keyword) {
572
+ // a width of its content's is that, whatever aligns it
573
+ const [narrowest, widest] = content();
574
+ const fit = typeof keyword === 'object'
575
+ ? resolve(keyword.fit, area, room) + child.horizontalExtra
576
+ : room;
577
+ width =
578
+ keyword === 'stretch'
579
+ ? room
580
+ : keyword === 'min-content'
581
+ ? narrowest
582
+ : keyword === 'max-content'
583
+ ? widest
584
+ : Math.min(widest, Math.max(narrowest, fit));
585
+ }
586
+ else if (across) {
587
+ width = room;
588
+ }
589
+ else {
590
+ // fit-content: no wider than its content at its widest, nor narrower
591
+ // than at its narrowest, which may run past its area
592
+ const [narrowest, widest] = content();
593
+ width = Math.min(widest, Math.max(narrowest, room));
594
+ }
595
+ if (child.kind !== 'replaced') {
596
+ ctx.layoutSubtree(child, width);
597
+ return;
598
+ }
599
+ // a replaced element sizes itself from its style: then it is given the
600
+ // width it was stretched to, or the one its height makes, and the height
601
+ // its ratio makes of that width where it has none of its own
602
+ ctx.layoutSubtree(child, area);
603
+ if (style.width !== AUTO || keyword)
604
+ return;
605
+ if (through !== null) {
606
+ child.width = width;
607
+ child.height = tall;
608
+ }
609
+ else if (fills) {
610
+ child.width = clampWidth(child, width, area, ctx);
611
+ const down = style.height === AUTO ? heightThroughRatio(child, child.width) : null;
612
+ if (down !== null)
613
+ child.height = clampHeight(child, down);
614
+ }
615
+ }
616
+ /** Whether a box's content is its least size through a ratio, which it is
617
+ * where the box shows what overflows it and its least width is `auto`
618
+ * (CSS Sizing 4, 5.2). */
619
+ function showsOverflow(box) {
620
+ const style = box.style;
621
+ return (style.minWidth === AUTO &&
622
+ !style.minWidthKeyword &&
623
+ (style.overflowX === 'visible' || style.overflowX === 'clip') &&
624
+ (style.overflowY === 'visible' || style.overflowY === 'clip'));
625
+ }
626
+ /** Which tracks of an axis stay: all but those of an `auto-fit`
627
+ * repetition that no item is in, which collapse (CSS Grid 1, 7.2.3.2).
628
+ * Null where they all stay. */
629
+ function keptTracks(count, fit, items, columns) {
630
+ if (!fit)
631
+ return null;
632
+ const used = new Array(count).fill(false);
633
+ for (const item of items) {
634
+ const from = columns ? item.col : item.row;
635
+ const span = columns ? item.cols : item.rows;
636
+ for (let t = from; t < Math.min(count, from + span); t += 1)
637
+ used[t] = true;
638
+ }
639
+ let collapsed = false;
640
+ const keep = used.map((inUse, t) => {
641
+ const stays = inUse || t < fit[0] || t >= fit[1];
642
+ if (!stays)
643
+ collapsed = true;
644
+ return stays;
645
+ });
646
+ return collapsed ? keep : null;
647
+ }
648
+ /** Where each track that stays is among those that do. */
649
+ function indexOfKept(keep) {
650
+ if (!keep)
651
+ return null;
652
+ const at = [];
653
+ let n = 0;
654
+ for (const stays of keep) {
655
+ at.push(n);
656
+ if (stays)
657
+ n += 1;
658
+ }
659
+ return at;
660
+ }
661
+ /** Each track's start and end, the collapsed ones back among the others
662
+ * as nothing, at the end of the one before. */
663
+ function tracksOf(sizes, at, keep) {
664
+ if (!keep)
665
+ return sizes.map((size, i) => [at[i], at[i] + size]);
666
+ const out = [];
667
+ let edge = at.length ? at[0] : 0;
668
+ let k = 0;
669
+ for (const stays of keep) {
670
+ if (stays) {
671
+ out.push([at[k], at[k] + sizes[k]]);
672
+ edge = at[k] + sizes[k];
673
+ k += 1;
674
+ }
675
+ else
676
+ out.push([edge, edge]);
677
+ }
678
+ return out;
679
+ }
680
+ /** Whether a box's own height, least or greatest, is a percentage. */
681
+ function percentOwn(box) {
682
+ const style = box.style;
683
+ return (isPct(style.height) ||
684
+ isPct(style.minHeight) ||
685
+ (style.maxHeight !== 'none' && isPct(style.maxHeight)));
686
+ }
687
+ /**
688
+ * An item's border-box height before the rows are sized, where it has one
689
+ * then: a height of its own — a percentage of the rows it spans where they
690
+ * have a length for a size — or the rows' where it is stretched down them
691
+ * by its own `align-self`. Null where it has none, which is where its
692
+ * height is its content's.
693
+ */
694
+ function heightBeforeRows(box, rows) {
695
+ const style = box.style;
696
+ const own = resolveOrNull(style.height, rows);
697
+ if (own !== null && Number.isFinite(own)) {
698
+ return clampHeight(box, style.boxSizing === 'border-box'
699
+ ? Math.max(own, box.verticalExtra)
700
+ : own + box.verticalExtra);
701
+ }
702
+ if (style.height === AUTO &&
703
+ !style.heightKeyword &&
704
+ style.alignSelf === 'stretch' &&
705
+ Number.isFinite(rows) &&
706
+ !autoMargins(box, 'y').some(Boolean)) {
707
+ const room = rows - box.marginTop - box.marginBottom;
708
+ return clampHeight(box, Math.max(room, box.verticalExtra));
709
+ }
710
+ return null;
711
+ }
712
+ /** A track's sizing functions, its lengths resolved against the size of the
713
+ * axis: a percentage of a size the tracks are still finding is `auto`
714
+ * (CSS Grid 1, 7.2.1), and `fit-content()` of one its content's widest. */
715
+ function sizing(track, base) {
716
+ const length = (len) => typeof len === 'number'
717
+ ? Math.max(0, len)
718
+ : len === AUTO || !Number.isFinite(base)
719
+ ? null
720
+ : Math.max(0, resolve(len, base));
721
+ const { min, max } = track;
722
+ const least = min === 'min-content' || min === 'max-content'
723
+ ? min
724
+ : (length(min) ?? 'auto');
725
+ let most;
726
+ if (max === 'min-content' || max === 'max-content')
727
+ most = max;
728
+ else if (typeof max === 'object' && max !== null && 'fr' in max) {
729
+ most = { fr: max.fr };
730
+ }
731
+ else if (typeof max === 'object' && max !== null && 'fit' in max) {
732
+ const fit = length(max.fit);
733
+ most = fit === null ? 'max-content' : { fit };
734
+ }
735
+ else
736
+ most = length(max) ?? 'auto';
737
+ return { min: least, max: most };
738
+ }
739
+ /** An item's own least and greatest border-box widths, where they are
740
+ * lengths or its content's: a percentage of the area the tracks are still
741
+ * being sized for is none (CSS Sizing 3, 5.2.1). */
742
+ function ownWidths(box, narrowest, widest) {
743
+ const style = box.style;
744
+ const extra = style.boxSizing === 'border-box' ? 0 : box.horizontalExtra;
745
+ const keyword = (k) => k === 'min-content' ? narrowest : k === 'max-content' ? widest : null;
746
+ const least = keyword(style.minWidthKeyword) ??
747
+ (typeof style.minWidth === 'number' ? style.minWidth + extra : 0);
748
+ const most = keyword(style.maxWidthKeyword) ??
749
+ (typeof style.maxWidth === 'number' ? style.maxWidth + extra : Infinity);
750
+ return [least, Math.max(least, most)];
751
+ }
752
+ /**
753
+ * The least an item makes the columns it is in (CSS Grid 1, 11.5, its
754
+ * "minimum contribution"): its narrowest where it has a width of its own,
755
+ * and its own least width where it has one of those.
756
+ */
757
+ function leastWidth(item, tracks, gap, measure) {
758
+ const box = item.box;
759
+ const style = box.style;
760
+ const margins = box.marginLeft + box.marginRight;
761
+ measure(item);
762
+ if ((style.width !== AUTO && !isPct(style.width)) || style.widthKeyword) {
763
+ return item.min;
764
+ }
765
+ if (style.minWidthKeyword || style.minWidth !== AUTO) {
766
+ const [least] = ownWidths(box, box.intrinsicMinContent, box.intrinsicMaxContent);
767
+ return least + margins;
768
+ }
769
+ return (automaticMinimum(item.col, item.cols, tracks, gap, style.overflowX, margins, item.min - margins) + margins);
770
+ }
771
+ /**
772
+ * An item's automatic least size (CSS Grid 1, 6.6): its content's, where it
773
+ * shows what overflows it and is in an `auto` track — the only track, where
774
+ * one of them is an `fr` — and no larger than the tracks' lengths leave it
775
+ * room for where every one of them has a length for a maximum; else none.
776
+ */
777
+ function automaticMinimum(start, count, tracks, gap, overflow, margins, content) {
778
+ // a scroll container has none; `clip` is not one (CSS Overflow 3, 3.1)
779
+ if (overflow !== 'visible' && overflow !== 'clip')
780
+ return 0;
781
+ const end = Math.min(tracks.length, start + count);
782
+ let auto = false;
783
+ let flexible = false;
784
+ let fixed = true;
785
+ let room = gap * Math.max(0, end - start - 1) - margins;
786
+ for (let t = start; t < end; t += 1) {
787
+ const { min, max } = tracks[t];
788
+ if (min === 'auto')
789
+ auto = true;
790
+ if (typeof max === 'object' && 'fr' in max)
791
+ flexible = true;
792
+ if (typeof max === 'number')
793
+ room += max;
794
+ else
795
+ fixed = false;
796
+ }
797
+ if (!auto || (flexible && end - start > 1))
798
+ return 0;
799
+ return Math.max(0, fixed ? Math.min(content, room) : content);
800
+ }
801
+ /** What an item makes of the rows it is in: its height at its area's
802
+ * width, whichever the constraint, and the least it can be, as a
803
+ * column's. */
804
+ function rowItem(item, tracks, gap) {
805
+ const box = item.box;
806
+ const margins = box.marginTop + box.marginBottom;
807
+ const outer = () => box.height + margins;
808
+ return {
809
+ start: item.row,
810
+ span: item.rows,
811
+ minContent: outer,
812
+ maxContent: outer,
813
+ minimum: () => {
814
+ const style = box.style;
815
+ if (style.height !== AUTO && !isPct(style.height))
816
+ return outer();
817
+ if (style.minHeight !== AUTO) {
818
+ const extra = style.boxSizing === 'border-box' ? 0 : box.verticalExtra;
819
+ const least = typeof style.minHeight === 'number' ? style.minHeight + extra : 0;
820
+ return least + margins;
821
+ }
822
+ return (automaticMinimum(item.row, item.rows, tracks, gap, style.overflowY, margins, box.height) + margins);
823
+ },
824
+ };
825
+ }
826
+ /** A grid's least content height where it has no height of its own: its
827
+ * `min-height`, a length or a percentage of a height. */
828
+ function leastHeight(box) {
829
+ const style = box.style;
830
+ if (style.minHeight === AUTO)
831
+ return 0;
832
+ const px = resolveOrNull(style.minHeight, box.percentHeightBase);
833
+ if (px === null || !Number.isFinite(px))
834
+ return 0;
835
+ return Math.max(0, style.boxSizing === 'border-box' ? px - box.verticalExtra : px);
836
+ }
837
+ /**
838
+ * Where each track starts from the grid's content edge, with the space the
839
+ * tracks leave placed as `justify-content` or `align-content` has it (CSS
840
+ * Box Alignment 3, 5.1): before them, after them, between them or around
841
+ * each — none where the axis has no size of its own. `center` and `end`
842
+ * overflow the start as well, where the tracks are larger than the room;
843
+ * the distributions fall back to the start.
844
+ */
845
+ function starts(sizes, gap, distribution, room) {
846
+ let used = gap * Math.max(0, sizes.length - 1);
847
+ for (const size of sizes)
848
+ used += size;
849
+ const free = Number.isFinite(room) ? room - used : 0;
850
+ const n = sizes.length;
851
+ let at = 0;
852
+ let between = 0;
853
+ if (n && free !== 0) {
854
+ if (distribution === 'center')
855
+ at = free / 2;
856
+ else if (distribution === 'end' ||
857
+ distribution === 'flex-end' ||
858
+ distribution === 'right') {
859
+ at = free;
860
+ }
861
+ else if (free > 0 && distribution === 'space-between') {
862
+ between = n > 1 ? free / (n - 1) : 0;
863
+ }
864
+ else if (free > 0 && distribution === 'space-around') {
865
+ between = free / n;
866
+ at = between / 2;
867
+ }
868
+ else if (free > 0 && distribution === 'space-evenly') {
869
+ between = free / (n + 1);
870
+ at = between;
871
+ }
872
+ }
873
+ const out = [];
874
+ for (const size of sizes) {
875
+ out.push(at);
876
+ at += size + gap + between;
877
+ }
878
+ return out;
879
+ }
880
+ /** Which of an item's margins on an axis are `auto`, start and end. */
881
+ function autoMargins(box, axis) {
882
+ const style = box.style;
883
+ return axis === 'x'
884
+ ? [style.marginLeft === AUTO, style.marginRight === AUTO]
885
+ : [style.marginTop === AUTO, style.marginBottom === AUTO];
886
+ }
887
+ /** Whether a track's least or greatest size is a percentage. */
888
+ function percentTrack(track) {
889
+ const { min, max } = track;
890
+ if (typeof min === 'object' && isPct(min))
891
+ return true;
892
+ if (typeof max !== 'object' || max === null)
893
+ return false;
894
+ if ('fr' in max)
895
+ return false;
896
+ if ('fit' in max)
897
+ return typeof max.fit === 'object' && isPct(max.fit);
898
+ return isPct(max);
899
+ }
900
+ //# sourceMappingURL=css-grid.js.map