@react-x11/components 0.9.0 → 0.11.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 (579) hide show
  1. package/README.md +10 -4
  2. package/dist/charts/node.d.ts +11 -1
  3. package/dist/charts/node.d.ts.map +1 -1
  4. package/dist/charts/node.js +44 -14
  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 +27 -24
  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/index.d.ts +1 -1
  24. package/dist/code-language/index.d.ts.map +1 -1
  25. package/dist/code-language/index.js +1 -1
  26. package/dist/code-language/index.js.map +1 -1
  27. package/dist/code-language/languages/glsl.d.ts.map +1 -1
  28. package/dist/code-language/languages/glsl.js +10 -2
  29. package/dist/code-language/languages/glsl.js.map +1 -1
  30. package/dist/code-language/languages/javascript.d.ts.map +1 -1
  31. package/dist/code-language/languages/javascript.js +18 -3
  32. package/dist/code-language/languages/javascript.js.map +1 -1
  33. package/dist/code-language/languages/json.d.ts.map +1 -1
  34. package/dist/code-language/languages/json.js +10 -2
  35. package/dist/code-language/languages/json.js.map +1 -1
  36. package/dist/code-language/languages/shell.d.ts.map +1 -1
  37. package/dist/code-language/languages/shell.js +10 -2
  38. package/dist/code-language/languages/shell.js.map +1 -1
  39. package/dist/code-language/languages/sql.d.ts.map +1 -1
  40. package/dist/code-language/languages/sql.js +20 -2
  41. package/dist/code-language/languages/sql.js.map +1 -1
  42. package/dist/code-language/runs.d.ts +31 -0
  43. package/dist/code-language/runs.d.ts.map +1 -1
  44. package/dist/code-language/runs.js +105 -0
  45. package/dist/code-language/runs.js.map +1 -1
  46. package/dist/code-language/stream.d.ts +22 -0
  47. package/dist/code-language/stream.d.ts.map +1 -1
  48. package/dist/code-language/stream.js +259 -9
  49. package/dist/code-language/stream.js.map +1 -1
  50. package/dist/code-language/types.d.ts +5 -4
  51. package/dist/code-language/types.d.ts.map +1 -1
  52. package/dist/codeblock/index.d.ts +26 -2
  53. package/dist/codeblock/index.d.ts.map +1 -1
  54. package/dist/codeblock/index.js +57 -4
  55. package/dist/codeblock/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 +262 -6
  115. package/dist/html/css/cascade.d.ts.map +1 -1
  116. package/dist/html/css/cascade.js +1373 -67
  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 +501 -15
  139. package/dist/html/css/style.d.ts.map +1 -1
  140. package/dist/html/css/style.js +3729 -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 +65 -16
  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 +3077 -219
  172. package/dist/html/layout/block.js.map +1 -1
  173. package/dist/html/layout/boxes.d.ts +367 -17
  174. package/dist/html/layout/boxes.d.ts.map +1 -1
  175. package/dist/html/layout/boxes.js +1742 -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 +154 -1
  205. package/dist/html/layout/inline.d.ts.map +1 -1
  206. package/dist/html/layout/inline.js +3598 -175
  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 +169 -4
  221. package/dist/html/node.d.ts.map +1 -1
  222. package/dist/html/node.js +1429 -137
  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 +3635 -107
  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 +442 -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 +1 -1
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js.map +1 -1
  247. package/dist/internal/codelines.d.ts +42 -0
  248. package/dist/internal/codelines.d.ts.map +1 -0
  249. package/dist/internal/codelines.js +170 -0
  250. package/dist/internal/codelines.js.map +1 -0
  251. package/dist/internal/collate.d.ts +3 -0
  252. package/dist/internal/collate.d.ts.map +1 -0
  253. package/dist/internal/collate.js +11 -0
  254. package/dist/internal/collate.js.map +1 -0
  255. package/dist/internal/markdown/ast.d.ts +11 -0
  256. package/dist/internal/markdown/ast.d.ts.map +1 -1
  257. package/dist/internal/markdown/parse.d.ts.map +1 -1
  258. package/dist/internal/markdown/parse.js +109 -8
  259. package/dist/internal/markdown/parse.js.map +1 -1
  260. package/dist/internal/prewarm.d.ts +18 -0
  261. package/dist/internal/prewarm.d.ts.map +1 -0
  262. package/dist/internal/prewarm.js +42 -0
  263. package/dist/internal/prewarm.js.map +1 -0
  264. package/dist/internal/sdf.d.ts +20 -0
  265. package/dist/internal/sdf.d.ts.map +1 -0
  266. package/dist/internal/sdf.js +216 -0
  267. package/dist/internal/sdf.js.map +1 -0
  268. package/dist/internal/splice.d.ts +12 -0
  269. package/dist/internal/splice.d.ts.map +1 -0
  270. package/dist/internal/splice.js +23 -0
  271. package/dist/internal/splice.js.map +1 -0
  272. package/dist/internal/window.d.ts +12 -0
  273. package/dist/internal/window.d.ts.map +1 -1
  274. package/dist/internal/window.js +23 -6
  275. package/dist/internal/window.js.map +1 -1
  276. package/dist/maps/anchors.d.ts +6 -1
  277. package/dist/maps/anchors.d.ts.map +1 -1
  278. package/dist/maps/anchors.js +260 -1
  279. package/dist/maps/anchors.js.map +1 -1
  280. package/dist/maps/controller.d.ts +57 -0
  281. package/dist/maps/controller.d.ts.map +1 -1
  282. package/dist/maps/controller.js +97 -18
  283. package/dist/maps/controller.js.map +1 -1
  284. package/dist/maps/gl/buckets.d.ts +5 -1
  285. package/dist/maps/gl/buckets.d.ts.map +1 -1
  286. package/dist/maps/gl/buckets.js +5 -2
  287. package/dist/maps/gl/buckets.js.map +1 -1
  288. package/dist/maps/gl/build-worker.d.ts +2 -0
  289. package/dist/maps/gl/build-worker.d.ts.map +1 -1
  290. package/dist/maps/gl/build-worker.js +1 -1
  291. package/dist/maps/gl/build-worker.js.map +1 -1
  292. package/dist/maps/gl/cover.d.ts +23 -4
  293. package/dist/maps/gl/cover.d.ts.map +1 -1
  294. package/dist/maps/gl/cover.js +61 -48
  295. package/dist/maps/gl/cover.js.map +1 -1
  296. package/dist/maps/gl/placement.d.ts +21 -8
  297. package/dist/maps/gl/placement.d.ts.map +1 -1
  298. package/dist/maps/gl/placement.js +133 -58
  299. package/dist/maps/gl/placement.js.map +1 -1
  300. package/dist/maps/gl/renderer.d.ts +36 -4
  301. package/dist/maps/gl/renderer.d.ts.map +1 -1
  302. package/dist/maps/gl/renderer.js +81 -24
  303. package/dist/maps/gl/renderer.js.map +1 -1
  304. package/dist/maps/gl/shaders.d.ts +18 -17
  305. package/dist/maps/gl/shaders.d.ts.map +1 -1
  306. package/dist/maps/gl/shaders.js +34 -32
  307. package/dist/maps/gl/shaders.js.map +1 -1
  308. package/dist/maps/gl/store.d.ts +10 -0
  309. package/dist/maps/gl/store.d.ts.map +1 -1
  310. package/dist/maps/gl/store.js +47 -4
  311. package/dist/maps/gl/store.js.map +1 -1
  312. package/dist/maps/gl/text.d.ts +153 -24
  313. package/dist/maps/gl/text.d.ts.map +1 -1
  314. package/dist/maps/gl/text.js +379 -63
  315. package/dist/maps/gl/text.js.map +1 -1
  316. package/dist/maps/gl/view.d.ts +293 -2
  317. package/dist/maps/gl/view.d.ts.map +1 -1
  318. package/dist/maps/gl/view.js +317 -82
  319. package/dist/maps/gl/view.js.map +1 -1
  320. package/dist/maps/icons.d.ts +32 -0
  321. package/dist/maps/icons.d.ts.map +1 -0
  322. package/dist/maps/icons.js +151 -0
  323. package/dist/maps/icons.js.map +1 -0
  324. package/dist/maps/index.d.ts +2 -0
  325. package/dist/maps/index.d.ts.map +1 -1
  326. package/dist/maps/index.js +2 -0
  327. package/dist/maps/index.js.map +1 -1
  328. package/dist/maps/labels.d.ts +56 -4
  329. package/dist/maps/labels.d.ts.map +1 -1
  330. package/dist/maps/labels.js +213 -46
  331. package/dist/maps/labels.js.map +1 -1
  332. package/dist/maps/node.d.ts +17 -0
  333. package/dist/maps/node.d.ts.map +1 -1
  334. package/dist/maps/node.js +64 -30
  335. package/dist/maps/node.js.map +1 -1
  336. package/dist/maps/proj.d.ts +48 -0
  337. package/dist/maps/proj.d.ts.map +1 -1
  338. package/dist/maps/proj.js +73 -0
  339. package/dist/maps/proj.js.map +1 -1
  340. package/dist/maps/sources.d.ts +5 -3
  341. package/dist/maps/sources.d.ts.map +1 -1
  342. package/dist/maps/sources.js +5 -3
  343. package/dist/maps/sources.js.map +1 -1
  344. package/dist/maps/style.d.ts +35 -0
  345. package/dist/maps/style.d.ts.map +1 -1
  346. package/dist/maps/style.js.map +1 -1
  347. package/dist/maps/styles.d.ts +12 -0
  348. package/dist/maps/styles.d.ts.map +1 -1
  349. package/dist/maps/styles.js +120 -6
  350. package/dist/maps/styles.js.map +1 -1
  351. package/dist/maps/tiles.d.ts +31 -11
  352. package/dist/maps/tiles.d.ts.map +1 -1
  353. package/dist/maps/tiles.js +61 -27
  354. package/dist/maps/tiles.js.map +1 -1
  355. package/dist/maps/types.d.ts +28 -4
  356. package/dist/maps/types.d.ts.map +1 -1
  357. package/dist/markdown/index.d.ts.map +1 -1
  358. package/dist/markdown/index.js +209 -68
  359. package/dist/markdown/index.js.map +1 -1
  360. package/dist/markdown/spans.d.ts.map +1 -1
  361. package/dist/markdown/spans.js +6 -0
  362. package/dist/markdown/spans.js.map +1 -1
  363. package/dist/qml/containers.d.ts.map +1 -1
  364. package/dist/qml/containers.js +6 -1
  365. package/dist/qml/containers.js.map +1 -1
  366. package/dist/qml/interaction.d.ts.map +1 -1
  367. package/dist/qml/interaction.js +38 -5
  368. package/dist/qml/interaction.js.map +1 -1
  369. package/dist/qml/layouts.d.ts.map +1 -1
  370. package/dist/qml/layouts.js +21 -6
  371. package/dist/qml/layouts.js.map +1 -1
  372. package/dist/qml/qtquick.d.ts.map +1 -1
  373. package/dist/qml/qtquick.js +9 -2
  374. package/dist/qml/qtquick.js.map +1 -1
  375. package/dist/qml/react.d.ts.map +1 -1
  376. package/dist/qml/react.js +9 -7
  377. package/dist/qml/react.js.map +1 -1
  378. package/dist/reorder/clock.d.ts +7 -0
  379. package/dist/reorder/clock.d.ts.map +1 -0
  380. package/dist/reorder/clock.js +26 -0
  381. package/dist/reorder/clock.js.map +1 -0
  382. package/dist/reorder/index.d.ts +25 -3
  383. package/dist/reorder/index.d.ts.map +1 -1
  384. package/dist/reorder/index.js +64 -19
  385. package/dist/reorder/index.js.map +1 -1
  386. package/dist/rich-text-editor/index.d.ts +0 -11
  387. package/dist/rich-text-editor/index.d.ts.map +1 -1
  388. package/dist/rich-text-editor/index.js +38 -9
  389. package/dist/rich-text-editor/index.js.map +1 -1
  390. package/dist/rich-text-editor/keymap.d.ts.map +1 -1
  391. package/dist/rich-text-editor/keymap.js +2 -1
  392. package/dist/rich-text-editor/keymap.js.map +1 -1
  393. package/dist/rich-text-editor/keys.d.ts +17 -6
  394. package/dist/rich-text-editor/keys.d.ts.map +1 -1
  395. package/dist/rich-text-editor/keys.js +135 -26
  396. package/dist/rich-text-editor/keys.js.map +1 -1
  397. package/dist/rich-text-editor/markdown.d.ts.map +1 -1
  398. package/dist/rich-text-editor/markdown.js +30 -1
  399. package/dist/rich-text-editor/markdown.js.map +1 -1
  400. package/dist/rich-text-editor/marks.d.ts +9 -0
  401. package/dist/rich-text-editor/marks.d.ts.map +1 -0
  402. package/dist/rich-text-editor/marks.js +83 -0
  403. package/dist/rich-text-editor/marks.js.map +1 -0
  404. package/dist/rich-text-editor/render.d.ts.map +1 -1
  405. package/dist/rich-text-editor/render.js +28 -10
  406. package/dist/rich-text-editor/render.js.map +1 -1
  407. package/dist/rich-text-editor/replace.d.ts +13 -0
  408. package/dist/rich-text-editor/replace.d.ts.map +1 -0
  409. package/dist/rich-text-editor/replace.js +64 -0
  410. package/dist/rich-text-editor/replace.js.map +1 -0
  411. package/dist/rich-text-editor/toolbar.d.ts.map +1 -1
  412. package/dist/rich-text-editor/toolbar.js +1 -1
  413. package/dist/rich-text-editor/toolbar.js.map +1 -1
  414. package/dist/rich-text-editor/virtual.d.ts.map +1 -1
  415. package/dist/rich-text-editor/virtual.js +17 -0
  416. package/dist/rich-text-editor/virtual.js.map +1 -1
  417. package/dist/richtext/node.d.ts +46 -2
  418. package/dist/richtext/node.d.ts.map +1 -1
  419. package/dist/richtext/node.js +187 -4
  420. package/dist/richtext/node.js.map +1 -1
  421. package/dist/richtext/runs.d.ts +13 -8
  422. package/dist/richtext/runs.d.ts.map +1 -1
  423. package/dist/richtext/runs.js +18 -8
  424. package/dist/richtext/runs.js.map +1 -1
  425. package/dist/table/index.d.ts.map +1 -1
  426. package/dist/table/index.js +23 -0
  427. package/dist/table/index.js.map +1 -1
  428. package/dist/table/rows.d.ts +3 -2
  429. package/dist/table/rows.d.ts.map +1 -1
  430. package/dist/table/rows.js +20 -6
  431. package/dist/table/rows.js.map +1 -1
  432. package/dist/terminal/index.d.ts.map +1 -1
  433. package/dist/terminal/index.js +4 -0
  434. package/dist/terminal/index.js.map +1 -1
  435. package/dist/terminal/vt/pty.d.ts +13 -2
  436. package/dist/terminal/vt/pty.d.ts.map +1 -1
  437. package/dist/terminal/vt/pty.js +18 -3
  438. package/dist/terminal/vt/pty.js.map +1 -1
  439. package/dist/terminal-output/index.d.ts.map +1 -1
  440. package/dist/terminal-output/index.js +103 -23
  441. package/dist/terminal-output/index.js.map +1 -1
  442. package/dist/terminal-output/runs.d.ts +4 -1
  443. package/dist/terminal-output/runs.d.ts.map +1 -1
  444. package/dist/terminal-output/runs.js +5 -1
  445. package/dist/terminal-output/runs.js.map +1 -1
  446. package/dist/three/canvas.d.ts.map +1 -1
  447. package/dist/three/canvas.js +85 -7
  448. package/dist/three/canvas.js.map +1 -1
  449. package/dist/three/events.d.ts +22 -4
  450. package/dist/three/events.d.ts.map +1 -1
  451. package/dist/three/events.js +34 -4
  452. package/dist/three/events.js.map +1 -1
  453. package/dist/tree/index.d.ts.map +1 -1
  454. package/dist/tree/index.js +17 -0
  455. package/dist/tree/index.js.map +1 -1
  456. package/package.json +42 -33
  457. package/src/charts/node.ts +62 -26
  458. package/src/charts/render.ts +120 -30
  459. package/src/code/index.ts +36 -32
  460. package/src/code-editor/completion.ts +3 -2
  461. package/src/code-editor/index.ts +19 -0
  462. package/src/code-editor/node.ts +1574 -184
  463. package/src/code-language/index.ts +1 -1
  464. package/src/code-language/languages/glsl.ts +12 -2
  465. package/src/code-language/languages/javascript.ts +21 -4
  466. package/src/code-language/languages/json.ts +12 -2
  467. package/src/code-language/languages/shell.ts +12 -2
  468. package/src/code-language/languages/sql.ts +22 -2
  469. package/src/code-language/runs.ts +111 -1
  470. package/src/code-language/stream.ts +257 -17
  471. package/src/code-language/types.ts +5 -4
  472. package/src/codeblock/index.ts +68 -4
  473. package/src/flow/draw.ts +167 -41
  474. package/src/flow/gl/color.ts +85 -0
  475. package/src/flow/gl/index.ts +342 -0
  476. package/src/flow/gl/pack.ts +585 -0
  477. package/src/flow/gl/renderer.ts +679 -0
  478. package/src/flow/gl/shaders.ts +371 -0
  479. package/src/flow/gl/text.ts +1295 -0
  480. package/src/flow/index.ts +794 -67
  481. package/src/flow/node.ts +2496 -1256
  482. package/src/flow/paint.ts +511 -0
  483. package/src/flow/paths.ts +80 -15
  484. package/src/flow/scene.ts +2199 -0
  485. package/src/flow/types.ts +113 -1
  486. package/src/html/controls.ts +73 -2
  487. package/src/html/css/calc.ts +385 -0
  488. package/src/html/css/cascade.ts +1481 -62
  489. package/src/html/css/color.ts +755 -0
  490. package/src/html/css/content.ts +417 -0
  491. package/src/html/css/counter-styles.ts +973 -0
  492. package/src/html/css/decode.ts +130 -0
  493. package/src/html/css/parse.ts +1514 -160
  494. package/src/html/css/style.ts +4131 -223
  495. package/src/html/css/ua.ts +66 -17
  496. package/src/html/css/values.ts +150 -50
  497. package/src/html/css/vars.ts +348 -0
  498. package/src/html/dom.ts +284 -17
  499. package/src/html/fonts.ts +641 -0
  500. package/src/html/gif.ts +233 -0
  501. package/src/html/index.ts +180 -20
  502. package/src/html/layout/block.ts +3560 -208
  503. package/src/html/layout/boxes.ts +2141 -190
  504. package/src/html/layout/cache.ts +289 -0
  505. package/src/html/layout/collapse.ts +317 -0
  506. package/src/html/layout/css-grid.ts +1063 -0
  507. package/src/html/layout/flex.ts +1115 -106
  508. package/src/html/layout/floats.ts +128 -14
  509. package/src/html/layout/grid-lines.ts +141 -0
  510. package/src/html/layout/grid.ts +181 -0
  511. package/src/html/layout/inline.ts +4187 -192
  512. package/src/html/layout/shaping.ts +140 -0
  513. package/src/html/layout/table.ts +696 -186
  514. package/src/html/layout/tracks.ts +437 -0
  515. package/src/html/node.ts +1585 -156
  516. package/src/html/paint.ts +4582 -267
  517. package/src/html/resources.ts +161 -50
  518. package/src/html/surfaces.ts +81 -0
  519. package/src/html/svg.ts +504 -0
  520. package/src/html/url.ts +86 -0
  521. package/src/index.ts +2 -0
  522. package/src/internal/codelines.ts +200 -0
  523. package/src/internal/collate.ts +12 -0
  524. package/src/internal/markdown/ast.ts +11 -0
  525. package/src/internal/markdown/parse.ts +154 -11
  526. package/src/internal/prewarm.ts +45 -0
  527. package/src/internal/sdf.ts +227 -0
  528. package/src/internal/splice.ts +25 -0
  529. package/src/internal/window.ts +36 -5
  530. package/src/maps/anchors.ts +307 -1
  531. package/src/maps/controller.ts +116 -31
  532. package/src/maps/gl/buckets.ts +5 -1
  533. package/src/maps/gl/build-worker.ts +13 -2
  534. package/src/maps/gl/cover.ts +79 -44
  535. package/src/maps/gl/placement.ts +221 -69
  536. package/src/maps/gl/renderer.ts +104 -20
  537. package/src/maps/gl/shaders.ts +35 -32
  538. package/src/maps/gl/store.ts +66 -17
  539. package/src/maps/gl/text.ts +444 -71
  540. package/src/maps/gl/view.ts +361 -96
  541. package/src/maps/icons.ts +183 -0
  542. package/src/maps/index.ts +4 -0
  543. package/src/maps/labels.ts +269 -49
  544. package/src/maps/node.ts +82 -49
  545. package/src/maps/proj.ts +87 -0
  546. package/src/maps/sources.ts +5 -3
  547. package/src/maps/style.ts +32 -0
  548. package/src/maps/styles.ts +215 -4
  549. package/src/maps/tiles.ts +64 -31
  550. package/src/maps/types.ts +28 -4
  551. package/src/markdown/index.ts +293 -92
  552. package/src/markdown/spans.ts +5 -0
  553. package/src/qml/containers.tsx +6 -1
  554. package/src/qml/interaction.tsx +42 -5
  555. package/src/qml/layouts.tsx +21 -6
  556. package/src/qml/qtquick.tsx +9 -2
  557. package/src/qml/react.tsx +7 -5
  558. package/src/reorder/clock.ts +27 -0
  559. package/src/reorder/index.ts +100 -27
  560. package/src/rich-text-editor/index.ts +37 -12
  561. package/src/rich-text-editor/keymap.ts +1 -1
  562. package/src/rich-text-editor/keys.ts +135 -26
  563. package/src/rich-text-editor/markdown.ts +36 -1
  564. package/src/rich-text-editor/marks.ts +101 -0
  565. package/src/rich-text-editor/render.ts +49 -12
  566. package/src/rich-text-editor/replace.ts +85 -0
  567. package/src/rich-text-editor/toolbar.ts +1 -1
  568. package/src/rich-text-editor/virtual.ts +25 -0
  569. package/src/richtext/node.ts +235 -14
  570. package/src/richtext/runs.ts +23 -12
  571. package/src/table/index.ts +29 -0
  572. package/src/table/rows.ts +18 -8
  573. package/src/terminal/index.ts +4 -0
  574. package/src/terminal/vt/pty.ts +16 -2
  575. package/src/terminal-output/index.ts +129 -31
  576. package/src/terminal-output/runs.ts +16 -2
  577. package/src/three/canvas.ts +102 -8
  578. package/src/three/events.ts +49 -9
  579. package/src/tree/index.ts +19 -0
@@ -18,17 +18,25 @@
18
18
  // projection — markers, overlays, labels, `project()`. `tileCover` reads a
19
19
  // smaller tile one level deeper instead, which puts every image at its own
20
20
  // natural size on the one world everything shares.
21
- import { DEFAULT_TILE_SIZE, tileCover, transformFor } from '../proj.js';
21
+ import { BELOW, DEFAULT_TILE_SIZE, FILL_DEPTH, fillFromBelow, tileCover, transformFor, } from '../proj.js';
22
22
  /** How far up the pyramid a hole looks for a stand-in. */
23
23
  const MAX_ANCESTOR = 8;
24
24
  /**
25
25
  * The frame's tiles, centre-out, each with its screen square and its clip.
26
26
  *
27
27
  * A hole — a tile still loading, or one the source has no data for — is
28
- * covered from whichever side has geometry: the nearest ancestor, drawn at
29
- * its own larger size and clipped to the hole; or, zooming out, the four
30
- * children, when all of them are in hand. `AGENTS.md`'s rule for the
31
- * retained cache holds here too: a pyramid has two neighbours.
28
+ * covered from whichever side has geometry. Zooming out, that is the tiles
29
+ * under it: each quarter from the nearest level that has it, down to
30
+ * `FILL_DEPTH`. Whatever they leave, and the whole of a hole with nothing
31
+ * under it, is the nearest ancestor's, drawn at its own larger size and
32
+ * clipped to each gap. `AGENTS.md`'s rule for the retained cache holds here
33
+ * too: a pyramid has two neighbours.
34
+ *
35
+ * The first cut tried the ancestor first, and the children only when all
36
+ * four of them were in hand. A zoom out leaves the level it came from in
37
+ * the middle of the view, covering only part of the tiles at the edges, and
38
+ * a quick one leaves it two or three levels down: both were the background,
39
+ * with the sharper tiles in hand.
32
40
  */
33
41
  export function renderCover(camera, pane, scale, pyramid, lookup, options = {}) {
34
42
  const transform = transformFor(camera, pane, DEFAULT_TILE_SIZE);
@@ -66,58 +74,63 @@ export function renderCover(camera, pane, scale, pyramid, lookup, options = {})
66
74
  own++;
67
75
  continue;
68
76
  }
69
- // An ancestor: the same ground, `2^k` times the size, from `sub` cells
70
- // above and to the left of this entry's square.
71
- let found = false;
77
+ // Under it: a tile with no data has nothing under it either, and past
78
+ // the pyramid's depth there is nothing to find.
72
79
  const { z, x, y } = entry.tile;
80
+ const below = fillFromBelow(entry.tile, data === null ? 0 : Math.min(FILL_DEPTH, pyramid.maxZoom - z), (under) => {
81
+ const held = lookup.holds ? lookup.holds(under) : 'here';
82
+ if (held === undefined)
83
+ return undefined;
84
+ if (held === 'below')
85
+ return BELOW;
86
+ const got = lookup.get(under);
87
+ return got === undefined ? BELOW : got;
88
+ });
89
+ for (const piece of below.pieces) {
90
+ const size = clip.width / piece.span;
91
+ const px = clip.x + piece.x * size;
92
+ const py = clip.y + piece.y * size;
93
+ tiles.push({
94
+ data: piece.value,
95
+ x: px,
96
+ y: py,
97
+ size,
98
+ clip: { x: px, y: py, width: size, height: size },
99
+ });
100
+ }
101
+ if (below.covered)
102
+ descendants++;
103
+ if (below.gaps.length === 0)
104
+ continue;
105
+ // Over it: an ancestor, the same ground `2^k` times the size, from
106
+ // `sub` cells above and to the left of this entry's square — drawn once
107
+ // for each gap, clipped to it.
73
108
  for (let k = 1; k <= MAX_ANCESTOR && z - k >= pyramid.minZoom; k++) {
74
109
  const ancestor = { z: z - k, x: x >> k, y: y >> k };
75
110
  const stand = lookup.get(ancestor);
76
111
  if (!stand)
77
112
  continue;
78
- const span = 1 << k;
79
- const size = clip.width * span;
80
- tiles.push({
81
- data: stand,
82
- x: clip.x - (x - (ancestor.x << k)) * clip.width,
83
- y: clip.y - (y - (ancestor.y << k)) * clip.width,
84
- size,
85
- clip,
86
- });
113
+ const size = clip.width * (1 << k);
114
+ const sx = clip.x - (x - (ancestor.x << k)) * clip.width;
115
+ const sy = clip.y - (y - (ancestor.y << k)) * clip.width;
116
+ for (const gap of below.gaps) {
117
+ const edge = clip.width / gap.span;
118
+ tiles.push({
119
+ data: stand,
120
+ x: sx,
121
+ y: sy,
122
+ size,
123
+ clip: {
124
+ x: clip.x + gap.x * edge,
125
+ y: clip.y + gap.y * edge,
126
+ width: edge,
127
+ height: edge,
128
+ },
129
+ });
130
+ }
87
131
  ancestors++;
88
- found = true;
89
132
  break;
90
133
  }
91
- if (found || data === null || z + 1 > pyramid.maxZoom)
92
- continue;
93
- // Zooming out: the finer level is what is in hand. Only when all four
94
- // children have answered, or the hole would be patched with holes.
95
- const children = [];
96
- for (let dy = 0; dy < 2; dy++) {
97
- for (let dx = 0; dx < 2; dx++) {
98
- const child = lookup.get({ z: z + 1, x: x * 2 + dx, y: y * 2 + dy });
99
- if (child === undefined)
100
- break;
101
- children.push(child);
102
- }
103
- }
104
- if (children.length !== 4)
105
- continue;
106
- const half = clip.width / 2;
107
- children.forEach((child, i) => {
108
- if (!child)
109
- return;
110
- const cx = clip.x + (i % 2) * half;
111
- const cy = clip.y + Math.floor(i / 2) * half;
112
- tiles.push({
113
- data: child,
114
- x: cx,
115
- y: cy,
116
- size: half,
117
- clip: { x: cx, y: cy, width: half, height: half },
118
- });
119
- });
120
- descendants++;
121
134
  }
122
135
  return { tiles, missing, level, own, ancestors, descendants, inView };
123
136
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cover.js","sourceRoot":"","sources":["../../../src/maps/gl/cover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cover.js","sourceRoot":"","sources":["../../../src/maps/gl/cover.ts"],"names":[],"mappings":"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"}
@@ -41,21 +41,23 @@ export interface PlacementFrame {
41
41
  * must, and what the zoom uncovers is named once it stops — not labels
42
42
  * arriving and leaving at every step of it. `true` by default. */
43
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
44
  }
48
45
  /** Floats per label instance; the layout `renderer.ts` binds. */
49
- export declare const LABEL_INSTANCE = 18;
46
+ export declare const LABEL_INSTANCE = 19;
50
47
  /** The frame's labels, ready to draw. */
51
48
  export interface LabelBatch {
52
49
  atlas: LabelAtlas;
53
50
  /** {@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. */
51
+ * pixels); cos, sin of the baseline; the field's rect in the atlas x,
52
+ * y, w, h (texels); ink and halo colour, premultiplied and faded; halo
53
+ * radius (device pixels); `1` to set the label on whole pixels; and
54
+ * device pixels per field texel — the drawn size over the atlas's
55
+ * base. */
57
56
  instances: Float32Array;
58
57
  count: number;
58
+ /** Labels drawn: fewer than `count` where an icon is two instances of
59
+ * its own beside its name's. `count` where absent. */
60
+ labels?: number;
59
61
  }
60
62
  export interface PlacementStats {
61
63
  /** Anchors considered, labels placed, labels drawn (fading ones too). */
@@ -89,7 +91,7 @@ export declare class LabelPlacer {
89
91
  reset(): void;
90
92
  /**
91
93
  * 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.
94
+ * the frame's budget allows, and for each winner's field.
93
95
  */
94
96
  place(frame: PlacementFrame, atlas: LabelAtlas): void;
95
97
  /**
@@ -98,13 +100,24 @@ export declare class LabelPlacer {
98
100
  * go of labels that have faded out.
99
101
  */
100
102
  batch(frame: PlacementFrame, atlas: LabelAtlas): LabelBatch;
103
+ /** One instance — a label's string, or a piece of its icon — written at
104
+ * `count`: answers the count after it. Level (`angle` 0) is set on
105
+ * whole pixels. */
106
+ private _put;
101
107
  /** One anchor as a contender, or null when it cannot be one at all at
102
108
  * this zoom — off the view, or on a run too bent or too short for even
103
109
  * a short name. `unit` is device pixels per unit of the lengths given. */
104
110
  private _candidate;
111
+ /** The icon a label of `layer` is set with: none for a name along a
112
+ * street, and none where the atlas cannot draw it — the name is then set
113
+ * alone rather than not at all. */
114
+ private _icon;
105
115
  /** Each symbol layer's labelling at this zoom, by layer index — null
106
116
  * where it does not label. */
107
117
  private _layersAt;
118
+ /** A layer's icon at this zoom, or null where it sets none — or names
119
+ * one this version does not draw, or a colour that does not parse. */
120
+ private _iconOf;
108
121
  private _color;
109
122
  }
110
123
  export {};
@@ -1 +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"}
1
+ {"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../../../src/maps/gl/placement.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,10 @@ import { resolveZoomed } from '../style.js';
2
2
  import { TILE_EXTENT } from './buckets.js';
3
3
  import { parseColor, premultiplied } from './color.js';
4
4
  import { LABEL_STRIDE, LEVEL_SNAP, LINE_MARGIN, LabelField, STRAIGHT_FRACTION, estimateWidth, } from '../anchors.js';
5
- import { haloReach } from './text.js';
5
+ import { fieldReach } from './text.js';
6
+ import { DEFAULT_ICON_COLOR, DEFAULT_ICON_GLYPH_COLOR, DEFAULT_ICON_SIZE, ICON_GAP, isMapIcon, } from '../icons.js';
6
7
  /** Floats per label instance; the layout `renderer.ts` binds. */
7
- export const LABEL_INSTANCE = 18;
8
+ export const LABEL_INSTANCE = 19;
8
9
  /** Logical pixels between two labels, and the extra a newcomer needs. The
9
10
  * extra is the hysteresis: the label already shown wins a tie by it. */
10
11
  const PADDING = 4;
@@ -48,7 +49,7 @@ export class LabelPlacer {
48
49
  }
49
50
  /**
50
51
  * Choose the frame's labels. Asks `atlas` for each contender's box, as
51
- * the frame's budget allows, and for each winner's raster.
52
+ * the frame's budget allows, and for each winner's field.
52
53
  */
53
54
  place(frame, atlas) {
54
55
  const started = now();
@@ -165,18 +166,28 @@ export class LabelPlacer {
165
166
  const box = atlas.measure(c.text, c.size);
166
167
  if (!box || box.width === 0)
167
168
  continue;
168
- const w = box.width;
169
- const h = box.height;
169
+ let w = box.width;
170
+ let h = box.height;
170
171
  if (!c.point) {
171
172
  const need = w / 2 + h * LINE_MARGIN;
172
173
  if (c.avail < (c.shown ? need * 0.9 : need))
173
174
  continue;
174
175
  }
176
+ // An icon on the point and the name beside it are one box, placed
177
+ // and given way as one.
178
+ const icon = this._icon(layers[c.layer], c.point, atlas);
179
+ if (icon) {
180
+ const full = icon.size + icon.gap + w;
181
+ c.ox = (full - icon.size) / 2;
182
+ w = full;
183
+ h = Math.max(h, icon.size);
184
+ }
185
+ const bx = c.sx + c.ox;
175
186
  const hw = (Math.abs(c.cos) * w + Math.abs(c.sin) * h) / 2;
176
187
  const hh = (Math.abs(c.sin) * w + Math.abs(c.cos) * h) / 2;
177
- if (c.sx - hw < inset ||
188
+ if (bx - hw < inset ||
178
189
  c.sy - hh < inset ||
179
- c.sx + hw > width - inset ||
190
+ bx + hw > width - inset ||
180
191
  c.sy + hh > height - inset) {
181
192
  continue;
182
193
  }
@@ -220,7 +231,6 @@ export class LabelPlacer {
220
231
  size: c.size,
221
232
  opacity: 0,
222
233
  placed: false,
223
- drawn: 0,
224
234
  };
225
235
  fresh.mx = c.mx;
226
236
  fresh.my = c.my;
@@ -237,8 +247,12 @@ export class LabelPlacer {
237
247
  }
238
248
  shown.placed = true;
239
249
  shown.size = c.size;
240
- if (!frame.moving || shown.drawn === 0)
241
- atlas.entry(shown.text, shown.size);
250
+ atlas.entry(shown.text);
251
+ const icon = this._icon(layers[shown.layer], shown.point, atlas);
252
+ if (icon) {
253
+ atlas.icon(icon.name, 'plate');
254
+ atlas.icon(icon.name, 'glyph');
255
+ }
242
256
  }
243
257
  this.stats = {
244
258
  candidates: candidates.length,
@@ -257,27 +271,26 @@ export class LabelPlacer {
257
271
  this._last = frame.now;
258
272
  const step = dt / FADE_MS;
259
273
  const layers = this._layersAt(frame.style, frame.zoom, frame.scale);
260
- const reach = haloReach(atlas.pad);
274
+ // How far past its glyphs a field sees, in its own texels: the widest
275
+ // halo it can draw, times the label's scale.
276
+ const reach = fieldReach(atlas.pad);
261
277
  const halfW = frame.width / 2;
262
278
  const halfH = frame.height / 2;
263
279
  let count = 0;
280
+ let labels = 0;
264
281
  for (const shown of [...this._shown]) {
265
282
  const layer = layers[shown.layer];
266
- let entry;
267
- if (frame.moving && shown.drawn > 0 && shown.drawn !== shown.size) {
268
- // Its zoom ramp has moved on; the size it has serves until the
269
- // view is still.
270
- entry = atlas.entry(shown.text, shown.drawn);
271
- }
272
- else {
273
- entry = atlas.entry(shown.text, shown.size);
274
- if (entry)
275
- shown.drawn = shown.size;
276
- else if (shown.drawn > 0)
277
- entry = atlas.entry(shown.text, shown.drawn);
278
- }
283
+ // One field for every size: a zoom ramp that grows the type draws the
284
+ // same raster larger, the frame it changes.
285
+ const entry = atlas.entry(shown.text);
286
+ // A name set beside an icon waits for the icon as well: the name
287
+ // alone is what the icon is there to explain.
288
+ const icon = this._icon(layer, shown.point, atlas);
289
+ const plate = icon ? atlas.icon(icon.name, 'plate') : null;
290
+ const glyph = icon ? atlas.icon(icon.name, 'glyph') : null;
291
+ const ready = entry !== null && (!icon || (plate !== null && glyph !== null));
279
292
  // Nothing to show yet: wait at zero rather than fade in unseen.
280
- if (entry && layer) {
293
+ if (ready && layer) {
281
294
  shown.opacity = shown.placed
282
295
  ? Math.min(1, shown.opacity + step)
283
296
  : Math.max(0, shown.opacity - step);
@@ -289,45 +302,71 @@ export class LabelPlacer {
289
302
  this._shown.delete(shown);
290
303
  continue;
291
304
  }
292
- if (!entry || !layer || shown.opacity <= 0)
305
+ if (!ready || !entry || !layer || shown.opacity <= 0)
293
306
  continue;
294
307
  let dx = shown.mx - frame.centerX;
295
308
  dx -= Math.round(dx);
296
309
  const sx = halfW + dx * frame.world;
297
310
  const sy = halfH + (shown.my - frame.centerY) * frame.world;
298
311
  const eased = shown.opacity * shown.opacity * (3 - 2 * shown.opacity);
299
- if (this._instances.length < (count + 1) * LABEL_INSTANCE) {
300
- const grown = new Float32Array(this._instances.length * 2);
301
- grown.set(this._instances);
302
- this._instances = grown;
303
- }
304
- const d = this._instances;
305
- const at = count * LABEL_INSTANCE;
306
- const level = shown.angle === 0;
307
- d[at] = sx;
308
- d[at + 1] = sy;
309
- d[at + 2] = level ? 1 : Math.cos(shown.angle);
310
- d[at + 3] = level ? 0 : Math.sin(shown.angle);
311
- d[at + 4] = entry.x;
312
- d[at + 5] = entry.y;
313
- d[at + 6] = entry.width;
314
- d[at + 7] = entry.height;
315
312
  const ink = premultiplied(layer.ink, eased);
316
- d[at + 8] = ink[0];
317
- d[at + 9] = ink[1];
318
- d[at + 10] = ink[2];
319
- d[at + 11] = ink[3];
320
313
  const halo = layer.halo ? premultiplied(layer.halo, eased) : ZERO;
321
- d[at + 12] = halo[0];
322
- d[at + 13] = halo[1];
323
- d[at + 14] = halo[2];
324
- d[at + 15] = halo[3];
325
- d[at + 16] = layer.halo ? Math.min(layer.haloPx, reach) : 0;
326
- d[at + 17] = level ? 1 : 0;
327
- count++;
314
+ const k = shown.size / atlas.base;
315
+ const haloPx = layer.halo ? Math.min(layer.haloPx, reach * k) : 0;
316
+ if (icon && plate && glyph) {
317
+ // The plate under its halo, the glyph on it, and the name level
318
+ // beside it: the string is its field less the margin, and its
319
+ // left edge goes the gap past the plate's right.
320
+ const ki = icon.size / atlas.base;
321
+ const plateHalo = layer.halo ? Math.min(layer.haloPx, reach * ki) : 0;
322
+ count = this._put(count, sx, sy, 0, plate, premultiplied(icon.plate, eased), halo, plateHalo, ki);
323
+ count = this._put(count, sx, sy, 0, glyph, premultiplied(icon.glyph, eased), ZERO, 0, ki);
324
+ const tx = sx +
325
+ icon.size / 2 +
326
+ icon.gap +
327
+ ((entry.width - 2 * atlas.pad) * k) / 2;
328
+ count = this._put(count, tx, sy, 0, entry, ink, halo, haloPx, k);
329
+ }
330
+ else {
331
+ count = this._put(count, sx, sy, shown.angle, entry, ink, halo, haloPx, k);
332
+ }
333
+ labels++;
328
334
  }
329
- this.stats.drawn = count;
330
- return { atlas, instances: this._instances, count };
335
+ this.stats.drawn = labels;
336
+ return { atlas, instances: this._instances, count, labels };
337
+ }
338
+ /** One instance — a label's string, or a piece of its icon — written at
339
+ * `count`: answers the count after it. Level (`angle` 0) is set on
340
+ * whole pixels. */
341
+ _put(count, x, y, angle, entry, ink, halo, haloPx, scale) {
342
+ if (this._instances.length < (count + 1) * LABEL_INSTANCE) {
343
+ const grown = new Float32Array(this._instances.length * 2);
344
+ grown.set(this._instances);
345
+ this._instances = grown;
346
+ }
347
+ const d = this._instances;
348
+ const at = count * LABEL_INSTANCE;
349
+ const level = angle === 0;
350
+ d[at] = x;
351
+ d[at + 1] = y;
352
+ d[at + 2] = level ? 1 : Math.cos(angle);
353
+ d[at + 3] = level ? 0 : Math.sin(angle);
354
+ d[at + 4] = entry.x;
355
+ d[at + 5] = entry.y;
356
+ d[at + 6] = entry.width;
357
+ d[at + 7] = entry.height;
358
+ d[at + 8] = ink[0];
359
+ d[at + 9] = ink[1];
360
+ d[at + 10] = ink[2];
361
+ d[at + 11] = ink[3];
362
+ d[at + 12] = halo[0];
363
+ d[at + 13] = halo[1];
364
+ d[at + 14] = halo[2];
365
+ d[at + 15] = halo[3];
366
+ d[at + 16] = haloPx;
367
+ d[at + 17] = level ? 1 : 0;
368
+ d[at + 18] = scale;
369
+ return count + 1;
331
370
  }
332
371
  // --- internals -------------------------------------------------------------
333
372
  /** One anchor as a contender, or null when it cannot be one at all at
@@ -370,6 +409,7 @@ export class LabelPlacer {
370
409
  point,
371
410
  sx,
372
411
  sy,
412
+ ox: 0,
373
413
  angle: a,
374
414
  cos: Math.cos(a),
375
415
  sin: Math.sin(a),
@@ -389,6 +429,13 @@ export class LabelPlacer {
389
429
  repeat: layer.repeat,
390
430
  };
391
431
  }
432
+ /** The icon a label of `layer` is set with: none for a name along a
433
+ * street, and none where the atlas cannot draw it — the name is then set
434
+ * alone rather than not at all. */
435
+ _icon(layer, point, atlas) {
436
+ const icon = point ? (layer?.icon ?? null) : null;
437
+ return icon && !atlas.iconFailed(icon.name) ? icon : null;
438
+ }
392
439
  /** Each symbol layer's labelling at this zoom, by layer index — null
393
440
  * where it does not label. */
394
441
  _layersAt(style, zoom, scale) {
@@ -409,9 +456,11 @@ export class LabelPlacer {
409
456
  const haloWidth = symbol.textHaloWidth === undefined
410
457
  ? 1
411
458
  : resolveZoomed(symbol.textHaloWidth, zoom);
412
- const size = Math.max(1, Math.round((symbol.textSize === undefined
459
+ // Not rounded: a field draws any size, so a ramp grows the type
460
+ // continuously rather than a whole pixel at a time.
461
+ const size = Math.max(1, (symbol.textSize === undefined
413
462
  ? 12
414
- : resolveZoomed(symbol.textSize, zoom)) * scale));
463
+ : resolveZoomed(symbol.textSize, zoom)) * scale);
415
464
  return {
416
465
  id: layer.id,
417
466
  rank: symbol.rank ?? 0,
@@ -420,9 +469,34 @@ export class LabelPlacer {
420
469
  ink,
421
470
  halo: halo && haloWidth > 0 ? halo : null,
422
471
  haloPx: haloWidth * scale,
472
+ icon: this._iconOf(symbol, zoom, scale),
423
473
  };
424
474
  });
425
475
  }
476
+ /** A layer's icon at this zoom, or null where it sets none — or names
477
+ * one this version does not draw, or a colour that does not parse. */
478
+ _iconOf(symbol, zoom, scale) {
479
+ if (!isMapIcon(symbol.icon))
480
+ return null;
481
+ const plate = this._color(symbol.iconColor
482
+ ? resolveZoomed(symbol.iconColor, zoom)
483
+ : DEFAULT_ICON_COLOR);
484
+ const glyph = this._color(symbol.iconGlyphColor
485
+ ? resolveZoomed(symbol.iconGlyphColor, zoom)
486
+ : DEFAULT_ICON_GLYPH_COLOR);
487
+ if (!plate || !glyph)
488
+ return null;
489
+ const size = symbol.iconSize === undefined
490
+ ? DEFAULT_ICON_SIZE
491
+ : resolveZoomed(symbol.iconSize, zoom);
492
+ return {
493
+ name: symbol.icon,
494
+ size: Math.max(1, Math.round(size * scale)),
495
+ gap: ICON_GAP * scale,
496
+ plate,
497
+ glyph,
498
+ };
499
+ }
426
500
  _color(value) {
427
501
  let color = this._colors.get(value);
428
502
  if (color === undefined) {
@@ -511,7 +585,8 @@ class CollisionGrid {
511
585
  const out = this._scratch;
512
586
  out.length = 0;
513
587
  if (c.angle === 0) {
514
- out.push(0, c.sx - w / 2 - pad, c.sy - h / 2 - pad, c.sx + w / 2 + pad, c.sy + h / 2 + pad);
588
+ const x = c.sx + c.ox;
589
+ out.push(0, x - w / 2 - pad, c.sy - h / 2 - pad, x + w / 2 + pad, c.sy + h / 2 + pad);
515
590
  return out;
516
591
  }
517
592
  const r = h / 2 + pad;