@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
package/src/maps/tiles.ts CHANGED
@@ -18,6 +18,14 @@
18
18
  // scaled. Only an integer zoom change, a style change or a display-scale
19
19
  // change invalidates one.
20
20
  //
21
+ // Both are filed under the **source object**, not under its `id`. An id is
22
+ // only what a source is called, and two providers can share one — a source
23
+ // without one is named for its slot in `sources`, and `osmRasterSource` is
24
+ // `osm-raster` whichever server it points at — so filing by id handed a map
25
+ // switched to another provider the old one's tiles wherever it had them,
26
+ // until eviction got round to them. Filed by object, a new provider starts
27
+ // empty, and an old one keeps its tiles for when it comes back.
28
+ //
21
29
  // The surface is the expensive half — on the corpus in `scripts/bench/`, a
22
30
  // dense city tile is 50-140 ms to rasterize and about 0.05 ms to composite
23
31
  // — so the cache's job is to make sure that cost is paid once per tile per
@@ -25,8 +33,8 @@
25
33
  import type { PreparedStyle } from './paint.js';
26
34
  import type { VectorTile } from './mvt.js';
27
35
  import { parseTile } from './mvt.js';
28
- import { tileKey } from './proj.js';
29
- import type { TileId } from './proj.js';
36
+ import { BELOW, FILL_DEPTH, fillFromBelow, tileKey } from './proj.js';
37
+ import type { TileCell, TileId } from './proj.js';
30
38
  import { pyramidOf } from './sources.js';
31
39
  import type { MapSource, TileData } from './sources.js';
32
40
 
@@ -80,6 +88,14 @@ export interface TileRender {
80
88
  zoom: number;
81
89
  /** The cache generation it was drawn under. */
82
90
  generation: number;
91
+ /**
92
+ * Whether its pixels depend on the style. A vector tile's do — they are
93
+ * the style, rasterized — and a raster tile's do not: they are the
94
+ * provider's image, uploaded as it arrived. So an unstyled rendering
95
+ * belongs to every generation, and a restyle neither redraws it nor stops
96
+ * showing it.
97
+ */
98
+ styled: boolean;
83
99
  /** The next style run to draw, or `-1` when it is finished. */
84
100
  progress: number;
85
101
  /** …and how far into that run's active layers, because a run is not a
@@ -97,6 +113,12 @@ export interface TileRender {
97
113
  */
98
114
  export interface TileDataEntry {
99
115
  readonly key: string;
116
+ /** Who answers for it — and so which provider the bytes came from,
117
+ * since tiles are filed under the source object. */
118
+ readonly source: MapSource;
119
+ /** What that source is called: the `sourceId` its `load` requests carry
120
+ * and `onError` reports. */
121
+ readonly sourceId: string;
100
122
  readonly tile: TileId;
101
123
  status: TileStatus;
102
124
  error: unknown;
@@ -141,7 +163,15 @@ export class CachedTile {
141
163
  * keeps being composited until it is ready to be replaced.
142
164
  */
143
165
  shown: TileRender | null = null;
144
- /** The rendering being drawn, or null when there is nothing to draw. */
166
+ /**
167
+ * The rendering being drawn, or null when there is nothing to draw.
168
+ *
169
+ * Finished ones do not usually stay: a draft is {@link TileCache.promote}d
170
+ * in the frame it is done. The exception is a restyle, which holds the
171
+ * previous style's whole picture up until the view is redrawn — so there
172
+ * a finished draft waits here until {@link TileCache.swap} puts every one
173
+ * on screen at once.
174
+ */
145
175
  drawing: TileRender | null = null;
146
176
  /** Frame counter of the last frame that wanted it — what eviction sorts
147
177
  * on. */
@@ -207,12 +237,20 @@ export class TileCache {
207
237
  private readonly _entries = new Map<string, CachedTile>();
208
238
  /** The source's own tiles, shared by every rendering that draws one. */
209
239
  private readonly _data = new Map<string, TileDataEntry>();
240
+ /** The key prefix of each source object — per object and not per id,
241
+ * for the reason at the top of this file. */
242
+ private readonly _prefixes = new WeakMap<MapSource, string>();
243
+ private _prefixCount = 0;
210
244
  private readonly _options: TileCacheOptions;
211
245
  private _frame = 0;
212
246
  private _surfaceBytes = 0;
213
247
  /** Bumped by a style change, which retires every surface without
214
248
  * touching the data behind it. */
215
249
  private _generation = 0;
250
+ /** The key of every tile with a picture, and of its ancestors up to
251
+ * `FILL_DEPTH` levels above it — see {@link descendantsWithSurface}.
252
+ * Built when first asked, and dropped whenever a picture comes or goes. */
253
+ private _below: Set<string> | null = null;
216
254
 
217
255
  constructor(options: TileCacheOptions = {}) {
218
256
  this._options = options;
@@ -227,7 +265,16 @@ export class TileCache {
227
265
  return this._generation;
228
266
  }
229
267
 
230
- /** Every rendered surface is stale — a new style, a new display scale. */
268
+ /**
269
+ * Every styled surface is stale: a new style, or `refresh()` after an
270
+ * edit to one. The data behind them stays, and so does a raster tile's
271
+ * rendering, which no style drew (see {@link TileRender.styled}).
272
+ *
273
+ * A new display scale needs none of this, because a rendering's size is
274
+ * already part of what makes it valid. And nothing on screen is thrown
275
+ * away here: each picture stays until its replacement is finished —
276
+ * {@link promote} for one tile, {@link swap} for the whole view at once.
277
+ */
231
278
  invalidateStyle(): void {
232
279
  this._generation++;
233
280
  }
@@ -241,21 +288,31 @@ export class TileCache {
241
288
  return this._entries.size;
242
289
  }
243
290
 
244
- key(sourceId: string, tile: TileId): string {
245
- return `${sourceId}:${tileKey(tile)}`;
291
+ /** What a source's tile is filed under: a prefix of the source object's
292
+ * own, then `z/x/y`. The id is in the prefix only so that a key reads
293
+ * well in a debugger; two objects with one id get two prefixes. */
294
+ key(source: MapSource, tile: TileId): string {
295
+ let prefix = this._prefixes.get(source);
296
+ if (prefix === undefined) {
297
+ prefix = `${source.id ?? 'source'}#${++this._prefixCount}`;
298
+ this._prefixes.set(source, prefix);
299
+ }
300
+ return `${prefix}:${tileKey(tile)}`;
246
301
  }
247
302
 
248
- peek(sourceId: string, tile: TileId): CachedTile | undefined {
249
- return this._entries.get(this.key(sourceId, tile));
303
+ peek(source: MapSource, tile: TileId): CachedTile | undefined {
304
+ return this._entries.get(this.key(source, tile));
250
305
  }
251
306
 
252
307
  /**
253
308
  * The entry for a tile the cover asked for, and the data behind it,
254
309
  * asking the source for that data if nothing has yet.
255
310
  *
256
- * `dataTile` is the tile whose bytes serve this one — itself, until the
257
- * cover goes deeper than the source cuts. Marks both used by the current
258
- * frame, which is what keeps them out of the next eviction.
311
+ * Filed under `source`; `sourceId` is only what it is called. `dataTile`
312
+ * is the tile whose bytes serve this one — itself, until the cover goes
313
+ * deeper than the source cuts. Marks both used by the current frame,
314
+ * which is what keeps them out of the next eviction — and a load still
315
+ * in flight from being cancelled by {@link sweep}.
259
316
  */
260
317
  want(
261
318
  source: MapSource,
@@ -265,7 +322,7 @@ export class TileCache {
265
322
  sub: { x: number; y: number; span: number } = { x: 0, y: 0, span: 1 },
266
323
  ): CachedTile {
267
324
  const data = this._wantData(source, sourceId, dataTile);
268
- const key = this.key(sourceId, tile);
325
+ const key = this.key(source, tile);
269
326
  let entry = this._entries.get(key);
270
327
  if (!entry) {
271
328
  entry = new CachedTile(key, sourceId, tile, data, sub);
@@ -280,11 +337,13 @@ export class TileCache {
280
337
  sourceId: string,
281
338
  tile: TileId,
282
339
  ): TileDataEntry {
283
- const key = this.key(sourceId, tile);
340
+ const key = this.key(source, tile);
284
341
  let data = this._data.get(key);
285
342
  if (!data) {
286
343
  data = {
287
344
  key,
345
+ source,
346
+ sourceId,
288
347
  tile,
289
348
  status: 'idle',
290
349
  error: null,
@@ -299,23 +358,19 @@ export class TileCache {
299
358
  }
300
359
  data.lastUsed = this._frame;
301
360
  if (data.status === 'idle') {
302
- this._load(source, sourceId, data);
361
+ this._load(data);
303
362
  } else if (data.status === 'error' && Date.now() >= data.retryAt) {
304
363
  // A failed tile is retried, but on a backoff rather than on every
305
364
  // frame. Without it a source that is down — or an application whose
306
365
  // `load` throws on the first call, which is how this was found — is
307
366
  // asked for every visible tile sixty times a second, which is a
308
367
  // retry storm pointed at somebody else's servers.
309
- this._load(source, sourceId, data);
368
+ this._load(data);
310
369
  }
311
370
  return data;
312
371
  }
313
372
 
314
- private _load(
315
- source: MapSource,
316
- sourceId: string,
317
- entry: TileDataEntry,
318
- ): void {
373
+ private _load(entry: TileDataEntry): void {
319
374
  entry.status = 'loading';
320
375
  entry.error = null;
321
376
  // A **real** `AbortController` where the runtime has one. A look-alike
@@ -365,7 +420,11 @@ export class TileCache {
365
420
  };
366
421
  let result: TileData | Promise<TileData>;
367
422
  try {
368
- result = source.load({ ...entry.tile, sourceId, signal });
423
+ result = entry.source.load({
424
+ ...entry.tile,
425
+ sourceId: entry.sourceId,
426
+ signal,
427
+ });
369
428
  } catch (error) {
370
429
  settle(() => fail(error));
371
430
  return;
@@ -408,20 +467,24 @@ export class TileCache {
408
467
  * under the fine one until it arrives — which is the difference between a
409
468
  * map that fills in and a map that flashes empty. Bounded, because
410
469
  * scaling one tile over sixteen screenfuls is worse than the hole.
470
+ *
471
+ * With a `generation`, only a picture drawn in it counts: a map showing
472
+ * one style must not cover a hole with a tile drawn in another.
411
473
  */
412
474
  ancestorWithSurface(
413
- sourceId: string,
475
+ source: MapSource,
414
476
  tile: TileId,
415
477
  levels = 5,
478
+ generation?: number,
416
479
  ): CachedTile | null {
417
480
  let z = tile.z - 1;
418
481
  let x = tile.x >> 1;
419
482
  let y = tile.y >> 1;
420
483
  for (let up = 0; up < levels && z >= 0; up++, z--, x >>= 1, y >>= 1) {
421
- const entry = this._entries.get(this.key(sourceId, { z, x, y }));
484
+ const entry = this._entries.get(this.key(source, { z, x, y }));
422
485
  // `shown` is finished by construction, so an ancestor is never a
423
486
  // half-drawn picture.
424
- if (entry?.shown) {
487
+ if (entry?.shown && drawnFor(entry.shown, generation)) {
425
488
  // Stamped, because for as long as it is covering a hole it is on
426
489
  // screen — and an unstamped entry is the *first* thing eviction
427
490
  // takes, which would drop the only picture the map is showing.
@@ -433,7 +496,8 @@ export class TileCache {
433
496
  }
434
497
 
435
498
  /**
436
- * The finished **descendants** of a tile, and where each sits inside it.
499
+ * The finished **descendants** of a tile, where each sits inside it, and
500
+ * the gaps they leave.
437
501
  *
438
502
  * The mirror of {@link ancestorWithSurface}, and the half a map needs
439
503
  * when it zooms *out*: the tiles already in hand are then the target's
@@ -442,39 +506,64 @@ export class TileCache {
442
506
  * over it, which is exactly as odd as it sounds — until the coarser tile
443
507
  * has been fetched, rasterized and composited.
444
508
  *
445
- * `depth` is how many levels down to look, and it is small on purpose: a
446
- * level down is 4 tiles, two is 16, and beyond that the pieces are too
447
- * small to be worth the composites.
509
+ * Each quarter of the square is taken from the nearest level that has it,
510
+ * down to `FILL_DEPTH` — see `fillFromBelow`. The first cut took one
511
+ * level for the whole square, the nearest with anything in it, and looked
512
+ * two down. Both left the view blank where a zoom out needs it most: the
513
+ * edges, where the level the map came from covers only part of a coarser
514
+ * tile and the rest is one level further down or nowhere; and a zoom out
515
+ * of more than two levels, which a flick of the wheel is.
516
+ *
517
+ * The search goes only where {@link _heldBelow} says there is something,
518
+ * so a hole with nothing under it — every tile of a zoom *in* — costs four
519
+ * lookups rather than three hundred.
520
+ *
521
+ * `generation` as for {@link ancestorWithSurface}.
448
522
  */
449
523
  descendantsWithSurface(
450
- sourceId: string,
524
+ source: MapSource,
451
525
  tile: TileId,
452
- depth = 2,
453
- ): { entry: CachedTile; x: number; y: number; span: number }[] {
454
- for (let down = 1; down <= depth; down++) {
455
- const span = 1 << down;
456
- const found: { entry: CachedTile; x: number; y: number; span: number }[] =
457
- [];
458
- for (let dy = 0; dy < span; dy++) {
459
- for (let dx = 0; dx < span; dx++) {
460
- const entry = this._entries.get(
461
- this.key(sourceId, {
462
- z: tile.z + down,
463
- x: (tile.x << down) + dx,
464
- y: (tile.y << down) + dy,
465
- }),
466
- );
467
- if (entry?.shown) {
468
- entry.lastUsed = this._frame;
469
- found.push({ entry, x: dx, y: dy, span });
470
- }
471
- }
526
+ generation?: number,
527
+ ): {
528
+ pieces: (TileCell & { tile: TileId; value: CachedTile })[];
529
+ gaps: TileCell[];
530
+ } {
531
+ const below = this._heldBelow();
532
+ const { pieces, gaps } = fillFromBelow(tile, FILL_DEPTH, (under) => {
533
+ const key = this.key(source, under);
534
+ if (!below.has(key)) return undefined;
535
+ const entry = this._entries.get(key);
536
+ if (entry?.shown && drawnFor(entry.shown, generation)) {
537
+ // Stamped, for the reason `ancestorWithSurface` gives.
538
+ entry.lastUsed = this._frame;
539
+ return entry;
540
+ }
541
+ return BELOW;
542
+ });
543
+ return { pieces, gaps };
544
+ }
545
+
546
+ /** The keys of every tile with a picture and of its ancestors up to
547
+ * `FILL_DEPTH` levels above — so a search under a hole can tell where
548
+ * there is nothing without asking for each tile there. A superset where
549
+ * a picture is of another generation, which only costs the search a
550
+ * level. */
551
+ private _heldBelow(): Set<string> {
552
+ if (this._below) return this._below;
553
+ const below = new Set<string>();
554
+ for (const entry of this._entries.values()) {
555
+ if (!entry.shown) continue;
556
+ below.add(entry.key);
557
+ let { z, x, y } = entry.tile;
558
+ for (let up = 1; up <= FILL_DEPTH && z > 0; up++) {
559
+ z--;
560
+ x >>= 1;
561
+ y >>= 1;
562
+ below.add(this.key(entry.data.source, { z, x, y }));
472
563
  }
473
- // The nearest level that has anything wins: one level down is both
474
- // the sharpest and the fewest composites.
475
- if (found.length > 0) return found;
476
564
  }
477
- return [];
565
+ this._below = below;
566
+ return below;
478
567
  }
479
568
 
480
569
  /**
@@ -493,12 +582,19 @@ export class TileCache {
493
582
  * the tile is blank for the several frames it takes to redraw, which
494
583
  * above a source's `maxZoom` happens at every integer zoom — the same
495
584
  * z14 tile serves 15, 16, 17 and on.
585
+ *
586
+ * A draft that is finished but not yet promoted — a restyle holding the
587
+ * old style up until the whole view is ready — matches like any other and
588
+ * comes back as it is, so it is not drawn twice.
496
589
  */
497
590
  beginRender(
498
591
  entry: CachedTile,
499
592
  size: number,
500
593
  zoom: number,
501
594
  make: SurfaceFactory,
595
+ /** False for a raster tile, whose pixels are the provider's and no
596
+ * style's — see {@link TileRender.styled}. */
597
+ styled = true,
502
598
  ): TileRender | null {
503
599
  if (this._matches(entry.shown, size, zoom)) return null;
504
600
  if (this._matches(entry.drawing, size, zoom)) return entry.drawing;
@@ -515,6 +611,7 @@ export class TileCache {
515
611
  size,
516
612
  zoom,
517
613
  generation: this._generation,
614
+ styled,
518
615
  progress: 0,
519
616
  progressLayer: 0,
520
617
  };
@@ -530,7 +627,7 @@ export class TileCache {
530
627
  render !== null &&
531
628
  render.size === size &&
532
629
  render.zoom === zoom &&
533
- render.generation === this._generation
630
+ drawnFor(render, this._generation)
534
631
  );
535
632
  }
536
633
 
@@ -542,9 +639,38 @@ export class TileCache {
542
639
  if (entry.shown) this._release(entry.shown);
543
640
  entry.shown = entry.drawing;
544
641
  entry.drawing = null;
642
+ this._below = null;
545
643
  return true;
546
644
  }
547
645
 
646
+ /**
647
+ * Put the current generation on screen in one go: every finished draft
648
+ * becomes its tile's picture, and every picture and draft of an earlier
649
+ * generation is released — apart from a raster tile's, which no style
650
+ * drew.
651
+ *
652
+ * The other half of a restyle. While the element holds the previous style
653
+ * up it does not {@link promote}, so finished drafts wait in `drawing`,
654
+ * and this is the frame they all land in. What is released is more than
655
+ * what they replace: a tile off screen still holds whatever it was last
656
+ * drawn in, which is now a picture of a style the map has left — never
657
+ * composited again, and otherwise kept until eviction got round to it.
658
+ */
659
+ swap(): void {
660
+ this._below = null;
661
+ for (const entry of this._entries.values()) {
662
+ if (entry.drawing && !drawnFor(entry.drawing, this._generation)) {
663
+ this._release(entry.drawing);
664
+ entry.drawing = null;
665
+ }
666
+ if (this.promote(entry)) continue;
667
+ if (entry.shown && !drawnFor(entry.shown, this._generation)) {
668
+ this._release(entry.shown);
669
+ entry.shown = null;
670
+ }
671
+ }
672
+ }
673
+
548
674
  /** Note where a tile's rasterization stopped: at run `run`, having
549
675
  * finished `layer` of its active layers (`-1` for all of them). */
550
676
  advance(
@@ -558,14 +684,18 @@ export class TileCache {
558
684
  }
559
685
 
560
686
  /**
561
- * Drop what is no longer worth keeping.
687
+ * Drop what is no longer worth keeping. Called once a frame, after every
688
+ * tile the frame still needs has been through {@link want}.
562
689
  *
563
- * Surfaces go first and by least-recently-wanted, because they are two
690
+ * A load the frame did not want is cancelled outright (see
691
+ * `_cancelUnwanted`). What has arrived is kept on budgets instead:
692
+ * surfaces first and by least-recently-wanted, because they are two
564
693
  * orders of magnitude larger than the data behind them and much cheaper
565
- * to lose: a dropped surface is one re-rasterization, a dropped tile is a
566
- * network request.
694
+ * to lose — a dropped surface is one re-rasterization, a dropped tile is
695
+ * a network request.
567
696
  */
568
697
  sweep(): void {
698
+ this._cancelUnwanted();
569
699
  if (
570
700
  this._surfaceBytes >
571
701
  (this._options.surfaceBudget ?? DEFAULT_SURFACE_BUDGET)
@@ -605,8 +735,50 @@ export class TileCache {
605
735
  }
606
736
  }
607
737
 
738
+ /**
739
+ * Cancel every load the frame just drawn did not ask for.
740
+ *
741
+ * A tile panned or zoomed out of the cover — or every tile of a source
742
+ * taken out of `sources` — would otherwise load to the end: a request
743
+ * nobody is waiting for, then a full-pane repaint when it lands, because
744
+ * a landing tile is an `onChange`. The cover is padded, so a tile just off
745
+ * screen is still wanted and keeps loading. That is also the contract on
746
+ * the element: it wants the whole cover on every frame, clipped and
747
+ * mid-gesture ones included, or what it skipped is aborted here and
748
+ * fetched again.
749
+ *
750
+ * Only loads: data that has arrived stays on the budgets above, and is
751
+ * what makes panning back, or switching back to a provider, free.
752
+ *
753
+ * And forgotten rather than parked. An aborted load never settles
754
+ * (`settle` ignores it), so an entry left in `_data` would say `'loading'`
755
+ * forever and never be asked for again; its renderings go with it, since
756
+ * each reads through to the same entry for life, and none has a surface to
757
+ * lose. The next frame that wants the tile starts over, with a new request
758
+ * and a new signal.
759
+ */
760
+ private _cancelUnwanted(): void {
761
+ let unwanted: Set<TileDataEntry> | null = null;
762
+ for (const data of this._data.values()) {
763
+ if (data.status === 'loading' && data.lastUsed < this._frame) {
764
+ (unwanted ??= new Set<TileDataEntry>()).add(data);
765
+ }
766
+ }
767
+ if (!unwanted) return;
768
+ for (const entry of [...this._entries.values()]) {
769
+ if (unwanted.has(entry.data)) this._drop(entry);
770
+ }
771
+ for (const data of unwanted) {
772
+ data.abort?.();
773
+ this._data.delete(data.key);
774
+ }
775
+ }
776
+
608
777
  private _dropSurface(entry: CachedTile): void {
609
- if (entry.shown) this._release(entry.shown);
778
+ if (entry.shown) {
779
+ this._release(entry.shown);
780
+ this._below = null;
781
+ }
610
782
  if (entry.drawing) this._release(entry.drawing);
611
783
  entry.shown = null;
612
784
  entry.drawing = null;
@@ -640,6 +812,7 @@ export class TileCache {
640
812
  for (const data of this._data.values()) data.abort?.();
641
813
  this._data.clear();
642
814
  this._surfaceBytes = 0;
815
+ this._below = null;
643
816
  }
644
817
 
645
818
  /** Every entry — for a test, and for the `onTiles` diagnostic. */
@@ -647,14 +820,32 @@ export class TileCache {
647
820
  return this._entries.values();
648
821
  }
649
822
 
650
- /** Every source tile whose bytes are held. What labels are collected
651
- * from: a label belongs to the tile the data came from, and past a
652
- * source's depth many renderings share one of those. */
823
+ /** Every source tile whose bytes are held — including those of sources no
824
+ * longer on the map, which is what makes switching back free and why a
825
+ * reader filters on `source`. What labels are collected from: a label
826
+ * belongs to the tile the data came from, and past a source's depth many
827
+ * renderings share one of those. */
653
828
  dataEntries(): IterableIterator<TileDataEntry> {
654
829
  return this._data.values();
655
830
  }
656
831
  }
657
832
 
833
+ /**
834
+ * Whether a rendering can be shown for `generation`: any can when none is
835
+ * given, which is `progressive`; one no style drew — a raster tile's — can
836
+ * in every generation; any other only in the one it was drawn under.
837
+ */
838
+ export function drawnFor(
839
+ render: TileRender,
840
+ generation: number | undefined,
841
+ ): boolean {
842
+ return (
843
+ generation === undefined ||
844
+ !render.styled ||
845
+ render.generation === generation
846
+ );
847
+ }
848
+
658
849
  /** A source's pyramid, memoized per source object so the defaults are not
659
850
  * refilled per frame. */
660
851
  const pyramids = new WeakMap<