@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
@@ -35,9 +35,9 @@ import { MarkerBatcher } from './markers.js';
35
35
  import { buildOverlayBucket, overlayRegion, regionHolds, regionPlacement, } from './overlays.js';
36
36
  import { GL_PANE } from './pane.js';
37
37
  import { LABEL_INSTANCE, LabelPlacer } from './placement.js';
38
- import { GlMapRenderer } from './renderer.js';
38
+ import { GlMapRenderer, gatesAt } from './renderer.js';
39
39
  import { GlTileStore } from './store.js';
40
- import { LabelAtlas, SurfaceTextEngine } from './text.js';
40
+ import { LabelAtlas, SurfaceTextEngine, fieldBase } from './text.js';
41
41
  const h = React.createElement;
42
42
  /**
43
43
  * Adaptive quality's rungs, cheapest last. Each leaves out more than the
@@ -109,6 +109,12 @@ const BUILD_BUDGET_MS = 6;
109
109
  * — the one label cost that can be large (the first strings on X11 load
110
110
  * fonts and rasterize glyphs in JS). Placement's remainder waits a frame. */
111
111
  const TEXT_BUDGET_MOVING_MS = 1;
112
+ /** Milliseconds a frame may spend making label fields (`text.ts`), about
113
+ * 0.2 ms each, when there are any to make. */
114
+ const FIELD_BUDGET_MS = 4;
115
+ /** With `labelsWhileMoving`: milliseconds a frame may spend setting the
116
+ * text of names it has just placed, so they draw in it. */
117
+ const LIVE_TEXT_BUDGET_MS = 8;
112
118
  const TEXT_BUDGET_SETTLED_MS = 4;
113
119
  /**
114
120
  * How often a moving view is placed again, in milliseconds — every other
@@ -150,7 +156,140 @@ const EMPTY_COVER = {
150
156
  descendants: 0,
151
157
  inView: [],
152
158
  };
153
- class GlMapDriver {
159
+ /**
160
+ * The level fade: which level the frame is drawn from, and the one fading
161
+ * in over it.
162
+ *
163
+ * A new level is waited for — briefly, until every tile of it in view has
164
+ * answered — so the fade shows it arriving rather than a stand-in for it;
165
+ * then it fades in over the level it replaces, with an ease at both ends.
166
+ * A level more than one step away is not faded (the view it would fade
167
+ * from is sixteen times the tiles), and a change of target halfway
168
+ * through a fade takes the half-shown level as the one it fades from.
169
+ *
170
+ * What it cannot carry is a layer the style starts or stops drawing, which
171
+ * is {@link GateFader}'s: see there for why that is a separate thing and
172
+ * not a scene of its own.
173
+ */
174
+ export class LevelFader {
175
+ /** The level the frame is drawn from, once one has been drawn. */
176
+ shown = null;
177
+ _fade = null;
178
+ /** Whether a fade is running or waiting to start. */
179
+ get fading() {
180
+ return this._fade !== null;
181
+ }
182
+ plan(target, cover, options) {
183
+ const { at, fadeMs } = options;
184
+ const to = target.level;
185
+ const plain = { base: target, next: null, alpha: 0 };
186
+ if (fadeMs <= 0 || this.shown === null || Math.abs(to - this.shown) > 1) {
187
+ this.shown = to;
188
+ this._fade = null;
189
+ return plain;
190
+ }
191
+ if (to === this.shown) {
192
+ this._fade = null;
193
+ return plain;
194
+ }
195
+ let fade = this._fade;
196
+ if (!fade || fade.to !== to) {
197
+ if (fade && fade.start !== null && (at - fade.start) / fadeMs >= 0.5) {
198
+ this.shown = fade.to;
199
+ }
200
+ if (this.shown === to) {
201
+ this._fade = null;
202
+ return plain;
203
+ }
204
+ fade = this._fade = { to, start: null, waitSince: at };
205
+ }
206
+ const base = cover(this.shown);
207
+ if (fade.start === null) {
208
+ if (target.missing.length > 0 && at - fade.waitSince < FADE_WAIT_MS) {
209
+ return { base, next: null, alpha: 0 };
210
+ }
211
+ fade.start = at;
212
+ }
213
+ const p = (at - fade.start) / fadeMs;
214
+ if (p >= 1) {
215
+ this.shown = to;
216
+ this._fade = null;
217
+ return plain;
218
+ }
219
+ return { base, next: target, alpha: p * p * (3 - 2 * p) };
220
+ }
221
+ }
222
+ /**
223
+ * The zoom gate's fade: how much of each style layer to draw, as the camera
224
+ * zooms past the `minZoom` and `maxZoom` the style gives them.
225
+ *
226
+ * **Why this is not a scene.** A level fade cross-fades two whole pictures,
227
+ * and a picture is the natural unit for a change of level. A layer ending
228
+ * is not: `minZoom` is a zoom, the pyramid changes level at a different
229
+ * zoom, and the two flips land on different frames — so carrying the gate
230
+ * as a second scene means a fade retargeted in the middle of another one,
231
+ * which can only either snap to the arriving scene or restart from the
232
+ * outgoing one. Both are a step in the picture, and stepping is what the
233
+ * fade is for. That is what made buildings vanish for one wheel notch and
234
+ * come back for the next. An opacity per layer has no such conflict: each
235
+ * layer's number moves on its own, through any number of level fades, and
236
+ * both scenes of a level fade draw with the same numbers — so the one
237
+ * thing an opacity ramp is bad at, a map dissolving layer by layer, cannot
238
+ * happen here, because only the layers actually crossing a gate move.
239
+ */
240
+ export class GateFader {
241
+ /** Per style layer, in the prepared style's order. */
242
+ _alpha = [];
243
+ _at = null;
244
+ _fading = false;
245
+ /** Whether any layer is between the gate's ends — a frame to ask for. */
246
+ get fading() {
247
+ return this._fading;
248
+ }
249
+ /**
250
+ * The frame's `layerAlpha`, or null for "what the gate says" — which is
251
+ * every frame where nothing is crossing one, and every frame at all with
252
+ * the fade turned off.
253
+ */
254
+ step(style, options) {
255
+ const { at, fadeMs, zoom, detail } = options;
256
+ const targets = gatesAt(style, zoom, detail);
257
+ // The first frame, a restyle that changes the layer count, and the fade
258
+ // turned off: the gate, with nothing to advance.
259
+ const first = this._at === null || this._alpha.length !== targets.length;
260
+ if (fadeMs <= 0 || first) {
261
+ this._alpha = targets;
262
+ this._at = at;
263
+ this._fading = false;
264
+ return null;
265
+ }
266
+ const step = (at - (this._at ?? at)) / fadeMs;
267
+ this._at = at;
268
+ let fading = false;
269
+ let moved = false;
270
+ for (let i = 0; i < targets.length; i++) {
271
+ const to = targets[i];
272
+ const from = this._alpha[i];
273
+ if (from !== to) {
274
+ const next = to > from ? Math.min(to, from + step) : Math.max(to, from - step);
275
+ this._alpha[i] = next;
276
+ if (next !== to)
277
+ fading = true;
278
+ }
279
+ if (this._alpha[i] !== to)
280
+ moved = true;
281
+ }
282
+ this._fading = fading;
283
+ return moved ? this._alpha : null;
284
+ }
285
+ }
286
+ /**
287
+ * The driver: everything a frame is, between the controller's camera and
288
+ * the renderer. Exported for the tests that drive it against a recording
289
+ * GL table — there is no other way to see a whole frame's decisions, and
290
+ * this host cannot render one (indirect GLX has no shaders).
291
+ */
292
+ export class GlMapDriver {
154
293
  props;
155
294
  theme = null;
156
295
  _controller;
@@ -173,9 +312,18 @@ class GlMapDriver {
173
312
  _zoomedAt = -Infinity;
174
313
  _rung = 0;
175
314
  _cost = new CostModel();
176
- _shown = null;
177
- _fade = null;
315
+ _fader = new LevelFader();
316
+ _gates = new GateFader();
178
317
  _placer = new LabelPlacer();
318
+ /** Places the labels of the view a glide stops at, and shows nothing:
319
+ * what it asks the atlas for is measured and set while the glide is
320
+ * still being drawn. */
321
+ _scout = new LabelPlacer();
322
+ /** The destination the scout last placed, and whether that placement
323
+ * measured everything it offered — a frame's text budget can run out
324
+ * first, and then the next frame places it again. */
325
+ _scoutedFor = '';
326
+ _scoutDone = false;
179
327
  _markers = new MarkerBatcher();
180
328
  /** The overlays' bucket, and what it was built from. */
181
329
  _overlay = null;
@@ -187,7 +335,7 @@ class GlMapDriver {
187
335
  /** The attribution's one instance. */
188
336
  _attributionText = new Float32Array(LABEL_INSTANCE);
189
337
  /** An attribution a frame could not draw yet — its string not measured,
190
- * or its raster not in the texture — and the size it is set at. */
338
+ * or its field not in the texture — and the size it is drawn at. */
191
339
  _attributionWanted = null;
192
340
  /** When labels were last placed. */
193
341
  _placedAt = -Infinity;
@@ -378,6 +526,9 @@ class GlMapDriver {
378
526
  }
379
527
  finally {
380
528
  controller.painting = false;
529
+ // `onFrame` ran inside that, and a camera animation drives itself
530
+ // from it — so whatever it asked for is scheduled here.
531
+ controller.paintEnded();
381
532
  }
382
533
  }
383
534
  catch (error) {
@@ -433,64 +584,30 @@ class GlMapDriver {
433
584
  }
434
585
  return out;
435
586
  }
587
+ /**
588
+ * How long a moving frame may take, or null for "as long as it likes".
589
+ *
590
+ * **On unless turned off.** A renderer with no budget spends whatever a
591
+ * frame costs and asks for the next one on the following compositor tick
592
+ * regardless, so at the expensive end of a zoom sweep it takes the whole
593
+ * thread — and the app around it stops getting its timers. Measured on a
594
+ * fly across ten levels: without a budget the loop went a second at a time
595
+ * without running a `setTimeout`, and nothing inside it was slow, because
596
+ * the cost was spread over a hundred frames rather than spent in one call.
597
+ * With the budget, none. An embedding app should not have to know that to
598
+ * keep its own clock.
599
+ *
600
+ * What it costs is detail while the camera moves, and only while it moves:
601
+ * the frame after it settles draws everything again.
602
+ */
436
603
  _budget() {
437
604
  const adaptive = this.props.map.adaptive;
438
- if (!adaptive)
605
+ if (adaptive === false)
439
606
  return null;
440
607
  return typeof adaptive === 'object'
441
608
  ? (adaptive.budgetMs ?? DEFAULT_BUDGET_MS)
442
609
  : DEFAULT_BUDGET_MS;
443
610
  }
444
- /**
445
- * The level fade: which level the frame is drawn from, and the one fading
446
- * in over it.
447
- *
448
- * A new level is waited for — briefly, until every tile of it in view has
449
- * answered — so the fade shows it arriving rather than a stand-in for it;
450
- * then it fades in over the level it replaces, with an ease at both ends.
451
- * A level more than one step away is not faded (the view it would fade
452
- * from is sixteen times the tiles), and a change of target halfway
453
- * through a fade takes the half-shown level as the one it fades from.
454
- */
455
- _planLevels(target, cover, at) {
456
- const fadeMs = this.props.map.levelFade ?? 0;
457
- const to = target.level;
458
- const plain = { base: target, next: null, alpha: 0 };
459
- if (fadeMs <= 0 || this._shown === null || Math.abs(to - this._shown) > 1) {
460
- this._shown = to;
461
- this._fade = null;
462
- return plain;
463
- }
464
- if (to === this._shown) {
465
- this._fade = null;
466
- return plain;
467
- }
468
- let fade = this._fade;
469
- if (!fade || fade.to !== to) {
470
- if (fade && fade.start !== null && (at - fade.start) / fadeMs >= 0.5) {
471
- this._shown = fade.to;
472
- }
473
- if (this._shown === to) {
474
- this._fade = null;
475
- return plain;
476
- }
477
- fade = this._fade = { to, start: null, waitSince: at };
478
- }
479
- const base = cover(this._shown);
480
- if (fade.start === null) {
481
- if (target.missing.length > 0 && at - fade.waitSince < FADE_WAIT_MS) {
482
- return { base, next: null, alpha: 0 };
483
- }
484
- fade.start = at;
485
- }
486
- const p = (at - fade.start) / fadeMs;
487
- if (p >= 1) {
488
- this._shown = to;
489
- this._fade = null;
490
- return plain;
491
- }
492
- return { base, next: target, alpha: p * p * (3 - 2 * p) };
493
- }
494
611
  _frame(gl, info) {
495
612
  const map = this.props.map;
496
613
  const controller = this._controller;
@@ -539,6 +656,17 @@ class GlMapDriver {
539
656
  store.want(target.missing);
540
657
  return { source, store, pyramid, target };
541
658
  });
659
+ // Where a wheel's glide stops, while one is running: its tiles are
660
+ // asked for after the view's own, so the view the glide lands on is
661
+ // loaded — and its labels set, below — by the time it gets there.
662
+ const destination = moving ? controller.destination() : null;
663
+ const ahead = destination
664
+ ? covers.map((c) => {
665
+ const cover = renderCover(destination, pane, scale, c.pyramid, c.store);
666
+ c.store.want(cover.missing);
667
+ return cover;
668
+ })
669
+ : null;
542
670
  // The level fade and adaptive quality are the first source's — the
543
671
  // basemap's; a pyramid over it is drawn at its own level throughout.
544
672
  const primary = covers[0] ?? null;
@@ -547,8 +675,9 @@ class GlMapDriver {
547
675
  level,
548
676
  })
549
677
  : EMPTY_COVER;
678
+ const fadeMs = map.levelFade ?? 0;
550
679
  const plan = primary
551
- ? this._planLevels(primary.target, coverAt, at)
680
+ ? this._fader.plan(primary.target, coverAt, { at, fadeMs })
552
681
  : { base: EMPTY_COVER, next: null, alpha: 0 };
553
682
  if (primary && plan.base !== primary.target) {
554
683
  primary.store.want(plan.base.missing);
@@ -589,11 +718,24 @@ class GlMapDriver {
589
718
  };
590
719
  let rung = 0;
591
720
  let predictedMs = 0;
721
+ // An overview of the view: its ancestors every other level up to the
722
+ // pyramid's root, asked for after the view's own tiles and looked up
723
+ // every frame, so they stay loaded. A view is a speck at those levels,
724
+ // so this is a tile or two a level. It is what a fast zoom out lands
725
+ // on: a trackpad's momentum can cross fifteen levels in a quarter of a
726
+ // second, and every level it passes that has no tile draws the style's
727
+ // background alone — a frame of one flat colour, labels gone with the
728
+ // tiles, where a coarser tile would have drawn the place, blurred. With
729
+ // one level of it in reach two levels up, a hole is always filled from
730
+ // above (`renderCover`'s ancestors reach eight). The level just above
731
+ // the view comes first: it is also what the ladder's last rungs draw.
732
+ if (primary) {
733
+ const top = primary.pyramid.minZoom;
734
+ for (let level = primary.target.level - 1; level >= top; level = level - 2 < top && level > top ? top : level - 2) {
735
+ primary.store.want(coverAt(level).missing);
736
+ }
737
+ }
592
738
  if (budget !== null && moving && primary) {
593
- // The coarser level is what the ladder's last rungs draw, so ask for
594
- // it too — after the view's own tiles, which come first.
595
- primary.store.want(coverAt(Math.max(primary.pyramid.minZoom, primary.target.level - 1))
596
- .missing);
597
739
  const predict = (r) => {
598
740
  const built = build(r);
599
741
  const work = renderer.estimate(built.frame) +
@@ -605,6 +747,24 @@ class GlMapDriver {
605
747
  }
606
748
  this._rung = rung;
607
749
  const { frame, fade } = build(rung);
750
+ // A layer crossing a gate — the style's `minZoom`, or this rung's
751
+ // `detail` — is ramped rather than cut, and both of a level fade's
752
+ // scenes draw it at the same ramp. Decided after the rung, because the
753
+ // rung is one of the gates: a moving frame that drops the style's
754
+ // newest layers to make its budget would otherwise take them out in
755
+ // one frame and hand them back in one more when the camera settled,
756
+ // which is a flicker on exactly the layers a zoom is looking at.
757
+ const layerAlpha = this._gates.step(prepared, {
758
+ at,
759
+ fadeMs,
760
+ zoom: camera.zoom,
761
+ detail: QUALITY_LADDER[rung].detail,
762
+ });
763
+ if (layerAlpha) {
764
+ frame.layerAlpha = layerAlpha;
765
+ if (fade)
766
+ fade.frame.layerAlpha = layerAlpha;
767
+ }
608
768
  // The text: the labels, and the attribution, set in the same atlas.
609
769
  let labels = null;
610
770
  let attribution = null;
@@ -614,12 +774,31 @@ class GlMapDriver {
614
774
  try {
615
775
  const atlas = this._atlasFor(info.node, style, scale);
616
776
  if (atlas) {
617
- atlas.beginFrame(now() + (moving ? TEXT_BUDGET_MOVING_MS : TEXT_BUDGET_SETTLED_MS));
777
+ // Live labels measure at the settled budget while moving too:
778
+ // what they admit mid-zoom has to be measured mid-zoom.
779
+ const live = map.labelsWhileMoving === true;
780
+ const textDeadline = now() +
781
+ (moving && !live ? TEXT_BUDGET_MOVING_MS : TEXT_BUDGET_SETTLED_MS);
782
+ atlas.beginFrame(textDeadline);
618
783
  // The attribution before the names: it is one string, measured
619
784
  // once, and a frame whose budget went on names would leave it
620
785
  // for a later one — for as long as names keep arriving.
621
786
  attribution = this._attributionFor(atlas, frame);
622
787
  labels = this._labelsFor(atlas, frame, fade, at, moving);
788
+ if (destination && ahead) {
789
+ this._scoutFor(atlas, frame, destination, ahead, at);
790
+ }
791
+ else if (this._scoutedFor !== '') {
792
+ this._scout.reset();
793
+ this._scoutedFor = '';
794
+ }
795
+ // The fields of strings already read back, on a budget of their
796
+ // own: the text budget moving is 1 ms, five fields, and a jump
797
+ // somewhere new reads back sixty names at once — they came in
798
+ // over two hundred milliseconds that way, against none for the
799
+ // coverage rasters fields replaced. This frame's draw uploads
800
+ // what it makes.
801
+ atlas.makeFields(Math.max(textDeadline, now() + FIELD_BUDGET_MS));
623
802
  this._pumpSoon();
624
803
  }
625
804
  }
@@ -727,7 +906,7 @@ class GlMapDriver {
727
906
  uploadBytes: stats.uploadBytes,
728
907
  offscreen: stats.offscreen,
729
908
  level,
730
- shownLevel: this._shown ?? level,
909
+ shownLevel: this._fader.shown ?? level,
731
910
  fade: stats.fade,
732
911
  quality: rung,
733
912
  predictedMs,
@@ -739,19 +918,24 @@ class GlMapDriver {
739
918
  textPending: this._atlas?.pending ?? false,
740
919
  },
741
920
  };
742
- // A label still fading, strings this frame had no budget to measure, or
743
- // rasters still to go into the texture want the next frame; a raster
744
- // in flight asks for one itself when it lands.
921
+ // A label still fading, strings this frame had no budget to measure,
922
+ // fields still to be made, or fields still to go into the texture want
923
+ // the next frame; a batch in flight asks for one itself when it lands.
745
924
  const labelling = labels !== null &&
746
925
  (this._placer.animating ||
747
926
  this._atlas?.starved === true ||
927
+ this._atlas?.fielding === true ||
748
928
  this._atlas?.uploading === true);
749
929
  // An attribution this frame could not draw may have gone into the
750
930
  // texture during it — the upload happens as the labels draw, after the
751
931
  // frame chose what to draw — and then it is the next frame's.
752
932
  const wanted = this._attributionWanted;
753
- const attributing = wanted !== null && this._atlas?.entry(wanted.text, wanted.size) != null;
754
- if (more || this._fade || labelling || attributing)
933
+ const attributing = wanted !== null && this._atlas?.entry(wanted.text) != null;
934
+ if (more ||
935
+ this._fader.fading ||
936
+ this._gates.fading ||
937
+ labelling ||
938
+ attributing)
755
939
  this.request();
756
940
  if (!this._announced) {
757
941
  this._announced = true;
@@ -813,9 +997,9 @@ class GlMapDriver {
813
997
  this._noText = true;
814
998
  return null;
815
999
  }
816
- // Margin for a halo of two logical pixels, and the texel either side
817
- // that keeps its samples inside it (see `quadInset`).
818
- this._atlas = new LabelAtlas(engine, { pad: 2 * Math.ceil(2 * scale) + 2 });
1000
+ // Fields set at a base size that follows the display's scale, so a
1001
+ // label on a 2x panel is sampled from a field twice as fine.
1002
+ this._atlas = new LabelAtlas(engine, { base: fieldBase(scale) });
819
1003
  this._atlas.onChange = this.request;
820
1004
  this._atlasKey = key;
821
1005
  this._placer.reset();
@@ -827,6 +1011,7 @@ class GlMapDriver {
827
1011
  * renderer.
828
1012
  */
829
1013
  _labelsFor(atlas, frame, fade, at, moving) {
1014
+ const live = this.props.map.labelsWhileMoving === true;
830
1015
  const from = fade && fade.alpha >= 0.5 ? fade.frame : frame;
831
1016
  const centre = project(this._controller.camera().center);
832
1017
  const placement = {
@@ -841,20 +1026,68 @@ class GlMapDriver {
841
1026
  // The projection's world, which the cover lays every source out on.
842
1027
  world: worldSize(frame.zoom, DEFAULT_TILE_SIZE) * frame.scale,
843
1028
  now: at,
844
- admit: at - this._zoomedAt >= ZOOM_QUIET_MS,
845
- moving,
1029
+ // Live: every name the view offers, at every step of a zoom.
1030
+ admit: live || at - this._zoomedAt >= ZOOM_QUIET_MS,
846
1031
  };
847
- if (!moving || at - this._placedAt >= PLACE_INTERVAL_MS) {
1032
+ if (live || !moving || at - this._placedAt >= PLACE_INTERVAL_MS) {
848
1033
  this._placer.place(placement, atlas);
849
1034
  this._placedAt = at;
850
1035
  }
1036
+ // Live: what placement asked for is set now, before the batch, so a
1037
+ // name placed in this frame is drawn in it — its field goes into the
1038
+ // texture ahead of the cap, before this frame's labels draw.
1039
+ if (live)
1040
+ atlas.setNow(now() + LIVE_TEXT_BUDGET_MS);
851
1041
  return this._placer.batch(placement, atlas);
852
1042
  }
1043
+ /**
1044
+ * Render ahead: place the labels of the view a glide stops at, so that
1045
+ * every string it will show is measured and asked of the atlas while the
1046
+ * glide's own frames are drawn. Nothing it places is drawn — the frame's
1047
+ * placer places the destination again when it gets there, and finds every
1048
+ * box measured and every field in the texture, so the labels fade in
1049
+ * when the view settles rather than a readback and an upload after.
1050
+ *
1051
+ * A fresh placement each time (the scout keeps no labels between runs;
1052
+ * holding a place is for what is on screen), and not every frame: when
1053
+ * the destination moves — another notch — or more of its tiles land, or
1054
+ * the last placement ran out of the frame's text budget before it had
1055
+ * measured everything. It measures out of that budget, after the frame's
1056
+ * own labels.
1057
+ */
1058
+ _scoutFor(atlas, frame, destination, covers, at) {
1059
+ // The destination is recomputed from each frame's camera, so its last
1060
+ // digits wander; to a millionth of a degree it is the same place. And
1061
+ // it is a different question once more of its tiles are in hand.
1062
+ let held = 0;
1063
+ for (const c of covers)
1064
+ held += c.own;
1065
+ const key = `${destination.zoom}|${destination.center.lon.toFixed(6)}|${destination.center.lat.toFixed(6)}|${held}`;
1066
+ if (key === this._scoutedFor && this._scoutDone)
1067
+ return;
1068
+ this._scoutedFor = key;
1069
+ const centre = project(destination.center);
1070
+ this._scout.reset();
1071
+ this._scout.place({
1072
+ width: frame.width,
1073
+ height: frame.height,
1074
+ scale: frame.scale,
1075
+ zoom: destination.zoom,
1076
+ style: frame.style,
1077
+ tiles: covers.flatMap((c) => c.tiles),
1078
+ centerX: centre.x,
1079
+ centerY: centre.y,
1080
+ world: worldSize(destination.zoom, DEFAULT_TILE_SIZE) * frame.scale,
1081
+ now: at,
1082
+ admit: true,
1083
+ }, atlas);
1084
+ this._scoutDone = !atlas.starved;
1085
+ }
853
1086
  /**
854
1087
  * The attribution, as the retained renderer draws it: the same box on the
855
1088
  * same pixels (`attributionLayout`), the text in the labels' face, from
856
1089
  * the labels' atlas. Null while there is none to draw — `attribution=""`,
857
- * or no source that names one — and until its raster is in the texture,
1090
+ * or no source that names one — and until its field is in the texture,
858
1091
  * so the box and its text arrive together.
859
1092
  */
860
1093
  _attributionFor(atlas, frame) {
@@ -866,19 +1099,20 @@ class GlMapDriver {
866
1099
  const s = frame.scale;
867
1100
  const size = ATTRIBUTION_SIZE * s;
868
1101
  const box = atlas.measure(text, size);
869
- const entry = box ? atlas.entry(text, size) : null;
1102
+ const entry = box ? atlas.entry(text) : null;
870
1103
  if (!box || !entry) {
871
1104
  this._attributionWanted = { text, size };
872
1105
  return null;
873
1106
  }
874
1107
  const at = attributionLayout({ width: box.width / s, height: box.height / s }, { x: 0, y: 0, width: frame.width / s, height: frame.height / s }, s);
875
1108
  const palette = overlayPalette(this.theme);
876
- // The string sits `pad` inside its raster, and a level label's quad is
877
- // centred on its anchor and set on whole pixels: this anchor puts the
878
- // string's corner on the layout's.
1109
+ // The string sits `pad` texels inside its field, the field is drawn
1110
+ // `k` device pixels a texel, and a level label's quad is centred on its
1111
+ // anchor: this anchor puts the string's corner on the layout's.
1112
+ const k = size / atlas.base;
879
1113
  const d = this._attributionText;
880
- d[0] = at.x - atlas.pad + entry.width / 2;
881
- d[1] = at.y - atlas.pad + entry.height / 2;
1114
+ d[0] = at.x + (entry.width / 2 - atlas.pad) * k;
1115
+ d[1] = at.y + (entry.height / 2 - atlas.pad) * k;
882
1116
  d[2] = 1;
883
1117
  d[3] = 0;
884
1118
  d[4] = entry.x;
@@ -888,6 +1122,7 @@ class GlMapDriver {
888
1122
  d.set(premultiplied(parseColor(palette.text) ?? BLACK), 8);
889
1123
  d.fill(0, 12, 17); // no halo: the box is what it reads against
890
1124
  d[17] = 1;
1125
+ d[18] = k;
891
1126
  return {
892
1127
  box: at.box,
893
1128
  boxColor: premultiplied(parseColor(palette.background) ?? WHITE, ATTRIBUTION_OPACITY),