@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,205 @@
1
+ // Which tiles a GL frame draws, and where.
2
+ //
3
+ // The same cover the retained renderer uses (`../proj.ts`'s `tileCover`),
4
+ // resolved against what is loaded. The difference is what a stand-in costs:
5
+ // the retained renderer scales an ancestor's *bitmap* over a hole, so a
6
+ // stand-in is blurry until the real tile lands; here an ancestor is the same
7
+ // geometry drawn at a larger scale, so a stand-in is exactly as sharp as its
8
+ // data. Overzoom is the same move with no hole in it — a z14 tile at zoom 20
9
+ // is the z14 tile, drawn 64 times bigger, with no sub-tiling and nothing
10
+ // rasterized — which is why this file has no overzoom code at all. A raster
11
+ // tile past its source's depth is the same move again: its data tile, drawn
12
+ // whole and stretched over its own square.
13
+ //
14
+ // **The grid is laid out on the projection's world**, `512 · 2^zoom`, and
15
+ // not on the source's tile size. That is react-x11-components#65 again, and
16
+ // the proof of concept had it back: a 256-pixel raster source laid out on a
17
+ // 256-pixel world lands at half the size of everything placed with the
18
+ // projection — markers, overlays, labels, `project()`. `tileCover` reads a
19
+ // smaller tile one level deeper instead, which puts every image at its own
20
+ // natural size on the one world everything shares.
21
+ import {
22
+ BELOW,
23
+ DEFAULT_TILE_SIZE,
24
+ FILL_DEPTH,
25
+ fillFromBelow,
26
+ tileCover,
27
+ transformFor,
28
+ } from '../proj.js';
29
+ import type { MapCamera, TileId, TilePyramid } from '../proj.js';
30
+ import type { GlTileData } from './buckets.js';
31
+ import type { RenderTile } from './renderer.js';
32
+
33
+ /** What the cover asks of a tile store: the tile's data, `null` when the
34
+ * source has no data there, `undefined` while it is still to come. */
35
+ export interface TileLookup {
36
+ get(tile: TileId): GlTileData | null | undefined;
37
+ /**
38
+ * What the store has answered for at or under a tile: `'here'` for the
39
+ * tile itself, `'below'` for only tiles under it — within `FILL_DEPTH`
40
+ * levels — and `undefined` for neither.
41
+ *
42
+ * What lets a hole's search for pieces skip the parts of the pyramid that
43
+ * hold nothing. Without it the search asks `get` for every tile down to
44
+ * that depth — which costs lookups, and stamps a tile still loading as
45
+ * used, so a load the view has left is not cancelled.
46
+ */
47
+ holds?(tile: TileId): 'here' | 'below' | undefined;
48
+ }
49
+
50
+ export interface CoverResult {
51
+ tiles: RenderTile[];
52
+ /** Tiles the view wants and the store has not answered for yet — the
53
+ * padded ring around the view included, so a pan finds its tiles. */
54
+ missing: TileId[];
55
+ /** The pyramid level the view is drawn from. */
56
+ level: number;
57
+ /** Tiles of the view drawn from their own data, from an ancestor's, and
58
+ * from their children's — the retained renderer's `ready`,
59
+ * `fromAncestor` and `fromDescendant`. */
60
+ own: number;
61
+ ancestors: number;
62
+ descendants: number;
63
+ /** Tiles of the view, stand-ins or not: its cover, less the padded ring. */
64
+ inView: TileId[];
65
+ }
66
+
67
+ /** How far up the pyramid a hole looks for a stand-in. */
68
+ const MAX_ANCESTOR = 8;
69
+
70
+ /**
71
+ * The frame's tiles, centre-out, each with its screen square and its clip.
72
+ *
73
+ * A hole — a tile still loading, or one the source has no data for — is
74
+ * covered from whichever side has geometry. Zooming out, that is the tiles
75
+ * under it: each quarter from the nearest level that has it, down to
76
+ * `FILL_DEPTH`. Whatever they leave, and the whole of a hole with nothing
77
+ * under it, is the nearest ancestor's, drawn at its own larger size and
78
+ * clipped to each gap. `AGENTS.md`'s rule for the retained cache holds here
79
+ * too: a pyramid has two neighbours.
80
+ *
81
+ * The first cut tried the ancestor first, and the children only when all
82
+ * four of them were in hand. A zoom out leaves the level it came from in
83
+ * the middle of the view, covering only part of the tiles at the edges, and
84
+ * a quick one leaves it two or three levels down: both were the background,
85
+ * with the sharper tiles in hand.
86
+ */
87
+ export function renderCover(
88
+ camera: MapCamera,
89
+ pane: { width: number; height: number },
90
+ scale: number,
91
+ pyramid: TilePyramid,
92
+ lookup: TileLookup,
93
+ options: {
94
+ /**
95
+ * Draw the view from this pyramid level rather than the one its zoom
96
+ * picks — the level being faded out, or a coarser one while adaptive
97
+ * quality is saving work. Holes still borrow from the whole pyramid.
98
+ */
99
+ level?: number;
100
+ /**
101
+ * Logical pixels of tiles to ask for around the view, which are wanted
102
+ * — so they load, and a load in flight for one is not given up — and
103
+ * not drawn. The retained renderer keeps the same ring warm.
104
+ */
105
+ padding?: number;
106
+ } = {},
107
+ ): CoverResult {
108
+ const transform = transformFor(camera, pane, DEFAULT_TILE_SIZE);
109
+ const forced = options.level;
110
+ const entries = tileCover(
111
+ transform,
112
+ forced === undefined
113
+ ? pyramid
114
+ : { ...pyramid, minZoom: forced, maxZoom: forced },
115
+ options.padding ?? 0,
116
+ );
117
+ const tiles: RenderTile[] = [];
118
+ const missing: TileId[] = [];
119
+ const inView: TileId[] = [];
120
+ const level = entries.length > 0 ? entries[0].tile.z : 0;
121
+ let own = 0;
122
+ let ancestors = 0;
123
+ let descendants = 0;
124
+
125
+ for (const entry of entries) {
126
+ const clip = {
127
+ x: entry.x * scale,
128
+ y: entry.y * scale,
129
+ width: entry.size * scale,
130
+ height: entry.size * scale,
131
+ };
132
+ const data = lookup.get(entry.tile);
133
+ if (data === undefined) missing.push(entry.tile);
134
+ const visible =
135
+ entry.x < pane.width &&
136
+ entry.y < pane.height &&
137
+ entry.x + entry.size > 0 &&
138
+ entry.y + entry.size > 0;
139
+ // The padded ring is wanted, and that is all.
140
+ if (!visible) continue;
141
+ inView.push(entry.tile);
142
+ if (data) {
143
+ tiles.push({ data, x: clip.x, y: clip.y, size: clip.width, clip });
144
+ own++;
145
+ continue;
146
+ }
147
+ // Under it: a tile with no data has nothing under it either, and past
148
+ // the pyramid's depth there is nothing to find.
149
+ const { z, x, y } = entry.tile;
150
+ const below = fillFromBelow(
151
+ entry.tile,
152
+ data === null ? 0 : Math.min(FILL_DEPTH, pyramid.maxZoom - z),
153
+ (under) => {
154
+ const held = lookup.holds ? lookup.holds(under) : 'here';
155
+ if (held === undefined) return undefined;
156
+ if (held === 'below') return BELOW;
157
+ const got = lookup.get(under);
158
+ return got === undefined ? BELOW : got;
159
+ },
160
+ );
161
+ for (const piece of below.pieces) {
162
+ const size = clip.width / piece.span;
163
+ const px = clip.x + piece.x * size;
164
+ const py = clip.y + piece.y * size;
165
+ tiles.push({
166
+ data: piece.value,
167
+ x: px,
168
+ y: py,
169
+ size,
170
+ clip: { x: px, y: py, width: size, height: size },
171
+ });
172
+ }
173
+ if (below.covered) descendants++;
174
+ if (below.gaps.length === 0) continue;
175
+ // Over it: an ancestor, the same ground `2^k` times the size, from
176
+ // `sub` cells above and to the left of this entry's square — drawn once
177
+ // for each gap, clipped to it.
178
+ for (let k = 1; k <= MAX_ANCESTOR && z - k >= pyramid.minZoom; k++) {
179
+ const ancestor = { z: z - k, x: x >> k, y: y >> k };
180
+ const stand = lookup.get(ancestor);
181
+ if (!stand) continue;
182
+ const size = clip.width * (1 << k);
183
+ const sx = clip.x - (x - (ancestor.x << k)) * clip.width;
184
+ const sy = clip.y - (y - (ancestor.y << k)) * clip.width;
185
+ for (const gap of below.gaps) {
186
+ const edge = clip.width / gap.span;
187
+ tiles.push({
188
+ data: stand,
189
+ x: sx,
190
+ y: sy,
191
+ size,
192
+ clip: {
193
+ x: clip.x + gap.x * edge,
194
+ y: clip.y + gap.y * edge,
195
+ width: edge,
196
+ height: edge,
197
+ },
198
+ });
199
+ }
200
+ ancestors++;
201
+ break;
202
+ }
203
+ }
204
+ return { tiles, missing, level, own, ancestors, descendants, inView };
205
+ }
@@ -0,0 +1,23 @@
1
+ // The GL renderer's entry: what `<Map>` loads, by dynamic import, when it
2
+ // chooses to draw a map through GL — and only then.
3
+ //
4
+ // **Registration happens when this module is evaluated**, which is the design
5
+ // here as it is in `../index.ts`: the pane element (`./pane.ts`) is
6
+ // registered by the module that is loaded when GL is chosen, so an
7
+ // application that never draws a map through GL registers nothing and
8
+ // bundles none of this. The vt terminal's `src/terminal/vt/index.ts` is the
9
+ // same shape, for the same reason.
10
+ import { registerElement, registeredElements } from 'react-x11/host';
11
+
12
+ import { GL_PANE, GlPaneNode } from './pane.js';
13
+
14
+ if (!registeredElements().includes(GL_PANE)) {
15
+ registerElement(GL_PANE, {
16
+ create: (props, app) => new GlPaneNode(props, app),
17
+ // The `<glarea>` the map is drawn in.
18
+ childrenAllowed: true,
19
+ });
20
+ }
21
+
22
+ export { GlMapPane } from './view.js';
23
+ export type { GlMapPaneProps } from './view.js';
@@ -0,0 +1,83 @@
1
+ // The markers, as the GL renderer draws them: a quad each, in one instanced
2
+ // draw, shaded by its distance to the marker's outline (`MARKER_FRAGMENT`) —
3
+ // a disc, or a pin's teardrop, and the ring around it. Which markers, in
4
+ // what order, where and in what colours is `../overlay.ts`'s, which the
5
+ // retained renderer draws from too; what is here is only the packing.
6
+ import {
7
+ MARKER_SIZE,
8
+ PIN_HEIGHT,
9
+ markerPaint,
10
+ markersInView,
11
+ } from '../overlay.js';
12
+ import type { MapMarker, OverlayPalette } from '../overlay.js';
13
+ import type { Transform } from '../proj.js';
14
+ import { parseColor, premultiplied } from './color.js';
15
+ import type { Rgba } from './color.js';
16
+
17
+ /**
18
+ * Floats per marker: the point it marks, in device pixels — a pin's tip, a
19
+ * disc's centre — its head's radius, and how far above the point the head's
20
+ * centre is (0 for a disc); the fill; the ring; the ring's width, and one
21
+ * float unused.
22
+ */
23
+ export const MARKER_INSTANCE = 14;
24
+
25
+ /** A frame's markers, bottom first. */
26
+ export interface MarkerBatch {
27
+ instances: Float32Array;
28
+ count: number;
29
+ }
30
+
31
+ const CLEAR: Rgba = [0, 0, 0, 0];
32
+
33
+ export class MarkerBatcher {
34
+ private _instances = new Float32Array(MARKER_INSTANCE * 16);
35
+ private readonly _colors = new Map<string, Rgba>();
36
+
37
+ /**
38
+ * The markers in view, bottom first. `transform` is the map's at this
39
+ * frame and `pane` its size, in logical pixels.
40
+ */
41
+ batch(
42
+ markers: readonly MapMarker[],
43
+ transform: Transform,
44
+ pane: { width: number; height: number },
45
+ scale: number,
46
+ palette: OverlayPalette,
47
+ ): MarkerBatch {
48
+ const shown = markersInView(markers, transform, pane);
49
+ if (this._instances.length < shown.length * MARKER_INSTANCE) {
50
+ this._instances = new Float32Array(shown.length * MARKER_INSTANCE * 2);
51
+ }
52
+ const d = this._instances;
53
+ shown.forEach(({ marker, rect }, i) => {
54
+ const at = i * MARKER_INSTANCE;
55
+ const size = marker.size ?? MARKER_SIZE;
56
+ const r = (size / 2) * scale;
57
+ const paint = markerPaint(marker, palette, scale);
58
+ d[at] = rect.tipX * scale;
59
+ d[at + 1] = rect.tipY * scale;
60
+ d[at + 2] = r;
61
+ d[at + 3] =
62
+ (marker.shape ?? 'pin') === 'circle'
63
+ ? 0
64
+ : size * PIN_HEIGHT * scale - r;
65
+ d.set(this._color(paint.fill), at + 4);
66
+ d.set(this._color(paint.ring), at + 8);
67
+ d[at + 12] = paint.ringWidth;
68
+ d[at + 13] = 0;
69
+ });
70
+ return { instances: d, count: shown.length };
71
+ }
72
+
73
+ private _color(value: string): Rgba {
74
+ let color = this._colors.get(value);
75
+ if (!color) {
76
+ const parsed = parseColor(value);
77
+ color = parsed ? premultiplied(parsed) : CLEAR;
78
+ if (this._colors.size > 256) this._colors.clear();
79
+ this._colors.set(value, color);
80
+ }
81
+ return color;
82
+ }
83
+ }
@@ -0,0 +1,379 @@
1
+ // The overlays, as the GL renderer draws them: one bucket — the record
2
+ // streams a tile's are (`./buckets.ts`), drawn by the same programs — built
3
+ // from every overlay on the map, in the order `drawOverlays` draws them.
4
+ //
5
+ // **An overlay's coordinates are not a tile's.** A tile's are small numbers
6
+ // from its own corner, which is why int16 is enough for them at any zoom. An
7
+ // overlay is geography with no corner: a route across a city seen at zoom 22
8
+ // is a few thousand pixels of line in a world four billion pixels wide, and
9
+ // a float32 resolves a position that large to the nearest 512 pixels. So the
10
+ // bucket is given a corner — a **region**, a square of the world around the
11
+ // view — and its records are int16 from the region's centre, worked out in
12
+ // float64 on this thread. Where the region's centre lands is worked out each
13
+ // frame, in float64 too and relative to the camera, and reaches the GPU as a
14
+ // uniform that is small because the region is near the camera. Nothing large
15
+ // is ever a float32, so a vertex holds still under a camera moving by a
16
+ // fraction of a pixel at any zoom.
17
+ //
18
+ // A region holds while the view is inside it and the zoom within a level of
19
+ // the one it was built at; past either, the bucket is built again around the
20
+ // view. Geometry is clipped to the region, which is what keeps it inside
21
+ // int16 — the retained renderer clips to its pane for the same kind of
22
+ // reason, XRender's 16.16.
23
+ import { clipRing, clipSegment } from '../clip.js';
24
+ import type { ClipRect } from '../clip.js';
25
+ import { circleSegments, overlayOrder } from '../overlay.js';
26
+ import type { MapOverlay, OverlayPalette } from '../overlay.js';
27
+ import {
28
+ DEFAULT_TILE_SIZE,
29
+ mercatorXFromLon,
30
+ mercatorYFromLat,
31
+ project,
32
+ worldSize,
33
+ } from '../proj.js';
34
+ import type { LngLat, MapCamera } from '../proj.js';
35
+ import { Stream, pushBreak, pushFillBreak } from './buckets.js';
36
+ import type { GlTileData, LayerDraw } from './buckets.js';
37
+
38
+ /** Units from a region's centre to its edge: int16, clear of the sentinel. */
39
+ const REACH = 32000;
40
+ /** Logical pixels the view keeps from a region's edge — more than a stroke
41
+ * is wide, so a clipped end, or an outline along the edge, is never seen. */
42
+ const EDGE = 128;
43
+
44
+ /** A square of the world an overlay bucket is built around. */
45
+ export interface OverlayRegion {
46
+ /** Its centre, in mercator. */
47
+ x: number;
48
+ y: number;
49
+ /** Units per mercator unit. */
50
+ k: number;
51
+ /** The zoom it was built at. */
52
+ zoom: number;
53
+ /** The display scale it was built for — what a circle's segments are
54
+ * counted in. */
55
+ scale: number;
56
+ }
57
+
58
+ /** One draw from the bucket: an overlay's fill, or one of its strokes. */
59
+ export interface OverlayPass {
60
+ /** The geometry: an index into the bucket's `draws`. */
61
+ index: number;
62
+ kind: 'fill' | 'stroke';
63
+ /** A stroke of the fill stream — a polygon's or a circle's outline —
64
+ * rather than of the line stream. */
65
+ outline?: boolean;
66
+ color: string;
67
+ opacity: number;
68
+ /** A stroke's width, in logical pixels. */
69
+ width: number;
70
+ dash?: readonly number[];
71
+ }
72
+
73
+ export interface OverlayBucket {
74
+ data: GlTileData;
75
+ passes: OverlayPass[];
76
+ region: OverlayRegion;
77
+ }
78
+
79
+ const globals = globalThis as { performance?: { now(): number } };
80
+ const now = (): number => globals.performance?.now() ?? Date.now();
81
+
82
+ /**
83
+ * A region around the view: centred on the camera, with room for the pane's
84
+ * diagonal either side — so a view zoomed a level out is still inside it,
85
+ * and a pan has most of a pane to go before the bucket is built again.
86
+ */
87
+ export function overlayRegion(
88
+ camera: MapCamera,
89
+ pane: { width: number; height: number },
90
+ scale: number,
91
+ ): OverlayRegion {
92
+ const centre = project(camera.center);
93
+ const world = worldSize(camera.zoom, DEFAULT_TILE_SIZE);
94
+ const reach = Math.max(1024, Math.hypot(pane.width, pane.height) + 2 * EDGE);
95
+ return {
96
+ x: centre.x,
97
+ y: centre.y,
98
+ k: (REACH * world) / reach,
99
+ zoom: camera.zoom,
100
+ scale,
101
+ };
102
+ }
103
+
104
+ /** Whether a region still serves a view: the zoom within a level of its
105
+ * own, the scale its own, and the view inside it with room to spare. */
106
+ export function regionHolds(
107
+ region: OverlayRegion,
108
+ camera: MapCamera,
109
+ pane: { width: number; height: number },
110
+ scale: number,
111
+ ): boolean {
112
+ if (scale !== region.scale) return false;
113
+ if (Math.abs(camera.zoom - region.zoom) > 1) return false;
114
+ const centre = project(camera.center);
115
+ let dx = centre.x - region.x;
116
+ dx -= Math.round(dx);
117
+ const perPixel = region.k / worldSize(camera.zoom, DEFAULT_TILE_SIZE);
118
+ const x = Math.abs(dx * region.k) + (pane.width / 2 + EDGE) * perPixel;
119
+ const y =
120
+ Math.abs((centre.y - region.y) * region.k) +
121
+ (pane.height / 2 + EDGE) * perPixel;
122
+ return x <= REACH && y <= REACH;
123
+ }
124
+
125
+ /**
126
+ * Where a region lands this frame: device pixels per unit, and its centre
127
+ * in device pixels — in float64, from the camera, which is what keeps both
128
+ * small enough for the float32s they become.
129
+ */
130
+ export function regionPlacement(
131
+ region: OverlayRegion,
132
+ camera: MapCamera,
133
+ width: number,
134
+ height: number,
135
+ scale: number,
136
+ ): { unit: number; x: number; y: number } {
137
+ const centre = project(camera.center);
138
+ const world = worldSize(camera.zoom, DEFAULT_TILE_SIZE) * scale;
139
+ let dx = region.x - centre.x;
140
+ dx -= Math.round(dx);
141
+ return {
142
+ unit: world / region.k,
143
+ x: dx * world + width / 2,
144
+ y: (region.y - centre.y) * world + height / 2,
145
+ };
146
+ }
147
+
148
+ /**
149
+ * The bucket for a map's overlays, around a region: each overlay's geometry
150
+ * once, in `drawOverlays`' order, and the passes that draw it — a line's
151
+ * casing and then the line; a polygon's or a circle's fill and then its
152
+ * outline. Colours an overlay does not name are the palette's.
153
+ */
154
+ export function buildOverlayBucket(
155
+ overlays: readonly MapOverlay[],
156
+ region: OverlayRegion,
157
+ palette: OverlayPalette,
158
+ ): OverlayBucket {
159
+ const started = now();
160
+ const line = new Stream(256);
161
+ const fill = new Stream(256);
162
+ const draws: LayerDraw[] = [];
163
+ const passes: OverlayPass[] = [];
164
+ const clip: ClipRect = {
165
+ minX: -REACH,
166
+ minY: -REACH,
167
+ maxX: REACH,
168
+ maxY: REACH,
169
+ };
170
+ // Region units, from its centre — on the copy of the world nearest it, as
171
+ // `projectLngLat` takes the copy nearest the camera.
172
+ const units = (path: readonly LngLat[]): number[] => {
173
+ const out: number[] = [];
174
+ for (const position of path) {
175
+ let x = mercatorXFromLon(position.lon) - region.x;
176
+ x -= Math.round(x);
177
+ const y = mercatorYFromLat(position.lat) - region.y;
178
+ out.push(x * region.k, y * region.k);
179
+ }
180
+ return out;
181
+ };
182
+ for (const overlay of overlayOrder(overlays)) {
183
+ const opacity = overlay.opacity ?? 1;
184
+ if (opacity <= 0) continue;
185
+ const index = draws.length;
186
+ if (overlay.kind === 'line') {
187
+ const first = line.count;
188
+ emitPath(line, units(overlay.path), clip);
189
+ if (line.count === first) continue;
190
+ draws.push({
191
+ layer: index,
192
+ kind: 'line',
193
+ ranges: [first, line.count - first],
194
+ });
195
+ const width = overlay.width ?? 3;
196
+ if (overlay.casing !== undefined) {
197
+ passes.push({
198
+ index,
199
+ kind: 'stroke',
200
+ color: overlay.casing,
201
+ opacity,
202
+ width: Math.max(width + 2, overlay.casingWidth ?? 0),
203
+ });
204
+ }
205
+ passes.push({
206
+ index,
207
+ kind: 'stroke',
208
+ color: overlay.color ?? palette.accent,
209
+ opacity,
210
+ width,
211
+ dash: overlay.dash,
212
+ });
213
+ continue;
214
+ }
215
+ const rings =
216
+ overlay.kind === 'polygon'
217
+ ? overlay.rings.map(units)
218
+ : circleRing(overlay, region);
219
+ const first = fill.count;
220
+ for (const ring of rings) emitRing(fill, clipRing(ring, clip));
221
+ if (fill.count === first) continue;
222
+ draws.push({
223
+ layer: index,
224
+ kind: 'fill',
225
+ ranges: [first, fill.count - first],
226
+ });
227
+ passes.push({
228
+ index,
229
+ kind: 'fill',
230
+ color: overlay.fill ?? palette.accent,
231
+ opacity,
232
+ width: 0,
233
+ });
234
+ if (overlay.outline !== undefined) {
235
+ passes.push({
236
+ index,
237
+ kind: 'stroke',
238
+ outline: true,
239
+ color: overlay.outline,
240
+ opacity,
241
+ width: overlay.outlineWidth ?? 1,
242
+ });
243
+ }
244
+ }
245
+ return {
246
+ data: {
247
+ line: line.take(),
248
+ lineRecords: line.count,
249
+ fill: fill.take(),
250
+ fillRecords: fill.count,
251
+ draws,
252
+ stats: {
253
+ features: overlays.length,
254
+ lineRecords: line.count,
255
+ fillRecords: fill.count,
256
+ groups: 0,
257
+ ms: now() - started,
258
+ },
259
+ },
260
+ passes,
261
+ region,
262
+ };
263
+ }
264
+
265
+ /**
266
+ * A circle as a ring, in region units: `drawOverlays`' radius — from the
267
+ * projection a hundredth of a degree north of the centre — and as many
268
+ * segments as the largest it is drawn at while the region holds, a level
269
+ * in, needs to keep its sagitta under half a pixel.
270
+ */
271
+ function circleRing(
272
+ overlay: Extract<MapOverlay, { kind: 'circle' }>,
273
+ region: OverlayRegion,
274
+ ): number[][] {
275
+ const lat = overlay.center.lat;
276
+ const cy = mercatorYFromLat(lat);
277
+ const north = mercatorYFromLat(Math.min(85, lat + 0.01));
278
+ const radius =
279
+ (overlay.radiusMetres * Math.abs(cy - north)) / (0.01 * 111_319.9);
280
+ const pixels =
281
+ radius * worldSize(region.zoom + 1, DEFAULT_TILE_SIZE) * region.scale;
282
+ if (!(pixels > 0.5)) return [];
283
+ const segments = circleSegments(pixels);
284
+ let x = mercatorXFromLon(overlay.center.lon) - region.x;
285
+ x -= Math.round(x);
286
+ const y = cy - region.y;
287
+ const ring: number[] = [];
288
+ for (let i = 0; i < segments; i++) {
289
+ const angle = (i / segments) * Math.PI * 2;
290
+ ring.push(
291
+ (x + Math.cos(angle) * radius) * region.k,
292
+ (y + Math.sin(angle) * radius) * region.k,
293
+ );
294
+ }
295
+ return [ring];
296
+ }
297
+
298
+ const int16 = (v: number): number => {
299
+ const s = Math.round(v);
300
+ return s < -32767 ? -32767 : s > 32767 ? 32767 : s;
301
+ };
302
+
303
+ function record(line: Stream, x: number, y: number, dist: number): void {
304
+ line.reserve(1);
305
+ const at = line.count;
306
+ line.i16[at * 4] = int16(x);
307
+ line.i16[at * 4 + 1] = int16(y);
308
+ line.f32[at * 2 + 1] = dist;
309
+ line.count++;
310
+ }
311
+
312
+ function endLine(line: Stream): void {
313
+ line.reserve(1);
314
+ pushBreak(line);
315
+ }
316
+
317
+ /**
318
+ * A path's pieces inside the clip, as polylines each ended by a sentinel.
319
+ * `dist` is measured along the whole path, clipped or not, so a dash
320
+ * pattern stays where it is on the ground when the region moves.
321
+ */
322
+ function emitPath(
323
+ line: Stream,
324
+ points: readonly number[],
325
+ clip: ClipRect,
326
+ ): void {
327
+ let along = 0;
328
+ let open = false;
329
+ for (let i = 0; i + 3 < points.length; i += 2) {
330
+ const x0 = points[i];
331
+ const y0 = points[i + 1];
332
+ const x1 = points[i + 2];
333
+ const y1 = points[i + 3];
334
+ const piece = clipSegment(x0, y0, x1, y1, clip);
335
+ if (piece) {
336
+ const [a, b, c, d] = piece;
337
+ if (!open) {
338
+ record(line, a, b, along + Math.hypot(a - x0, b - y0));
339
+ open = true;
340
+ }
341
+ record(line, c, d, along + Math.hypot(c - x0, d - y0));
342
+ // Cut short at its far end: the next piece is a new polyline.
343
+ if (c !== x1 || d !== y1) {
344
+ endLine(line);
345
+ open = false;
346
+ }
347
+ } else if (open) {
348
+ endLine(line);
349
+ open = false;
350
+ }
351
+ along += Math.hypot(x1 - x0, y1 - y0);
352
+ }
353
+ if (open) endLine(line);
354
+ }
355
+
356
+ /** A ring as a fan, as `./buckets.ts` writes one: its points, closed, each
357
+ * carrying the first as the fan's apex, then a sentinel. */
358
+ function emitRing(fill: Stream, ring: readonly number[]): void {
359
+ const n = ring.length >> 1;
360
+ if (n < 3) return;
361
+ fill.reserve(n + 2);
362
+ const i16 = fill.i16;
363
+ const ax = int16(ring[0]);
364
+ const ay = int16(ring[1]);
365
+ let at = fill.count * 4;
366
+ for (let i = 0; i < n; i++) {
367
+ i16[at] = int16(ring[i * 2]);
368
+ i16[at + 1] = int16(ring[i * 2 + 1]);
369
+ i16[at + 2] = ax;
370
+ i16[at + 3] = ay;
371
+ at += 4;
372
+ }
373
+ i16[at] = ax;
374
+ i16[at + 1] = ay;
375
+ i16[at + 2] = ax;
376
+ i16[at + 3] = ay;
377
+ fill.count += n + 1;
378
+ pushFillBreak(fill);
379
+ }