@react-x11/components 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (721) hide show
  1. package/README.md +105 -38
  2. package/dist/charts/node.d.ts +12 -2
  3. package/dist/charts/node.d.ts.map +1 -1
  4. package/dist/charts/node.js +50 -16
  5. package/dist/charts/node.js.map +1 -1
  6. package/dist/charts/render.d.ts +12 -3
  7. package/dist/charts/render.d.ts.map +1 -1
  8. package/dist/charts/render.js +94 -25
  9. package/dist/charts/render.js.map +1 -1
  10. package/dist/code/index.d.ts.map +1 -1
  11. package/dist/code/index.js +3 -1
  12. package/dist/code/index.js.map +1 -1
  13. package/dist/code-editor/completion.d.ts.map +1 -1
  14. package/dist/code-editor/completion.js +3 -2
  15. package/dist/code-editor/completion.js.map +1 -1
  16. package/dist/code-editor/index.d.ts.map +1 -1
  17. package/dist/code-editor/index.js +19 -0
  18. package/dist/code-editor/index.js.map +1 -1
  19. package/dist/code-editor/node.d.ts +177 -7
  20. package/dist/code-editor/node.d.ts.map +1 -1
  21. package/dist/code-editor/node.js +1329 -164
  22. package/dist/code-editor/node.js.map +1 -1
  23. package/dist/code-language/languages/glsl.d.ts.map +1 -1
  24. package/dist/code-language/languages/glsl.js +10 -2
  25. package/dist/code-language/languages/glsl.js.map +1 -1
  26. package/dist/code-language/languages/javascript.d.ts.map +1 -1
  27. package/dist/code-language/languages/javascript.js +18 -3
  28. package/dist/code-language/languages/javascript.js.map +1 -1
  29. package/dist/code-language/languages/json.d.ts.map +1 -1
  30. package/dist/code-language/languages/json.js +10 -2
  31. package/dist/code-language/languages/json.js.map +1 -1
  32. package/dist/code-language/languages/shell.d.ts.map +1 -1
  33. package/dist/code-language/languages/shell.js +10 -2
  34. package/dist/code-language/languages/shell.js.map +1 -1
  35. package/dist/code-language/languages/sql.d.ts.map +1 -1
  36. package/dist/code-language/languages/sql.js +20 -2
  37. package/dist/code-language/languages/sql.js.map +1 -1
  38. package/dist/code-language/stream.d.ts +22 -0
  39. package/dist/code-language/stream.d.ts.map +1 -1
  40. package/dist/code-language/stream.js +259 -9
  41. package/dist/code-language/stream.js.map +1 -1
  42. package/dist/code-language/types.d.ts +5 -4
  43. package/dist/code-language/types.d.ts.map +1 -1
  44. package/dist/codeblock/index.d.ts +13 -2
  45. package/dist/codeblock/index.d.ts.map +1 -1
  46. package/dist/codeblock/index.js +20 -3
  47. package/dist/codeblock/index.js.map +1 -1
  48. package/dist/embed/client.d.ts +48 -3
  49. package/dist/embed/client.d.ts.map +1 -1
  50. package/dist/embed/client.js +79 -5
  51. package/dist/embed/client.js.map +1 -1
  52. package/dist/embed/index.d.ts +1 -1
  53. package/dist/embed/index.d.ts.map +1 -1
  54. package/dist/embed/index.js +1 -1
  55. package/dist/embed/index.js.map +1 -1
  56. package/dist/flow/draw.d.ts +50 -0
  57. package/dist/flow/draw.d.ts.map +1 -1
  58. package/dist/flow/draw.js +132 -33
  59. package/dist/flow/draw.js.map +1 -1
  60. package/dist/flow/gl/color.d.ts +13 -0
  61. package/dist/flow/gl/color.d.ts.map +1 -0
  62. package/dist/flow/gl/color.js +82 -0
  63. package/dist/flow/gl/color.js.map +1 -0
  64. package/dist/flow/gl/index.d.ts +60 -0
  65. package/dist/flow/gl/index.d.ts.map +1 -0
  66. package/dist/flow/gl/index.js +283 -0
  67. package/dist/flow/gl/index.js.map +1 -0
  68. package/dist/flow/gl/pack.d.ts +133 -0
  69. package/dist/flow/gl/pack.d.ts.map +1 -0
  70. package/dist/flow/gl/pack.js +408 -0
  71. package/dist/flow/gl/pack.js.map +1 -0
  72. package/dist/flow/gl/renderer.d.ts +95 -0
  73. package/dist/flow/gl/renderer.d.ts.map +1 -0
  74. package/dist/flow/gl/renderer.js +459 -0
  75. package/dist/flow/gl/renderer.js.map +1 -0
  76. package/dist/flow/gl/shaders.d.ts +79 -0
  77. package/dist/flow/gl/shaders.d.ts.map +1 -0
  78. package/dist/flow/gl/shaders.js +346 -0
  79. package/dist/flow/gl/shaders.js.map +1 -0
  80. package/dist/flow/gl/text.d.ts +318 -0
  81. package/dist/flow/gl/text.d.ts.map +1 -0
  82. package/dist/flow/gl/text.js +1103 -0
  83. package/dist/flow/gl/text.js.map +1 -0
  84. package/dist/flow/index.d.ts +1 -1
  85. package/dist/flow/index.d.ts.map +1 -1
  86. package/dist/flow/index.js +619 -64
  87. package/dist/flow/index.js.map +1 -1
  88. package/dist/flow/node.d.ts +621 -72
  89. package/dist/flow/node.d.ts.map +1 -1
  90. package/dist/flow/node.js +2253 -1018
  91. package/dist/flow/node.js.map +1 -1
  92. package/dist/flow/paint.d.ts +35 -0
  93. package/dist/flow/paint.d.ts.map +1 -0
  94. package/dist/flow/paint.js +393 -0
  95. package/dist/flow/paint.js.map +1 -0
  96. package/dist/flow/paths.d.ts +14 -0
  97. package/dist/flow/paths.d.ts.map +1 -1
  98. package/dist/flow/paths.js +45 -19
  99. package/dist/flow/paths.js.map +1 -1
  100. package/dist/flow/scene.d.ts +584 -0
  101. package/dist/flow/scene.d.ts.map +1 -0
  102. package/dist/flow/scene.js +1453 -0
  103. package/dist/flow/scene.js.map +1 -0
  104. package/dist/flow/types.d.ts +111 -1
  105. package/dist/flow/types.d.ts.map +1 -1
  106. package/dist/html/controls.d.ts +28 -0
  107. package/dist/html/controls.d.ts.map +1 -1
  108. package/dist/html/controls.js +52 -2
  109. package/dist/html/controls.js.map +1 -1
  110. package/dist/html/css/calc.d.ts +14 -0
  111. package/dist/html/css/calc.d.ts.map +1 -0
  112. package/dist/html/css/calc.js +344 -0
  113. package/dist/html/css/calc.js.map +1 -0
  114. package/dist/html/css/cascade.d.ts +240 -6
  115. package/dist/html/css/cascade.d.ts.map +1 -1
  116. package/dist/html/css/cascade.js +1327 -66
  117. package/dist/html/css/cascade.js.map +1 -1
  118. package/dist/html/css/color.d.ts +23 -0
  119. package/dist/html/css/color.d.ts.map +1 -0
  120. package/dist/html/css/color.js +740 -0
  121. package/dist/html/css/color.js.map +1 -0
  122. package/dist/html/css/content.d.ts +92 -0
  123. package/dist/html/css/content.d.ts.map +1 -0
  124. package/dist/html/css/content.js +388 -0
  125. package/dist/html/css/content.js.map +1 -0
  126. package/dist/html/css/counter-styles.d.ts +76 -0
  127. package/dist/html/css/counter-styles.d.ts.map +1 -0
  128. package/dist/html/css/counter-styles.js +893 -0
  129. package/dist/html/css/counter-styles.js.map +1 -0
  130. package/dist/html/css/decode.d.ts +12 -0
  131. package/dist/html/css/decode.d.ts.map +1 -0
  132. package/dist/html/css/decode.js +116 -0
  133. package/dist/html/css/decode.js.map +1 -0
  134. package/dist/html/css/parse.d.ts +110 -10
  135. package/dist/html/css/parse.d.ts.map +1 -1
  136. package/dist/html/css/parse.js +1473 -180
  137. package/dist/html/css/parse.js.map +1 -1
  138. package/dist/html/css/style.d.ts +498 -15
  139. package/dist/html/css/style.d.ts.map +1 -1
  140. package/dist/html/css/style.js +3698 -206
  141. package/dist/html/css/style.js.map +1 -1
  142. package/dist/html/css/ua.d.ts.map +1 -1
  143. package/dist/html/css/ua.js +57 -11
  144. package/dist/html/css/ua.js.map +1 -1
  145. package/dist/html/css/values.d.ts +37 -3
  146. package/dist/html/css/values.d.ts.map +1 -1
  147. package/dist/html/css/values.js +122 -48
  148. package/dist/html/css/values.js.map +1 -1
  149. package/dist/html/css/vars.d.ts +52 -0
  150. package/dist/html/css/vars.d.ts.map +1 -0
  151. package/dist/html/css/vars.js +358 -0
  152. package/dist/html/css/vars.js.map +1 -0
  153. package/dist/html/dom.d.ts +30 -4
  154. package/dist/html/dom.d.ts.map +1 -1
  155. package/dist/html/dom.js +278 -17
  156. package/dist/html/dom.js.map +1 -1
  157. package/dist/html/fonts.d.ts +106 -0
  158. package/dist/html/fonts.d.ts.map +1 -0
  159. package/dist/html/fonts.js +565 -0
  160. package/dist/html/fonts.js.map +1 -0
  161. package/dist/html/gif.d.ts +15 -0
  162. package/dist/html/gif.d.ts.map +1 -0
  163. package/dist/html/gif.js +229 -0
  164. package/dist/html/gif.js.map +1 -0
  165. package/dist/html/index.d.ts +50 -11
  166. package/dist/html/index.d.ts.map +1 -1
  167. package/dist/html/index.js +115 -9
  168. package/dist/html/index.js.map +1 -1
  169. package/dist/html/layout/block.d.ts +226 -3
  170. package/dist/html/layout/block.d.ts.map +1 -1
  171. package/dist/html/layout/block.js +2937 -197
  172. package/dist/html/layout/block.js.map +1 -1
  173. package/dist/html/layout/boxes.d.ts +340 -17
  174. package/dist/html/layout/boxes.d.ts.map +1 -1
  175. package/dist/html/layout/boxes.js +1714 -182
  176. package/dist/html/layout/boxes.js.map +1 -1
  177. package/dist/html/layout/cache.d.ts +58 -0
  178. package/dist/html/layout/cache.d.ts.map +1 -0
  179. package/dist/html/layout/cache.js +224 -0
  180. package/dist/html/layout/cache.js.map +1 -0
  181. package/dist/html/layout/collapse.d.ts +45 -0
  182. package/dist/html/layout/collapse.d.ts.map +1 -0
  183. package/dist/html/layout/collapse.js +246 -0
  184. package/dist/html/layout/collapse.js.map +1 -0
  185. package/dist/html/layout/css-grid.d.ts +7 -0
  186. package/dist/html/layout/css-grid.d.ts.map +1 -0
  187. package/dist/html/layout/css-grid.js +900 -0
  188. package/dist/html/layout/css-grid.js.map +1 -0
  189. package/dist/html/layout/flex.d.ts.map +1 -1
  190. package/dist/html/layout/flex.js +1025 -89
  191. package/dist/html/layout/flex.js.map +1 -1
  192. package/dist/html/layout/floats.d.ts +45 -6
  193. package/dist/html/layout/floats.d.ts.map +1 -1
  194. package/dist/html/layout/floats.js +113 -14
  195. package/dist/html/layout/floats.js.map +1 -1
  196. package/dist/html/layout/grid-lines.d.ts +39 -0
  197. package/dist/html/layout/grid-lines.d.ts.map +1 -0
  198. package/dist/html/layout/grid-lines.js +119 -0
  199. package/dist/html/layout/grid-lines.js.map +1 -0
  200. package/dist/html/layout/grid.d.ts +53 -0
  201. package/dist/html/layout/grid.d.ts.map +1 -0
  202. package/dist/html/layout/grid.js +153 -0
  203. package/dist/html/layout/grid.js.map +1 -0
  204. package/dist/html/layout/inline.d.ts +151 -1
  205. package/dist/html/layout/inline.d.ts.map +1 -1
  206. package/dist/html/layout/inline.js +3375 -174
  207. package/dist/html/layout/inline.js.map +1 -1
  208. package/dist/html/layout/shaping.d.ts +6 -0
  209. package/dist/html/layout/shaping.d.ts.map +1 -0
  210. package/dist/html/layout/shaping.js +100 -0
  211. package/dist/html/layout/shaping.js.map +1 -0
  212. package/dist/html/layout/table.d.ts +3 -0
  213. package/dist/html/layout/table.d.ts.map +1 -1
  214. package/dist/html/layout/table.js +681 -175
  215. package/dist/html/layout/table.js.map +1 -1
  216. package/dist/html/layout/tracks.d.ts +44 -0
  217. package/dist/html/layout/tracks.d.ts.map +1 -0
  218. package/dist/html/layout/tracks.js +349 -0
  219. package/dist/html/layout/tracks.js.map +1 -0
  220. package/dist/html/node.d.ts +172 -5
  221. package/dist/html/node.d.ts.map +1 -1
  222. package/dist/html/node.js +1336 -103
  223. package/dist/html/node.js.map +1 -1
  224. package/dist/html/paint.d.ts +92 -3
  225. package/dist/html/paint.d.ts.map +1 -1
  226. package/dist/html/paint.js +3503 -141
  227. package/dist/html/paint.js.map +1 -1
  228. package/dist/html/resources.d.ts +60 -14
  229. package/dist/html/resources.d.ts.map +1 -1
  230. package/dist/html/resources.js +122 -36
  231. package/dist/html/resources.js.map +1 -1
  232. package/dist/html/surfaces.d.ts +23 -0
  233. package/dist/html/surfaces.d.ts.map +1 -0
  234. package/dist/html/surfaces.js +68 -0
  235. package/dist/html/surfaces.js.map +1 -0
  236. package/dist/html/svg.d.ts +80 -0
  237. package/dist/html/svg.d.ts.map +1 -0
  238. package/dist/html/svg.js +435 -0
  239. package/dist/html/svg.js.map +1 -0
  240. package/dist/html/url.d.ts +23 -0
  241. package/dist/html/url.d.ts.map +1 -0
  242. package/dist/html/url.js +80 -0
  243. package/dist/html/url.js.map +1 -0
  244. package/dist/index.d.ts +2 -2
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +1 -1
  247. package/dist/index.js.map +1 -1
  248. package/dist/internal/collate.d.ts +3 -0
  249. package/dist/internal/collate.d.ts.map +1 -0
  250. package/dist/internal/collate.js +11 -0
  251. package/dist/internal/collate.js.map +1 -0
  252. package/dist/{markdown → internal/markdown}/ast.d.ts +23 -0
  253. package/dist/internal/markdown/ast.d.ts.map +1 -0
  254. package/dist/internal/markdown/ast.js +22 -0
  255. package/dist/internal/markdown/ast.js.map +1 -0
  256. package/dist/internal/markdown/parse.d.ts.map +1 -0
  257. package/dist/{markdown → internal/markdown}/parse.js +221 -30
  258. package/dist/internal/markdown/parse.js.map +1 -0
  259. package/dist/internal/markdown/stringify.d.ts +4 -0
  260. package/dist/internal/markdown/stringify.d.ts.map +1 -0
  261. package/dist/internal/markdown/stringify.js +684 -0
  262. package/dist/internal/markdown/stringify.js.map +1 -0
  263. package/dist/internal/markdown/tags.d.ts.map +1 -0
  264. package/dist/internal/markdown/tags.js.map +1 -0
  265. package/dist/internal/prewarm.d.ts +18 -0
  266. package/dist/internal/prewarm.d.ts.map +1 -0
  267. package/dist/internal/prewarm.js +42 -0
  268. package/dist/internal/prewarm.js.map +1 -0
  269. package/dist/internal/scroll.d.ts +3 -2
  270. package/dist/internal/scroll.d.ts.map +1 -1
  271. package/dist/internal/scroll.js +1 -0
  272. package/dist/internal/scroll.js.map +1 -1
  273. package/dist/internal/sdf.d.ts +20 -0
  274. package/dist/internal/sdf.d.ts.map +1 -0
  275. package/dist/internal/sdf.js +216 -0
  276. package/dist/internal/sdf.js.map +1 -0
  277. package/dist/internal/splice.d.ts +12 -0
  278. package/dist/internal/splice.d.ts.map +1 -0
  279. package/dist/internal/splice.js +23 -0
  280. package/dist/internal/splice.js.map +1 -0
  281. package/dist/internal/window.d.ts +12 -0
  282. package/dist/internal/window.d.ts.map +1 -1
  283. package/dist/internal/window.js +23 -6
  284. package/dist/internal/window.js.map +1 -1
  285. package/dist/maps/anchors.d.ts +103 -0
  286. package/dist/maps/anchors.d.ts.map +1 -0
  287. package/dist/maps/anchors.js +790 -0
  288. package/dist/maps/anchors.js.map +1 -0
  289. package/dist/maps/controller.d.ts +340 -0
  290. package/dist/maps/controller.d.ts.map +1 -0
  291. package/dist/maps/controller.js +822 -0
  292. package/dist/maps/controller.js.map +1 -0
  293. package/dist/maps/gl/buckets.d.ts +99 -0
  294. package/dist/maps/gl/buckets.d.ts.map +1 -0
  295. package/dist/maps/gl/buckets.js +365 -0
  296. package/dist/maps/gl/buckets.js.map +1 -0
  297. package/dist/maps/gl/build-worker.d.ts +15 -0
  298. package/dist/maps/gl/build-worker.d.ts.map +1 -0
  299. package/dist/maps/gl/build-worker.js +44 -0
  300. package/dist/maps/gl/build-worker.js.map +1 -0
  301. package/dist/maps/gl/color.d.ts +8 -0
  302. package/dist/maps/gl/color.d.ts.map +1 -0
  303. package/dist/maps/gl/color.js +57 -0
  304. package/dist/maps/gl/color.js.map +1 -0
  305. package/dist/maps/gl/cover.d.ts +70 -0
  306. package/dist/maps/gl/cover.d.ts.map +1 -0
  307. package/dist/maps/gl/cover.js +137 -0
  308. package/dist/maps/gl/cover.js.map +1 -0
  309. package/dist/maps/gl/index.d.ts +3 -0
  310. package/dist/maps/gl/index.d.ts.map +1 -0
  311. package/dist/maps/gl/index.js +20 -0
  312. package/dist/maps/gl/index.js.map +1 -0
  313. package/dist/maps/gl/markers.d.ts +28 -0
  314. package/dist/maps/gl/markers.d.ts.map +1 -0
  315. package/dist/maps/gl/markers.js +60 -0
  316. package/dist/maps/gl/markers.js.map +1 -0
  317. package/dist/maps/gl/overlays.d.ts +68 -0
  318. package/dist/maps/gl/overlays.d.ts.map +1 -0
  319. package/dist/maps/gl/overlays.js +300 -0
  320. package/dist/maps/gl/overlays.js.map +1 -0
  321. package/dist/maps/gl/pane.d.ts +12 -0
  322. package/dist/maps/gl/pane.d.ts.map +1 -0
  323. package/dist/maps/gl/pane.js +37 -0
  324. package/dist/maps/gl/pane.js.map +1 -0
  325. package/dist/maps/gl/placement.d.ts +124 -0
  326. package/dist/maps/gl/placement.d.ts.map +1 -0
  327. package/dist/maps/gl/placement.js +642 -0
  328. package/dist/maps/gl/placement.js.map +1 -0
  329. package/dist/maps/gl/renderer.d.ts +384 -0
  330. package/dist/maps/gl/renderer.d.ts.map +1 -0
  331. package/dist/maps/gl/renderer.js +1184 -0
  332. package/dist/maps/gl/renderer.js.map +1 -0
  333. package/dist/maps/gl/shaders.d.ts +121 -0
  334. package/dist/maps/gl/shaders.d.ts.map +1 -0
  335. package/dist/maps/gl/shaders.js +453 -0
  336. package/dist/maps/gl/shaders.js.map +1 -0
  337. package/dist/maps/gl/store.d.ts +125 -0
  338. package/dist/maps/gl/store.d.ts.map +1 -0
  339. package/dist/maps/gl/store.js +512 -0
  340. package/dist/maps/gl/store.js.map +1 -0
  341. package/dist/maps/gl/text.d.ts +283 -0
  342. package/dist/maps/gl/text.d.ts.map +1 -0
  343. package/dist/maps/gl/text.js +698 -0
  344. package/dist/maps/gl/text.js.map +1 -0
  345. package/dist/maps/gl/view.d.ts +345 -0
  346. package/dist/maps/gl/view.d.ts.map +1 -0
  347. package/dist/maps/gl/view.js +1209 -0
  348. package/dist/maps/gl/view.js.map +1 -0
  349. package/dist/maps/icons.d.ts +32 -0
  350. package/dist/maps/icons.d.ts.map +1 -0
  351. package/dist/maps/icons.js +151 -0
  352. package/dist/maps/icons.js.map +1 -0
  353. package/dist/maps/index.d.ts +3 -1
  354. package/dist/maps/index.d.ts.map +1 -1
  355. package/dist/maps/index.js +218 -52
  356. package/dist/maps/index.js.map +1 -1
  357. package/dist/maps/labels.d.ts +91 -18
  358. package/dist/maps/labels.d.ts.map +1 -1
  359. package/dist/maps/labels.js +376 -140
  360. package/dist/maps/labels.js.map +1 -1
  361. package/dist/maps/node.d.ts +179 -56
  362. package/dist/maps/node.d.ts.map +1 -1
  363. package/dist/maps/node.js +663 -537
  364. package/dist/maps/node.js.map +1 -1
  365. package/dist/maps/overlay.d.ts +72 -9
  366. package/dist/maps/overlay.d.ts.map +1 -1
  367. package/dist/maps/overlay.js +108 -28
  368. package/dist/maps/overlay.js.map +1 -1
  369. package/dist/maps/paint.d.ts +3 -0
  370. package/dist/maps/paint.d.ts.map +1 -1
  371. package/dist/maps/paint.js.map +1 -1
  372. package/dist/maps/proj.d.ts +62 -0
  373. package/dist/maps/proj.d.ts.map +1 -1
  374. package/dist/maps/proj.js +101 -0
  375. package/dist/maps/proj.js.map +1 -1
  376. package/dist/maps/renderer.d.ts +69 -0
  377. package/dist/maps/renderer.d.ts.map +1 -0
  378. package/dist/maps/renderer.js +66 -0
  379. package/dist/maps/renderer.js.map +1 -0
  380. package/dist/maps/sources.d.ts +30 -6
  381. package/dist/maps/sources.d.ts.map +1 -1
  382. package/dist/maps/sources.js +22 -3
  383. package/dist/maps/sources.js.map +1 -1
  384. package/dist/maps/style.d.ts +35 -0
  385. package/dist/maps/style.d.ts.map +1 -1
  386. package/dist/maps/style.js.map +1 -1
  387. package/dist/maps/styles.d.ts +12 -0
  388. package/dist/maps/styles.d.ts.map +1 -1
  389. package/dist/maps/styles.js +120 -6
  390. package/dist/maps/styles.js.map +1 -1
  391. package/dist/maps/theme.d.ts +19 -0
  392. package/dist/maps/theme.d.ts.map +1 -0
  393. package/dist/maps/theme.js +44 -0
  394. package/dist/maps/theme.js.map +1 -0
  395. package/dist/maps/tiles.d.ts +147 -27
  396. package/dist/maps/tiles.d.ts.map +1 -1
  397. package/dist/maps/tiles.js +221 -54
  398. package/dist/maps/tiles.js.map +1 -1
  399. package/dist/maps/types.d.ts +213 -21
  400. package/dist/maps/types.d.ts.map +1 -1
  401. package/dist/markdown/expressions.d.ts +1 -1
  402. package/dist/markdown/expressions.d.ts.map +1 -1
  403. package/dist/markdown/expressions.js.map +1 -1
  404. package/dist/markdown/index.d.ts +7 -6
  405. package/dist/markdown/index.d.ts.map +1 -1
  406. package/dist/markdown/index.js +121 -50
  407. package/dist/markdown/index.js.map +1 -1
  408. package/dist/markdown/spans.d.ts +1 -1
  409. package/dist/markdown/spans.d.ts.map +1 -1
  410. package/dist/markdown/spans.js +6 -0
  411. package/dist/markdown/spans.js.map +1 -1
  412. package/dist/media-player/index.d.ts +11 -3
  413. package/dist/media-player/index.d.ts.map +1 -1
  414. package/dist/media-player/index.js +13 -2
  415. package/dist/media-player/index.js.map +1 -1
  416. package/dist/qml/containers.d.ts.map +1 -1
  417. package/dist/qml/containers.js +6 -1
  418. package/dist/qml/containers.js.map +1 -1
  419. package/dist/qml/interaction.d.ts.map +1 -1
  420. package/dist/qml/interaction.js +38 -5
  421. package/dist/qml/interaction.js.map +1 -1
  422. package/dist/qml/layouts.d.ts.map +1 -1
  423. package/dist/qml/layouts.js +21 -6
  424. package/dist/qml/layouts.js.map +1 -1
  425. package/dist/qml/qtquick.d.ts.map +1 -1
  426. package/dist/qml/qtquick.js +9 -2
  427. package/dist/qml/qtquick.js.map +1 -1
  428. package/dist/qml/react.d.ts.map +1 -1
  429. package/dist/qml/react.js +9 -7
  430. package/dist/qml/react.js.map +1 -1
  431. package/dist/reorder/clock.d.ts +7 -0
  432. package/dist/reorder/clock.d.ts.map +1 -0
  433. package/dist/reorder/clock.js +26 -0
  434. package/dist/reorder/clock.js.map +1 -0
  435. package/dist/reorder/index.d.ts +25 -3
  436. package/dist/reorder/index.d.ts.map +1 -1
  437. package/dist/reorder/index.js +64 -19
  438. package/dist/reorder/index.js.map +1 -1
  439. package/dist/rich-text-editor/clipboard.d.ts +23 -0
  440. package/dist/rich-text-editor/clipboard.d.ts.map +1 -0
  441. package/dist/rich-text-editor/clipboard.js +307 -0
  442. package/dist/rich-text-editor/clipboard.js.map +1 -0
  443. package/dist/rich-text-editor/collab.d.ts +32 -0
  444. package/dist/rich-text-editor/collab.d.ts.map +1 -0
  445. package/dist/rich-text-editor/collab.js +55 -0
  446. package/dist/rich-text-editor/collab.js.map +1 -0
  447. package/dist/rich-text-editor/commands.d.ts +50 -0
  448. package/dist/rich-text-editor/commands.d.ts.map +1 -0
  449. package/dist/rich-text-editor/commands.js +376 -0
  450. package/dist/rich-text-editor/commands.js.map +1 -0
  451. package/dist/rich-text-editor/drag.d.ts +68 -0
  452. package/dist/rich-text-editor/drag.d.ts.map +1 -0
  453. package/dist/rich-text-editor/drag.js +148 -0
  454. package/dist/rich-text-editor/drag.js.map +1 -0
  455. package/dist/rich-text-editor/html.d.ts +145 -0
  456. package/dist/rich-text-editor/html.d.ts.map +1 -0
  457. package/dist/rich-text-editor/html.js +516 -0
  458. package/dist/rich-text-editor/html.js.map +1 -0
  459. package/dist/rich-text-editor/index.d.ts +252 -0
  460. package/dist/rich-text-editor/index.d.ts.map +1 -0
  461. package/dist/rich-text-editor/index.js +856 -0
  462. package/dist/rich-text-editor/index.js.map +1 -0
  463. package/dist/rich-text-editor/inline.d.ts +94 -0
  464. package/dist/rich-text-editor/inline.d.ts.map +1 -0
  465. package/dist/rich-text-editor/inline.js +252 -0
  466. package/dist/rich-text-editor/inline.js.map +1 -0
  467. package/dist/rich-text-editor/keymap.d.ts +71 -0
  468. package/dist/rich-text-editor/keymap.d.ts.map +1 -0
  469. package/dist/rich-text-editor/keymap.js +394 -0
  470. package/dist/rich-text-editor/keymap.js.map +1 -0
  471. package/dist/rich-text-editor/keys.d.ts +40 -0
  472. package/dist/rich-text-editor/keys.d.ts.map +1 -0
  473. package/dist/rich-text-editor/keys.js +202 -0
  474. package/dist/rich-text-editor/keys.js.map +1 -0
  475. package/dist/rich-text-editor/look.d.ts +71 -0
  476. package/dist/rich-text-editor/look.d.ts.map +1 -0
  477. package/dist/rich-text-editor/look.js +342 -0
  478. package/dist/rich-text-editor/look.js.map +1 -0
  479. package/dist/rich-text-editor/markdown.d.ts +18 -0
  480. package/dist/rich-text-editor/markdown.d.ts.map +1 -0
  481. package/dist/rich-text-editor/markdown.js +496 -0
  482. package/dist/rich-text-editor/markdown.js.map +1 -0
  483. package/dist/rich-text-editor/marks.d.ts +9 -0
  484. package/dist/rich-text-editor/marks.d.ts.map +1 -0
  485. package/dist/rich-text-editor/marks.js +83 -0
  486. package/dist/rich-text-editor/marks.js.map +1 -0
  487. package/dist/rich-text-editor/nodes.d.ts +135 -0
  488. package/dist/rich-text-editor/nodes.d.ts.map +1 -0
  489. package/dist/rich-text-editor/nodes.js +397 -0
  490. package/dist/rich-text-editor/nodes.js.map +1 -0
  491. package/dist/rich-text-editor/render.d.ts +68 -0
  492. package/dist/rich-text-editor/render.d.ts.map +1 -0
  493. package/dist/rich-text-editor/render.js +518 -0
  494. package/dist/rich-text-editor/render.js.map +1 -0
  495. package/dist/rich-text-editor/schema.d.ts +16 -0
  496. package/dist/rich-text-editor/schema.d.ts.map +1 -0
  497. package/dist/rich-text-editor/schema.js +386 -0
  498. package/dist/rich-text-editor/schema.js.map +1 -0
  499. package/dist/rich-text-editor/store.d.ts +11 -0
  500. package/dist/rich-text-editor/store.d.ts.map +1 -0
  501. package/dist/rich-text-editor/store.js +43 -0
  502. package/dist/rich-text-editor/store.js.map +1 -0
  503. package/dist/rich-text-editor/suggest.d.ts +127 -0
  504. package/dist/rich-text-editor/suggest.d.ts.map +1 -0
  505. package/dist/rich-text-editor/suggest.js +0 -0
  506. package/dist/rich-text-editor/suggest.js.map +1 -0
  507. package/dist/rich-text-editor/tables.d.ts +41 -0
  508. package/dist/rich-text-editor/tables.d.ts.map +1 -0
  509. package/dist/rich-text-editor/tables.js +204 -0
  510. package/dist/rich-text-editor/tables.js.map +1 -0
  511. package/dist/rich-text-editor/toolbar.d.ts +58 -0
  512. package/dist/rich-text-editor/toolbar.d.ts.map +1 -0
  513. package/dist/rich-text-editor/toolbar.js +548 -0
  514. package/dist/rich-text-editor/toolbar.js.map +1 -0
  515. package/dist/rich-text-editor/view.d.ts +368 -0
  516. package/dist/rich-text-editor/view.d.ts.map +1 -0
  517. package/dist/rich-text-editor/view.js +1968 -0
  518. package/dist/rich-text-editor/view.js.map +1 -0
  519. package/dist/rich-text-editor/virtual.d.ts +54 -0
  520. package/dist/rich-text-editor/virtual.d.ts.map +1 -0
  521. package/dist/rich-text-editor/virtual.js +279 -0
  522. package/dist/rich-text-editor/virtual.js.map +1 -0
  523. package/dist/richtext/node.d.ts +71 -4
  524. package/dist/richtext/node.d.ts.map +1 -1
  525. package/dist/richtext/node.js +233 -28
  526. package/dist/richtext/node.js.map +1 -1
  527. package/dist/richtext/runs.d.ts +13 -8
  528. package/dist/richtext/runs.d.ts.map +1 -1
  529. package/dist/richtext/runs.js +18 -8
  530. package/dist/richtext/runs.js.map +1 -1
  531. package/dist/table/index.d.ts.map +1 -1
  532. package/dist/table/index.js +23 -0
  533. package/dist/table/index.js.map +1 -1
  534. package/dist/table/rows.d.ts +3 -2
  535. package/dist/table/rows.d.ts.map +1 -1
  536. package/dist/table/rows.js +20 -6
  537. package/dist/table/rows.js.map +1 -1
  538. package/dist/terminal/backends.d.ts +4 -1
  539. package/dist/terminal/backends.d.ts.map +1 -1
  540. package/dist/terminal/backends.js.map +1 -1
  541. package/dist/terminal/index.d.ts +18 -7
  542. package/dist/terminal/index.d.ts.map +1 -1
  543. package/dist/terminal/index.js +32 -11
  544. package/dist/terminal/index.js.map +1 -1
  545. package/dist/terminal/vt/pty.d.ts +13 -2
  546. package/dist/terminal/vt/pty.d.ts.map +1 -1
  547. package/dist/terminal/vt/pty.js +18 -3
  548. package/dist/terminal/vt/pty.js.map +1 -1
  549. package/dist/terminal-output/index.d.ts.map +1 -1
  550. package/dist/terminal-output/index.js +6 -1
  551. package/dist/terminal-output/index.js.map +1 -1
  552. package/dist/three/canvas.d.ts.map +1 -1
  553. package/dist/three/canvas.js +85 -7
  554. package/dist/three/canvas.js.map +1 -1
  555. package/dist/three/events.d.ts +22 -4
  556. package/dist/three/events.d.ts.map +1 -1
  557. package/dist/three/events.js +34 -4
  558. package/dist/three/events.js.map +1 -1
  559. package/dist/tree/index.d.ts.map +1 -1
  560. package/dist/tree/index.js +17 -0
  561. package/dist/tree/index.js.map +1 -1
  562. package/package.json +59 -31
  563. package/src/charts/node.ts +68 -28
  564. package/src/charts/render.ts +120 -30
  565. package/src/code/index.ts +3 -1
  566. package/src/code-editor/completion.ts +3 -2
  567. package/src/code-editor/index.ts +19 -0
  568. package/src/code-editor/node.ts +1574 -184
  569. package/src/code-language/languages/glsl.ts +12 -2
  570. package/src/code-language/languages/javascript.ts +21 -4
  571. package/src/code-language/languages/json.ts +12 -2
  572. package/src/code-language/languages/shell.ts +12 -2
  573. package/src/code-language/languages/sql.ts +22 -2
  574. package/src/code-language/stream.ts +257 -17
  575. package/src/code-language/types.ts +5 -4
  576. package/src/codeblock/index.ts +20 -3
  577. package/src/embed/client.ts +102 -8
  578. package/src/embed/index.ts +2 -0
  579. package/src/flow/draw.ts +167 -41
  580. package/src/flow/gl/color.ts +85 -0
  581. package/src/flow/gl/index.ts +342 -0
  582. package/src/flow/gl/pack.ts +585 -0
  583. package/src/flow/gl/renderer.ts +679 -0
  584. package/src/flow/gl/shaders.ts +371 -0
  585. package/src/flow/gl/text.ts +1295 -0
  586. package/src/flow/index.ts +794 -67
  587. package/src/flow/node.ts +2496 -1256
  588. package/src/flow/paint.ts +511 -0
  589. package/src/flow/paths.ts +80 -15
  590. package/src/flow/scene.ts +2199 -0
  591. package/src/flow/types.ts +113 -1
  592. package/src/html/controls.ts +73 -2
  593. package/src/html/css/calc.ts +385 -0
  594. package/src/html/css/cascade.ts +1403 -62
  595. package/src/html/css/color.ts +755 -0
  596. package/src/html/css/content.ts +417 -0
  597. package/src/html/css/counter-styles.ts +973 -0
  598. package/src/html/css/decode.ts +130 -0
  599. package/src/html/css/parse.ts +1514 -160
  600. package/src/html/css/style.ts +4102 -222
  601. package/src/html/css/ua.ts +58 -12
  602. package/src/html/css/values.ts +150 -50
  603. package/src/html/css/vars.ts +348 -0
  604. package/src/html/dom.ts +284 -17
  605. package/src/html/fonts.ts +641 -0
  606. package/src/html/gif.ts +233 -0
  607. package/src/html/index.ts +180 -20
  608. package/src/html/layout/block.ts +3456 -230
  609. package/src/html/layout/boxes.ts +2100 -190
  610. package/src/html/layout/cache.ts +289 -0
  611. package/src/html/layout/collapse.ts +317 -0
  612. package/src/html/layout/css-grid.ts +1063 -0
  613. package/src/html/layout/flex.ts +1115 -106
  614. package/src/html/layout/floats.ts +128 -14
  615. package/src/html/layout/grid-lines.ts +141 -0
  616. package/src/html/layout/grid.ts +181 -0
  617. package/src/html/layout/inline.ts +3943 -192
  618. package/src/html/layout/shaping.ts +140 -0
  619. package/src/html/layout/table.ts +696 -186
  620. package/src/html/layout/tracks.ts +437 -0
  621. package/src/html/node.ts +1486 -121
  622. package/src/html/paint.ts +4293 -169
  623. package/src/html/resources.ts +161 -50
  624. package/src/html/surfaces.ts +81 -0
  625. package/src/html/svg.ts +493 -0
  626. package/src/html/url.ts +86 -0
  627. package/src/index.ts +4 -0
  628. package/src/internal/collate.ts +12 -0
  629. package/src/{markdown → internal/markdown}/ast.ts +35 -7
  630. package/src/{markdown → internal/markdown}/parse.ts +288 -35
  631. package/src/internal/markdown/stringify.ts +772 -0
  632. package/src/internal/prewarm.ts +45 -0
  633. package/src/internal/scroll.ts +5 -3
  634. package/src/internal/sdf.ts +227 -0
  635. package/src/internal/splice.ts +25 -0
  636. package/src/internal/window.ts +36 -5
  637. package/src/maps/anchors.ts +913 -0
  638. package/src/maps/controller.ts +1084 -0
  639. package/src/maps/gl/buckets.ts +461 -0
  640. package/src/maps/gl/build-worker.ts +66 -0
  641. package/src/maps/gl/color.ts +62 -0
  642. package/src/maps/gl/cover.ts +205 -0
  643. package/src/maps/gl/index.ts +23 -0
  644. package/src/maps/gl/markers.ts +83 -0
  645. package/src/maps/gl/overlays.ts +379 -0
  646. package/src/maps/gl/pane.ts +42 -0
  647. package/src/maps/gl/placement.ts +968 -0
  648. package/src/maps/gl/renderer.ts +1660 -0
  649. package/src/maps/gl/shaders.ts +489 -0
  650. package/src/maps/gl/store.ts +615 -0
  651. package/src/maps/gl/text.ts +868 -0
  652. package/src/maps/gl/view.ts +1489 -0
  653. package/src/maps/icons.ts +183 -0
  654. package/src/maps/index.ts +274 -81
  655. package/src/maps/labels.ts +457 -144
  656. package/src/maps/node.ts +832 -665
  657. package/src/maps/overlay.ts +148 -43
  658. package/src/maps/paint.ts +3 -0
  659. package/src/maps/proj.ts +118 -0
  660. package/src/maps/renderer.ts +155 -0
  661. package/src/maps/sources.ts +43 -6
  662. package/src/maps/style.ts +32 -0
  663. package/src/maps/styles.ts +215 -4
  664. package/src/maps/theme.ts +51 -0
  665. package/src/maps/tiles.ts +253 -62
  666. package/src/maps/types.ts +213 -21
  667. package/src/markdown/expressions.ts +5 -1
  668. package/src/markdown/index.ts +163 -78
  669. package/src/markdown/spans.ts +6 -1
  670. package/src/media-player/index.ts +18 -4
  671. package/src/qml/containers.tsx +6 -1
  672. package/src/qml/interaction.tsx +42 -5
  673. package/src/qml/layouts.tsx +21 -6
  674. package/src/qml/qtquick.tsx +9 -2
  675. package/src/qml/react.tsx +7 -5
  676. package/src/reorder/clock.ts +27 -0
  677. package/src/reorder/index.ts +100 -27
  678. package/src/rich-text-editor/clipboard.ts +439 -0
  679. package/src/rich-text-editor/collab.ts +91 -0
  680. package/src/rich-text-editor/commands.ts +448 -0
  681. package/src/rich-text-editor/dom-globals.d.ts +23 -0
  682. package/src/rich-text-editor/drag.ts +211 -0
  683. package/src/rich-text-editor/html.ts +619 -0
  684. package/src/rich-text-editor/index.ts +1364 -0
  685. package/src/rich-text-editor/inline.ts +345 -0
  686. package/src/rich-text-editor/keymap.ts +510 -0
  687. package/src/rich-text-editor/keys.ts +228 -0
  688. package/src/rich-text-editor/look.ts +427 -0
  689. package/src/rich-text-editor/markdown.ts +653 -0
  690. package/src/rich-text-editor/marks.ts +101 -0
  691. package/src/rich-text-editor/nodes.ts +497 -0
  692. package/src/rich-text-editor/render.ts +837 -0
  693. package/src/rich-text-editor/schema.ts +431 -0
  694. package/src/rich-text-editor/store.ts +39 -0
  695. package/src/rich-text-editor/suggest.ts +597 -0
  696. package/src/rich-text-editor/tables.ts +272 -0
  697. package/src/rich-text-editor/toolbar.ts +724 -0
  698. package/src/rich-text-editor/view.ts +2287 -0
  699. package/src/rich-text-editor/virtual.ts +372 -0
  700. package/src/richtext/node.ts +294 -44
  701. package/src/richtext/runs.ts +23 -12
  702. package/src/table/index.ts +29 -0
  703. package/src/table/rows.ts +18 -8
  704. package/src/terminal/backends.ts +4 -1
  705. package/src/terminal/index.ts +47 -15
  706. package/src/terminal/vt/pty.ts +16 -2
  707. package/src/terminal-output/index.ts +6 -1
  708. package/src/three/canvas.ts +102 -8
  709. package/src/three/events.ts +49 -9
  710. package/src/tree/index.ts +19 -0
  711. package/dist/markdown/ast.d.ts.map +0 -1
  712. package/dist/markdown/ast.js +0 -17
  713. package/dist/markdown/ast.js.map +0 -1
  714. package/dist/markdown/parse.d.ts.map +0 -1
  715. package/dist/markdown/parse.js.map +0 -1
  716. package/dist/markdown/tags.d.ts.map +0 -1
  717. package/dist/markdown/tags.js.map +0 -1
  718. /package/dist/{markdown → internal/markdown}/parse.d.ts +0 -0
  719. /package/dist/{markdown → internal/markdown}/tags.d.ts +0 -0
  720. /package/dist/{markdown → internal/markdown}/tags.js +0 -0
  721. /package/src/{markdown → internal/markdown}/tags.ts +0 -0
@@ -0,0 +1,615 @@
1
+ // Tiles for the GL renderer: loaded, parsed, bucketed, and let go.
2
+ //
3
+ // The retained renderer's cache has three layers (data, surfaces, labels);
4
+ // this one has one, because a tile's buckets are valid for every camera and
5
+ // every palette. What it keeps per tile is the bucket arrays — a few hundred
6
+ // kilobytes where the retained cache keeps two 4 MB surfaces — and the only
7
+ // thing that invalidates them is a style whose *filters* changed, since the
8
+ // filters are what decide which features a layer draws. Colours, widths and
9
+ // zoom ranges are uniforms and gates, read every frame; a light-to-dark
10
+ // switch rebuilds nothing.
11
+ //
12
+ // Building is the one cost a tile has, and there are two places to pay it.
13
+ // On this thread, `pump` builds until the frame's deadline — always at
14
+ // least one tile, the retained renderer's budget rule — and a dense city
15
+ // tile is 5–20 ms of it, which is most of a 50 Hz frame. On **worker
16
+ // threads** (`workers > 0`) this thread only dispatches: the bytes go over
17
+ // by copy, the buckets come back by transfer, and the main thread's whole
18
+ // cost for a tile is its upload. The bucket format is what makes the second
19
+ // one free to have — two ArrayBuffers and a small draw list, nothing that
20
+ // needs a serializer.
21
+ import { parseVectorTile } from '../sources.js';
22
+ import type { MapSource, TileData } from '../sources.js';
23
+ import { FILL_DEPTH } from '../proj.js';
24
+ import type { TileId } from '../proj.js';
25
+ import type { PreparedStyle } from '../paint.js';
26
+ import type { MapStyleLayer } from '../style.js';
27
+ import { buildTileBuckets, rasterTileData } from './buckets.js';
28
+ import type { GlTileData } from './buckets.js';
29
+ import type { BuildRequest } from './build-worker.js';
30
+ import type { TileLookup } from './cover.js';
31
+
32
+ type State = 'loading' | 'loaded' | 'building' | 'ready' | 'empty' | 'failed';
33
+
34
+ interface Entry {
35
+ tile: TileId;
36
+ state: State;
37
+ /** The tile's bytes, kept so a style change can rebuild without a fetch. */
38
+ bytes: Uint8Array | null;
39
+ data: GlTileData | null;
40
+ /** The frame the cover last asked for this tile — the eviction order. */
41
+ used: number;
42
+ retryAt: number;
43
+ failures: number;
44
+ /** The worker job whose answer this entry is waiting for. */
45
+ job: number;
46
+ /** Cancels the load in flight, while there is one. */
47
+ abort: (() => void) | null;
48
+ }
49
+
50
+ export interface GlTileStoreOptions {
51
+ source: MapSource;
52
+ /** What the source is called in its requests and its errors —
53
+ * `source-<index>` when it has no `id`. */
54
+ sourceId?: string;
55
+ prepared: PreparedStyle;
56
+ /**
57
+ * Called once per failed load, with whatever the source threw — what
58
+ * `<Map onTileError>` hears. A load aborted because the map stopped
59
+ * wanting the tile is not a failure, whatever it answers after that.
60
+ */
61
+ onError?: (error: unknown, tile: TileId & { sourceId: string }) => void;
62
+ /** A load landed or a build finished: a frame is worth drawing. */
63
+ onChange: () => void;
64
+ /** Loads in flight at once. 8 by default. */
65
+ concurrency?: number;
66
+ /** Tiles kept, bytes and buckets both. 256 by default. */
67
+ capacity?: number;
68
+ /**
69
+ * Build buckets on this many worker threads. `0` (the default) builds on
70
+ * this thread under `pump`'s budget. Falls back to that when the runtime
71
+ * has no `worker_threads`.
72
+ */
73
+ workers?: number;
74
+ }
75
+
76
+ const globals = globalThis as {
77
+ performance?: { now(): number };
78
+ AbortController?: new () => { signal: { aborted: boolean }; abort(): void };
79
+ };
80
+ const now = (): number => globals.performance?.now() ?? Date.now();
81
+ const key = (t: TileId): string => `${t.z}/${t.x}/${t.y}`;
82
+
83
+ export class GlTileStore implements TileLookup {
84
+ private readonly _source: MapSource;
85
+ private readonly _sourceId: string;
86
+ private readonly _onError:
87
+ ((error: unknown, tile: TileId & { sourceId: string }) => void) | undefined;
88
+ private _prepared: PreparedStyle;
89
+ private _style: { id: number; layers: MapStyleLayer[] };
90
+ private readonly _onChange: () => void;
91
+ private readonly _concurrency: number;
92
+ private readonly _capacity: number;
93
+ private readonly _entries = new Map<string, Entry>();
94
+ /** Loaded tiles waiting for a build, oldest first. */
95
+ private _queue: Entry[] = [];
96
+ private _waiting: Entry[] = [];
97
+ private _inFlight = 0;
98
+ private _frame = 0;
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;
103
+ private readonly _pool: BuildPool | null;
104
+ /** Bucket builds and their cost on this thread, for a HUD. */
105
+ built = 0;
106
+ buildMs = 0;
107
+
108
+ constructor(options: GlTileStoreOptions) {
109
+ this._source = options.source;
110
+ this._sourceId = options.sourceId ?? options.source.id ?? 'source-0';
111
+ this._onError = options.onError;
112
+ this._prepared = options.prepared;
113
+ this._style = {
114
+ id: 1,
115
+ layers: options.prepared.layers.map((l) => l.layer),
116
+ };
117
+ this._onChange = options.onChange;
118
+ this._concurrency = options.concurrency ?? 8;
119
+ this._capacity = options.capacity ?? 256;
120
+ const workers = options.workers ?? 0;
121
+ this._pool =
122
+ workers > 0 ? new BuildPool(workers, () => this._onChange()) : null;
123
+ }
124
+
125
+ get source(): MapSource {
126
+ return this._source;
127
+ }
128
+
129
+ /** Tiles loaded and waiting for (or in) a build. */
130
+ get building(): number {
131
+ let n = this._queue.length;
132
+ for (const entry of this._entries.values())
133
+ if (entry.state === 'building') n++;
134
+ return n;
135
+ }
136
+
137
+ /** Tiles asked for and not yet answered. */
138
+ get loading(): number {
139
+ return this._inFlight + this._waiting.length;
140
+ }
141
+
142
+ /** Whether builds happen off this thread. */
143
+ get threaded(): boolean {
144
+ return this._pool?.ready === true;
145
+ }
146
+
147
+ get(tile: TileId): GlTileData | null | undefined {
148
+ const entry = this._entries.get(key(tile));
149
+ if (!entry) return undefined;
150
+ entry.used = this._frame;
151
+ if (entry.state === 'ready') return entry.data;
152
+ if (entry.state === 'empty') return null;
153
+ // A tile being rebuilt for a new style keeps drawing its old buckets
154
+ // until the new ones exist, so a restyle never opens a hole.
155
+ return entry.data ?? undefined;
156
+ }
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
+
185
+ /** A new frame: what the cover asks for from here on is this frame's. */
186
+ tick(): void {
187
+ this._frame++;
188
+ }
189
+
190
+ /** Ask for tiles, centre-out. Already-known tiles cost a lookup. */
191
+ want(tiles: readonly TileId[]): void {
192
+ const at = now();
193
+ for (const tile of tiles) {
194
+ const k = key(tile);
195
+ let entry = this._entries.get(k);
196
+ if (entry && !(entry.state === 'failed' && at >= entry.retryAt)) continue;
197
+ if (!entry) {
198
+ entry = {
199
+ tile,
200
+ state: 'loading',
201
+ bytes: null,
202
+ data: null,
203
+ used: this._frame,
204
+ retryAt: 0,
205
+ failures: 0,
206
+ job: 0,
207
+ abort: null,
208
+ };
209
+ this._entries.set(k, entry);
210
+ }
211
+ entry.state = 'loading';
212
+ this._waiting.push(entry);
213
+ }
214
+ this._drain();
215
+ }
216
+
217
+ private _drain(): void {
218
+ while (this._inFlight < this._concurrency && this._waiting.length > 0) {
219
+ const entry = this._waiting.shift()!;
220
+ // Asked for, then scrolled away from before a slot came free.
221
+ if (entry.used < this._frame - 2) {
222
+ this._entries.delete(key(entry.tile));
223
+ continue;
224
+ }
225
+ this._load(entry);
226
+ }
227
+ }
228
+
229
+ private _load(entry: Entry): void {
230
+ this._inFlight++;
231
+ // A real `AbortController` where the runtime has one: `fetch` rejects a
232
+ // signal that is not an instance of `AbortSignal`, so a look-alike would
233
+ // fail every load a source makes the documented way (`../tiles.ts`).
234
+ const controller = globals.AbortController
235
+ ? new globals.AbortController()
236
+ : null;
237
+ let aborted = false;
238
+ entry.abort = () => {
239
+ aborted = true;
240
+ controller?.abort();
241
+ };
242
+ const { z, x, y } = entry.tile;
243
+ const sourceId = this._sourceId;
244
+ Promise.resolve()
245
+ .then(() =>
246
+ this._source.load({ z, x, y, sourceId, signal: controller?.signal }),
247
+ )
248
+ .then(
249
+ (data: TileData) => {
250
+ if (this._disposed || aborted) return;
251
+ entry.failures = 0;
252
+ this._held = null;
253
+ if (data && data.kind === 'vector' && data.data.length > 0) {
254
+ entry.bytes = data.data;
255
+ entry.state = 'loaded';
256
+ this._queue.push(entry);
257
+ } else if (data && data.kind === 'raster' && data.width > 0) {
258
+ // An image needs no building — it is its own texture — and no
259
+ // style: nothing to queue, and nothing a restyle rebuilds.
260
+ entry.data = rasterTileData(data.width, data.height, data.data);
261
+ entry.state = 'ready';
262
+ } else {
263
+ entry.state = 'empty';
264
+ }
265
+ },
266
+ (error: unknown) => {
267
+ // Whatever an aborted load answers — its `AbortError` included —
268
+ // is not news: the map stopped wanting the tile.
269
+ if (this._disposed || aborted) return;
270
+ entry.failures++;
271
+ entry.state = 'failed';
272
+ // 0.5 s, 1, 2, 4 … up to 30 s: the retained cache's backoff, so a
273
+ // source that is down costs nothing and a blip repairs itself.
274
+ entry.retryAt =
275
+ now() + Math.min(30_000, 500 * 2 ** (entry.failures - 1));
276
+ // A failed tile draws nothing, so a map whose tiles all fail looks
277
+ // exactly like a map that is still loading: somebody has to be
278
+ // told, once per failure, as the retained cache tells them.
279
+ this._onError?.(error, { z, x, y, sourceId });
280
+ },
281
+ )
282
+ .finally(() => {
283
+ this._inFlight--;
284
+ entry.abort = null;
285
+ if (this._disposed) return;
286
+ this._drain();
287
+ if (!aborted) this._onChange();
288
+ });
289
+ }
290
+
291
+ /**
292
+ * How many of `tiles` failed to load and are waiting on a retry — the
293
+ * frame's `errors`.
294
+ */
295
+ failedAmong(tiles: readonly TileId[]): number {
296
+ let n = 0;
297
+ for (const tile of tiles) {
298
+ if (this._entries.get(key(tile))?.state === 'failed') n++;
299
+ }
300
+ return n;
301
+ }
302
+
303
+ /**
304
+ * Stop loading: every load in flight is aborted and forgotten, and nothing
305
+ * waiting is started. For a source taken off the map, whose tiles that
306
+ * have arrived stay, so switching back to it is free — the retained
307
+ * cache's rule.
308
+ */
309
+ abortLoads(): void {
310
+ for (const [k, entry] of this._entries) {
311
+ if (entry.state !== 'loading') continue;
312
+ entry.abort?.();
313
+ this._entries.delete(k);
314
+ }
315
+ this._waiting = [];
316
+ }
317
+
318
+ /** Build every tile again from its bytes — `refresh()`, after a style
319
+ * the application edited in place. The old buckets draw until then. */
320
+ rebuild(): void {
321
+ this._style = { ...this._style, id: this._style.id + 1 };
322
+ this._requeue();
323
+ }
324
+
325
+ /**
326
+ * Work through the loaded tiles. Answers whether more are waiting on this
327
+ * thread, which is the caller's cue for another frame.
328
+ *
329
+ * With workers, everything waiting is dispatched and nothing is built
330
+ * here: a finished build calls `onChange` like a finished load does. On
331
+ * this thread, tiles are built until `deadline` — always at least one, or
332
+ * a budget smaller than one tile would build nothing forever.
333
+ */
334
+ pump(deadline: number): boolean {
335
+ const pool = this._pool;
336
+ if (pool && !pool.failed) {
337
+ if (!pool.ready) return this._queue.length > 0;
338
+ while (this._queue.length > 0 && pool.hasRoom()) {
339
+ const entry = this._queue.shift()!;
340
+ if (!entry.bytes) continue;
341
+ entry.state = 'building';
342
+ const style = this._style.id;
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
+ );
365
+ }
366
+ return false;
367
+ }
368
+ let first = true;
369
+ while (this._queue.length > 0 && (first || now() < deadline)) {
370
+ first = false;
371
+ const entry = this._queue.shift()!;
372
+ if (!entry.bytes) continue;
373
+ this._held = null;
374
+ const started = now();
375
+ try {
376
+ entry.data = buildTileBuckets(
377
+ parseVectorTile(entry.bytes),
378
+ this._prepared,
379
+ entry.tile,
380
+ );
381
+ entry.state = 'ready';
382
+ } catch {
383
+ entry.state = 'empty';
384
+ }
385
+ this.buildMs += now() - started;
386
+ this.built++;
387
+ }
388
+ return this._queue.length > 0;
389
+ }
390
+
391
+ /**
392
+ * A new style. Buckets are rebuilt only if the new one would select
393
+ * different features — a different layer list or different filters —
394
+ * and until a tile is rebuilt its old buckets keep drawing.
395
+ */
396
+ setStyle(prepared: PreparedStyle): void {
397
+ const same = structureOf(prepared) === structureOf(this._prepared);
398
+ this._prepared = prepared;
399
+ if (same) return;
400
+ this._style = {
401
+ id: this._style.id + 1,
402
+ layers: prepared.layers.map((l) => l.layer),
403
+ };
404
+ this._requeue();
405
+ }
406
+
407
+ /** Every tile with bytes back on the build queue, most recently drawn
408
+ * first; each keeps drawing its old buckets until its new ones exist. */
409
+ private _requeue(): void {
410
+ this._queue = [];
411
+ for (const entry of this._entries.values()) {
412
+ if (
413
+ entry.bytes &&
414
+ (entry.state === 'ready' ||
415
+ entry.state === 'loaded' ||
416
+ entry.state === 'building')
417
+ ) {
418
+ entry.state = 'loaded';
419
+ entry.job = 0;
420
+ this._queue.push(entry);
421
+ }
422
+ }
423
+ this._queue.sort((a, b) => b.used - a.used);
424
+ }
425
+
426
+ /**
427
+ * The end of a frame: cancel every load it did not want, and let go of the
428
+ * least recently drawn tiles past capacity.
429
+ *
430
+ * A tile panned or zoomed out of the cover — and the ring around it the
431
+ * cover keeps warm — would otherwise load to the end: a request nobody is
432
+ * waiting for, pointed at somebody else's servers. That is the contract
433
+ * the docs make for `request.signal`, on either renderer. A tile that
434
+ * comes back is asked for again, with a new signal.
435
+ */
436
+ evict(release: (data: GlTileData) => void): void {
437
+ for (const [k, entry] of this._entries) {
438
+ if (entry.abort && entry.used < this._frame) {
439
+ entry.abort();
440
+ this._entries.delete(k);
441
+ }
442
+ }
443
+ if (this._entries.size <= this._capacity) return;
444
+ const candidates = [...this._entries.entries()]
445
+ .filter(
446
+ ([, e]) =>
447
+ e.state !== 'loading' &&
448
+ e.state !== 'building' &&
449
+ e.used < this._frame,
450
+ )
451
+ .sort((a, b) => a[1].used - b[1].used);
452
+ let excess = this._entries.size - this._capacity;
453
+ for (const [k, entry] of candidates) {
454
+ if (excess <= 0) break;
455
+ if (entry.data) release(entry.data);
456
+ this._entries.delete(k);
457
+ this._held = null;
458
+ excess--;
459
+ }
460
+ this._queue = this._queue.filter((e) => this._entries.has(key(e.tile)));
461
+ }
462
+
463
+ dispose(release: (data: GlTileData) => void): void {
464
+ this._disposed = true;
465
+ for (const entry of this._entries.values()) {
466
+ if (entry.data) release(entry.data);
467
+ }
468
+ this._entries.clear();
469
+ this._held = null;
470
+ this._queue = [];
471
+ this._waiting = [];
472
+ this._pool?.terminate();
473
+ }
474
+ }
475
+
476
+ // --- the worker pool ---------------------------------------------------------
477
+
478
+ interface WorkerLike {
479
+ on(event: 'message' | 'error', listener: (value: unknown) => void): void;
480
+ postMessage(message: BuildRequest, transfer?: ArrayBuffer[]): void;
481
+ terminate(): unknown;
482
+ unref?(): void;
483
+ }
484
+
485
+ interface BuildResult {
486
+ job: number;
487
+ data?: GlTileData;
488
+ error?: string;
489
+ }
490
+
491
+ /** Jobs a worker may hold at once: enough to never sit idle between two
492
+ * messages, few enough that the store's queue — which is centre-out and
493
+ * reorders every frame — still decides what is built next. */
494
+ const PER_WORKER = 2;
495
+ const WORKER_THREADS = 'node:worker_threads';
496
+
497
+ class BuildPool {
498
+ ready = false;
499
+ failed = false;
500
+ private readonly _slots: {
501
+ worker: WorkerLike;
502
+ busy: number;
503
+ style: number;
504
+ }[] = [];
505
+ private readonly _jobs = new Map<number, (result: BuildResult) => void>();
506
+ private _next = 1;
507
+
508
+ constructor(count: number, onReady: () => void) {
509
+ void this._spawn(count).then(onReady);
510
+ }
511
+
512
+ private async _spawn(count: number): Promise<void> {
513
+ try {
514
+ // `URL` and `import.meta.url` reached structurally, like everything
515
+ // else runtime-only here: `src/` compiles with `types: []` and no DOM
516
+ // lib, so neither is declared. The entry has to be a URL object, not a
517
+ // string — Node reads a string as a path.
518
+ const here = (import.meta as { url?: string }).url;
519
+ const Url = (
520
+ globalThis as { URL?: new (input: string, base?: string) => object }
521
+ ).URL;
522
+ if (!here || !Url) throw new Error('no module URL to find the worker by');
523
+ const { Worker } = (await import(WORKER_THREADS)) as {
524
+ Worker: new (url: object) => WorkerLike;
525
+ };
526
+ for (let i = 0; i < count; i++) {
527
+ const worker = new Worker(new Url('./build-worker.js', here));
528
+ // An idle pool must not keep the process alive.
529
+ worker.unref?.();
530
+ const slot = { worker, busy: 0, style: 0 };
531
+ worker.on('message', (value) => {
532
+ const result = value as BuildResult;
533
+ slot.busy--;
534
+ const done = this._jobs.get(result.job);
535
+ this._jobs.delete(result.job);
536
+ done?.(result);
537
+ });
538
+ worker.on('error', () => {
539
+ this.failed = true;
540
+ });
541
+ this._slots.push(slot);
542
+ }
543
+ this.ready = true;
544
+ } catch {
545
+ this.failed = true;
546
+ }
547
+ }
548
+
549
+ hasRoom(): boolean {
550
+ return this._slots.some((s) => s.busy < PER_WORKER);
551
+ }
552
+
553
+ build(
554
+ bytes: Uint8Array,
555
+ tile: TileId,
556
+ style: { id: number; layers: MapStyleLayer[] },
557
+ done: (result: BuildResult) => void,
558
+ ): number {
559
+ let slot = this._slots[0];
560
+ for (const s of this._slots) if (s.busy < slot.busy) slot = s;
561
+ if (slot.style !== style.id) {
562
+ slot.worker.postMessage({
563
+ type: 'style',
564
+ id: style.id,
565
+ layers: style.layers,
566
+ });
567
+ slot.style = style.id;
568
+ }
569
+ const job = this._next++;
570
+ this._jobs.set(job, done);
571
+ // A copy of just this tile's bytes, transferred: the store keeps its own
572
+ // for a restyle, and a view into a larger buffer would clone all of it.
573
+ const copy = bytes.slice();
574
+ slot.busy++;
575
+ slot.worker.postMessage(
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
+ },
583
+ [copy.buffer as ArrayBuffer],
584
+ );
585
+ return job;
586
+ }
587
+
588
+ terminate(): void {
589
+ for (const slot of this._slots) void slot.worker.terminate();
590
+ this._slots.length = 0;
591
+ this._jobs.clear();
592
+ }
593
+ }
594
+
595
+ const structures = new WeakMap<PreparedStyle, string>();
596
+
597
+ /** What in a style decides a tile's buckets: which layers, over which
598
+ * source layers, with which filters — and for a label layer, which field
599
+ * its text is read from. Everything else is per frame. */
600
+ function structureOf(prepared: PreparedStyle): string {
601
+ let structure = structures.get(prepared);
602
+ if (structure === undefined) {
603
+ structure = JSON.stringify(
604
+ prepared.layers.map(({ layer }) => [
605
+ layer.type,
606
+ layer.sourceLayer,
607
+ layer.visible === false,
608
+ 'filter' in layer ? (layer.filter ?? null) : null,
609
+ layer.type === 'symbol' ? layer.textField : null,
610
+ ]),
611
+ );
612
+ structures.set(prepared, structure);
613
+ }
614
+ return structure;
615
+ }