@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,461 @@
1
+ // A tile's features as GPU-ready streams — the GL renderer's whole CPU side.
2
+ //
3
+ // The retained renderer (`../paint.ts`) turns a tile into *pixels*, once per
4
+ // zoom level and style, and composites the pixels; this turns it into
5
+ // *geometry*, once per tile, and draws the geometry every frame. That is the
6
+ // entire difference, and it is why nothing here knows about a camera, a
7
+ // scale or a style colour: a bucket is valid for every zoom, every pan,
8
+ // every display scale and every palette, so a style change is a uniform
9
+ // write and a fractional zoom is a matrix.
10
+ //
11
+ // Two streams, both made of 8-byte **records**, and one idea behind both:
12
+ // the GPU draws *segment i* from records `i` and `i + 1` of a stream, as one
13
+ // instance — so a polyline of `k` points is `k` consecutive records and
14
+ // costs nothing to "tessellate". There is no extrusion, no join geometry and
15
+ // no triangulation on the CPU at all: the vertex shader widens a segment into
16
+ // a quad and the fragment shader rounds its ends, so joins, caps and
17
+ // antialiasing come out of one distance function (see `./shaders.ts`).
18
+ //
19
+ // - **line** — `x:int16, y:int16, dist:float32`. `dist` is how far along
20
+ // its polyline the point is, in tile units, for dashes.
21
+ // - **fill** — `x:int16, y:int16, ax:int16, ay:int16`. Every ring is closed
22
+ // explicitly and each record carries its ring's first point as `a`, so
23
+ // segment `i` with `a` is a triangle of the ring's fan. Drawn into the
24
+ // stencil buffer, a fan per ring is a polygon with its holes — no
25
+ // triangulator, the same non-zero rule the retained renderer fills with.
26
+ // The same records drawn as segments are the polygon's outline.
27
+ //
28
+ // Between two polylines (or rings) sits one {@link BREAK} record. The two
29
+ // segments that touch it collapse in the vertex shader, which is cheaper
30
+ // than the index buffer that would otherwise say where every part ends.
31
+ //
32
+ // Coordinates are normalised to {@link TILE_EXTENT} because `extent` is a
33
+ // per-*layer* field that real tiles vary (Shortbread cuts `streets`, `land`,
34
+ // `ocean` and `water_polygons` at 2048 and everything else at 4096), and a
35
+ // per-draw extent would be one more uniform on the hottest loop in the
36
+ // renderer for no benefit.
37
+ import { GeomType, GeometryBuffer } from '../mvt.js';
38
+ import type { FeatureCursor, VectorTile } from '../mvt.js';
39
+ import type { PreparedLayer, PreparedStyle } from '../paint.js';
40
+ import type { MapStyleLayer } from '../style.js';
41
+ import type { TileId } from '../proj.js';
42
+ import { buildTileLabels } from '../anchors.js';
43
+ import type { GlLabelData } from '../anchors.js';
44
+
45
+ /** Tile units across a tile, after normalisation. */
46
+ export const TILE_EXTENT = 4096;
47
+
48
+ /** The int16 that marks the end of a polyline or ring. Real coordinates are
49
+ * clamped to one above it. */
50
+ export const BREAK = -32768;
51
+
52
+ /** Bytes per record, in either stream. */
53
+ export const RECORD_BYTES = 8;
54
+
55
+ /** A `circle` layer's points are line-stream records too, one per point —
56
+ * a disc each — with a sentinel after them. */
57
+ export type DrawKind = 'fill' | 'line' | 'circle';
58
+
59
+ /** What one style layer draws from one tile. */
60
+ export interface LayerDraw {
61
+ /** Index into {@link PreparedStyle.layers}. */
62
+ layer: number;
63
+ kind: DrawKind;
64
+ /**
65
+ * `[firstRecord, recordCount]` pairs into the kind's stream. A range of
66
+ * `n` records is `n - 1` segment instances; the last record of every
67
+ * range is a {@link BREAK}, so the instance that would join a range to
68
+ * whatever follows it is a degenerate one.
69
+ */
70
+ ranges: number[];
71
+ }
72
+
73
+ /** What building a tile's buckets cost and produced. */
74
+ export interface BucketStats {
75
+ features: number;
76
+ /** Records written to the line stream, sentinels included. */
77
+ lineRecords: number;
78
+ /** Records written to the fill stream, closing points and sentinels
79
+ * included. */
80
+ fillRecords: number;
81
+ /** Membership groups — distinct sets of style layers a feature belongs
82
+ * to. What decides how many draw ranges a layer needs. */
83
+ groups: number;
84
+ ms: number;
85
+ }
86
+
87
+ /** One tile, ready for upload. Plain typed arrays and a small draw list, so
88
+ * it can be built on a worker and transferred without a copy. */
89
+ export interface GlTileData {
90
+ /** The line stream: `lineRecords` records over one buffer. */
91
+ line: ArrayBuffer;
92
+ lineRecords: number;
93
+ /** The fill stream: `fillRecords` records. */
94
+ fill: ArrayBuffer;
95
+ fillRecords: number;
96
+ /** Indexed by style layer; a hole where this tile has nothing to draw. */
97
+ draws: (LayerDraw | undefined)[];
98
+ /** Where the tile's labels could go — see `../anchors.ts`. */
99
+ labels?: GlLabelData;
100
+ /** A raster tile's image — RGBA, not premultiplied, as a source decodes
101
+ * it — in place of streams: its own texture, and no style. */
102
+ raster?: { width: number; height: number; pixels: Uint8Array };
103
+ stats: BucketStats;
104
+ }
105
+
106
+ /** A raster tile as the store keeps it: its image, and nothing to build. */
107
+ export function rasterTileData(
108
+ width: number,
109
+ height: number,
110
+ pixels: Uint8Array,
111
+ ): GlTileData {
112
+ return {
113
+ line: new ArrayBuffer(0),
114
+ lineRecords: 0,
115
+ fill: new ArrayBuffer(0),
116
+ fillRecords: 0,
117
+ draws: [],
118
+ raster: { width, height, pixels },
119
+ stats: { features: 0, lineRecords: 0, fillRecords: 0, groups: 0, ms: 0 },
120
+ };
121
+ }
122
+
123
+ /** Whether a style layer is one this renderer draws from a tile at all. */
124
+ function drawable(
125
+ layer: MapStyleLayer,
126
+ ): layer is Extract<MapStyleLayer, { type: DrawKind }> {
127
+ // Symbol layers are labels, which are placed per frame and not bucketed.
128
+ return (
129
+ (layer.type === 'fill' ||
130
+ layer.type === 'line' ||
131
+ layer.type === 'circle') &&
132
+ layer.visible !== false
133
+ );
134
+ }
135
+
136
+ /** `paint.ts`'s rule: a `line` layer takes polygons too — stroking a ring is
137
+ * what a style asking for an outline means — a `fill` only polygons, and a
138
+ * `circle` only points. */
139
+ function takes(type: DrawKind, geometry: GeomType): boolean {
140
+ if (type === 'circle') return geometry === GeomType.Point;
141
+ return type === 'fill'
142
+ ? geometry === GeomType.Polygon
143
+ : geometry === GeomType.LineString || geometry === GeomType.Polygon;
144
+ }
145
+
146
+ /** Points, a record each, for a circle layer's discs. */
147
+ function emitPoints(
148
+ line: Stream,
149
+ coords: Int32Array,
150
+ from: number,
151
+ to: number,
152
+ k: number,
153
+ ): void {
154
+ line.reserve(to - from);
155
+ for (let i = from; i < to; i++) {
156
+ const at = line.count;
157
+ line.i16[at * 4] = coord(coords[i * 2], k);
158
+ line.i16[at * 4 + 1] = coord(coords[i * 2 + 1], k);
159
+ line.f32[at * 2 + 1] = 0;
160
+ line.count++;
161
+ }
162
+ }
163
+
164
+ const globals = globalThis as { performance?: { now(): number } };
165
+ const now = (): number => globals.performance?.now() ?? Date.now();
166
+
167
+ /** A growable stream of 8-byte records, viewed both ways. */
168
+ export class Stream {
169
+ bytes: ArrayBuffer;
170
+ i16: Int16Array;
171
+ f32: Float32Array;
172
+ count = 0;
173
+
174
+ constructor(records: number) {
175
+ this.bytes = new ArrayBuffer(records * RECORD_BYTES);
176
+ this.i16 = new Int16Array(this.bytes);
177
+ this.f32 = new Float32Array(this.bytes);
178
+ }
179
+
180
+ reserve(more: number): void {
181
+ const want = (this.count + more) * RECORD_BYTES;
182
+ if (want <= this.bytes.byteLength) return;
183
+ let size = this.bytes.byteLength || RECORD_BYTES * 64;
184
+ while (size < want) size *= 2;
185
+ const next = new ArrayBuffer(size);
186
+ new Uint8Array(next).set(
187
+ new Uint8Array(this.bytes, 0, this.count * RECORD_BYTES),
188
+ );
189
+ this.bytes = next;
190
+ this.i16 = new Int16Array(next);
191
+ this.f32 = new Float32Array(next);
192
+ }
193
+
194
+ /** The records written, trimmed to size — what is kept and uploaded. */
195
+ take(): ArrayBuffer {
196
+ return this.bytes.slice(0, this.count * RECORD_BYTES);
197
+ }
198
+ }
199
+
200
+ /** A tile coordinate, normalised and kept clear of the sentinel. */
201
+ function coord(v: number, k: number): number {
202
+ const s = Math.round(v * k);
203
+ return s < -32767 ? -32767 : s > 32767 ? 32767 : s;
204
+ }
205
+
206
+ /** A line stream's sentinel. The caller has reserved the record. */
207
+ export function pushBreak(line: Stream): void {
208
+ const at = line.count * 4;
209
+ line.i16[at] = BREAK;
210
+ line.i16[at + 1] = BREAK;
211
+ line.f32[line.count * 2 + 1] = 0;
212
+ line.count++;
213
+ }
214
+
215
+ /** A fill stream's sentinel. The caller has reserved the record. */
216
+ export function pushFillBreak(fill: Stream): void {
217
+ const at = fill.count * 4;
218
+ fill.i16[at] = BREAK;
219
+ fill.i16[at + 1] = BREAK;
220
+ fill.i16[at + 2] = BREAK;
221
+ fill.i16[at + 3] = BREAK;
222
+ fill.count++;
223
+ }
224
+
225
+ /** One part as a polyline: its points, then (for a ring) its first point
226
+ * again, then a sentinel. */
227
+ function emitLine(
228
+ line: Stream,
229
+ coords: Int32Array,
230
+ from: number,
231
+ to: number,
232
+ k: number,
233
+ closed: boolean,
234
+ ): void {
235
+ const count = to - from;
236
+ if (count < 2) return;
237
+ line.reserve(count + 2);
238
+ const i16 = line.i16;
239
+ const f32 = line.f32;
240
+ let dist = 0;
241
+ let px = coord(coords[from * 2], k);
242
+ let py = coord(coords[from * 2 + 1], k);
243
+ const firstX = px;
244
+ const firstY = py;
245
+ let at = line.count;
246
+ i16[at * 4] = px;
247
+ i16[at * 4 + 1] = py;
248
+ f32[at * 2 + 1] = 0;
249
+ at++;
250
+ for (let i = from + 1; i < to; i++) {
251
+ const x = coord(coords[i * 2], k);
252
+ const y = coord(coords[i * 2 + 1], k);
253
+ dist += Math.hypot(x - px, y - py);
254
+ i16[at * 4] = x;
255
+ i16[at * 4 + 1] = y;
256
+ f32[at * 2 + 1] = dist;
257
+ at++;
258
+ px = x;
259
+ py = y;
260
+ }
261
+ if (closed && (px !== firstX || py !== firstY)) {
262
+ dist += Math.hypot(firstX - px, firstY - py);
263
+ i16[at * 4] = firstX;
264
+ i16[at * 4 + 1] = firstY;
265
+ f32[at * 2 + 1] = dist;
266
+ at++;
267
+ }
268
+ line.count = at;
269
+ pushBreak(line);
270
+ }
271
+
272
+ /** One ring as a fan: its points, closed, each carrying the ring's first
273
+ * point as the fan's apex, then a sentinel. */
274
+ function emitRing(
275
+ fill: Stream,
276
+ coords: Int32Array,
277
+ from: number,
278
+ to: number,
279
+ k: number,
280
+ ): void {
281
+ const count = to - from;
282
+ if (count < 3) return;
283
+ fill.reserve(count + 2);
284
+ const i16 = fill.i16;
285
+ const ax = coord(coords[from * 2], k);
286
+ const ay = coord(coords[from * 2 + 1], k);
287
+ let at = fill.count * 4;
288
+ for (let i = from; i < to; i++) {
289
+ i16[at] = coord(coords[i * 2], k);
290
+ i16[at + 1] = coord(coords[i * 2 + 1], k);
291
+ i16[at + 2] = ax;
292
+ i16[at + 3] = ay;
293
+ at += 4;
294
+ }
295
+ i16[at] = ax;
296
+ i16[at + 1] = ay;
297
+ i16[at + 2] = ax;
298
+ i16[at + 3] = ay;
299
+ fill.count += count + 1;
300
+ pushFillBreak(fill);
301
+ }
302
+
303
+ interface Group {
304
+ mask: number;
305
+ features: number[];
306
+ fill: [number, number];
307
+ line: [number, number];
308
+ }
309
+
310
+ /**
311
+ * Build a tile's buckets for a style.
312
+ *
313
+ * The style is walked in the same **runs** the retained painter uses —
314
+ * consecutive style layers over one source layer — and each run's features
315
+ * are read once. The new part is what happens to a feature's answer: every
316
+ * feature gets a *membership mask*, the set of the run's layers that select
317
+ * it, and features are written grouped by mask. A road network is fourteen
318
+ * style layers over `streets` whose casing and fill select exactly the same
319
+ * roads, so `motorway-casing` and `motorway` share one group and one copy of
320
+ * the geometry: two draws over the same records, with a different width and
321
+ * colour. Without the grouping every feature would be copied once per layer
322
+ * that draws it — twice for every road — and without it being contiguous
323
+ * a layer would be one draw per feature.
324
+ */
325
+ export function buildTileBuckets(
326
+ tile: VectorTile,
327
+ prepared: PreparedStyle,
328
+ /** Which tile — what a label layer's `snapInto` distance is measured
329
+ * against (`../anchors.ts`). */
330
+ id?: TileId,
331
+ ): GlTileData {
332
+ const started = now();
333
+ const line = new Stream(1024);
334
+ const fill = new Stream(1024);
335
+ const buffer = new GeometryBuffer();
336
+ const draws: (LayerDraw | undefined)[] = new Array(prepared.layers.length);
337
+ let features = 0;
338
+ let groupCount = 0;
339
+ let cursor: FeatureCursor | null = null;
340
+
341
+ for (const run of prepared.runs) {
342
+ const source = tile.layers.get(run.sourceLayer);
343
+ if (!source || source.length === 0) continue;
344
+ const active: { index: number; prepared: PreparedLayer; type: DrawKind }[] =
345
+ [];
346
+ for (let i = run.from; i < run.to; i++) {
347
+ const layer = prepared.layers[i].layer;
348
+ if (drawable(layer)) {
349
+ active.push({
350
+ index: i,
351
+ prepared: prepared.layers[i],
352
+ type: layer.type,
353
+ });
354
+ }
355
+ }
356
+ // A mask is a 32-bit integer. A run longer than that is not one any
357
+ // style has been written with; its tail draws nothing rather than
358
+ // aliasing onto the head.
359
+ if (active.length > 31) active.length = 31;
360
+ if (active.length === 0) continue;
361
+ const k = TILE_EXTENT / source.extent;
362
+
363
+ cursor = source.feature(0);
364
+ const byMask = new Map<number, Group>();
365
+ const order: Group[] = [];
366
+ for (let f = 0; f < source.length; f++) {
367
+ source.seek(f, cursor);
368
+ let mask = 0;
369
+ for (let j = 0; j < active.length; j++) {
370
+ if (!takes(active[j].type, cursor.type)) continue;
371
+ if (!active[j].prepared.filter(cursor)) continue;
372
+ mask |= 1 << j;
373
+ }
374
+ if (mask === 0) continue;
375
+ let group = byMask.get(mask);
376
+ if (!group) {
377
+ group = { mask, features: [], fill: [0, 0], line: [0, 0] };
378
+ byMask.set(mask, group);
379
+ order.push(group);
380
+ }
381
+ group.features.push(f);
382
+ }
383
+
384
+ for (const group of order) {
385
+ let needFill = false;
386
+ let needLine = false;
387
+ let needPoints = false;
388
+ for (let j = 0; j < active.length; j++) {
389
+ if (!(group.mask & (1 << j))) continue;
390
+ if (active[j].type === 'fill') needFill = true;
391
+ else if (active[j].type === 'circle') needPoints = true;
392
+ else needLine = true;
393
+ }
394
+ const fillFrom = fill.count;
395
+ const lineFrom = line.count;
396
+ for (const f of group.features) {
397
+ source.seek(f, cursor);
398
+ cursor.readGeometry(buffer);
399
+ if (buffer.parts === 0) continue;
400
+ features++;
401
+ const polygon = cursor.type === GeomType.Polygon;
402
+ const points = cursor.type === GeomType.Point;
403
+ for (let part = 0; part < buffer.parts; part++) {
404
+ const from = buffer.starts[part];
405
+ const to = buffer.starts[part + 1];
406
+ if (points) {
407
+ if (needPoints) emitPoints(line, buffer.coords, from, to, k);
408
+ continue;
409
+ }
410
+ if (needFill && polygon) emitRing(fill, buffer.coords, from, to, k);
411
+ if (needLine) emitLine(line, buffer.coords, from, to, k, polygon);
412
+ }
413
+ }
414
+ // A group's points end in a sentinel like a polyline does, so the
415
+ // instance count of their range is the number of points.
416
+ if (needPoints && line.count > lineFrom) {
417
+ line.reserve(1);
418
+ pushBreak(line);
419
+ }
420
+ group.fill = [fillFrom, fill.count - fillFrom];
421
+ group.line = [lineFrom, line.count - lineFrom];
422
+ }
423
+ groupCount += order.length;
424
+
425
+ for (let j = 0; j < active.length; j++) {
426
+ const { index, type } = active[j];
427
+ const ranges: number[] = [];
428
+ for (const group of order) {
429
+ if (!(group.mask & (1 << j))) continue;
430
+ const [first, count] = type === 'fill' ? group.fill : group.line;
431
+ if (count < 2) continue;
432
+ const last = ranges.length - 2;
433
+ // Adjacent groups coalesce into one range, so a layer is one draw
434
+ // whenever the groups it spans were written next to each other.
435
+ if (last >= 0 && ranges[last] + ranges[last + 1] === first) {
436
+ ranges[last + 1] += count;
437
+ } else {
438
+ ranges.push(first, count);
439
+ }
440
+ }
441
+ if (ranges.length > 0)
442
+ draws[index] = { layer: index, kind: type, ranges };
443
+ }
444
+ }
445
+
446
+ return {
447
+ line: line.take(),
448
+ lineRecords: line.count,
449
+ fill: fill.take(),
450
+ fillRecords: fill.count,
451
+ draws,
452
+ labels: buildTileLabels(tile, prepared, TILE_EXTENT, id),
453
+ stats: {
454
+ features,
455
+ lineRecords: line.count,
456
+ fillRecords: fill.count,
457
+ groups: groupCount,
458
+ ms: now() - started,
459
+ },
460
+ };
461
+ }
@@ -0,0 +1,66 @@
1
+ // A worker thread's half of `GlTileStore`: tile bytes in, buckets out.
2
+ //
3
+ // Loaded only as a `Worker` entry and never imported, so the listener below
4
+ // is not an import-time side effect of the package — no bundle that follows
5
+ // imports can reach this file. What crosses the thread boundary is the point
6
+ // of the bucket format: a tile arrives as its own bytes (copied, a few
7
+ // hundred kilobytes) and leaves as two ArrayBuffers that are *transferred*,
8
+ // so the main thread's whole cost for a tile is the upload.
9
+ //
10
+ // `node:worker_threads` through a variable specifier, as `src/embed/host.ts`
11
+ // reaches `node:net`: `src/` compiles with `types: []`, and a literal
12
+ // specifier would make every build depend on Node's type declarations.
13
+ import { prepareStyle } from '../paint.js';
14
+ import type { PreparedStyle } from '../paint.js';
15
+ import type { TileId } from '../proj.js';
16
+ import { parseVectorTile } from '../sources.js';
17
+ import type { MapStyleLayer } from '../style.js';
18
+ import { buildTileBuckets } from './buckets.js';
19
+
20
+ /** What the store sends. */
21
+ export type BuildRequest =
22
+ | { type: 'style'; id: number; layers: MapStyleLayer[] }
23
+ | {
24
+ type: 'build';
25
+ job: number;
26
+ style: number;
27
+ bytes: Uint8Array;
28
+ tile: TileId;
29
+ };
30
+
31
+ interface Port {
32
+ on(event: 'message', listener: (message: unknown) => void): void;
33
+ postMessage(message: unknown, transfer?: ArrayBuffer[]): void;
34
+ }
35
+
36
+ const WORKER_THREADS = 'node:worker_threads';
37
+ const { parentPort } = (await import(WORKER_THREADS)) as {
38
+ parentPort: Port | null;
39
+ };
40
+
41
+ /** Compiled filters per style id. Two are kept: the store may still have a
42
+ * build in flight for the style it is leaving. */
43
+ const styles = new Map<number, PreparedStyle>();
44
+
45
+ parentPort?.on('message', (message) => {
46
+ const request = message as BuildRequest;
47
+ if (request.type === 'style') {
48
+ styles.set(request.id, prepareStyle({ layers: request.layers }));
49
+ for (const id of styles.keys()) if (id < request.id - 1) styles.delete(id);
50
+ return;
51
+ }
52
+ try {
53
+ const prepared = styles.get(request.style);
54
+ if (!prepared) throw new Error(`style ${request.style} was never sent`);
55
+ const data = buildTileBuckets(
56
+ parseVectorTile(request.bytes),
57
+ prepared,
58
+ request.tile,
59
+ );
60
+ const transfer = [data.line, data.fill];
61
+ if (data.labels) transfer.push(data.labels.anchors.buffer as ArrayBuffer);
62
+ parentPort.postMessage({ job: request.job, data }, transfer);
63
+ } catch (error) {
64
+ parentPort.postMessage({ job: request.job, error: String(error) });
65
+ }
66
+ });
@@ -0,0 +1,62 @@
1
+ // CSS colours as the floats GL takes.
2
+ //
3
+ // A local parser rather than ntk's `cssColorStraight`: that one is exported
4
+ // by ntk at runtime but not declared by `react-x11/ntk`'s types, and a map
5
+ // style is written in the three forms below in practice — the default
6
+ // palettes use nothing else. An unknown colour is `null`, and the layer that
7
+ // asked for it draws nothing rather than drawing black.
8
+
9
+ /** Straight (unassociated) `[r, g, b, a]`, each in `0..1`. */
10
+ export type Rgba = readonly [number, number, number, number];
11
+
12
+ const NAMED: Record<string, Rgba> = {
13
+ transparent: [0, 0, 0, 0],
14
+ black: [0, 0, 0, 1],
15
+ white: [1, 1, 1, 1],
16
+ };
17
+
18
+ function hex(value: string): Rgba | null {
19
+ const h = value.slice(1);
20
+ if (!/^[0-9a-fA-F]+$/.test(h)) return null;
21
+ if (h.length === 3 || h.length === 4) {
22
+ const c = (i: number) => parseInt(h[i] + h[i], 16) / 255;
23
+ return [c(0), c(1), c(2), h.length === 4 ? c(3) : 1];
24
+ }
25
+ if (h.length === 6 || h.length === 8) {
26
+ const c = (i: number) => parseInt(h.slice(i * 2, i * 2 + 2), 16) / 255;
27
+ return [c(0), c(1), c(2), h.length === 8 ? c(3) : 1];
28
+ }
29
+ return null;
30
+ }
31
+
32
+ function functional(value: string): Rgba | null {
33
+ const m = /^rgba?\(([^)]*)\)$/i.exec(value);
34
+ if (!m) return null;
35
+ const parts = m[1].split(/[\s,/]+/).filter(Boolean);
36
+ if (parts.length < 3) return null;
37
+ const channel = (p: string) =>
38
+ p.endsWith('%') ? parseFloat(p) / 100 : parseFloat(p) / 255;
39
+ const alpha = (p: string | undefined) =>
40
+ p === undefined ? 1 : p.endsWith('%') ? parseFloat(p) / 100 : parseFloat(p);
41
+ const out: Rgba = [
42
+ channel(parts[0]),
43
+ channel(parts[1]),
44
+ channel(parts[2]),
45
+ alpha(parts[3]),
46
+ ];
47
+ return out.every((c) => Number.isFinite(c)) ? out : null;
48
+ }
49
+
50
+ /** Parse `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`, `rgb()` and `rgba()`. */
51
+ export function parseColor(value: string): Rgba | null {
52
+ const v = value.trim();
53
+ if (v.startsWith('#')) return hex(v);
54
+ return NAMED[v.toLowerCase()] ?? functional(v);
55
+ }
56
+
57
+ /** Premultiplied, with an extra opacity folded in — what the renderer's
58
+ * `ONE, ONE_MINUS_SRC_ALPHA` blend wants. */
59
+ export function premultiplied(color: Rgba, opacity = 1): Rgba {
60
+ const a = color[3] * opacity;
61
+ return [color[0] * a, color[1] * a, color[2] * a, a];
62
+ }