@react-x11/components 0.9.0 → 0.11.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 (579) hide show
  1. package/README.md +10 -4
  2. package/dist/charts/node.d.ts +11 -1
  3. package/dist/charts/node.d.ts.map +1 -1
  4. package/dist/charts/node.js +44 -14
  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 +27 -24
  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/index.d.ts +1 -1
  24. package/dist/code-language/index.d.ts.map +1 -1
  25. package/dist/code-language/index.js +1 -1
  26. package/dist/code-language/index.js.map +1 -1
  27. package/dist/code-language/languages/glsl.d.ts.map +1 -1
  28. package/dist/code-language/languages/glsl.js +10 -2
  29. package/dist/code-language/languages/glsl.js.map +1 -1
  30. package/dist/code-language/languages/javascript.d.ts.map +1 -1
  31. package/dist/code-language/languages/javascript.js +18 -3
  32. package/dist/code-language/languages/javascript.js.map +1 -1
  33. package/dist/code-language/languages/json.d.ts.map +1 -1
  34. package/dist/code-language/languages/json.js +10 -2
  35. package/dist/code-language/languages/json.js.map +1 -1
  36. package/dist/code-language/languages/shell.d.ts.map +1 -1
  37. package/dist/code-language/languages/shell.js +10 -2
  38. package/dist/code-language/languages/shell.js.map +1 -1
  39. package/dist/code-language/languages/sql.d.ts.map +1 -1
  40. package/dist/code-language/languages/sql.js +20 -2
  41. package/dist/code-language/languages/sql.js.map +1 -1
  42. package/dist/code-language/runs.d.ts +31 -0
  43. package/dist/code-language/runs.d.ts.map +1 -1
  44. package/dist/code-language/runs.js +105 -0
  45. package/dist/code-language/runs.js.map +1 -1
  46. package/dist/code-language/stream.d.ts +22 -0
  47. package/dist/code-language/stream.d.ts.map +1 -1
  48. package/dist/code-language/stream.js +259 -9
  49. package/dist/code-language/stream.js.map +1 -1
  50. package/dist/code-language/types.d.ts +5 -4
  51. package/dist/code-language/types.d.ts.map +1 -1
  52. package/dist/codeblock/index.d.ts +26 -2
  53. package/dist/codeblock/index.d.ts.map +1 -1
  54. package/dist/codeblock/index.js +57 -4
  55. package/dist/codeblock/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 +262 -6
  115. package/dist/html/css/cascade.d.ts.map +1 -1
  116. package/dist/html/css/cascade.js +1373 -67
  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 +501 -15
  139. package/dist/html/css/style.d.ts.map +1 -1
  140. package/dist/html/css/style.js +3729 -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 +65 -16
  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 +3077 -219
  172. package/dist/html/layout/block.js.map +1 -1
  173. package/dist/html/layout/boxes.d.ts +367 -17
  174. package/dist/html/layout/boxes.d.ts.map +1 -1
  175. package/dist/html/layout/boxes.js +1742 -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 +154 -1
  205. package/dist/html/layout/inline.d.ts.map +1 -1
  206. package/dist/html/layout/inline.js +3598 -175
  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 +169 -4
  221. package/dist/html/node.d.ts.map +1 -1
  222. package/dist/html/node.js +1429 -137
  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 +3635 -107
  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 +442 -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 +1 -1
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js.map +1 -1
  247. package/dist/internal/codelines.d.ts +42 -0
  248. package/dist/internal/codelines.d.ts.map +1 -0
  249. package/dist/internal/codelines.js +170 -0
  250. package/dist/internal/codelines.js.map +1 -0
  251. package/dist/internal/collate.d.ts +3 -0
  252. package/dist/internal/collate.d.ts.map +1 -0
  253. package/dist/internal/collate.js +11 -0
  254. package/dist/internal/collate.js.map +1 -0
  255. package/dist/internal/markdown/ast.d.ts +11 -0
  256. package/dist/internal/markdown/ast.d.ts.map +1 -1
  257. package/dist/internal/markdown/parse.d.ts.map +1 -1
  258. package/dist/internal/markdown/parse.js +109 -8
  259. package/dist/internal/markdown/parse.js.map +1 -1
  260. package/dist/internal/prewarm.d.ts +18 -0
  261. package/dist/internal/prewarm.d.ts.map +1 -0
  262. package/dist/internal/prewarm.js +42 -0
  263. package/dist/internal/prewarm.js.map +1 -0
  264. package/dist/internal/sdf.d.ts +20 -0
  265. package/dist/internal/sdf.d.ts.map +1 -0
  266. package/dist/internal/sdf.js +216 -0
  267. package/dist/internal/sdf.js.map +1 -0
  268. package/dist/internal/splice.d.ts +12 -0
  269. package/dist/internal/splice.d.ts.map +1 -0
  270. package/dist/internal/splice.js +23 -0
  271. package/dist/internal/splice.js.map +1 -0
  272. package/dist/internal/window.d.ts +12 -0
  273. package/dist/internal/window.d.ts.map +1 -1
  274. package/dist/internal/window.js +23 -6
  275. package/dist/internal/window.js.map +1 -1
  276. package/dist/maps/anchors.d.ts +6 -1
  277. package/dist/maps/anchors.d.ts.map +1 -1
  278. package/dist/maps/anchors.js +260 -1
  279. package/dist/maps/anchors.js.map +1 -1
  280. package/dist/maps/controller.d.ts +57 -0
  281. package/dist/maps/controller.d.ts.map +1 -1
  282. package/dist/maps/controller.js +97 -18
  283. package/dist/maps/controller.js.map +1 -1
  284. package/dist/maps/gl/buckets.d.ts +5 -1
  285. package/dist/maps/gl/buckets.d.ts.map +1 -1
  286. package/dist/maps/gl/buckets.js +5 -2
  287. package/dist/maps/gl/buckets.js.map +1 -1
  288. package/dist/maps/gl/build-worker.d.ts +2 -0
  289. package/dist/maps/gl/build-worker.d.ts.map +1 -1
  290. package/dist/maps/gl/build-worker.js +1 -1
  291. package/dist/maps/gl/build-worker.js.map +1 -1
  292. package/dist/maps/gl/cover.d.ts +23 -4
  293. package/dist/maps/gl/cover.d.ts.map +1 -1
  294. package/dist/maps/gl/cover.js +61 -48
  295. package/dist/maps/gl/cover.js.map +1 -1
  296. package/dist/maps/gl/placement.d.ts +21 -8
  297. package/dist/maps/gl/placement.d.ts.map +1 -1
  298. package/dist/maps/gl/placement.js +133 -58
  299. package/dist/maps/gl/placement.js.map +1 -1
  300. package/dist/maps/gl/renderer.d.ts +36 -4
  301. package/dist/maps/gl/renderer.d.ts.map +1 -1
  302. package/dist/maps/gl/renderer.js +81 -24
  303. package/dist/maps/gl/renderer.js.map +1 -1
  304. package/dist/maps/gl/shaders.d.ts +18 -17
  305. package/dist/maps/gl/shaders.d.ts.map +1 -1
  306. package/dist/maps/gl/shaders.js +34 -32
  307. package/dist/maps/gl/shaders.js.map +1 -1
  308. package/dist/maps/gl/store.d.ts +10 -0
  309. package/dist/maps/gl/store.d.ts.map +1 -1
  310. package/dist/maps/gl/store.js +47 -4
  311. package/dist/maps/gl/store.js.map +1 -1
  312. package/dist/maps/gl/text.d.ts +153 -24
  313. package/dist/maps/gl/text.d.ts.map +1 -1
  314. package/dist/maps/gl/text.js +379 -63
  315. package/dist/maps/gl/text.js.map +1 -1
  316. package/dist/maps/gl/view.d.ts +293 -2
  317. package/dist/maps/gl/view.d.ts.map +1 -1
  318. package/dist/maps/gl/view.js +317 -82
  319. package/dist/maps/gl/view.js.map +1 -1
  320. package/dist/maps/icons.d.ts +32 -0
  321. package/dist/maps/icons.d.ts.map +1 -0
  322. package/dist/maps/icons.js +151 -0
  323. package/dist/maps/icons.js.map +1 -0
  324. package/dist/maps/index.d.ts +2 -0
  325. package/dist/maps/index.d.ts.map +1 -1
  326. package/dist/maps/index.js +2 -0
  327. package/dist/maps/index.js.map +1 -1
  328. package/dist/maps/labels.d.ts +56 -4
  329. package/dist/maps/labels.d.ts.map +1 -1
  330. package/dist/maps/labels.js +213 -46
  331. package/dist/maps/labels.js.map +1 -1
  332. package/dist/maps/node.d.ts +17 -0
  333. package/dist/maps/node.d.ts.map +1 -1
  334. package/dist/maps/node.js +64 -30
  335. package/dist/maps/node.js.map +1 -1
  336. package/dist/maps/proj.d.ts +48 -0
  337. package/dist/maps/proj.d.ts.map +1 -1
  338. package/dist/maps/proj.js +73 -0
  339. package/dist/maps/proj.js.map +1 -1
  340. package/dist/maps/sources.d.ts +5 -3
  341. package/dist/maps/sources.d.ts.map +1 -1
  342. package/dist/maps/sources.js +5 -3
  343. package/dist/maps/sources.js.map +1 -1
  344. package/dist/maps/style.d.ts +35 -0
  345. package/dist/maps/style.d.ts.map +1 -1
  346. package/dist/maps/style.js.map +1 -1
  347. package/dist/maps/styles.d.ts +12 -0
  348. package/dist/maps/styles.d.ts.map +1 -1
  349. package/dist/maps/styles.js +120 -6
  350. package/dist/maps/styles.js.map +1 -1
  351. package/dist/maps/tiles.d.ts +31 -11
  352. package/dist/maps/tiles.d.ts.map +1 -1
  353. package/dist/maps/tiles.js +61 -27
  354. package/dist/maps/tiles.js.map +1 -1
  355. package/dist/maps/types.d.ts +28 -4
  356. package/dist/maps/types.d.ts.map +1 -1
  357. package/dist/markdown/index.d.ts.map +1 -1
  358. package/dist/markdown/index.js +209 -68
  359. package/dist/markdown/index.js.map +1 -1
  360. package/dist/markdown/spans.d.ts.map +1 -1
  361. package/dist/markdown/spans.js +6 -0
  362. package/dist/markdown/spans.js.map +1 -1
  363. package/dist/qml/containers.d.ts.map +1 -1
  364. package/dist/qml/containers.js +6 -1
  365. package/dist/qml/containers.js.map +1 -1
  366. package/dist/qml/interaction.d.ts.map +1 -1
  367. package/dist/qml/interaction.js +38 -5
  368. package/dist/qml/interaction.js.map +1 -1
  369. package/dist/qml/layouts.d.ts.map +1 -1
  370. package/dist/qml/layouts.js +21 -6
  371. package/dist/qml/layouts.js.map +1 -1
  372. package/dist/qml/qtquick.d.ts.map +1 -1
  373. package/dist/qml/qtquick.js +9 -2
  374. package/dist/qml/qtquick.js.map +1 -1
  375. package/dist/qml/react.d.ts.map +1 -1
  376. package/dist/qml/react.js +9 -7
  377. package/dist/qml/react.js.map +1 -1
  378. package/dist/reorder/clock.d.ts +7 -0
  379. package/dist/reorder/clock.d.ts.map +1 -0
  380. package/dist/reorder/clock.js +26 -0
  381. package/dist/reorder/clock.js.map +1 -0
  382. package/dist/reorder/index.d.ts +25 -3
  383. package/dist/reorder/index.d.ts.map +1 -1
  384. package/dist/reorder/index.js +64 -19
  385. package/dist/reorder/index.js.map +1 -1
  386. package/dist/rich-text-editor/index.d.ts +0 -11
  387. package/dist/rich-text-editor/index.d.ts.map +1 -1
  388. package/dist/rich-text-editor/index.js +38 -9
  389. package/dist/rich-text-editor/index.js.map +1 -1
  390. package/dist/rich-text-editor/keymap.d.ts.map +1 -1
  391. package/dist/rich-text-editor/keymap.js +2 -1
  392. package/dist/rich-text-editor/keymap.js.map +1 -1
  393. package/dist/rich-text-editor/keys.d.ts +17 -6
  394. package/dist/rich-text-editor/keys.d.ts.map +1 -1
  395. package/dist/rich-text-editor/keys.js +135 -26
  396. package/dist/rich-text-editor/keys.js.map +1 -1
  397. package/dist/rich-text-editor/markdown.d.ts.map +1 -1
  398. package/dist/rich-text-editor/markdown.js +30 -1
  399. package/dist/rich-text-editor/markdown.js.map +1 -1
  400. package/dist/rich-text-editor/marks.d.ts +9 -0
  401. package/dist/rich-text-editor/marks.d.ts.map +1 -0
  402. package/dist/rich-text-editor/marks.js +83 -0
  403. package/dist/rich-text-editor/marks.js.map +1 -0
  404. package/dist/rich-text-editor/render.d.ts.map +1 -1
  405. package/dist/rich-text-editor/render.js +28 -10
  406. package/dist/rich-text-editor/render.js.map +1 -1
  407. package/dist/rich-text-editor/replace.d.ts +13 -0
  408. package/dist/rich-text-editor/replace.d.ts.map +1 -0
  409. package/dist/rich-text-editor/replace.js +64 -0
  410. package/dist/rich-text-editor/replace.js.map +1 -0
  411. package/dist/rich-text-editor/toolbar.d.ts.map +1 -1
  412. package/dist/rich-text-editor/toolbar.js +1 -1
  413. package/dist/rich-text-editor/toolbar.js.map +1 -1
  414. package/dist/rich-text-editor/virtual.d.ts.map +1 -1
  415. package/dist/rich-text-editor/virtual.js +17 -0
  416. package/dist/rich-text-editor/virtual.js.map +1 -1
  417. package/dist/richtext/node.d.ts +46 -2
  418. package/dist/richtext/node.d.ts.map +1 -1
  419. package/dist/richtext/node.js +187 -4
  420. package/dist/richtext/node.js.map +1 -1
  421. package/dist/richtext/runs.d.ts +13 -8
  422. package/dist/richtext/runs.d.ts.map +1 -1
  423. package/dist/richtext/runs.js +18 -8
  424. package/dist/richtext/runs.js.map +1 -1
  425. package/dist/table/index.d.ts.map +1 -1
  426. package/dist/table/index.js +23 -0
  427. package/dist/table/index.js.map +1 -1
  428. package/dist/table/rows.d.ts +3 -2
  429. package/dist/table/rows.d.ts.map +1 -1
  430. package/dist/table/rows.js +20 -6
  431. package/dist/table/rows.js.map +1 -1
  432. package/dist/terminal/index.d.ts.map +1 -1
  433. package/dist/terminal/index.js +4 -0
  434. package/dist/terminal/index.js.map +1 -1
  435. package/dist/terminal/vt/pty.d.ts +13 -2
  436. package/dist/terminal/vt/pty.d.ts.map +1 -1
  437. package/dist/terminal/vt/pty.js +18 -3
  438. package/dist/terminal/vt/pty.js.map +1 -1
  439. package/dist/terminal-output/index.d.ts.map +1 -1
  440. package/dist/terminal-output/index.js +103 -23
  441. package/dist/terminal-output/index.js.map +1 -1
  442. package/dist/terminal-output/runs.d.ts +4 -1
  443. package/dist/terminal-output/runs.d.ts.map +1 -1
  444. package/dist/terminal-output/runs.js +5 -1
  445. package/dist/terminal-output/runs.js.map +1 -1
  446. package/dist/three/canvas.d.ts.map +1 -1
  447. package/dist/three/canvas.js +85 -7
  448. package/dist/three/canvas.js.map +1 -1
  449. package/dist/three/events.d.ts +22 -4
  450. package/dist/three/events.d.ts.map +1 -1
  451. package/dist/three/events.js +34 -4
  452. package/dist/three/events.js.map +1 -1
  453. package/dist/tree/index.d.ts.map +1 -1
  454. package/dist/tree/index.js +17 -0
  455. package/dist/tree/index.js.map +1 -1
  456. package/package.json +42 -33
  457. package/src/charts/node.ts +62 -26
  458. package/src/charts/render.ts +120 -30
  459. package/src/code/index.ts +36 -32
  460. package/src/code-editor/completion.ts +3 -2
  461. package/src/code-editor/index.ts +19 -0
  462. package/src/code-editor/node.ts +1574 -184
  463. package/src/code-language/index.ts +1 -1
  464. package/src/code-language/languages/glsl.ts +12 -2
  465. package/src/code-language/languages/javascript.ts +21 -4
  466. package/src/code-language/languages/json.ts +12 -2
  467. package/src/code-language/languages/shell.ts +12 -2
  468. package/src/code-language/languages/sql.ts +22 -2
  469. package/src/code-language/runs.ts +111 -1
  470. package/src/code-language/stream.ts +257 -17
  471. package/src/code-language/types.ts +5 -4
  472. package/src/codeblock/index.ts +68 -4
  473. package/src/flow/draw.ts +167 -41
  474. package/src/flow/gl/color.ts +85 -0
  475. package/src/flow/gl/index.ts +342 -0
  476. package/src/flow/gl/pack.ts +585 -0
  477. package/src/flow/gl/renderer.ts +679 -0
  478. package/src/flow/gl/shaders.ts +371 -0
  479. package/src/flow/gl/text.ts +1295 -0
  480. package/src/flow/index.ts +794 -67
  481. package/src/flow/node.ts +2496 -1256
  482. package/src/flow/paint.ts +511 -0
  483. package/src/flow/paths.ts +80 -15
  484. package/src/flow/scene.ts +2199 -0
  485. package/src/flow/types.ts +113 -1
  486. package/src/html/controls.ts +73 -2
  487. package/src/html/css/calc.ts +385 -0
  488. package/src/html/css/cascade.ts +1481 -62
  489. package/src/html/css/color.ts +755 -0
  490. package/src/html/css/content.ts +417 -0
  491. package/src/html/css/counter-styles.ts +973 -0
  492. package/src/html/css/decode.ts +130 -0
  493. package/src/html/css/parse.ts +1514 -160
  494. package/src/html/css/style.ts +4131 -223
  495. package/src/html/css/ua.ts +66 -17
  496. package/src/html/css/values.ts +150 -50
  497. package/src/html/css/vars.ts +348 -0
  498. package/src/html/dom.ts +284 -17
  499. package/src/html/fonts.ts +641 -0
  500. package/src/html/gif.ts +233 -0
  501. package/src/html/index.ts +180 -20
  502. package/src/html/layout/block.ts +3560 -208
  503. package/src/html/layout/boxes.ts +2141 -190
  504. package/src/html/layout/cache.ts +289 -0
  505. package/src/html/layout/collapse.ts +317 -0
  506. package/src/html/layout/css-grid.ts +1063 -0
  507. package/src/html/layout/flex.ts +1115 -106
  508. package/src/html/layout/floats.ts +128 -14
  509. package/src/html/layout/grid-lines.ts +141 -0
  510. package/src/html/layout/grid.ts +181 -0
  511. package/src/html/layout/inline.ts +4187 -192
  512. package/src/html/layout/shaping.ts +140 -0
  513. package/src/html/layout/table.ts +696 -186
  514. package/src/html/layout/tracks.ts +437 -0
  515. package/src/html/node.ts +1585 -156
  516. package/src/html/paint.ts +4582 -267
  517. package/src/html/resources.ts +161 -50
  518. package/src/html/surfaces.ts +81 -0
  519. package/src/html/svg.ts +504 -0
  520. package/src/html/url.ts +86 -0
  521. package/src/index.ts +2 -0
  522. package/src/internal/codelines.ts +200 -0
  523. package/src/internal/collate.ts +12 -0
  524. package/src/internal/markdown/ast.ts +11 -0
  525. package/src/internal/markdown/parse.ts +154 -11
  526. package/src/internal/prewarm.ts +45 -0
  527. package/src/internal/sdf.ts +227 -0
  528. package/src/internal/splice.ts +25 -0
  529. package/src/internal/window.ts +36 -5
  530. package/src/maps/anchors.ts +307 -1
  531. package/src/maps/controller.ts +116 -31
  532. package/src/maps/gl/buckets.ts +5 -1
  533. package/src/maps/gl/build-worker.ts +13 -2
  534. package/src/maps/gl/cover.ts +79 -44
  535. package/src/maps/gl/placement.ts +221 -69
  536. package/src/maps/gl/renderer.ts +104 -20
  537. package/src/maps/gl/shaders.ts +35 -32
  538. package/src/maps/gl/store.ts +66 -17
  539. package/src/maps/gl/text.ts +444 -71
  540. package/src/maps/gl/view.ts +361 -96
  541. package/src/maps/icons.ts +183 -0
  542. package/src/maps/index.ts +4 -0
  543. package/src/maps/labels.ts +269 -49
  544. package/src/maps/node.ts +82 -49
  545. package/src/maps/proj.ts +87 -0
  546. package/src/maps/sources.ts +5 -3
  547. package/src/maps/style.ts +32 -0
  548. package/src/maps/styles.ts +215 -4
  549. package/src/maps/tiles.ts +64 -31
  550. package/src/maps/types.ts +28 -4
  551. package/src/markdown/index.ts +293 -92
  552. package/src/markdown/spans.ts +5 -0
  553. package/src/qml/containers.tsx +6 -1
  554. package/src/qml/interaction.tsx +42 -5
  555. package/src/qml/layouts.tsx +21 -6
  556. package/src/qml/qtquick.tsx +9 -2
  557. package/src/qml/react.tsx +7 -5
  558. package/src/reorder/clock.ts +27 -0
  559. package/src/reorder/index.ts +100 -27
  560. package/src/rich-text-editor/index.ts +37 -12
  561. package/src/rich-text-editor/keymap.ts +1 -1
  562. package/src/rich-text-editor/keys.ts +135 -26
  563. package/src/rich-text-editor/markdown.ts +36 -1
  564. package/src/rich-text-editor/marks.ts +101 -0
  565. package/src/rich-text-editor/render.ts +49 -12
  566. package/src/rich-text-editor/replace.ts +85 -0
  567. package/src/rich-text-editor/toolbar.ts +1 -1
  568. package/src/rich-text-editor/virtual.ts +25 -0
  569. package/src/richtext/node.ts +235 -14
  570. package/src/richtext/runs.ts +23 -12
  571. package/src/table/index.ts +29 -0
  572. package/src/table/rows.ts +18 -8
  573. package/src/terminal/index.ts +4 -0
  574. package/src/terminal/vt/pty.ts +16 -2
  575. package/src/terminal-output/index.ts +129 -31
  576. package/src/terminal-output/runs.ts +16 -2
  577. package/src/three/canvas.ts +102 -8
  578. package/src/three/events.ts +49 -9
  579. package/src/tree/index.ts +19 -0
@@ -240,18 +240,6 @@ const timers = globalThis as {
240
240
  performance?: { now(): number };
241
241
  };
242
242
 
243
- /**
244
- * The clock a glide is measured on.
245
- *
246
- * `performance.now()` rather than the `Date.now()` the settle window uses:
247
- * this one is compared across two frames of a 60Hz display, and `Date.now()`
248
- * counts whole milliseconds, so a sixth of the step would be error. Reached
249
- * through `globalThis` because `src/` compiles with `types: []`.
250
- */
251
- function now(): number {
252
- return timers.performance?.now() ?? Date.now();
253
- }
254
-
255
243
  /**
256
244
  * The settle timer, unref'd where the runtime allows it.
257
245
  *
@@ -266,6 +254,29 @@ function arm(tick: () => void, ms: number): unknown {
266
254
  return handle;
267
255
  }
268
256
 
257
+ /**
258
+ * The clock a glide is measured on, and the timer that steps it.
259
+ *
260
+ * `performance.now()` rather than the `Date.now()` the settle window uses:
261
+ * this one is compared across two frames of a 60Hz display, and `Date.now()`
262
+ * counts whole milliseconds, so a sixth of the step would be error. Reached
263
+ * through `globalThis` because `src/` compiles with `types: []`.
264
+ *
265
+ * One object, exported from this module though not from the package, so a
266
+ * test can stand in for both and step a glide a frame at a time. The glide
267
+ * is wall-clock time on purpose, and a runner slow enough to spend the whole
268
+ * of one inside a single `await` finds it over before it can look.
269
+ */
270
+ export const glideClock = {
271
+ now(): number {
272
+ return timers.performance?.now() ?? Date.now();
273
+ },
274
+ arm,
275
+ disarm(handle: unknown): void {
276
+ timers.clearTimeout?.(handle);
277
+ },
278
+ };
279
+
269
280
  function clamp(value: number, low: number, high: number): number {
270
281
  return value < low ? low : value > high ? high : value;
271
282
  }
@@ -287,6 +298,10 @@ export class MapController {
287
298
  * claims nothing and starts no gesture.
288
299
  */
289
300
  painting = false;
301
+ /** A camera move made while `painting`, waiting for the frame to end —
302
+ * `previous` is the camera the *first* such move started from, so the
303
+ * view is told the whole delta however many were fused. */
304
+ private _paintMove: { previous: MapCamera } | null = null;
290
305
 
291
306
  private _props: MapControllerProps = {};
292
307
  /** The camera, when the application does not control it. */
@@ -361,7 +376,7 @@ export class MapController {
361
376
  dispose(): void {
362
377
  if (this._settleTimer !== null) timers.clearTimeout?.(this._settleTimer);
363
378
  this._settleTimer = null;
364
- if (this._glideTimer !== null) timers.clearTimeout?.(this._glideTimer);
379
+ if (this._glideTimer !== null) glideClock.disarm(this._glideTimer);
365
380
  this._glideTimer = null;
366
381
  this._glide = null;
367
382
  }
@@ -443,11 +458,49 @@ export class MapController {
443
458
  const controlled = this._props.camera !== undefined;
444
459
  if (!controlled) this._camera = camera;
445
460
  this._props.onCameraChange?.(camera);
446
- if (this.painting) return;
461
+ if (this.painting) {
462
+ // A camera set from **inside** a frame, which is how every camera
463
+ // animation is written: the map's own `onFrame` is the clock, and the
464
+ // GL view calls it while it is still painting. Re-entering the paint
465
+ // is not on, but returning here used to drop the move's *scheduling*
466
+ // as well as its redraw — so the animation had nothing to ask for the
467
+ // next frame with, and stopped until something unrelated re-rendered.
468
+ //
469
+ // In the maps-gl example that something was the status bar's
470
+ // half-second interval, and it showed as exactly that: frames every
471
+ // 11ms, then a 511ms hole with the next request arriving at +508 —
472
+ // nobody asking, rather than anyone being slow. Manual panning never
473
+ // hit it because an input event is not inside a paint.
474
+ //
475
+ // So the move is remembered, with the camera it started from, and
476
+ // finished when the frame ends.
477
+ this._paintMove ??= { previous };
478
+ return;
479
+ }
447
480
  this.touch();
448
481
  if (!controlled) this._view?.moved(previous, camera, blit);
449
482
  }
450
483
 
484
+ /**
485
+ * A frame finished: do whatever `apply` deferred because it was painting.
486
+ * Called from both painters (`gl/view.ts`, `node.ts`) wherever `painting`
487
+ * goes back to false.
488
+ *
489
+ * Never a blit. A blit needs the exact transform it is shifting from, and
490
+ * what is flushed here may be several moves fused into one; a full redraw
491
+ * of a frame that was going to be drawn anyway costs nothing next to
492
+ * getting that wrong.
493
+ */
494
+ paintEnded(): void {
495
+ const move = this._paintMove;
496
+ if (!move) return;
497
+ this._paintMove = null;
498
+ this.touch();
499
+ if (this._props.camera === undefined) {
500
+ this._view?.moved(move.previous, this.camera(), false);
501
+ }
502
+ }
503
+
451
504
  getCamera(): MapCamera {
452
505
  const camera = this.camera();
453
506
  return { center: { ...camera.center }, zoom: camera.zoom };
@@ -501,6 +554,17 @@ export class MapController {
501
554
  this._maxZoom(),
502
555
  );
503
556
  if (zoom === camera.zoom) return;
557
+ this.apply(this._zoomedAbout(camera, zoom, x, y), false);
558
+ }
559
+
560
+ /** `camera` at `zoom`, with the point at pane-local `x`, `y` where it
561
+ * was: what {@link zoomAbout} moves to, and what a glide arrives at. */
562
+ private _zoomedAbout(
563
+ camera: MapCamera,
564
+ zoom: number,
565
+ x: number,
566
+ y: number,
567
+ ): MapCamera {
504
568
  const before = this.transform(camera);
505
569
  const anchor = unprojectPoint(before, x, y);
506
570
  const after = this.transform({ center: camera.center, zoom });
@@ -509,21 +573,42 @@ export class MapController {
509
573
  const moved = projectLngLat(after, anchor);
510
574
  const dx = (moved.x - x) / after.world;
511
575
  const dy = (moved.y - y) / after.world;
512
- this.apply(
513
- {
514
- zoom,
515
- center: unprojectPoint(
516
- {
517
- ...after,
518
- centerX: after.centerX + dx,
519
- centerY: after.centerY + dy,
520
- },
521
- after.paneX,
522
- after.paneY,
523
- ),
524
- },
525
- false,
576
+ return {
577
+ zoom,
578
+ center: unprojectPoint(
579
+ {
580
+ ...after,
581
+ centerX: after.centerX + dx,
582
+ centerY: after.centerY + dy,
583
+ },
584
+ after.paneX,
585
+ after.paneY,
586
+ ),
587
+ };
588
+ }
589
+
590
+ /**
591
+ * Where the camera is going, when that is known before it gets there: the
592
+ * end of a wheel's glide. Null while nothing is gliding — a touchpad's
593
+ * stream, a drag or an application's own animation go wherever the next
594
+ * event says, and the view has only the camera to go on.
595
+ *
596
+ * What a renderer does with it is get there first: the tiles and label
597
+ * rasters of the view the glide stops at are asked for while the frames
598
+ * of the glide are still being drawn, so the settle has them in hand.
599
+ */
600
+ destination(): MapCamera | null {
601
+ const glide = this._glide;
602
+ if (!glide || !glide.easing) return null;
603
+ const camera = this.camera();
604
+ if (glide.applied !== camera.zoom) return null;
605
+ const zoom = clamp(
606
+ quantizeZoom(glide.target),
607
+ this._minZoom(),
608
+ this._maxZoom(),
526
609
  );
610
+ if (zoom === camera.zoom) return null;
611
+ return this._zoomedAbout(camera, zoom, glide.x, glide.y);
527
612
  }
528
613
 
529
614
  /**
@@ -550,7 +635,7 @@ export class MapController {
550
635
  y: number,
551
636
  smooth: boolean,
552
637
  ): void {
553
- const at = now();
638
+ const at = glideClock.now();
554
639
  const camera = this.camera();
555
640
  const glide = this._glide;
556
641
  // Where this delta counts from: the target the wheel has already asked
@@ -590,13 +675,13 @@ export class MapController {
590
675
  this._glideTimer = null;
591
676
  const glide = this._glide;
592
677
  if (glide?.easing !== true) return;
593
- const at = now();
678
+ const at = glideClock.now();
594
679
  // `stepZoom` clears the record when the target is reached or the
595
680
  // camera refuses a step, and this re-arms only while one is left.
596
681
  this.stepZoom(at, at - glide.at);
597
682
  this._armGlide();
598
683
  };
599
- this._glideTimer = arm(tick, GLIDE_TICK_MS);
684
+ this._glideTimer = glideClock.arm(tick, GLIDE_TICK_MS);
600
685
  }
601
686
 
602
687
  /**
@@ -38,6 +38,7 @@ import { GeomType, GeometryBuffer } from '../mvt.js';
38
38
  import type { FeatureCursor, VectorTile } from '../mvt.js';
39
39
  import type { PreparedLayer, PreparedStyle } from '../paint.js';
40
40
  import type { MapStyleLayer } from '../style.js';
41
+ import type { TileId } from '../proj.js';
41
42
  import { buildTileLabels } from '../anchors.js';
42
43
  import type { GlLabelData } from '../anchors.js';
43
44
 
@@ -324,6 +325,9 @@ interface Group {
324
325
  export function buildTileBuckets(
325
326
  tile: VectorTile,
326
327
  prepared: PreparedStyle,
328
+ /** Which tile — what a label layer's `snapInto` distance is measured
329
+ * against (`../anchors.ts`). */
330
+ id?: TileId,
327
331
  ): GlTileData {
328
332
  const started = now();
329
333
  const line = new Stream(1024);
@@ -445,7 +449,7 @@ export function buildTileBuckets(
445
449
  fill: fill.take(),
446
450
  fillRecords: fill.count,
447
451
  draws,
448
- labels: buildTileLabels(tile, prepared, TILE_EXTENT),
452
+ labels: buildTileLabels(tile, prepared, TILE_EXTENT, id),
449
453
  stats: {
450
454
  features,
451
455
  lineRecords: line.count,
@@ -12,6 +12,7 @@
12
12
  // specifier would make every build depend on Node's type declarations.
13
13
  import { prepareStyle } from '../paint.js';
14
14
  import type { PreparedStyle } from '../paint.js';
15
+ import type { TileId } from '../proj.js';
15
16
  import { parseVectorTile } from '../sources.js';
16
17
  import type { MapStyleLayer } from '../style.js';
17
18
  import { buildTileBuckets } from './buckets.js';
@@ -19,7 +20,13 @@ import { buildTileBuckets } from './buckets.js';
19
20
  /** What the store sends. */
20
21
  export type BuildRequest =
21
22
  | { type: 'style'; id: number; layers: MapStyleLayer[] }
22
- | { type: 'build'; job: number; style: number; bytes: Uint8Array };
23
+ | {
24
+ type: 'build';
25
+ job: number;
26
+ style: number;
27
+ bytes: Uint8Array;
28
+ tile: TileId;
29
+ };
23
30
 
24
31
  interface Port {
25
32
  on(event: 'message', listener: (message: unknown) => void): void;
@@ -45,7 +52,11 @@ parentPort?.on('message', (message) => {
45
52
  try {
46
53
  const prepared = styles.get(request.style);
47
54
  if (!prepared) throw new Error(`style ${request.style} was never sent`);
48
- const data = buildTileBuckets(parseVectorTile(request.bytes), prepared);
55
+ const data = buildTileBuckets(
56
+ parseVectorTile(request.bytes),
57
+ prepared,
58
+ request.tile,
59
+ );
49
60
  const transfer = [data.line, data.fill];
50
61
  if (data.labels) transfer.push(data.labels.anchors.buffer as ArrayBuffer);
51
62
  parentPort.postMessage({ job: request.job, data }, transfer);
@@ -18,7 +18,14 @@
18
18
  // projection — markers, overlays, labels, `project()`. `tileCover` reads a
19
19
  // smaller tile one level deeper instead, which puts every image at its own
20
20
  // natural size on the one world everything shares.
21
- import { DEFAULT_TILE_SIZE, tileCover, transformFor } from '../proj.js';
21
+ import {
22
+ BELOW,
23
+ DEFAULT_TILE_SIZE,
24
+ FILL_DEPTH,
25
+ fillFromBelow,
26
+ tileCover,
27
+ transformFor,
28
+ } from '../proj.js';
22
29
  import type { MapCamera, TileId, TilePyramid } from '../proj.js';
23
30
  import type { GlTileData } from './buckets.js';
24
31
  import type { RenderTile } from './renderer.js';
@@ -27,6 +34,17 @@ import type { RenderTile } from './renderer.js';
27
34
  * source has no data there, `undefined` while it is still to come. */
28
35
  export interface TileLookup {
29
36
  get(tile: TileId): GlTileData | null | undefined;
37
+ /**
38
+ * What the store has answered for at or under a tile: `'here'` for the
39
+ * tile itself, `'below'` for only tiles under it — within `FILL_DEPTH`
40
+ * levels — and `undefined` for neither.
41
+ *
42
+ * What lets a hole's search for pieces skip the parts of the pyramid that
43
+ * hold nothing. Without it the search asks `get` for every tile down to
44
+ * that depth — which costs lookups, and stamps a tile still loading as
45
+ * used, so a load the view has left is not cancelled.
46
+ */
47
+ holds?(tile: TileId): 'here' | 'below' | undefined;
30
48
  }
31
49
 
32
50
  export interface CoverResult {
@@ -53,10 +71,18 @@ const MAX_ANCESTOR = 8;
53
71
  * The frame's tiles, centre-out, each with its screen square and its clip.
54
72
  *
55
73
  * A hole — a tile still loading, or one the source has no data for — is
56
- * covered from whichever side has geometry: the nearest ancestor, drawn at
57
- * its own larger size and clipped to the hole; or, zooming out, the four
58
- * children, when all of them are in hand. `AGENTS.md`'s rule for the
59
- * retained cache holds here too: a pyramid has two neighbours.
74
+ * covered from whichever side has geometry. Zooming out, that is the tiles
75
+ * under it: each quarter from the nearest level that has it, down to
76
+ * `FILL_DEPTH`. Whatever they leave, and the whole of a hole with nothing
77
+ * under it, is the nearest ancestor's, drawn at its own larger size and
78
+ * clipped to each gap. `AGENTS.md`'s rule for the retained cache holds here
79
+ * too: a pyramid has two neighbours.
80
+ *
81
+ * The first cut tried the ancestor first, and the children only when all
82
+ * four of them were in hand. A zoom out leaves the level it came from in
83
+ * the middle of the view, covering only part of the tiles at the edges, and
84
+ * a quick one leaves it two or three levels down: both were the background,
85
+ * with the sharper tiles in hand.
60
86
  */
61
87
  export function renderCover(
62
88
  camera: MapCamera,
@@ -118,53 +144,62 @@ export function renderCover(
118
144
  own++;
119
145
  continue;
120
146
  }
121
- // An ancestor: the same ground, `2^k` times the size, from `sub` cells
122
- // above and to the left of this entry's square.
123
- let found = false;
147
+ // Under it: a tile with no data has nothing under it either, and past
148
+ // the pyramid's depth there is nothing to find.
124
149
  const { z, x, y } = entry.tile;
150
+ const below = fillFromBelow(
151
+ entry.tile,
152
+ data === null ? 0 : Math.min(FILL_DEPTH, pyramid.maxZoom - z),
153
+ (under) => {
154
+ const held = lookup.holds ? lookup.holds(under) : 'here';
155
+ if (held === undefined) return undefined;
156
+ if (held === 'below') return BELOW;
157
+ const got = lookup.get(under);
158
+ return got === undefined ? BELOW : got;
159
+ },
160
+ );
161
+ for (const piece of below.pieces) {
162
+ const size = clip.width / piece.span;
163
+ const px = clip.x + piece.x * size;
164
+ const py = clip.y + piece.y * size;
165
+ tiles.push({
166
+ data: piece.value,
167
+ x: px,
168
+ y: py,
169
+ size,
170
+ clip: { x: px, y: py, width: size, height: size },
171
+ });
172
+ }
173
+ if (below.covered) descendants++;
174
+ if (below.gaps.length === 0) continue;
175
+ // Over it: an ancestor, the same ground `2^k` times the size, from
176
+ // `sub` cells above and to the left of this entry's square — drawn once
177
+ // for each gap, clipped to it.
125
178
  for (let k = 1; k <= MAX_ANCESTOR && z - k >= pyramid.minZoom; k++) {
126
179
  const ancestor = { z: z - k, x: x >> k, y: y >> k };
127
180
  const stand = lookup.get(ancestor);
128
181
  if (!stand) continue;
129
- const span = 1 << k;
130
- const size = clip.width * span;
131
- tiles.push({
132
- data: stand,
133
- x: clip.x - (x - (ancestor.x << k)) * clip.width,
134
- y: clip.y - (y - (ancestor.y << k)) * clip.width,
135
- size,
136
- clip,
137
- });
182
+ const size = clip.width * (1 << k);
183
+ const sx = clip.x - (x - (ancestor.x << k)) * clip.width;
184
+ const sy = clip.y - (y - (ancestor.y << k)) * clip.width;
185
+ for (const gap of below.gaps) {
186
+ const edge = clip.width / gap.span;
187
+ tiles.push({
188
+ data: stand,
189
+ x: sx,
190
+ y: sy,
191
+ size,
192
+ clip: {
193
+ x: clip.x + gap.x * edge,
194
+ y: clip.y + gap.y * edge,
195
+ width: edge,
196
+ height: edge,
197
+ },
198
+ });
199
+ }
138
200
  ancestors++;
139
- found = true;
140
201
  break;
141
202
  }
142
- if (found || data === null || z + 1 > pyramid.maxZoom) continue;
143
- // Zooming out: the finer level is what is in hand. Only when all four
144
- // children have answered, or the hole would be patched with holes.
145
- const children: (GlTileData | null)[] = [];
146
- for (let dy = 0; dy < 2; dy++) {
147
- for (let dx = 0; dx < 2; dx++) {
148
- const child = lookup.get({ z: z + 1, x: x * 2 + dx, y: y * 2 + dy });
149
- if (child === undefined) break;
150
- children.push(child);
151
- }
152
- }
153
- if (children.length !== 4) continue;
154
- const half = clip.width / 2;
155
- children.forEach((child, i) => {
156
- if (!child) return;
157
- const cx = clip.x + (i % 2) * half;
158
- const cy = clip.y + Math.floor(i / 2) * half;
159
- tiles.push({
160
- data: child,
161
- x: cx,
162
- y: cy,
163
- size: half,
164
- clip: { x: cx, y: cy, width: half, height: half },
165
- });
166
- });
167
- descendants++;
168
203
  }
169
204
  return { tiles, missing, level, own, ancestors, descendants, inView };
170
205
  }