@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,531 @@
1
+ // Where in a tile a label *could* go, worked out once per tile and never per
2
+ // frame — and by both renderers: the GL renderer with a tile's buckets, on
3
+ // its build workers (`./gl/buckets.ts`), and the retained renderer when it
4
+ // collects a tile's candidates (`./labels.ts`). One answer, so a map names
5
+ // the same streets in the same places whichever of them draws it.
6
+ //
7
+ // A point label's place is its point. A line label's place is the hard
8
+ // part, and the answer here is the one that makes a street name easy to
9
+ // read and hard to notice: **on the street, along its centre line, on a
10
+ // stretch that is straight** — the name set as one straight run of type,
11
+ // never bent around a corner, sitting on the road it names rather than
12
+ // beside it. Three steps get there:
13
+ //
14
+ // 1. **Merge.** A street is one feature per segment in every schema there
15
+ // is — `street_labels` offers "Westminster Bridge Road" 24 times in one
16
+ // London tile — so the pieces of each name are joined end to end into
17
+ // the polylines they were cut from. Without this, a straight avenue cut
18
+ // at every cross street has no stretch longer than a block.
19
+ // 2. **Straighten.** Each polyline is walked into its maximal straight
20
+ // *runs*: stretches whose every vertex stays within {@link STRAIGHT} of
21
+ // the chord between the run's ends. A gentle curve is a run; a corner
22
+ // ends one.
23
+ // 3. **Anchor.** Each run offers a few anchors on its chord — its middle,
24
+ // the middle of every block between two intersections, and every
25
+ // {@link SPACING} along a long one — each carrying how much straight run
26
+ // lies either side of it and how far it is from the nearest
27
+ // intersection. Whether a label *fits* there is a question of its width
28
+ // in pixels and so of the zoom, and is left to placement; what is
29
+ // computed here is the geometry that answers it at any zoom.
30
+ //
31
+ // Intersections are found from the label layer itself: a vertex two
32
+ // differently named streets share is a junction. A name set across a junction
33
+ // hides the street that crosses there, so placement prefers an anchor whose
34
+ // label clears one — the middle of a block — to one that does not.
35
+ //
36
+ // Everything leaves as one Float32Array and a string table, so a worker can
37
+ // hand it over with the buckets (see `./gl/store.ts`).
38
+ import { GeomType, GeometryBuffer } from './mvt.js';
39
+ // --- the fit rules both renderers place by ------------------------------------
40
+ /** A line label is set level — on whole pixels, which is sharper — when its
41
+ * street is this close to level, in radians. */
42
+ export const LEVEL_SNAP = 0.03;
43
+ /** How far a line label's run may depart from straight, as a fraction of
44
+ * the text's size at the zoom it is drawn at. */
45
+ export const STRAIGHT_FRACTION = 0.3;
46
+ /** Run that must remain past each end of a line label, in text heights —
47
+ * a name that stops exactly at a corner reads as bent. */
48
+ export const LINE_MARGIN = 0.5;
49
+ /** A name's width before it is measured: a lower-ish bound, from how wide
50
+ * Latin and CJK glyphs run. Only ever used to rule out what cannot fit. */
51
+ export function estimateWidth(text, size) {
52
+ let em = 0;
53
+ for (const ch of text)
54
+ em += ch.codePointAt(0) >= 0x2e80 ? 0.95 : 0.5;
55
+ return em * size;
56
+ }
57
+ /** Floats per anchor record. */
58
+ export const LABEL_STRIDE = 10;
59
+ /** Field offsets within an anchor record. */
60
+ export const LabelField = {
61
+ /** The anchor, in tile units. */
62
+ x: 0,
63
+ y: 1,
64
+ /** The baseline's direction, radians, y down — always upright (see
65
+ * {@link upright}), so no name is ever read upside down. */
66
+ angle: 2,
67
+ /** Tile units of straight run either side of the anchor — how long a
68
+ * label it can carry. `-1` for a point label, which carries any. */
69
+ avail: 3,
70
+ /** Tile units either side of the anchor before an intersection. */
71
+ clear: 4,
72
+ /** The straight run's whole length, tile units; `0` for a point. */
73
+ length: 5,
74
+ /** The run's greatest departure from its chord, tile units. */
75
+ dev: 6,
76
+ /** Index into {@link GlLabelData.texts}. */
77
+ text: 7,
78
+ /** Index into the prepared style's layers. */
79
+ layer: 8,
80
+ /** Importance within the layer: a road's class, a place's population. */
81
+ priority: 9,
82
+ };
83
+ /** How far a run may depart from straight, in tile units: one pixel at
84
+ * the tile's own zoom (a 512-pixel tile is 4096 units), two at the next. */
85
+ export const STRAIGHT = 8;
86
+ /** The sharpest turn a run takes at one vertex, however small the
87
+ * departure — a kink reads as a corner under a line of text. */
88
+ const MAX_TURN = Math.cos((25 * Math.PI) / 180);
89
+ /** Anchors along a long run with no junction on it, in tile units — 256
90
+ * pixels at the tile's own zoom. */
91
+ export const SPACING = 2048;
92
+ /** The shortest run worth an anchor: 16 pixels at the tile's own zoom,
93
+ * which is a label only four levels of overzoom later. */
94
+ const MIN_RUN = 128;
95
+ /** "No junction within reach", in tile units. */
96
+ const FAR = 1e9;
97
+ /** A road's importance among roads: the order a map names them in. */
98
+ const ROAD_CLASS = {
99
+ motorway: 9,
100
+ trunk: 8,
101
+ primary: 7,
102
+ secondary: 6,
103
+ tertiary: 5,
104
+ unclassified: 4,
105
+ residential: 4,
106
+ living_street: 3,
107
+ pedestrian: 3,
108
+ service: 2,
109
+ track: 1,
110
+ footway: 1,
111
+ cycleway: 1,
112
+ path: 1,
113
+ bridleway: 1,
114
+ steps: 0,
115
+ };
116
+ const globals = globalThis;
117
+ const now = () => globals.performance?.now() ?? Date.now();
118
+ /** `collectLabels`' rule: the style's field, or the local `name` where a
119
+ * translation is missing — which is most features. */
120
+ function textOf(cursor, field) {
121
+ const raw = cursor.get(field);
122
+ if (typeof raw === 'string' && raw.length > 0)
123
+ return raw;
124
+ if (field === 'name')
125
+ return '';
126
+ const local = cursor.get('name');
127
+ return typeof local === 'string' ? local : '';
128
+ }
129
+ function priorityOf(cursor) {
130
+ const population = cursor.get('population');
131
+ if (typeof population === 'number' && population > 0) {
132
+ return Math.log10(population + 1);
133
+ }
134
+ const kind = cursor.get('kind');
135
+ return typeof kind === 'string' ? (ROAD_CLASS[kind] ?? 0) : 0;
136
+ }
137
+ /** A vertex as one number: tile coordinates are integers after scaling,
138
+ * and within ±32768 with the buffer included. */
139
+ const vertexKey = (x, y) => (Math.round(x) + 32768) * 65536 + (Math.round(y) + 32768);
140
+ /** A growable array of anchor records. */
141
+ class AnchorWriter {
142
+ data = new Float32Array(LABEL_STRIDE * 256);
143
+ count = 0;
144
+ _next() {
145
+ const at = this.count * LABEL_STRIDE;
146
+ if (at + LABEL_STRIDE > this.data.length) {
147
+ const grown = new Float32Array(this.data.length * 2);
148
+ grown.set(this.data);
149
+ this.data = grown;
150
+ }
151
+ this.count++;
152
+ return at;
153
+ }
154
+ point(x, y, text, layer, priority) {
155
+ const at = this._next();
156
+ const d = this.data;
157
+ d[at + LabelField.x] = x;
158
+ d[at + LabelField.y] = y;
159
+ d[at + LabelField.angle] = 0;
160
+ d[at + LabelField.avail] = -1;
161
+ d[at + LabelField.clear] = FAR;
162
+ d[at + LabelField.length] = 0;
163
+ d[at + LabelField.dev] = 0;
164
+ d[at + LabelField.text] = text;
165
+ d[at + LabelField.layer] = layer;
166
+ d[at + LabelField.priority] = priority;
167
+ }
168
+ line(x, y, angle, avail, clear, length, dev, text, layer, priority) {
169
+ const at = this._next();
170
+ const d = this.data;
171
+ d[at + LabelField.x] = x;
172
+ d[at + LabelField.y] = y;
173
+ d[at + LabelField.angle] = angle;
174
+ d[at + LabelField.avail] = avail;
175
+ d[at + LabelField.clear] = clear;
176
+ d[at + LabelField.length] = length;
177
+ d[at + LabelField.dev] = dev;
178
+ d[at + LabelField.text] = text;
179
+ d[at + LabelField.layer] = layer;
180
+ d[at + LabelField.priority] = priority;
181
+ }
182
+ take() {
183
+ return this.data.slice(0, this.count * LABEL_STRIDE);
184
+ }
185
+ }
186
+ /**
187
+ * A tile's label anchors, for every symbol layer of the style.
188
+ *
189
+ * `extent` is the tile-unit square the anchors are expressed in — the
190
+ * buckets' {@link import('./buckets.js').TILE_EXTENT}, passed in rather than
191
+ * imported so this module does not import the one that calls it. Anchors
192
+ * are kept only inside the tile's own square: the buffer past its edge is
193
+ * the neighbour's, and a label in it would be offered twice.
194
+ */
195
+ export function buildTileLabels(tile, prepared, extent) {
196
+ const started = now();
197
+ const texts = [];
198
+ const index = new Map();
199
+ const out = new AnchorWriter();
200
+ const buffer = new GeometryBuffer();
201
+ for (let i = 0; i < prepared.layers.length; i++) {
202
+ const { layer, filter } = prepared.layers[i];
203
+ if (layer.type !== 'symbol' || layer.visible === false)
204
+ continue;
205
+ const source = tile.layers.get(layer.sourceLayer);
206
+ if (!source || source.length === 0)
207
+ continue;
208
+ const symbol = layer;
209
+ const k = extent / source.extent;
210
+ const cursor = source.feature(0);
211
+ const groups = new Map();
212
+ // Which name first touched each vertex, or -1 once a second did.
213
+ const touched = new Map();
214
+ for (let f = 0; f < source.length; f++) {
215
+ source.seek(f, cursor);
216
+ if (!filter(cursor))
217
+ continue;
218
+ const text = textOf(cursor, symbol.textField);
219
+ if (text.length === 0)
220
+ continue;
221
+ let t = index.get(text);
222
+ if (t === undefined) {
223
+ t = texts.length;
224
+ texts.push(text);
225
+ index.set(text, t);
226
+ }
227
+ const priority = priorityOf(cursor);
228
+ cursor.readGeometry(buffer);
229
+ if (buffer.points === 0)
230
+ continue;
231
+ if (cursor.type === GeomType.LineString) {
232
+ let group = groups.get(t);
233
+ if (!group) {
234
+ group = { text: t, priority, parts: [] };
235
+ groups.set(t, group);
236
+ }
237
+ if (priority > group.priority)
238
+ group.priority = priority;
239
+ for (let part = 0; part < buffer.parts; part++) {
240
+ const from = buffer.starts[part];
241
+ const to = buffer.starts[part + 1];
242
+ if (to - from < 2)
243
+ continue;
244
+ const points = [];
245
+ for (let p = from; p < to; p++) {
246
+ const x = buffer.coords[p * 2] * k;
247
+ const y = buffer.coords[p * 2 + 1] * k;
248
+ // Consecutive duplicates would make zero-length segments, whose
249
+ // direction is undefined.
250
+ const n = points.length;
251
+ if (n > 0 && points[n - 2] === x && points[n - 1] === y)
252
+ continue;
253
+ points.push(x, y);
254
+ const key = vertexKey(x, y);
255
+ const seen = touched.get(key);
256
+ if (seen === undefined)
257
+ touched.set(key, t);
258
+ else if (seen !== t)
259
+ touched.set(key, -1);
260
+ }
261
+ if (points.length >= 4)
262
+ group.parts.push(points);
263
+ }
264
+ continue;
265
+ }
266
+ const anchor = pointAnchor(buffer, cursor.type);
267
+ if (!anchor)
268
+ continue;
269
+ const x = anchor.x * k;
270
+ const y = anchor.y * k;
271
+ if (x < 0 || y < 0 || x >= extent || y >= extent)
272
+ continue;
273
+ out.point(x, y, t, i, priority);
274
+ }
275
+ for (const group of groups.values()) {
276
+ for (const chain of mergeParts(group.parts)) {
277
+ anchorChain(chain, touched, extent, group, i, out);
278
+ }
279
+ }
280
+ }
281
+ return { texts, anchors: out.take(), count: out.count, ms: now() - started };
282
+ }
283
+ /**
284
+ * Where a point-like feature's label goes: the point, or for a polygon the
285
+ * middle of its largest ring's box — a cheap stand-in for the pole of
286
+ * inaccessibility that lands inside every convex shape.
287
+ */
288
+ function pointAnchor(buffer, type) {
289
+ if (buffer.points === 0)
290
+ return null;
291
+ if (type === GeomType.Point) {
292
+ return { x: buffer.coords[0], y: buffer.coords[1] };
293
+ }
294
+ let best = 0;
295
+ let bestArea = -1;
296
+ for (let part = 0; part < buffer.parts; part++) {
297
+ const area = Math.abs(buffer.areas[part]);
298
+ if (area > bestArea) {
299
+ bestArea = area;
300
+ best = part;
301
+ }
302
+ }
303
+ const b = best * 4;
304
+ return {
305
+ x: (buffer.partBounds[b] + buffer.partBounds[b + 2]) / 2,
306
+ y: (buffer.partBounds[b + 1] + buffer.partBounds[b + 3]) / 2,
307
+ };
308
+ }
309
+ /**
310
+ * Join one name's pieces into the polylines they were cut from.
311
+ *
312
+ * Pieces meet at shared end points, in either direction. Where more than one
313
+ * piece continues from a point — a fork, or a dual carriageway's two halves
314
+ * — the one that turns least is taken, so a chain follows the street the way
315
+ * a reader's eye does. Every piece is used exactly once.
316
+ */
317
+ export function mergeParts(parts) {
318
+ const ends = new Map();
319
+ const add = (key, end) => {
320
+ const list = ends.get(key);
321
+ if (list)
322
+ list.push(end);
323
+ else
324
+ ends.set(key, [end]);
325
+ };
326
+ for (let i = 0; i < parts.length; i++) {
327
+ const p = parts[i];
328
+ add(vertexKey(p[0], p[1]), i * 2);
329
+ add(vertexKey(p[p.length - 2], p[p.length - 1]), i * 2 + 1);
330
+ }
331
+ const used = new Uint8Array(parts.length);
332
+ /** The unused piece that continues from `(x, y)` heading `(dx, dy)` with
333
+ * the least turn, oriented to start there; or null. */
334
+ const next = (x, y, dx, dy) => {
335
+ const list = ends.get(vertexKey(x, y));
336
+ if (!list)
337
+ return null;
338
+ let best = null;
339
+ let bestIndex = -1;
340
+ let bestDot = -Infinity;
341
+ for (const end of list) {
342
+ const i = end >> 1;
343
+ if (used[i])
344
+ continue;
345
+ const p = parts[i];
346
+ const oriented = end & 1 ? reversed(p) : p;
347
+ const ux = oriented[2] - oriented[0];
348
+ const uy = oriented[3] - oriented[1];
349
+ const len = Math.hypot(ux, uy) || 1;
350
+ const dot = (ux * dx + uy * dy) / len;
351
+ if (dot > bestDot) {
352
+ bestDot = dot;
353
+ best = oriented;
354
+ bestIndex = i;
355
+ }
356
+ }
357
+ if (best)
358
+ used[bestIndex] = 1;
359
+ return best;
360
+ };
361
+ const chains = [];
362
+ for (let i = 0; i < parts.length; i++) {
363
+ if (used[i])
364
+ continue;
365
+ used[i] = 1;
366
+ let chain = parts[i].slice();
367
+ // Forward from the end, then forward from the start of the reversed
368
+ // chain — which is backward from the original start.
369
+ for (let pass = 0; pass < 2; pass++) {
370
+ for (;;) {
371
+ const n = chain.length;
372
+ const dx = chain[n - 2] - chain[n - 4];
373
+ const dy = chain[n - 1] - chain[n - 3];
374
+ const len = Math.hypot(dx, dy) || 1;
375
+ const more = next(chain[n - 2], chain[n - 1], dx / len, dy / len);
376
+ if (!more)
377
+ break;
378
+ for (let j = 2; j < more.length; j++)
379
+ chain.push(more[j]);
380
+ }
381
+ chain = reversed(chain);
382
+ }
383
+ chains.push(chain);
384
+ }
385
+ return chains;
386
+ }
387
+ function reversed(points) {
388
+ const out = new Array(points.length);
389
+ for (let i = 0, j = points.length - 2; j >= 0; i += 2, j -= 2) {
390
+ out[i] = points[j];
391
+ out[i + 1] = points[j + 1];
392
+ }
393
+ return out;
394
+ }
395
+ /**
396
+ * A chain's maximal straight runs, greedily from its start: a run grows a
397
+ * vertex at a time while every vertex inside it stays within `tolerance`
398
+ * of the chord and no vertex turns sharper than {@link MAX_TURN}. A run
399
+ * ends at the last vertex that kept it straight, and the next one starts
400
+ * there, so runs share their end points and cover the whole chain.
401
+ */
402
+ export function straightRuns(chain, tolerance = STRAIGHT) {
403
+ const n = chain.length / 2;
404
+ const runs = [];
405
+ let from = 0;
406
+ while (from < n - 1) {
407
+ let to = from + 1;
408
+ let dev = 0;
409
+ while (to + 1 < n) {
410
+ const d = deviation(chain, from, to + 1);
411
+ if (d > tolerance || !gentle(chain, to))
412
+ break;
413
+ dev = d;
414
+ to++;
415
+ }
416
+ const length = Math.hypot(chain[to * 2] - chain[from * 2], chain[to * 2 + 1] - chain[from * 2 + 1]);
417
+ runs.push({ from, to, length, dev });
418
+ from = to;
419
+ }
420
+ return runs;
421
+ }
422
+ /** The greatest distance of vertices strictly inside `(from, to)` from the
423
+ * chord between them. */
424
+ function deviation(chain, from, to) {
425
+ const ax = chain[from * 2];
426
+ const ay = chain[from * 2 + 1];
427
+ const dx = chain[to * 2] - ax;
428
+ const dy = chain[to * 2 + 1] - ay;
429
+ const len = Math.hypot(dx, dy);
430
+ if (len === 0)
431
+ return Infinity;
432
+ let worst = 0;
433
+ for (let m = from + 1; m < to; m++) {
434
+ const px = chain[m * 2] - ax;
435
+ const py = chain[m * 2 + 1] - ay;
436
+ // Off the chord's ends counts as off the chord: a run that doubles back
437
+ // is not straight however close its points stay to the line.
438
+ const along = (px * dx + py * dy) / len;
439
+ const off = along < 0
440
+ ? Math.hypot(px, py)
441
+ : along > len
442
+ ? Math.hypot(px - dx, py - dy)
443
+ : Math.abs(px * dy - py * dx) / len;
444
+ if (off > worst)
445
+ worst = off;
446
+ }
447
+ return worst;
448
+ }
449
+ /** Whether the turn at vertex `m` is gentle enough to stay in a run. */
450
+ function gentle(chain, m) {
451
+ const ax = chain[m * 2] - chain[m * 2 - 2];
452
+ const ay = chain[m * 2 + 1] - chain[m * 2 - 1];
453
+ const bx = chain[m * 2 + 2] - chain[m * 2];
454
+ const by = chain[m * 2 + 3] - chain[m * 2 + 1];
455
+ const la = Math.hypot(ax, ay);
456
+ const lb = Math.hypot(bx, by);
457
+ if (la === 0 || lb === 0)
458
+ return true;
459
+ return (ax * bx + ay * by) / (la * lb) >= MAX_TURN;
460
+ }
461
+ /** How far past vertical a name still reads bottom to top. */
462
+ const VERTICAL_BIAS = (10 * Math.PI) / 180;
463
+ /**
464
+ * A direction, turned to read left to right — and, near vertical, bottom
465
+ * to top: within [-π/2 - 10°, π/2 - 10°), y down, so -π/2 points up the
466
+ * screen. Without the bias, two streets a few degrees either side of
467
+ * vertical read in opposite directions side by side; with it, every
468
+ * near-vertical name reads the way maps set them, upward.
469
+ */
470
+ export function upright(angle) {
471
+ let a = angle;
472
+ while (a >= Math.PI / 2 - VERTICAL_BIAS)
473
+ a -= Math.PI;
474
+ while (a < -Math.PI / 2 - VERTICAL_BIAS)
475
+ a += Math.PI;
476
+ return a;
477
+ }
478
+ /** Every anchor one merged chain offers. */
479
+ function anchorChain(chain, touched, extent, group, layer, out) {
480
+ for (const run of straightRuns(chain)) {
481
+ const L = run.length;
482
+ if (L < MIN_RUN)
483
+ continue;
484
+ const ax = chain[run.from * 2];
485
+ const ay = chain[run.from * 2 + 1];
486
+ const ux = (chain[run.to * 2] - ax) / L;
487
+ const uy = (chain[run.to * 2 + 1] - ay) / L;
488
+ // Where along the chord the run's junctions are.
489
+ const junctions = [];
490
+ for (let m = run.from; m <= run.to; m++) {
491
+ const x = chain[m * 2];
492
+ const y = chain[m * 2 + 1];
493
+ if (touched.get(vertexKey(x, y)) !== -1)
494
+ continue;
495
+ junctions.push((x - ax) * ux + (y - ay) * uy);
496
+ }
497
+ junctions.sort((a, b) => a - b);
498
+ // The run's middle, the middle of every block, and — on a run with no
499
+ // junction at all — every SPACING either side of the middle.
500
+ const at = [L / 2];
501
+ const bounds = [0, ...junctions, L];
502
+ for (let b = 0; b + 1 < bounds.length; b++) {
503
+ if (bounds[b + 1] - bounds[b] >= MIN_RUN) {
504
+ at.push((bounds[b] + bounds[b + 1]) / 2);
505
+ }
506
+ }
507
+ if (junctions.length === 0) {
508
+ for (let s = SPACING; L / 2 + s <= L - SPACING / 2; s += SPACING) {
509
+ at.push(L / 2 + s, L / 2 - s);
510
+ }
511
+ }
512
+ at.sort((a, b) => a - b);
513
+ const angle = upright(Math.atan2(uy, ux));
514
+ let last = -Infinity;
515
+ for (const s of at) {
516
+ // Two anchors closer than a few pixels are one anchor twice.
517
+ if (s - last < 32)
518
+ continue;
519
+ last = s;
520
+ const x = ax + ux * s;
521
+ const y = ay + uy * s;
522
+ if (x < 0 || y < 0 || x >= extent || y >= extent)
523
+ continue;
524
+ let clear = FAR;
525
+ for (const j of junctions)
526
+ clear = Math.min(clear, Math.abs(j - s));
527
+ out.line(x, y, angle, Math.min(s, L - s), clear, L, run.dev, group.text, layer, group.priority);
528
+ }
529
+ }
530
+ }
531
+ //# sourceMappingURL=anchors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchors.js","sourceRoot":"","sources":["../../src/maps/anchors.ts"],"names":[],"mappings":"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"}