@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
@@ -55,7 +55,7 @@ import {
55
55
  linkProgram,
56
56
  } from './shaders.js';
57
57
  import type { GL, Program } from './shaders.js';
58
- import { quadInset } from './text.js';
58
+ import { QUAD_INSET } from './text.js';
59
59
  import type { LabelAtlas } from './text.js';
60
60
 
61
61
  /** A rectangle in device pixels, top-left origin. */
@@ -89,6 +89,17 @@ export interface RenderFrame {
89
89
  height: number;
90
90
  /** The camera zoom: what zoom ramps and layer ranges resolve at. */
91
91
  zoom: number;
92
+ /**
93
+ * How much of each of the style's layers to draw, by the layer's index in
94
+ * `style.layers` — a layer the camera is zooming past `minZoom` is ramped
95
+ * out rather than cut, and what is not listed is `drawsAt`'s own answer.
96
+ *
97
+ * Per layer rather than per scene because the flips overlap: the zoom a
98
+ * layer ends at is not where the pyramid changes level, so a scene-wide
99
+ * cross-fade of the two would keep retargeting, and each retarget is a
100
+ * step in the picture. An opacity is a number that can move on its own.
101
+ */
102
+ layerAlpha?: readonly number[];
92
103
  /** Device pixels per logical pixel: what style lengths are multiplied by. */
93
104
  scale: number;
94
105
  style: PreparedStyle;
@@ -296,7 +307,46 @@ function drawsAt(layer: MapStyleLayer, zoom: number, detail: number): boolean {
296
307
  return true;
297
308
  }
298
309
 
299
- /** Label rasters taken into the atlas texture per frame at most. */
310
+ /**
311
+ * How much of a layer this frame draws: its `layerAlpha` where the frame
312
+ * has one, and otherwise the gate. The ramp is the whole answer where there
313
+ * is one — whoever set it has already folded in every gate, `detail`
314
+ * included — but never for a layer the style has turned off or a kind this
315
+ * renderer does not draw.
316
+ *
317
+ * Exported for the tests that watch a swept frame decide.
318
+ */
319
+ export function gateOf(
320
+ frame: RenderFrame,
321
+ index: number,
322
+ layer: MapStyleLayer,
323
+ detail: number,
324
+ ): number {
325
+ if (layer.visible === false) return 0;
326
+ if (layer.type !== 'fill' && layer.type !== 'line' && layer.type !== 'circle')
327
+ return 0;
328
+ const ramp = frame.layerAlpha?.[index];
329
+ if (ramp === undefined) return drawsAt(layer, frame.zoom, detail) ? 1 : 0;
330
+ return ramp > 0 ? Math.min(1, ramp) : 0;
331
+ }
332
+
333
+ /**
334
+ * Which of a style's layers the gates draw, as a `layerAlpha` of ones and
335
+ * zeroes — what a ramp moves towards. `detail` is adaptive quality's, so a
336
+ * rung that drops the style's newest layers is something to ramp like any
337
+ * other gate rather than a step in the picture.
338
+ */
339
+ export function gatesAt(
340
+ style: PreparedStyle,
341
+ zoom: number,
342
+ detail = 0,
343
+ ): number[] {
344
+ return style.layers.map(({ layer }) =>
345
+ drawsAt(layer, zoom, detail) ? 1 : 0,
346
+ );
347
+ }
348
+
349
+ /** Label fields taken into the atlas texture per frame at most. */
300
350
  const ATLAS_UPLOADS_PER_FRAME = 24;
301
351
 
302
352
  /** GL's own name for "which VAO is bound", which the table may not carry. */
@@ -332,6 +382,9 @@ export class GlMapRenderer {
332
382
  private _circle: Program | null = null;
333
383
  private _raster: Program | null = null;
334
384
  private _atlasTexture: unknown = null;
385
+ /** RGBA a field is widened into for its upload, reused. Its colour
386
+ * channels are white and never written again; only alpha changes. */
387
+ private _fieldScratch = new Uint8Array(0);
335
388
  private _atlasOwner: LabelAtlas | null = null;
336
389
  private _stats: GlRenderStats = GlMapRenderer._emptyStats();
337
390
  /** Bytes of tile geometry resident on the GPU. */
@@ -428,6 +481,11 @@ export class GlMapRenderer {
428
481
  );
429
482
  for (let i = 0; i < layers.length; i++) {
430
483
  const layer = layers[i].layer;
484
+ // The gate, not the ramp: what a rung is priced at is what it
485
+ // settles at. A layer on its way out is still being drawn, and
486
+ // pricing that would put the next rung's estimate above the budget
487
+ // — which would drop another layer, which would ramp, which is a
488
+ // ladder that climbs on its own transients.
431
489
  if (!drawsAt(layer, frame.zoom, detail)) continue;
432
490
  let records = 0;
433
491
  for (let t = 0; t < tiles.length; t++) {
@@ -493,9 +551,13 @@ export class GlMapRenderer {
493
551
  stats.fade = Math.min(1, fade.alpha);
494
552
  }
495
553
 
496
- // Even with nothing to draw: the batch's atlas may have rasters waiting
554
+ // Even with nothing to draw: the batch's atlas may have fields waiting
497
555
  // for the texture, and until they are in it nothing of theirs can be.
498
- if (labels) stats.labels = this._labels(labels, width, height);
556
+ if (labels) {
557
+ this._labels(labels, width, height);
558
+ // Labels, not instances: an icon's plate and glyph are two more.
559
+ stats.labels = labels.labels ?? labels.count;
560
+ }
499
561
 
500
562
  if (overlays) stats.overlays = this._overlays(overlays, frame);
501
563
 
@@ -606,15 +668,20 @@ export class GlMapRenderer {
606
668
  }
607
669
  for (let i = 0; i < layers.length; i++) {
608
670
  const layer = layers[i].layer;
609
- if (!drawsAt(layer, frame.zoom, detail)) continue;
671
+ const gate = gateOf(frame, i, layer, detail);
672
+ if (gate <= 0) continue;
610
673
  if (layer.type === 'fill') {
611
- if (this._fill(frame, tiles, i, layer, scissors, edges)) {
674
+ if (this._fill(frame, tiles, i, layer, scissors, edges, gate)) {
612
675
  stats.layers++;
613
676
  }
614
677
  } else if (layer.type === 'line') {
615
- if (this._lines(frame, tiles, i, layer, scissors)) stats.layers++;
678
+ if (this._lines(frame, tiles, i, layer, scissors, gate)) {
679
+ stats.layers++;
680
+ }
616
681
  } else if (layer.type === 'circle') {
617
- if (this._circles(frame, tiles, i, layer, scissors)) stats.layers++;
682
+ if (this._circles(frame, tiles, i, layer, scissors, gate)) {
683
+ stats.layers++;
684
+ }
618
685
  }
619
686
  }
620
687
  }
@@ -632,10 +699,12 @@ export class GlMapRenderer {
632
699
  layer: Extract<MapStyleLayer, { type: 'fill' }>,
633
700
  scissors: (number[] | null)[],
634
701
  edges: boolean,
702
+ gate = 1,
635
703
  ): boolean {
636
704
  const zoom = frame.zoom;
637
705
  const opacity =
638
- layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom);
706
+ (layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom)) *
707
+ gate;
639
708
  if (opacity <= 0) return false;
640
709
  const base = this._color(resolveZoomed(layer.color, zoom));
641
710
  if (!base) return false;
@@ -768,12 +837,14 @@ export class GlMapRenderer {
768
837
  index: number,
769
838
  layer: Extract<MapStyleLayer, { type: 'line' }>,
770
839
  scissors: (number[] | null)[],
840
+ gate = 1,
771
841
  ): boolean {
772
842
  const zoom = frame.zoom;
773
843
  const logical = resolveZoomed(layer.width, zoom);
774
844
  if (!(logical > 0)) return false;
775
845
  const opacity =
776
- layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom);
846
+ (layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom)) *
847
+ gate;
777
848
  if (opacity <= 0) return false;
778
849
  const base = this._color(resolveZoomed(layer.color, zoom));
779
850
  if (!base) return false;
@@ -805,6 +876,7 @@ export class GlMapRenderer {
805
876
  index: number,
806
877
  layer: Extract<MapStyleLayer, { type: 'circle' }>,
807
878
  scissors: (number[] | null)[],
879
+ gate = 1,
808
880
  ): boolean {
809
881
  const zoom = frame.zoom;
810
882
  const radius =
@@ -812,7 +884,8 @@ export class GlMapRenderer {
812
884
  frame.scale;
813
885
  if (!(radius > 0)) return false;
814
886
  const opacity =
815
- layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom);
887
+ (layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom)) *
888
+ gate;
816
889
  if (opacity <= 0) return false;
817
890
  const base = this._color(resolveZoomed(layer.color, zoom));
818
891
  if (!base) return false;
@@ -1134,7 +1207,7 @@ export class GlMapRenderer {
1134
1207
  gl,
1135
1208
  LABEL_VERTEX,
1136
1209
  LABEL_FRAGMENT,
1137
- ['u_viewport', 'u_atlas', 'u_inset', 'u_image'],
1210
+ ['u_viewport', 'u_atlas', 'u_inset', 'u_spread', 'u_image'],
1138
1211
  ));
1139
1212
  gl.activeTexture(gl.TEXTURE0);
1140
1213
  this._uploadAtlas(atlas);
@@ -1155,7 +1228,7 @@ export class GlMapRenderer {
1155
1228
  [ATTRIBUTES.a_rect, 4, 16],
1156
1229
  [ATTRIBUTES.a_ink, 4, 32],
1157
1230
  [ATTRIBUTES.a_halo, 4, 48],
1158
- [ATTRIBUTES.a_params, 2, 64],
1231
+ [ATTRIBUTES.a_params, 3, 64],
1159
1232
  ];
1160
1233
  for (const [location, size, offset] of fields) {
1161
1234
  gl.enableVertexAttribArray(location);
@@ -1180,7 +1253,8 @@ export class GlMapRenderer {
1180
1253
  const u = program.uniforms;
1181
1254
  gl.uniform2f(u.u_viewport, width, height);
1182
1255
  gl.uniform2f(u.u_atlas, atlas.size, atlas.size);
1183
- gl.uniform1f(u.u_inset, quadInset(atlas.pad));
1256
+ gl.uniform1f(u.u_inset, QUAD_INSET);
1257
+ gl.uniform1f(u.u_spread, atlas.pad);
1184
1258
  gl.uniform1i(u.u_image, 0);
1185
1259
  gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, batch.count);
1186
1260
  this._stats.drawCalls++;
@@ -1245,14 +1319,14 @@ export class GlMapRenderer {
1245
1319
  }
1246
1320
 
1247
1321
  /**
1248
- * Take what the atlas has waiting into the texture — a few dozen rasters
1322
+ * Take what the atlas has waiting into the texture — a few dozen fields
1249
1323
  * a frame at most, so a batch landing is spread over frames rather than
1250
1324
  * paid in one. A texture that is new, or another atlas's, starts over:
1251
1325
  * the atlas queues everything again. Leaves the texture bound.
1252
1326
  *
1253
- * The rasters go up as the text engine read them back — straight RGBA,
1254
- * white where the glyphs are — because the shader reads only alpha:
1255
- * premultiplying them first was a pass over every pixel for nothing.
1327
+ * Each field goes up in the alpha channel, the only one the shader
1328
+ * reads; the texture stays RGBA because the one-channel formats are not
1329
+ * in the core profile Apple's GL is.
1256
1330
  */
1257
1331
  private _uploadAtlas(atlas: LabelAtlas): void {
1258
1332
  const gl = this._gl;
@@ -1283,6 +1357,16 @@ export class GlMapRenderer {
1283
1357
  gl.bindTexture(gl.TEXTURE_2D, this._atlasTexture);
1284
1358
  }
1285
1359
  for (const entry of atlas.takeUploads(ATLAS_UPLOADS_PER_FRAME)) {
1360
+ // A field is one byte a texel; the texture is RGBA, because the
1361
+ // one-channel formats are not in a core profile, so it goes up in
1362
+ // alpha — the one channel the shader reads.
1363
+ const texels = entry.width * entry.height;
1364
+ if (this._fieldScratch.length < texels * 4) {
1365
+ this._fieldScratch = new Uint8Array(texels * 4).fill(255);
1366
+ }
1367
+ const rgba = this._fieldScratch.subarray(0, texels * 4);
1368
+ const field = entry.pixels;
1369
+ for (let i = 0; i < texels; i++) rgba[i * 4 + 3] = field[i];
1286
1370
  gl.texSubImage2D(
1287
1371
  gl.TEXTURE_2D,
1288
1372
  0,
@@ -1292,10 +1376,10 @@ export class GlMapRenderer {
1292
1376
  entry.height,
1293
1377
  gl.RGBA,
1294
1378
  gl.UNSIGNED_BYTE,
1295
- entry.pixels,
1379
+ rgba,
1296
1380
  );
1297
1381
  entry.ready = true;
1298
- this._stats.uploadBytes += entry.pixels.length;
1382
+ this._stats.uploadBytes += rgba.length;
1299
1383
  }
1300
1384
  }
1301
1385
 
@@ -22,6 +22,8 @@
22
22
  // A segment that touches a sentinel collapses to a point outside the clip
23
23
  // volume — see `buckets.ts` for why sentinels beat an index buffer.
24
24
 
25
+ import { SDF_EDGE, SDF_INK_BIAS_PX } from '../../internal/sdf.js';
26
+
25
27
  /** Where each attribute lives, shared by every program. Locations 5-9 are
26
28
  * the label program's, one label per instance (see {@link LABEL_VERTEX}). */
27
29
  export const ATTRIBUTES = {
@@ -206,27 +208,28 @@ void main() {
206
208
  `;
207
209
 
208
210
  /**
209
- * A label: its raster from the atlas as one quad, centred on the anchor and
210
- * turned to the baseline — which is all a label needs, because placement
211
- * only ever sets a line label on a straight stretch.
211
+ * A label: its distance field from the atlas as one quad, centred on the
212
+ * anchor, turned to the baseline — which is all a label needs, because
213
+ * placement only ever sets a line label on a straight stretch — and scaled
214
+ * from the field's base size to the size it is drawn at (`a_params.z`,
215
+ * device pixels per texel). One field serves every size.
212
216
  *
213
- * A level label is set on **whole pixels**, texel for pixel, so the text is
214
- * exactly as crisp as the text engine made it; a slanted one is sampled
215
- * bilinearly, as rotated type always is. The quad is the raster less an
216
- * inset (`u_inset`): the raster's clear margin is wide enough for a halo to
217
- * grow into, and the inset is what keeps the halo's samples from reaching
218
- * past the margin into a neighbouring label.
217
+ * A level label's quad starts on a **whole pixel**, so type that is not
218
+ * moving sits on the pixel grid the same way every frame. The quad is the
219
+ * field less an inset (`u_inset`) texel each side, which keeps the
220
+ * bilinear samples at its edge inside the field's own margin.
219
221
  */
220
222
  export const LABEL_VERTEX = `precision highp float;
221
223
  attribute vec2 a_corner;
222
224
  // centre (device pixels), then cos and sin of the baseline
223
225
  attribute vec4 a_anchor;
224
- // the raster in the atlas: x, y, width, height in texels, margin included
226
+ // the field in the atlas: x, y, width, height in texels, margin included
225
227
  attribute vec4 a_rect;
226
228
  attribute vec4 a_ink;
227
229
  attribute vec4 a_halo;
228
- // halo radius in pixels, and 1 to set the label on whole pixels
229
- attribute vec2 a_params;
230
+ // halo radius in device pixels, 1 to set the label on whole pixels, and
231
+ // device pixels per field texel
232
+ attribute vec3 a_params;
230
233
  uniform vec2 u_viewport;
231
234
  uniform vec2 u_atlas;
232
235
  uniform float u_inset;
@@ -234,9 +237,11 @@ varying vec2 v_uv;
234
237
  varying vec4 v_ink;
235
238
  varying vec4 v_halo;
236
239
  varying float v_radius;
240
+ varying float v_scale;
237
241
  void main() {
238
242
  vec2 corner = vec2(a_corner.x, a_corner.y * 0.5 + 0.5);
239
- vec2 size = a_rect.zw - 2.0 * u_inset;
243
+ vec2 texels = a_rect.zw - 2.0 * u_inset;
244
+ vec2 size = texels * a_params.z;
240
245
  vec2 p;
241
246
  if (a_params.y > 0.5) {
242
247
  p = floor(a_anchor.xy - size * 0.5 + 0.5) + corner * size;
@@ -246,41 +251,39 @@ void main() {
246
251
  p = a_anchor.xy + vec2(local.x * axis.x - local.y * axis.y,
247
252
  local.x * axis.y + local.y * axis.x);
248
253
  }
249
- v_uv = (a_rect.xy + u_inset + corner * size) / u_atlas;
254
+ v_uv = (a_rect.xy + u_inset + corner * texels) / u_atlas;
250
255
  v_ink = a_ink;
251
256
  v_halo = a_halo;
252
257
  v_radius = a_params.x;
258
+ v_scale = a_params.z;
253
259
  gl_Position = vec4(p.x / u_viewport.x * 2.0 - 1.0, 1.0 - p.y / u_viewport.y * 2.0, 0.0, 1.0);
254
260
  }
255
261
  `;
256
262
 
257
263
  /**
258
- * Coverage in, colour out: the ink where the glyphs are, and under it a
259
- * halo — the coverage *dilated* by the halo's radius, as the greatest
260
- * coverage on two rings of samples around the pixel. Dilating here rather
261
- * than when rasterizing is what lets one raster serve every halo width and
262
- * colour a style asks for; the samples cost nothing next to the few
263
- * thousand pixels a frame's labels cover.
264
+ * Distance in, colour out. The field says how far this pixel is from the
265
+ * glyphs' edge — in texels, `u_spread` of them across the byte range, and
266
+ * so in device pixels once scaled — and ink is the pixel of that distance
267
+ * nearest the edge, antialiased across one device pixel whatever size the
268
+ * label is drawn at. The halo is the same edge pushed out by its radius:
269
+ * one texture read, where a halo dilated from coverage took thirty-three,
270
+ * and exactly as wide as the style asks up to the field's reach.
264
271
  */
265
272
  export const LABEL_FRAGMENT = `precision highp float;
266
273
  uniform sampler2D u_image;
267
- uniform vec2 u_atlas;
274
+ uniform float u_spread;
268
275
  varying vec2 v_uv;
269
276
  varying vec4 v_ink;
270
277
  varying vec4 v_halo;
271
278
  varying float v_radius;
279
+ varying float v_scale;
272
280
  void main() {
273
- float ink = texture2D(u_image, v_uv).a;
274
- float halo = ink;
275
- if (v_radius > 0.0) {
276
- vec2 reach = vec2(v_radius) / u_atlas;
277
- for (int i = 0; i < 16; i++) {
278
- float a = float(i) * 0.3926991;
279
- vec2 d = vec2(cos(a), sin(a)) * reach;
280
- halo = max(halo, texture2D(u_image, v_uv + d).a);
281
- halo = max(halo, texture2D(u_image, v_uv + d * 0.5).a);
282
- }
283
- }
281
+ float field = texture2D(u_image, v_uv).a;
282
+ // Device pixels past the glyphs' edge: positive outside, negative in.
283
+ float d = (${SDF_EDGE.toFixed(4)} - field) * u_spread * v_scale;
284
+ // The ink's edge a little outside the outline (SDF_INK_BIAS_PX).
285
+ float ink = clamp(0.5 + ${SDF_INK_BIAS_PX.toFixed(2)} - d, 0.0, 1.0);
286
+ float halo = v_radius > 0.0 ? clamp(0.5 + v_radius - d, 0.0, 1.0) : 0.0;
284
287
  vec4 color = v_ink * ink + v_halo * (halo * (1.0 - ink));
285
288
  if (color.a <= 0.0) discard;
286
289
  gl_FragColor = color;
@@ -20,6 +20,7 @@
20
20
  // needs a serializer.
21
21
  import { parseVectorTile } from '../sources.js';
22
22
  import type { MapSource, TileData } from '../sources.js';
23
+ import { FILL_DEPTH } from '../proj.js';
23
24
  import type { TileId } from '../proj.js';
24
25
  import type { PreparedStyle } from '../paint.js';
25
26
  import type { MapStyleLayer } from '../style.js';
@@ -96,6 +97,9 @@ export class GlTileStore implements TileLookup {
96
97
  private _inFlight = 0;
97
98
  private _frame = 0;
98
99
  private _disposed = false;
100
+ /** What {@link holds} answers from: built when first asked, and dropped
101
+ * whenever a tile gets an answer or loses one. */
102
+ private _held: Map<string, 'here' | 'below'> | null = null;
99
103
  private readonly _pool: BuildPool | null;
100
104
  /** Bucket builds and their cost on this thread, for a HUD. */
101
105
  built = 0;
@@ -151,6 +155,33 @@ export class GlTileStore implements TileLookup {
151
155
  return entry.data ?? undefined;
152
156
  }
153
157
 
158
+ /**
159
+ * Whether this store has an answer for `tile` (`'here'`), for only tiles
160
+ * under it within `FILL_DEPTH` levels (`'below'`), or neither — the
161
+ * cover's way to search under a hole without a `get` for every tile
162
+ * there, which would stamp a tile still loading and keep its load going.
163
+ */
164
+ holds(tile: TileId): 'here' | 'below' | undefined {
165
+ let held = this._held;
166
+ if (!held) {
167
+ held = new Map();
168
+ for (const [k, entry] of this._entries) {
169
+ if (entry.data === null && entry.state !== 'empty') continue;
170
+ held.set(k, 'here');
171
+ let { z, x, y } = entry.tile;
172
+ for (let up = 1; up <= FILL_DEPTH && z > 0; up++) {
173
+ z--;
174
+ x >>= 1;
175
+ y >>= 1;
176
+ const above = key({ z, x, y });
177
+ if (!held.has(above)) held.set(above, 'below');
178
+ }
179
+ }
180
+ this._held = held;
181
+ }
182
+ return held.get(key(tile));
183
+ }
184
+
154
185
  /** A new frame: what the cover asks for from here on is this frame's. */
155
186
  tick(): void {
156
187
  this._frame++;
@@ -218,6 +249,7 @@ export class GlTileStore implements TileLookup {
218
249
  (data: TileData) => {
219
250
  if (this._disposed || aborted) return;
220
251
  entry.failures = 0;
252
+ this._held = null;
221
253
  if (data && data.kind === 'vector' && data.data.length > 0) {
222
254
  entry.bytes = data.data;
223
255
  entry.state = 'loaded';
@@ -308,22 +340,28 @@ export class GlTileStore implements TileLookup {
308
340
  if (!entry.bytes) continue;
309
341
  entry.state = 'building';
310
342
  const style = this._style.id;
311
- entry.job = pool.build(entry.bytes, this._style, (result) => {
312
- if (this._disposed || entry.job === 0) return;
313
- entry.job = 0;
314
- if (!this._entries.has(key(entry.tile))) return;
315
- if (result.data && style === this._style.id) {
316
- entry.data = result.data;
317
- entry.state = 'ready';
318
- } else if (result.data) {
319
- // Built for a style that has since been replaced: build again.
320
- entry.state = 'loaded';
321
- this._queue.push(entry);
322
- } else {
323
- entry.state = 'empty';
324
- }
325
- this._onChange();
326
- });
343
+ entry.job = pool.build(
344
+ entry.bytes,
345
+ entry.tile,
346
+ this._style,
347
+ (result) => {
348
+ if (this._disposed || entry.job === 0) return;
349
+ entry.job = 0;
350
+ if (!this._entries.has(key(entry.tile))) return;
351
+ this._held = null;
352
+ if (result.data && style === this._style.id) {
353
+ entry.data = result.data;
354
+ entry.state = 'ready';
355
+ } else if (result.data) {
356
+ // Built for a style that has since been replaced: build again.
357
+ entry.state = 'loaded';
358
+ this._queue.push(entry);
359
+ } else {
360
+ entry.state = 'empty';
361
+ }
362
+ this._onChange();
363
+ },
364
+ );
327
365
  }
328
366
  return false;
329
367
  }
@@ -332,11 +370,13 @@ export class GlTileStore implements TileLookup {
332
370
  first = false;
333
371
  const entry = this._queue.shift()!;
334
372
  if (!entry.bytes) continue;
373
+ this._held = null;
335
374
  const started = now();
336
375
  try {
337
376
  entry.data = buildTileBuckets(
338
377
  parseVectorTile(entry.bytes),
339
378
  this._prepared,
379
+ entry.tile,
340
380
  );
341
381
  entry.state = 'ready';
342
382
  } catch {
@@ -414,6 +454,7 @@ export class GlTileStore implements TileLookup {
414
454
  if (excess <= 0) break;
415
455
  if (entry.data) release(entry.data);
416
456
  this._entries.delete(k);
457
+ this._held = null;
417
458
  excess--;
418
459
  }
419
460
  this._queue = this._queue.filter((e) => this._entries.has(key(e.tile)));
@@ -425,6 +466,7 @@ export class GlTileStore implements TileLookup {
425
466
  if (entry.data) release(entry.data);
426
467
  }
427
468
  this._entries.clear();
469
+ this._held = null;
428
470
  this._queue = [];
429
471
  this._waiting = [];
430
472
  this._pool?.terminate();
@@ -510,6 +552,7 @@ class BuildPool {
510
552
 
511
553
  build(
512
554
  bytes: Uint8Array,
555
+ tile: TileId,
513
556
  style: { id: number; layers: MapStyleLayer[] },
514
557
  done: (result: BuildResult) => void,
515
558
  ): number {
@@ -530,7 +573,13 @@ class BuildPool {
530
573
  const copy = bytes.slice();
531
574
  slot.busy++;
532
575
  slot.worker.postMessage(
533
- { type: 'build', job, style: style.id, bytes: copy },
576
+ {
577
+ type: 'build',
578
+ job,
579
+ style: style.id,
580
+ bytes: copy,
581
+ tile: { z: tile.z, x: tile.x, y: tile.y },
582
+ },
534
583
  [copy.buffer as ArrayBuffer],
535
584
  );
536
585
  return job;