@react-x11/components 0.7.1 → 0.9.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 (354) hide show
  1. package/README.md +295 -51
  2. package/dist/charts/node.d.ts +1 -1
  3. package/dist/charts/node.d.ts.map +1 -1
  4. package/dist/charts/node.js +6 -2
  5. package/dist/charts/node.js.map +1 -1
  6. package/dist/color-picker/ColorPicker.d.ts.map +1 -1
  7. package/dist/color-picker/ColorPicker.js +43 -33
  8. package/dist/color-picker/ColorPicker.js.map +1 -1
  9. package/dist/embed/client.d.ts +48 -3
  10. package/dist/embed/client.d.ts.map +1 -1
  11. package/dist/embed/client.js +79 -5
  12. package/dist/embed/client.js.map +1 -1
  13. package/dist/embed/index.d.ts +1 -1
  14. package/dist/embed/index.d.ts.map +1 -1
  15. package/dist/embed/index.js +1 -1
  16. package/dist/embed/index.js.map +1 -1
  17. package/dist/html/node.d.ts +3 -1
  18. package/dist/html/node.d.ts.map +1 -1
  19. package/dist/html/node.js +7 -5
  20. package/dist/html/node.js.map +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/{markdown → internal/markdown}/ast.d.ts +12 -0
  26. package/dist/internal/markdown/ast.d.ts.map +1 -0
  27. package/dist/internal/markdown/ast.js +22 -0
  28. package/dist/internal/markdown/ast.js.map +1 -0
  29. package/dist/internal/markdown/parse.d.ts.map +1 -0
  30. package/dist/{markdown → internal/markdown}/parse.js +112 -22
  31. package/dist/internal/markdown/parse.js.map +1 -0
  32. package/dist/internal/markdown/stringify.d.ts +4 -0
  33. package/dist/internal/markdown/stringify.d.ts.map +1 -0
  34. package/dist/internal/markdown/stringify.js +684 -0
  35. package/dist/internal/markdown/stringify.js.map +1 -0
  36. package/dist/internal/markdown/tags.d.ts.map +1 -0
  37. package/dist/internal/markdown/tags.js.map +1 -0
  38. package/dist/internal/scroll.d.ts +3 -2
  39. package/dist/internal/scroll.d.ts.map +1 -1
  40. package/dist/internal/scroll.js +33 -15
  41. package/dist/internal/scroll.js.map +1 -1
  42. package/dist/internal/units.d.ts +2 -0
  43. package/dist/internal/units.d.ts.map +1 -0
  44. package/dist/internal/units.js +35 -0
  45. package/dist/internal/units.js.map +1 -0
  46. package/dist/internal/window.d.ts.map +1 -1
  47. package/dist/internal/window.js +4 -2
  48. package/dist/internal/window.js.map +1 -1
  49. package/dist/maps/anchors.d.ts +98 -0
  50. package/dist/maps/anchors.d.ts.map +1 -0
  51. package/dist/maps/anchors.js +531 -0
  52. package/dist/maps/anchors.js.map +1 -0
  53. package/dist/maps/controller.d.ts +283 -0
  54. package/dist/maps/controller.d.ts.map +1 -0
  55. package/dist/maps/controller.js +743 -0
  56. package/dist/maps/controller.js.map +1 -0
  57. package/dist/maps/gl/buckets.d.ts +95 -0
  58. package/dist/maps/gl/buckets.d.ts.map +1 -0
  59. package/dist/maps/gl/buckets.js +362 -0
  60. package/dist/maps/gl/buckets.js.map +1 -0
  61. package/dist/maps/gl/build-worker.d.ts +13 -0
  62. package/dist/maps/gl/build-worker.d.ts.map +1 -0
  63. package/dist/maps/gl/build-worker.js +44 -0
  64. package/dist/maps/gl/build-worker.js.map +1 -0
  65. package/dist/maps/gl/color.d.ts +8 -0
  66. package/dist/maps/gl/color.d.ts.map +1 -0
  67. package/dist/maps/gl/color.js +57 -0
  68. package/dist/maps/gl/color.js.map +1 -0
  69. package/dist/maps/gl/cover.d.ts +51 -0
  70. package/dist/maps/gl/cover.d.ts.map +1 -0
  71. package/dist/maps/gl/cover.js +124 -0
  72. package/dist/maps/gl/cover.js.map +1 -0
  73. package/dist/maps/gl/index.d.ts +3 -0
  74. package/dist/maps/gl/index.d.ts.map +1 -0
  75. package/dist/maps/gl/index.js +20 -0
  76. package/dist/maps/gl/index.js.map +1 -0
  77. package/dist/maps/gl/markers.d.ts +28 -0
  78. package/dist/maps/gl/markers.d.ts.map +1 -0
  79. package/dist/maps/gl/markers.js +60 -0
  80. package/dist/maps/gl/markers.js.map +1 -0
  81. package/dist/maps/gl/overlays.d.ts +68 -0
  82. package/dist/maps/gl/overlays.d.ts.map +1 -0
  83. package/dist/maps/gl/overlays.js +300 -0
  84. package/dist/maps/gl/overlays.js.map +1 -0
  85. package/dist/maps/gl/pane.d.ts +12 -0
  86. package/dist/maps/gl/pane.d.ts.map +1 -0
  87. package/dist/maps/gl/pane.js +37 -0
  88. package/dist/maps/gl/pane.js.map +1 -0
  89. package/dist/maps/gl/placement.d.ts +111 -0
  90. package/dist/maps/gl/placement.d.ts.map +1 -0
  91. package/dist/maps/gl/placement.js +567 -0
  92. package/dist/maps/gl/placement.js.map +1 -0
  93. package/dist/maps/gl/renderer.d.ts +352 -0
  94. package/dist/maps/gl/renderer.d.ts.map +1 -0
  95. package/dist/maps/gl/renderer.js +1127 -0
  96. package/dist/maps/gl/renderer.js.map +1 -0
  97. package/dist/maps/gl/shaders.d.ts +120 -0
  98. package/dist/maps/gl/shaders.d.ts.map +1 -0
  99. package/dist/maps/gl/shaders.js +451 -0
  100. package/dist/maps/gl/shaders.js.map +1 -0
  101. package/dist/maps/gl/store.d.ts +115 -0
  102. package/dist/maps/gl/store.d.ts.map +1 -0
  103. package/dist/maps/gl/store.js +469 -0
  104. package/dist/maps/gl/store.js.map +1 -0
  105. package/dist/maps/gl/text.d.ts +154 -0
  106. package/dist/maps/gl/text.d.ts.map +1 -0
  107. package/dist/maps/gl/text.js +382 -0
  108. package/dist/maps/gl/text.js.map +1 -0
  109. package/dist/maps/gl/view.d.ts +54 -0
  110. package/dist/maps/gl/view.d.ts.map +1 -0
  111. package/dist/maps/gl/view.js +974 -0
  112. package/dist/maps/gl/view.js.map +1 -0
  113. package/dist/maps/index.d.ts +1 -1
  114. package/dist/maps/index.d.ts.map +1 -1
  115. package/dist/maps/index.js +216 -52
  116. package/dist/maps/index.js.map +1 -1
  117. package/dist/maps/labels.d.ts +37 -16
  118. package/dist/maps/labels.d.ts.map +1 -1
  119. package/dist/maps/labels.js +188 -119
  120. package/dist/maps/labels.js.map +1 -1
  121. package/dist/maps/node.d.ts +162 -56
  122. package/dist/maps/node.d.ts.map +1 -1
  123. package/dist/maps/node.js +607 -515
  124. package/dist/maps/node.js.map +1 -1
  125. package/dist/maps/overlay.d.ts +72 -9
  126. package/dist/maps/overlay.d.ts.map +1 -1
  127. package/dist/maps/overlay.js +108 -28
  128. package/dist/maps/overlay.js.map +1 -1
  129. package/dist/maps/paint.d.ts +3 -0
  130. package/dist/maps/paint.d.ts.map +1 -1
  131. package/dist/maps/paint.js.map +1 -1
  132. package/dist/maps/proj.d.ts +14 -0
  133. package/dist/maps/proj.d.ts.map +1 -1
  134. package/dist/maps/proj.js +28 -0
  135. package/dist/maps/proj.js.map +1 -1
  136. package/dist/maps/renderer.d.ts +69 -0
  137. package/dist/maps/renderer.d.ts.map +1 -0
  138. package/dist/maps/renderer.js +66 -0
  139. package/dist/maps/renderer.js.map +1 -0
  140. package/dist/maps/sources.d.ts +25 -3
  141. package/dist/maps/sources.d.ts.map +1 -1
  142. package/dist/maps/sources.js +17 -0
  143. package/dist/maps/sources.js.map +1 -1
  144. package/dist/maps/theme.d.ts +19 -0
  145. package/dist/maps/theme.d.ts.map +1 -0
  146. package/dist/maps/theme.js +44 -0
  147. package/dist/maps/theme.js.map +1 -0
  148. package/dist/maps/tiles.d.ts +117 -17
  149. package/dist/maps/tiles.d.ts.map +1 -1
  150. package/dist/maps/tiles.js +163 -30
  151. package/dist/maps/tiles.js.map +1 -1
  152. package/dist/maps/types.d.ts +188 -20
  153. package/dist/maps/types.d.ts.map +1 -1
  154. package/dist/markdown/expressions.d.ts +1 -1
  155. package/dist/markdown/expressions.d.ts.map +1 -1
  156. package/dist/markdown/expressions.js.map +1 -1
  157. package/dist/markdown/index.d.ts +7 -6
  158. package/dist/markdown/index.d.ts.map +1 -1
  159. package/dist/markdown/index.js +9 -7
  160. package/dist/markdown/index.js.map +1 -1
  161. package/dist/markdown/spans.d.ts +1 -1
  162. package/dist/markdown/spans.d.ts.map +1 -1
  163. package/dist/media-player/index.d.ts +11 -3
  164. package/dist/media-player/index.d.ts.map +1 -1
  165. package/dist/media-player/index.js +13 -2
  166. package/dist/media-player/index.js.map +1 -1
  167. package/dist/rich-text-editor/clipboard.d.ts +23 -0
  168. package/dist/rich-text-editor/clipboard.d.ts.map +1 -0
  169. package/dist/rich-text-editor/clipboard.js +307 -0
  170. package/dist/rich-text-editor/clipboard.js.map +1 -0
  171. package/dist/rich-text-editor/collab.d.ts +32 -0
  172. package/dist/rich-text-editor/collab.d.ts.map +1 -0
  173. package/dist/rich-text-editor/collab.js +55 -0
  174. package/dist/rich-text-editor/collab.js.map +1 -0
  175. package/dist/rich-text-editor/commands.d.ts +50 -0
  176. package/dist/rich-text-editor/commands.d.ts.map +1 -0
  177. package/dist/rich-text-editor/commands.js +376 -0
  178. package/dist/rich-text-editor/commands.js.map +1 -0
  179. package/dist/rich-text-editor/drag.d.ts +68 -0
  180. package/dist/rich-text-editor/drag.d.ts.map +1 -0
  181. package/dist/rich-text-editor/drag.js +148 -0
  182. package/dist/rich-text-editor/drag.js.map +1 -0
  183. package/dist/rich-text-editor/html.d.ts +145 -0
  184. package/dist/rich-text-editor/html.d.ts.map +1 -0
  185. package/dist/rich-text-editor/html.js +516 -0
  186. package/dist/rich-text-editor/html.js.map +1 -0
  187. package/dist/rich-text-editor/index.d.ts +263 -0
  188. package/dist/rich-text-editor/index.d.ts.map +1 -0
  189. package/dist/rich-text-editor/index.js +822 -0
  190. package/dist/rich-text-editor/index.js.map +1 -0
  191. package/dist/rich-text-editor/inline.d.ts +94 -0
  192. package/dist/rich-text-editor/inline.d.ts.map +1 -0
  193. package/dist/rich-text-editor/inline.js +252 -0
  194. package/dist/rich-text-editor/inline.js.map +1 -0
  195. package/dist/rich-text-editor/keymap.d.ts +71 -0
  196. package/dist/rich-text-editor/keymap.d.ts.map +1 -0
  197. package/dist/rich-text-editor/keymap.js +393 -0
  198. package/dist/rich-text-editor/keymap.js.map +1 -0
  199. package/dist/rich-text-editor/keys.d.ts +29 -0
  200. package/dist/rich-text-editor/keys.d.ts.map +1 -0
  201. package/dist/rich-text-editor/keys.js +93 -0
  202. package/dist/rich-text-editor/keys.js.map +1 -0
  203. package/dist/rich-text-editor/look.d.ts +71 -0
  204. package/dist/rich-text-editor/look.d.ts.map +1 -0
  205. package/dist/rich-text-editor/look.js +342 -0
  206. package/dist/rich-text-editor/look.js.map +1 -0
  207. package/dist/rich-text-editor/markdown.d.ts +18 -0
  208. package/dist/rich-text-editor/markdown.d.ts.map +1 -0
  209. package/dist/rich-text-editor/markdown.js +496 -0
  210. package/dist/rich-text-editor/markdown.js.map +1 -0
  211. package/dist/rich-text-editor/nodes.d.ts +135 -0
  212. package/dist/rich-text-editor/nodes.d.ts.map +1 -0
  213. package/dist/rich-text-editor/nodes.js +397 -0
  214. package/dist/rich-text-editor/nodes.js.map +1 -0
  215. package/dist/rich-text-editor/render.d.ts +68 -0
  216. package/dist/rich-text-editor/render.d.ts.map +1 -0
  217. package/dist/rich-text-editor/render.js +500 -0
  218. package/dist/rich-text-editor/render.js.map +1 -0
  219. package/dist/rich-text-editor/schema.d.ts +16 -0
  220. package/dist/rich-text-editor/schema.d.ts.map +1 -0
  221. package/dist/rich-text-editor/schema.js +386 -0
  222. package/dist/rich-text-editor/schema.js.map +1 -0
  223. package/dist/rich-text-editor/store.d.ts +11 -0
  224. package/dist/rich-text-editor/store.d.ts.map +1 -0
  225. package/dist/rich-text-editor/store.js +43 -0
  226. package/dist/rich-text-editor/store.js.map +1 -0
  227. package/dist/rich-text-editor/suggest.d.ts +127 -0
  228. package/dist/rich-text-editor/suggest.d.ts.map +1 -0
  229. package/dist/rich-text-editor/suggest.js +0 -0
  230. package/dist/rich-text-editor/suggest.js.map +1 -0
  231. package/dist/rich-text-editor/tables.d.ts +41 -0
  232. package/dist/rich-text-editor/tables.d.ts.map +1 -0
  233. package/dist/rich-text-editor/tables.js +204 -0
  234. package/dist/rich-text-editor/tables.js.map +1 -0
  235. package/dist/rich-text-editor/toolbar.d.ts +58 -0
  236. package/dist/rich-text-editor/toolbar.d.ts.map +1 -0
  237. package/dist/rich-text-editor/toolbar.js +548 -0
  238. package/dist/rich-text-editor/toolbar.js.map +1 -0
  239. package/dist/rich-text-editor/view.d.ts +368 -0
  240. package/dist/rich-text-editor/view.d.ts.map +1 -0
  241. package/dist/rich-text-editor/view.js +1968 -0
  242. package/dist/rich-text-editor/view.js.map +1 -0
  243. package/dist/rich-text-editor/virtual.d.ts +54 -0
  244. package/dist/rich-text-editor/virtual.d.ts.map +1 -0
  245. package/dist/rich-text-editor/virtual.js +262 -0
  246. package/dist/rich-text-editor/virtual.js.map +1 -0
  247. package/dist/richtext/node.d.ts +25 -2
  248. package/dist/richtext/node.d.ts.map +1 -1
  249. package/dist/richtext/node.js +46 -24
  250. package/dist/richtext/node.js.map +1 -1
  251. package/dist/table/index.d.ts.map +1 -1
  252. package/dist/table/index.js +14 -5
  253. package/dist/table/index.js.map +1 -1
  254. package/dist/terminal/backends.d.ts +4 -1
  255. package/dist/terminal/backends.d.ts.map +1 -1
  256. package/dist/terminal/backends.js.map +1 -1
  257. package/dist/terminal/index.d.ts +18 -7
  258. package/dist/terminal/index.d.ts.map +1 -1
  259. package/dist/terminal/index.js +28 -11
  260. package/dist/terminal/index.js.map +1 -1
  261. package/dist/terminal/vt/node.d.ts +56 -3
  262. package/dist/terminal/vt/node.d.ts.map +1 -1
  263. package/dist/terminal/vt/node.js +106 -26
  264. package/dist/terminal/vt/node.js.map +1 -1
  265. package/dist/terminal/vt/renderer.d.ts +4 -0
  266. package/dist/terminal/vt/renderer.d.ts.map +1 -1
  267. package/dist/terminal/vt/renderer.js +14 -5
  268. package/dist/terminal/vt/renderer.js.map +1 -1
  269. package/dist/tree/index.d.ts.map +1 -1
  270. package/dist/tree/index.js +6 -4
  271. package/dist/tree/index.js.map +1 -1
  272. package/package.json +23 -4
  273. package/src/charts/node.ts +6 -2
  274. package/src/color-picker/ColorPicker.ts +107 -81
  275. package/src/embed/client.ts +102 -8
  276. package/src/embed/index.ts +2 -0
  277. package/src/html/node.ts +7 -5
  278. package/src/index.ts +2 -0
  279. package/src/{markdown → internal/markdown}/ast.ts +24 -7
  280. package/src/{markdown → internal/markdown}/parse.ts +134 -24
  281. package/src/internal/markdown/stringify.ts +772 -0
  282. package/src/internal/scroll.ts +39 -18
  283. package/src/internal/units.ts +34 -0
  284. package/src/internal/window.ts +4 -2
  285. package/src/maps/anchors.ts +607 -0
  286. package/src/maps/controller.ts +999 -0
  287. package/src/maps/gl/buckets.ts +457 -0
  288. package/src/maps/gl/build-worker.ts +55 -0
  289. package/src/maps/gl/color.ts +62 -0
  290. package/src/maps/gl/cover.ts +170 -0
  291. package/src/maps/gl/index.ts +23 -0
  292. package/src/maps/gl/markers.ts +83 -0
  293. package/src/maps/gl/overlays.ts +379 -0
  294. package/src/maps/gl/pane.ts +42 -0
  295. package/src/maps/gl/placement.ts +816 -0
  296. package/src/maps/gl/renderer.ts +1576 -0
  297. package/src/maps/gl/shaders.ts +486 -0
  298. package/src/maps/gl/store.ts +566 -0
  299. package/src/maps/gl/text.ts +495 -0
  300. package/src/maps/gl/view.ts +1224 -0
  301. package/src/maps/index.ts +270 -81
  302. package/src/maps/labels.ts +214 -121
  303. package/src/maps/node.ts +763 -629
  304. package/src/maps/overlay.ts +148 -43
  305. package/src/maps/paint.ts +3 -0
  306. package/src/maps/proj.ts +31 -0
  307. package/src/maps/renderer.ts +155 -0
  308. package/src/maps/sources.ts +38 -3
  309. package/src/maps/theme.ts +51 -0
  310. package/src/maps/tiles.ts +191 -33
  311. package/src/maps/types.ts +188 -20
  312. package/src/markdown/expressions.ts +5 -1
  313. package/src/markdown/index.ts +14 -11
  314. package/src/markdown/spans.ts +1 -1
  315. package/src/media-player/index.ts +18 -4
  316. package/src/rich-text-editor/clipboard.ts +439 -0
  317. package/src/rich-text-editor/collab.ts +91 -0
  318. package/src/rich-text-editor/commands.ts +448 -0
  319. package/src/rich-text-editor/dom-globals.d.ts +23 -0
  320. package/src/rich-text-editor/drag.ts +211 -0
  321. package/src/rich-text-editor/html.ts +619 -0
  322. package/src/rich-text-editor/index.ts +1331 -0
  323. package/src/rich-text-editor/inline.ts +345 -0
  324. package/src/rich-text-editor/keymap.ts +510 -0
  325. package/src/rich-text-editor/keys.ts +119 -0
  326. package/src/rich-text-editor/look.ts +427 -0
  327. package/src/rich-text-editor/markdown.ts +653 -0
  328. package/src/rich-text-editor/nodes.ts +497 -0
  329. package/src/rich-text-editor/render.ts +800 -0
  330. package/src/rich-text-editor/schema.ts +431 -0
  331. package/src/rich-text-editor/store.ts +39 -0
  332. package/src/rich-text-editor/suggest.ts +597 -0
  333. package/src/rich-text-editor/tables.ts +272 -0
  334. package/src/rich-text-editor/toolbar.ts +724 -0
  335. package/src/rich-text-editor/view.ts +2287 -0
  336. package/src/rich-text-editor/virtual.ts +347 -0
  337. package/src/richtext/node.ts +59 -30
  338. package/src/table/index.ts +14 -5
  339. package/src/terminal/backends.ts +4 -1
  340. package/src/terminal/index.ts +43 -15
  341. package/src/terminal/vt/node.ts +128 -29
  342. package/src/terminal/vt/renderer.ts +27 -5
  343. package/src/tree/index.ts +6 -4
  344. package/dist/markdown/ast.d.ts.map +0 -1
  345. package/dist/markdown/ast.js +0 -17
  346. package/dist/markdown/ast.js.map +0 -1
  347. package/dist/markdown/parse.d.ts.map +0 -1
  348. package/dist/markdown/parse.js.map +0 -1
  349. package/dist/markdown/tags.d.ts.map +0 -1
  350. package/dist/markdown/tags.js.map +0 -1
  351. /package/dist/{markdown → internal/markdown}/parse.d.ts +0 -0
  352. /package/dist/{markdown → internal/markdown}/tags.d.ts +0 -0
  353. /package/dist/{markdown → internal/markdown}/tags.js +0 -0
  354. /package/src/{markdown → internal/markdown}/tags.ts +0 -0
@@ -0,0 +1,300 @@
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 { circleSegments, overlayOrder } from '../overlay.js';
25
+ import { DEFAULT_TILE_SIZE, mercatorXFromLon, mercatorYFromLat, project, worldSize, } from '../proj.js';
26
+ import { Stream, pushBreak, pushFillBreak } from './buckets.js';
27
+ /** Units from a region's centre to its edge: int16, clear of the sentinel. */
28
+ const REACH = 32000;
29
+ /** Logical pixels the view keeps from a region's edge — more than a stroke
30
+ * is wide, so a clipped end, or an outline along the edge, is never seen. */
31
+ const EDGE = 128;
32
+ const globals = globalThis;
33
+ const now = () => globals.performance?.now() ?? Date.now();
34
+ /**
35
+ * A region around the view: centred on the camera, with room for the pane's
36
+ * diagonal either side — so a view zoomed a level out is still inside it,
37
+ * and a pan has most of a pane to go before the bucket is built again.
38
+ */
39
+ export function overlayRegion(camera, pane, scale) {
40
+ const centre = project(camera.center);
41
+ const world = worldSize(camera.zoom, DEFAULT_TILE_SIZE);
42
+ const reach = Math.max(1024, Math.hypot(pane.width, pane.height) + 2 * EDGE);
43
+ return {
44
+ x: centre.x,
45
+ y: centre.y,
46
+ k: (REACH * world) / reach,
47
+ zoom: camera.zoom,
48
+ scale,
49
+ };
50
+ }
51
+ /** Whether a region still serves a view: the zoom within a level of its
52
+ * own, the scale its own, and the view inside it with room to spare. */
53
+ export function regionHolds(region, camera, pane, scale) {
54
+ if (scale !== region.scale)
55
+ return false;
56
+ if (Math.abs(camera.zoom - region.zoom) > 1)
57
+ return false;
58
+ const centre = project(camera.center);
59
+ let dx = centre.x - region.x;
60
+ dx -= Math.round(dx);
61
+ const perPixel = region.k / worldSize(camera.zoom, DEFAULT_TILE_SIZE);
62
+ const x = Math.abs(dx * region.k) + (pane.width / 2 + EDGE) * perPixel;
63
+ const y = Math.abs((centre.y - region.y) * region.k) +
64
+ (pane.height / 2 + EDGE) * perPixel;
65
+ return x <= REACH && y <= REACH;
66
+ }
67
+ /**
68
+ * Where a region lands this frame: device pixels per unit, and its centre
69
+ * in device pixels — in float64, from the camera, which is what keeps both
70
+ * small enough for the float32s they become.
71
+ */
72
+ export function regionPlacement(region, camera, width, height, scale) {
73
+ const centre = project(camera.center);
74
+ const world = worldSize(camera.zoom, DEFAULT_TILE_SIZE) * scale;
75
+ let dx = region.x - centre.x;
76
+ dx -= Math.round(dx);
77
+ return {
78
+ unit: world / region.k,
79
+ x: dx * world + width / 2,
80
+ y: (region.y - centre.y) * world + height / 2,
81
+ };
82
+ }
83
+ /**
84
+ * The bucket for a map's overlays, around a region: each overlay's geometry
85
+ * once, in `drawOverlays`' order, and the passes that draw it — a line's
86
+ * casing and then the line; a polygon's or a circle's fill and then its
87
+ * outline. Colours an overlay does not name are the palette's.
88
+ */
89
+ export function buildOverlayBucket(overlays, region, palette) {
90
+ const started = now();
91
+ const line = new Stream(256);
92
+ const fill = new Stream(256);
93
+ const draws = [];
94
+ const passes = [];
95
+ const clip = {
96
+ minX: -REACH,
97
+ minY: -REACH,
98
+ maxX: REACH,
99
+ maxY: REACH,
100
+ };
101
+ // Region units, from its centre — on the copy of the world nearest it, as
102
+ // `projectLngLat` takes the copy nearest the camera.
103
+ const units = (path) => {
104
+ const out = [];
105
+ for (const position of path) {
106
+ let x = mercatorXFromLon(position.lon) - region.x;
107
+ x -= Math.round(x);
108
+ const y = mercatorYFromLat(position.lat) - region.y;
109
+ out.push(x * region.k, y * region.k);
110
+ }
111
+ return out;
112
+ };
113
+ for (const overlay of overlayOrder(overlays)) {
114
+ const opacity = overlay.opacity ?? 1;
115
+ if (opacity <= 0)
116
+ continue;
117
+ const index = draws.length;
118
+ if (overlay.kind === 'line') {
119
+ const first = line.count;
120
+ emitPath(line, units(overlay.path), clip);
121
+ if (line.count === first)
122
+ continue;
123
+ draws.push({
124
+ layer: index,
125
+ kind: 'line',
126
+ ranges: [first, line.count - first],
127
+ });
128
+ const width = overlay.width ?? 3;
129
+ if (overlay.casing !== undefined) {
130
+ passes.push({
131
+ index,
132
+ kind: 'stroke',
133
+ color: overlay.casing,
134
+ opacity,
135
+ width: Math.max(width + 2, overlay.casingWidth ?? 0),
136
+ });
137
+ }
138
+ passes.push({
139
+ index,
140
+ kind: 'stroke',
141
+ color: overlay.color ?? palette.accent,
142
+ opacity,
143
+ width,
144
+ dash: overlay.dash,
145
+ });
146
+ continue;
147
+ }
148
+ const rings = overlay.kind === 'polygon'
149
+ ? overlay.rings.map(units)
150
+ : circleRing(overlay, region);
151
+ const first = fill.count;
152
+ for (const ring of rings)
153
+ emitRing(fill, clipRing(ring, clip));
154
+ if (fill.count === first)
155
+ continue;
156
+ draws.push({
157
+ layer: index,
158
+ kind: 'fill',
159
+ ranges: [first, fill.count - first],
160
+ });
161
+ passes.push({
162
+ index,
163
+ kind: 'fill',
164
+ color: overlay.fill ?? palette.accent,
165
+ opacity,
166
+ width: 0,
167
+ });
168
+ if (overlay.outline !== undefined) {
169
+ passes.push({
170
+ index,
171
+ kind: 'stroke',
172
+ outline: true,
173
+ color: overlay.outline,
174
+ opacity,
175
+ width: overlay.outlineWidth ?? 1,
176
+ });
177
+ }
178
+ }
179
+ return {
180
+ data: {
181
+ line: line.take(),
182
+ lineRecords: line.count,
183
+ fill: fill.take(),
184
+ fillRecords: fill.count,
185
+ draws,
186
+ stats: {
187
+ features: overlays.length,
188
+ lineRecords: line.count,
189
+ fillRecords: fill.count,
190
+ groups: 0,
191
+ ms: now() - started,
192
+ },
193
+ },
194
+ passes,
195
+ region,
196
+ };
197
+ }
198
+ /**
199
+ * A circle as a ring, in region units: `drawOverlays`' radius — from the
200
+ * projection a hundredth of a degree north of the centre — and as many
201
+ * segments as the largest it is drawn at while the region holds, a level
202
+ * in, needs to keep its sagitta under half a pixel.
203
+ */
204
+ function circleRing(overlay, region) {
205
+ const lat = overlay.center.lat;
206
+ const cy = mercatorYFromLat(lat);
207
+ const north = mercatorYFromLat(Math.min(85, lat + 0.01));
208
+ const radius = (overlay.radiusMetres * Math.abs(cy - north)) / (0.01 * 111_319.9);
209
+ const pixels = radius * worldSize(region.zoom + 1, DEFAULT_TILE_SIZE) * region.scale;
210
+ if (!(pixels > 0.5))
211
+ return [];
212
+ const segments = circleSegments(pixels);
213
+ let x = mercatorXFromLon(overlay.center.lon) - region.x;
214
+ x -= Math.round(x);
215
+ const y = cy - region.y;
216
+ const ring = [];
217
+ for (let i = 0; i < segments; i++) {
218
+ const angle = (i / segments) * Math.PI * 2;
219
+ ring.push((x + Math.cos(angle) * radius) * region.k, (y + Math.sin(angle) * radius) * region.k);
220
+ }
221
+ return [ring];
222
+ }
223
+ const int16 = (v) => {
224
+ const s = Math.round(v);
225
+ return s < -32767 ? -32767 : s > 32767 ? 32767 : s;
226
+ };
227
+ function record(line, x, y, dist) {
228
+ line.reserve(1);
229
+ const at = line.count;
230
+ line.i16[at * 4] = int16(x);
231
+ line.i16[at * 4 + 1] = int16(y);
232
+ line.f32[at * 2 + 1] = dist;
233
+ line.count++;
234
+ }
235
+ function endLine(line) {
236
+ line.reserve(1);
237
+ pushBreak(line);
238
+ }
239
+ /**
240
+ * A path's pieces inside the clip, as polylines each ended by a sentinel.
241
+ * `dist` is measured along the whole path, clipped or not, so a dash
242
+ * pattern stays where it is on the ground when the region moves.
243
+ */
244
+ function emitPath(line, points, clip) {
245
+ let along = 0;
246
+ let open = false;
247
+ for (let i = 0; i + 3 < points.length; i += 2) {
248
+ const x0 = points[i];
249
+ const y0 = points[i + 1];
250
+ const x1 = points[i + 2];
251
+ const y1 = points[i + 3];
252
+ const piece = clipSegment(x0, y0, x1, y1, clip);
253
+ if (piece) {
254
+ const [a, b, c, d] = piece;
255
+ if (!open) {
256
+ record(line, a, b, along + Math.hypot(a - x0, b - y0));
257
+ open = true;
258
+ }
259
+ record(line, c, d, along + Math.hypot(c - x0, d - y0));
260
+ // Cut short at its far end: the next piece is a new polyline.
261
+ if (c !== x1 || d !== y1) {
262
+ endLine(line);
263
+ open = false;
264
+ }
265
+ }
266
+ else if (open) {
267
+ endLine(line);
268
+ open = false;
269
+ }
270
+ along += Math.hypot(x1 - x0, y1 - y0);
271
+ }
272
+ if (open)
273
+ endLine(line);
274
+ }
275
+ /** A ring as a fan, as `./buckets.ts` writes one: its points, closed, each
276
+ * carrying the first as the fan's apex, then a sentinel. */
277
+ function emitRing(fill, ring) {
278
+ const n = ring.length >> 1;
279
+ if (n < 3)
280
+ return;
281
+ fill.reserve(n + 2);
282
+ const i16 = fill.i16;
283
+ const ax = int16(ring[0]);
284
+ const ay = int16(ring[1]);
285
+ let at = fill.count * 4;
286
+ for (let i = 0; i < n; i++) {
287
+ i16[at] = int16(ring[i * 2]);
288
+ i16[at + 1] = int16(ring[i * 2 + 1]);
289
+ i16[at + 2] = ax;
290
+ i16[at + 3] = ay;
291
+ at += 4;
292
+ }
293
+ i16[at] = ax;
294
+ i16[at + 1] = ay;
295
+ i16[at + 2] = ax;
296
+ i16[at + 3] = ay;
297
+ fill.count += n + 1;
298
+ pushFillBreak(fill);
299
+ }
300
+ //# sourceMappingURL=overlays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays.js","sourceRoot":"","sources":["../../../src/maps/gl/overlays.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Node } from 'react-x11/node';
2
+ import type { A11ySceneItem } from 'react-x11/node';
3
+ /** Registration key, `kind` and tag, one string — react-x11 rejects a node
4
+ * whose `kind` is not the name it was registered under. */
5
+ export declare const GL_PANE = "mapglpane";
6
+ export declare class GlPaneNode extends Node {
7
+ constructor(props: Record<string, unknown>, app: unknown);
8
+ /** The markers in view, as buttons — the controller's answer, which the
9
+ * retained renderer's element gives too. */
10
+ a11yScene(): A11ySceneItem[];
11
+ }
12
+ //# sourceMappingURL=pane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pane.d.ts","sourceRoot":"","sources":["../../../src/maps/gl/pane.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD;4DAC4D;AAC5D,eAAO,MAAM,OAAO,cAAc,CAAC;AAEnC,qBAAa,UAAW,SAAQ,IAAI;IAClC,YAAY,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,EAMvD;IAED;iDAC6C;IACpC,SAAS,IAAI,aAAa,EAAE,CAGpC;CACF"}
@@ -0,0 +1,37 @@
1
+ // The GL renderer's pane: the box its `<glarea>` sits in, as an element of
2
+ // its own.
3
+ //
4
+ // It exists for everything the surface cannot be. A `<glarea>` is a window
5
+ // of its own — a child X window on X11, a CALayer on the Cocoa backend — so
6
+ // core's hit test skips it and answers with the node behind it, which is
7
+ // this one: the pane's handlers are what Cocoa's presses, drags and wheels
8
+ // reach, and what X11's wheel bubbles to (core forwards the wheel from the
9
+ // child window, named at the surface). It takes the keyboard focus, so the
10
+ // arrows and +/− work. It is what an assistive technology meets — the markers
11
+ // in view, as buttons, the same scene the retained renderer's element answers
12
+ // with. And it paints the style's background under the surface, which is
13
+ // what the pane shows before the first GL frame, and on a connection where
14
+ // the surface never draws at all.
15
+ //
16
+ // Registered by `./index.ts` when the GL renderer is loaded, and not before:
17
+ // an application that never draws a map through GL registers nothing.
18
+ import { Node } from 'react-x11/node';
19
+ /** Registration key, `kind` and tag, one string — react-x11 rejects a node
20
+ * whose `kind` is not the name it was registered under. */
21
+ export const GL_PANE = 'mapglpane';
22
+ export class GlPaneNode extends Node {
23
+ constructor(props, app) {
24
+ super(GL_PANE, props, app);
25
+ // A map is a thing you drive with the keyboard as well as the mouse,
26
+ // on either renderer.
27
+ this.focusableByDefault = true;
28
+ this.defaultCursor = 'grab';
29
+ }
30
+ /** The markers in view, as buttons — the controller's answer, which the
31
+ * retained renderer's element gives too. */
32
+ a11yScene() {
33
+ const controller = this.props.mapController;
34
+ return controller?.markerScene() ?? [];
35
+ }
36
+ }
37
+ //# sourceMappingURL=pane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pane.js","sourceRoot":"","sources":["../../../src/maps/gl/pane.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,WAAW;AACX,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,yEAAyE;AACzE,2EAA2E;AAC3E,kCAAkC;AAClC,EAAE;AACF,6EAA6E;AAC7E,sEAAsE;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAKtC;4DAC4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC;AAEnC,MAAM,OAAO,UAAW,SAAQ,IAAI;IAClC,YAAY,KAA8B,EAAE,GAAY;QACtD,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,GAA4C,CAAC,CAAC;QACpE,qEAAqE;QACrE,sBAAsB;QACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED;iDAC6C;IACpC,SAAS;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAA0C,CAAC;QACzE,OAAO,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,111 @@
1
+ import type { PreparedStyle } from '../paint.js';
2
+ import type { GlLabelData } from '../anchors.js';
3
+ import type { LabelAtlas } from './text.js';
4
+ /** A rectangle in device pixels. */
5
+ interface Rect {
6
+ x: number;
7
+ y: number;
8
+ width: number;
9
+ height: number;
10
+ }
11
+ /** One tile's anchors, placed on screen as the frame draws the tile — a
12
+ * frame's `RenderTile` as it is. */
13
+ export interface LabelTile {
14
+ data: {
15
+ labels?: GlLabelData;
16
+ };
17
+ /** The tile square's top-left and edge, device pixels. */
18
+ x: number;
19
+ y: number;
20
+ size: number;
21
+ /** The part of the view the tile stands for. An anchor outside it is
22
+ * another tile's — how a stand-in ancestor offers no duplicates. */
23
+ clip: Rect;
24
+ }
25
+ export interface PlacementFrame {
26
+ /** Device pixels. */
27
+ width: number;
28
+ height: number;
29
+ scale: number;
30
+ zoom: number;
31
+ style: PreparedStyle;
32
+ tiles: readonly LabelTile[];
33
+ /** The view's centre, normalised mercator, and the world's width in
34
+ * device pixels at this zoom. */
35
+ centerX: number;
36
+ centerY: number;
37
+ world: number;
38
+ now: number;
39
+ /** Whether labels not already shown may be placed. `view.ts` says no
40
+ * while the zoom is changing: what is shown rides along and leaves as it
41
+ * must, and what the zoom uncovers is named once it stops — not labels
42
+ * arriving and leaving at every step of it. `true` by default. */
43
+ admit?: boolean;
44
+ /** The camera is moving: a label keeps the raster it has, rather than
45
+ * asking for one at each size its zoom ramp passes through. */
46
+ moving?: boolean;
47
+ }
48
+ /** Floats per label instance; the layout `renderer.ts` binds. */
49
+ export declare const LABEL_INSTANCE = 18;
50
+ /** The frame's labels, ready to draw. */
51
+ export interface LabelBatch {
52
+ atlas: LabelAtlas;
53
+ /** {@link LABEL_INSTANCE} floats per label: centre x, y (device
54
+ * pixels); cos, sin of the baseline; the atlas rect x, y, w, h; ink
55
+ * and halo colour, premultiplied and faded; halo radius; `1` to set
56
+ * the label on whole pixels. */
57
+ instances: Float32Array;
58
+ count: number;
59
+ }
60
+ export interface PlacementStats {
61
+ /** Anchors considered, labels placed, labels drawn (fading ones too). */
62
+ candidates: number;
63
+ placed: number;
64
+ drawn: number;
65
+ /** Milliseconds this thread spent placing. */
66
+ ms: number;
67
+ }
68
+ /** How long a label takes to appear or leave. */
69
+ export declare const FADE_MS = 220;
70
+ /**
71
+ * The frame's label state: what is shown, how visibly, and the collision
72
+ * index a pass builds.
73
+ */
74
+ export declare class LabelPlacer {
75
+ private readonly _shown;
76
+ private _style;
77
+ /** The last batch's time; null before the first, which advances no fade. */
78
+ private _last;
79
+ private readonly _grid;
80
+ private readonly _colors;
81
+ /** Estimated widths in ems, by text — a street name is asked about
82
+ * once per anchor per frame. */
83
+ private readonly _ems;
84
+ private _instances;
85
+ stats: PlacementStats;
86
+ /** Labels still changing visibility: another frame is worth drawing. */
87
+ get animating(): boolean;
88
+ /** Forget everything shown — the style's layers are not the same ones. */
89
+ reset(): void;
90
+ /**
91
+ * Choose the frame's labels. Asks `atlas` for each contender's box, as
92
+ * the frame's budget allows, and for each winner's raster.
93
+ */
94
+ place(frame: PlacementFrame, atlas: LabelAtlas): void;
95
+ /**
96
+ * The frame's instances: every shown label at its ground's place on
97
+ * screen, faded by where it is in its fade. Advances the fades, and lets
98
+ * go of labels that have faded out.
99
+ */
100
+ batch(frame: PlacementFrame, atlas: LabelAtlas): LabelBatch;
101
+ /** One anchor as a contender, or null when it cannot be one at all at
102
+ * this zoom — off the view, or on a run too bent or too short for even
103
+ * a short name. `unit` is device pixels per unit of the lengths given. */
104
+ private _candidate;
105
+ /** Each symbol layer's labelling at this zoom, by layer index — null
106
+ * where it does not label. */
107
+ private _layersAt;
108
+ private _color;
109
+ }
110
+ export {};
111
+ //# sourceMappingURL=placement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../../../src/maps/gl/placement.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAcjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD,oCAAoC;AACpC,UAAU,IAAI;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;qCACqC;AACrC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;IAC/B,0DAA0D;IAC1D,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb;yEACqE;IACrE,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IAC5B;sCACkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ;;;uEAGmE;IACnE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;oEACgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,iEAAiE;AACjE,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,yCAAyC;AACzC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB;;;qCAGiC;IACjC,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;CACZ;AAQD,iDAAiD;AACjD,eAAO,MAAM,OAAO,MAAM,CAAC;AA0E3B;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,MAAM,CAA8B;IAC5C,4EAA4E;IAC5E,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D;qCACiC;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,UAAU,CAAyC;IAC3D,KAAK,EAAE,cAAc,CAAiD;IAEtE,wEAAwE;IACxE,IAAI,SAAS,IAAI,OAAO,CAKvB;IAED,0EAA0E;IAC1E,KAAK,IAAI,IAAI,CAEZ;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAgOpD;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAuE1D;IAID;;+EAE2E;IAC3E,OAAO,CAAC,UAAU;IAsElB;mCAC+B;IAC/B,OAAO,CAAC,SAAS;IAyCjB,OAAO,CAAC,MAAM;CAQf"}