@react-x11/components 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (721) hide show
  1. package/README.md +105 -38
  2. package/dist/charts/node.d.ts +12 -2
  3. package/dist/charts/node.d.ts.map +1 -1
  4. package/dist/charts/node.js +50 -16
  5. package/dist/charts/node.js.map +1 -1
  6. package/dist/charts/render.d.ts +12 -3
  7. package/dist/charts/render.d.ts.map +1 -1
  8. package/dist/charts/render.js +94 -25
  9. package/dist/charts/render.js.map +1 -1
  10. package/dist/code/index.d.ts.map +1 -1
  11. package/dist/code/index.js +3 -1
  12. package/dist/code/index.js.map +1 -1
  13. package/dist/code-editor/completion.d.ts.map +1 -1
  14. package/dist/code-editor/completion.js +3 -2
  15. package/dist/code-editor/completion.js.map +1 -1
  16. package/dist/code-editor/index.d.ts.map +1 -1
  17. package/dist/code-editor/index.js +19 -0
  18. package/dist/code-editor/index.js.map +1 -1
  19. package/dist/code-editor/node.d.ts +177 -7
  20. package/dist/code-editor/node.d.ts.map +1 -1
  21. package/dist/code-editor/node.js +1329 -164
  22. package/dist/code-editor/node.js.map +1 -1
  23. package/dist/code-language/languages/glsl.d.ts.map +1 -1
  24. package/dist/code-language/languages/glsl.js +10 -2
  25. package/dist/code-language/languages/glsl.js.map +1 -1
  26. package/dist/code-language/languages/javascript.d.ts.map +1 -1
  27. package/dist/code-language/languages/javascript.js +18 -3
  28. package/dist/code-language/languages/javascript.js.map +1 -1
  29. package/dist/code-language/languages/json.d.ts.map +1 -1
  30. package/dist/code-language/languages/json.js +10 -2
  31. package/dist/code-language/languages/json.js.map +1 -1
  32. package/dist/code-language/languages/shell.d.ts.map +1 -1
  33. package/dist/code-language/languages/shell.js +10 -2
  34. package/dist/code-language/languages/shell.js.map +1 -1
  35. package/dist/code-language/languages/sql.d.ts.map +1 -1
  36. package/dist/code-language/languages/sql.js +20 -2
  37. package/dist/code-language/languages/sql.js.map +1 -1
  38. package/dist/code-language/stream.d.ts +22 -0
  39. package/dist/code-language/stream.d.ts.map +1 -1
  40. package/dist/code-language/stream.js +259 -9
  41. package/dist/code-language/stream.js.map +1 -1
  42. package/dist/code-language/types.d.ts +5 -4
  43. package/dist/code-language/types.d.ts.map +1 -1
  44. package/dist/codeblock/index.d.ts +13 -2
  45. package/dist/codeblock/index.d.ts.map +1 -1
  46. package/dist/codeblock/index.js +20 -3
  47. package/dist/codeblock/index.js.map +1 -1
  48. package/dist/embed/client.d.ts +48 -3
  49. package/dist/embed/client.d.ts.map +1 -1
  50. package/dist/embed/client.js +79 -5
  51. package/dist/embed/client.js.map +1 -1
  52. package/dist/embed/index.d.ts +1 -1
  53. package/dist/embed/index.d.ts.map +1 -1
  54. package/dist/embed/index.js +1 -1
  55. package/dist/embed/index.js.map +1 -1
  56. package/dist/flow/draw.d.ts +50 -0
  57. package/dist/flow/draw.d.ts.map +1 -1
  58. package/dist/flow/draw.js +132 -33
  59. package/dist/flow/draw.js.map +1 -1
  60. package/dist/flow/gl/color.d.ts +13 -0
  61. package/dist/flow/gl/color.d.ts.map +1 -0
  62. package/dist/flow/gl/color.js +82 -0
  63. package/dist/flow/gl/color.js.map +1 -0
  64. package/dist/flow/gl/index.d.ts +60 -0
  65. package/dist/flow/gl/index.d.ts.map +1 -0
  66. package/dist/flow/gl/index.js +283 -0
  67. package/dist/flow/gl/index.js.map +1 -0
  68. package/dist/flow/gl/pack.d.ts +133 -0
  69. package/dist/flow/gl/pack.d.ts.map +1 -0
  70. package/dist/flow/gl/pack.js +408 -0
  71. package/dist/flow/gl/pack.js.map +1 -0
  72. package/dist/flow/gl/renderer.d.ts +95 -0
  73. package/dist/flow/gl/renderer.d.ts.map +1 -0
  74. package/dist/flow/gl/renderer.js +459 -0
  75. package/dist/flow/gl/renderer.js.map +1 -0
  76. package/dist/flow/gl/shaders.d.ts +79 -0
  77. package/dist/flow/gl/shaders.d.ts.map +1 -0
  78. package/dist/flow/gl/shaders.js +346 -0
  79. package/dist/flow/gl/shaders.js.map +1 -0
  80. package/dist/flow/gl/text.d.ts +318 -0
  81. package/dist/flow/gl/text.d.ts.map +1 -0
  82. package/dist/flow/gl/text.js +1103 -0
  83. package/dist/flow/gl/text.js.map +1 -0
  84. package/dist/flow/index.d.ts +1 -1
  85. package/dist/flow/index.d.ts.map +1 -1
  86. package/dist/flow/index.js +619 -64
  87. package/dist/flow/index.js.map +1 -1
  88. package/dist/flow/node.d.ts +621 -72
  89. package/dist/flow/node.d.ts.map +1 -1
  90. package/dist/flow/node.js +2253 -1018
  91. package/dist/flow/node.js.map +1 -1
  92. package/dist/flow/paint.d.ts +35 -0
  93. package/dist/flow/paint.d.ts.map +1 -0
  94. package/dist/flow/paint.js +393 -0
  95. package/dist/flow/paint.js.map +1 -0
  96. package/dist/flow/paths.d.ts +14 -0
  97. package/dist/flow/paths.d.ts.map +1 -1
  98. package/dist/flow/paths.js +45 -19
  99. package/dist/flow/paths.js.map +1 -1
  100. package/dist/flow/scene.d.ts +584 -0
  101. package/dist/flow/scene.d.ts.map +1 -0
  102. package/dist/flow/scene.js +1453 -0
  103. package/dist/flow/scene.js.map +1 -0
  104. package/dist/flow/types.d.ts +111 -1
  105. package/dist/flow/types.d.ts.map +1 -1
  106. package/dist/html/controls.d.ts +28 -0
  107. package/dist/html/controls.d.ts.map +1 -1
  108. package/dist/html/controls.js +52 -2
  109. package/dist/html/controls.js.map +1 -1
  110. package/dist/html/css/calc.d.ts +14 -0
  111. package/dist/html/css/calc.d.ts.map +1 -0
  112. package/dist/html/css/calc.js +344 -0
  113. package/dist/html/css/calc.js.map +1 -0
  114. package/dist/html/css/cascade.d.ts +240 -6
  115. package/dist/html/css/cascade.d.ts.map +1 -1
  116. package/dist/html/css/cascade.js +1327 -66
  117. package/dist/html/css/cascade.js.map +1 -1
  118. package/dist/html/css/color.d.ts +23 -0
  119. package/dist/html/css/color.d.ts.map +1 -0
  120. package/dist/html/css/color.js +740 -0
  121. package/dist/html/css/color.js.map +1 -0
  122. package/dist/html/css/content.d.ts +92 -0
  123. package/dist/html/css/content.d.ts.map +1 -0
  124. package/dist/html/css/content.js +388 -0
  125. package/dist/html/css/content.js.map +1 -0
  126. package/dist/html/css/counter-styles.d.ts +76 -0
  127. package/dist/html/css/counter-styles.d.ts.map +1 -0
  128. package/dist/html/css/counter-styles.js +893 -0
  129. package/dist/html/css/counter-styles.js.map +1 -0
  130. package/dist/html/css/decode.d.ts +12 -0
  131. package/dist/html/css/decode.d.ts.map +1 -0
  132. package/dist/html/css/decode.js +116 -0
  133. package/dist/html/css/decode.js.map +1 -0
  134. package/dist/html/css/parse.d.ts +110 -10
  135. package/dist/html/css/parse.d.ts.map +1 -1
  136. package/dist/html/css/parse.js +1473 -180
  137. package/dist/html/css/parse.js.map +1 -1
  138. package/dist/html/css/style.d.ts +498 -15
  139. package/dist/html/css/style.d.ts.map +1 -1
  140. package/dist/html/css/style.js +3698 -206
  141. package/dist/html/css/style.js.map +1 -1
  142. package/dist/html/css/ua.d.ts.map +1 -1
  143. package/dist/html/css/ua.js +57 -11
  144. package/dist/html/css/ua.js.map +1 -1
  145. package/dist/html/css/values.d.ts +37 -3
  146. package/dist/html/css/values.d.ts.map +1 -1
  147. package/dist/html/css/values.js +122 -48
  148. package/dist/html/css/values.js.map +1 -1
  149. package/dist/html/css/vars.d.ts +52 -0
  150. package/dist/html/css/vars.d.ts.map +1 -0
  151. package/dist/html/css/vars.js +358 -0
  152. package/dist/html/css/vars.js.map +1 -0
  153. package/dist/html/dom.d.ts +30 -4
  154. package/dist/html/dom.d.ts.map +1 -1
  155. package/dist/html/dom.js +278 -17
  156. package/dist/html/dom.js.map +1 -1
  157. package/dist/html/fonts.d.ts +106 -0
  158. package/dist/html/fonts.d.ts.map +1 -0
  159. package/dist/html/fonts.js +565 -0
  160. package/dist/html/fonts.js.map +1 -0
  161. package/dist/html/gif.d.ts +15 -0
  162. package/dist/html/gif.d.ts.map +1 -0
  163. package/dist/html/gif.js +229 -0
  164. package/dist/html/gif.js.map +1 -0
  165. package/dist/html/index.d.ts +50 -11
  166. package/dist/html/index.d.ts.map +1 -1
  167. package/dist/html/index.js +115 -9
  168. package/dist/html/index.js.map +1 -1
  169. package/dist/html/layout/block.d.ts +226 -3
  170. package/dist/html/layout/block.d.ts.map +1 -1
  171. package/dist/html/layout/block.js +2937 -197
  172. package/dist/html/layout/block.js.map +1 -1
  173. package/dist/html/layout/boxes.d.ts +340 -17
  174. package/dist/html/layout/boxes.d.ts.map +1 -1
  175. package/dist/html/layout/boxes.js +1714 -182
  176. package/dist/html/layout/boxes.js.map +1 -1
  177. package/dist/html/layout/cache.d.ts +58 -0
  178. package/dist/html/layout/cache.d.ts.map +1 -0
  179. package/dist/html/layout/cache.js +224 -0
  180. package/dist/html/layout/cache.js.map +1 -0
  181. package/dist/html/layout/collapse.d.ts +45 -0
  182. package/dist/html/layout/collapse.d.ts.map +1 -0
  183. package/dist/html/layout/collapse.js +246 -0
  184. package/dist/html/layout/collapse.js.map +1 -0
  185. package/dist/html/layout/css-grid.d.ts +7 -0
  186. package/dist/html/layout/css-grid.d.ts.map +1 -0
  187. package/dist/html/layout/css-grid.js +900 -0
  188. package/dist/html/layout/css-grid.js.map +1 -0
  189. package/dist/html/layout/flex.d.ts.map +1 -1
  190. package/dist/html/layout/flex.js +1025 -89
  191. package/dist/html/layout/flex.js.map +1 -1
  192. package/dist/html/layout/floats.d.ts +45 -6
  193. package/dist/html/layout/floats.d.ts.map +1 -1
  194. package/dist/html/layout/floats.js +113 -14
  195. package/dist/html/layout/floats.js.map +1 -1
  196. package/dist/html/layout/grid-lines.d.ts +39 -0
  197. package/dist/html/layout/grid-lines.d.ts.map +1 -0
  198. package/dist/html/layout/grid-lines.js +119 -0
  199. package/dist/html/layout/grid-lines.js.map +1 -0
  200. package/dist/html/layout/grid.d.ts +53 -0
  201. package/dist/html/layout/grid.d.ts.map +1 -0
  202. package/dist/html/layout/grid.js +153 -0
  203. package/dist/html/layout/grid.js.map +1 -0
  204. package/dist/html/layout/inline.d.ts +151 -1
  205. package/dist/html/layout/inline.d.ts.map +1 -1
  206. package/dist/html/layout/inline.js +3375 -174
  207. package/dist/html/layout/inline.js.map +1 -1
  208. package/dist/html/layout/shaping.d.ts +6 -0
  209. package/dist/html/layout/shaping.d.ts.map +1 -0
  210. package/dist/html/layout/shaping.js +100 -0
  211. package/dist/html/layout/shaping.js.map +1 -0
  212. package/dist/html/layout/table.d.ts +3 -0
  213. package/dist/html/layout/table.d.ts.map +1 -1
  214. package/dist/html/layout/table.js +681 -175
  215. package/dist/html/layout/table.js.map +1 -1
  216. package/dist/html/layout/tracks.d.ts +44 -0
  217. package/dist/html/layout/tracks.d.ts.map +1 -0
  218. package/dist/html/layout/tracks.js +349 -0
  219. package/dist/html/layout/tracks.js.map +1 -0
  220. package/dist/html/node.d.ts +172 -5
  221. package/dist/html/node.d.ts.map +1 -1
  222. package/dist/html/node.js +1336 -103
  223. package/dist/html/node.js.map +1 -1
  224. package/dist/html/paint.d.ts +92 -3
  225. package/dist/html/paint.d.ts.map +1 -1
  226. package/dist/html/paint.js +3503 -141
  227. package/dist/html/paint.js.map +1 -1
  228. package/dist/html/resources.d.ts +60 -14
  229. package/dist/html/resources.d.ts.map +1 -1
  230. package/dist/html/resources.js +122 -36
  231. package/dist/html/resources.js.map +1 -1
  232. package/dist/html/surfaces.d.ts +23 -0
  233. package/dist/html/surfaces.d.ts.map +1 -0
  234. package/dist/html/surfaces.js +68 -0
  235. package/dist/html/surfaces.js.map +1 -0
  236. package/dist/html/svg.d.ts +80 -0
  237. package/dist/html/svg.d.ts.map +1 -0
  238. package/dist/html/svg.js +435 -0
  239. package/dist/html/svg.js.map +1 -0
  240. package/dist/html/url.d.ts +23 -0
  241. package/dist/html/url.d.ts.map +1 -0
  242. package/dist/html/url.js +80 -0
  243. package/dist/html/url.js.map +1 -0
  244. package/dist/index.d.ts +2 -2
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +1 -1
  247. package/dist/index.js.map +1 -1
  248. package/dist/internal/collate.d.ts +3 -0
  249. package/dist/internal/collate.d.ts.map +1 -0
  250. package/dist/internal/collate.js +11 -0
  251. package/dist/internal/collate.js.map +1 -0
  252. package/dist/{markdown → internal/markdown}/ast.d.ts +23 -0
  253. package/dist/internal/markdown/ast.d.ts.map +1 -0
  254. package/dist/internal/markdown/ast.js +22 -0
  255. package/dist/internal/markdown/ast.js.map +1 -0
  256. package/dist/internal/markdown/parse.d.ts.map +1 -0
  257. package/dist/{markdown → internal/markdown}/parse.js +221 -30
  258. package/dist/internal/markdown/parse.js.map +1 -0
  259. package/dist/internal/markdown/stringify.d.ts +4 -0
  260. package/dist/internal/markdown/stringify.d.ts.map +1 -0
  261. package/dist/internal/markdown/stringify.js +684 -0
  262. package/dist/internal/markdown/stringify.js.map +1 -0
  263. package/dist/internal/markdown/tags.d.ts.map +1 -0
  264. package/dist/internal/markdown/tags.js.map +1 -0
  265. package/dist/internal/prewarm.d.ts +18 -0
  266. package/dist/internal/prewarm.d.ts.map +1 -0
  267. package/dist/internal/prewarm.js +42 -0
  268. package/dist/internal/prewarm.js.map +1 -0
  269. package/dist/internal/scroll.d.ts +3 -2
  270. package/dist/internal/scroll.d.ts.map +1 -1
  271. package/dist/internal/scroll.js +1 -0
  272. package/dist/internal/scroll.js.map +1 -1
  273. package/dist/internal/sdf.d.ts +20 -0
  274. package/dist/internal/sdf.d.ts.map +1 -0
  275. package/dist/internal/sdf.js +216 -0
  276. package/dist/internal/sdf.js.map +1 -0
  277. package/dist/internal/splice.d.ts +12 -0
  278. package/dist/internal/splice.d.ts.map +1 -0
  279. package/dist/internal/splice.js +23 -0
  280. package/dist/internal/splice.js.map +1 -0
  281. package/dist/internal/window.d.ts +12 -0
  282. package/dist/internal/window.d.ts.map +1 -1
  283. package/dist/internal/window.js +23 -6
  284. package/dist/internal/window.js.map +1 -1
  285. package/dist/maps/anchors.d.ts +103 -0
  286. package/dist/maps/anchors.d.ts.map +1 -0
  287. package/dist/maps/anchors.js +790 -0
  288. package/dist/maps/anchors.js.map +1 -0
  289. package/dist/maps/controller.d.ts +340 -0
  290. package/dist/maps/controller.d.ts.map +1 -0
  291. package/dist/maps/controller.js +822 -0
  292. package/dist/maps/controller.js.map +1 -0
  293. package/dist/maps/gl/buckets.d.ts +99 -0
  294. package/dist/maps/gl/buckets.d.ts.map +1 -0
  295. package/dist/maps/gl/buckets.js +365 -0
  296. package/dist/maps/gl/buckets.js.map +1 -0
  297. package/dist/maps/gl/build-worker.d.ts +15 -0
  298. package/dist/maps/gl/build-worker.d.ts.map +1 -0
  299. package/dist/maps/gl/build-worker.js +44 -0
  300. package/dist/maps/gl/build-worker.js.map +1 -0
  301. package/dist/maps/gl/color.d.ts +8 -0
  302. package/dist/maps/gl/color.d.ts.map +1 -0
  303. package/dist/maps/gl/color.js +57 -0
  304. package/dist/maps/gl/color.js.map +1 -0
  305. package/dist/maps/gl/cover.d.ts +70 -0
  306. package/dist/maps/gl/cover.d.ts.map +1 -0
  307. package/dist/maps/gl/cover.js +137 -0
  308. package/dist/maps/gl/cover.js.map +1 -0
  309. package/dist/maps/gl/index.d.ts +3 -0
  310. package/dist/maps/gl/index.d.ts.map +1 -0
  311. package/dist/maps/gl/index.js +20 -0
  312. package/dist/maps/gl/index.js.map +1 -0
  313. package/dist/maps/gl/markers.d.ts +28 -0
  314. package/dist/maps/gl/markers.d.ts.map +1 -0
  315. package/dist/maps/gl/markers.js +60 -0
  316. package/dist/maps/gl/markers.js.map +1 -0
  317. package/dist/maps/gl/overlays.d.ts +68 -0
  318. package/dist/maps/gl/overlays.d.ts.map +1 -0
  319. package/dist/maps/gl/overlays.js +300 -0
  320. package/dist/maps/gl/overlays.js.map +1 -0
  321. package/dist/maps/gl/pane.d.ts +12 -0
  322. package/dist/maps/gl/pane.d.ts.map +1 -0
  323. package/dist/maps/gl/pane.js +37 -0
  324. package/dist/maps/gl/pane.js.map +1 -0
  325. package/dist/maps/gl/placement.d.ts +124 -0
  326. package/dist/maps/gl/placement.d.ts.map +1 -0
  327. package/dist/maps/gl/placement.js +642 -0
  328. package/dist/maps/gl/placement.js.map +1 -0
  329. package/dist/maps/gl/renderer.d.ts +384 -0
  330. package/dist/maps/gl/renderer.d.ts.map +1 -0
  331. package/dist/maps/gl/renderer.js +1184 -0
  332. package/dist/maps/gl/renderer.js.map +1 -0
  333. package/dist/maps/gl/shaders.d.ts +121 -0
  334. package/dist/maps/gl/shaders.d.ts.map +1 -0
  335. package/dist/maps/gl/shaders.js +453 -0
  336. package/dist/maps/gl/shaders.js.map +1 -0
  337. package/dist/maps/gl/store.d.ts +125 -0
  338. package/dist/maps/gl/store.d.ts.map +1 -0
  339. package/dist/maps/gl/store.js +512 -0
  340. package/dist/maps/gl/store.js.map +1 -0
  341. package/dist/maps/gl/text.d.ts +283 -0
  342. package/dist/maps/gl/text.d.ts.map +1 -0
  343. package/dist/maps/gl/text.js +698 -0
  344. package/dist/maps/gl/text.js.map +1 -0
  345. package/dist/maps/gl/view.d.ts +345 -0
  346. package/dist/maps/gl/view.d.ts.map +1 -0
  347. package/dist/maps/gl/view.js +1209 -0
  348. package/dist/maps/gl/view.js.map +1 -0
  349. package/dist/maps/icons.d.ts +32 -0
  350. package/dist/maps/icons.d.ts.map +1 -0
  351. package/dist/maps/icons.js +151 -0
  352. package/dist/maps/icons.js.map +1 -0
  353. package/dist/maps/index.d.ts +3 -1
  354. package/dist/maps/index.d.ts.map +1 -1
  355. package/dist/maps/index.js +218 -52
  356. package/dist/maps/index.js.map +1 -1
  357. package/dist/maps/labels.d.ts +91 -18
  358. package/dist/maps/labels.d.ts.map +1 -1
  359. package/dist/maps/labels.js +376 -140
  360. package/dist/maps/labels.js.map +1 -1
  361. package/dist/maps/node.d.ts +179 -56
  362. package/dist/maps/node.d.ts.map +1 -1
  363. package/dist/maps/node.js +663 -537
  364. package/dist/maps/node.js.map +1 -1
  365. package/dist/maps/overlay.d.ts +72 -9
  366. package/dist/maps/overlay.d.ts.map +1 -1
  367. package/dist/maps/overlay.js +108 -28
  368. package/dist/maps/overlay.js.map +1 -1
  369. package/dist/maps/paint.d.ts +3 -0
  370. package/dist/maps/paint.d.ts.map +1 -1
  371. package/dist/maps/paint.js.map +1 -1
  372. package/dist/maps/proj.d.ts +62 -0
  373. package/dist/maps/proj.d.ts.map +1 -1
  374. package/dist/maps/proj.js +101 -0
  375. package/dist/maps/proj.js.map +1 -1
  376. package/dist/maps/renderer.d.ts +69 -0
  377. package/dist/maps/renderer.d.ts.map +1 -0
  378. package/dist/maps/renderer.js +66 -0
  379. package/dist/maps/renderer.js.map +1 -0
  380. package/dist/maps/sources.d.ts +30 -6
  381. package/dist/maps/sources.d.ts.map +1 -1
  382. package/dist/maps/sources.js +22 -3
  383. package/dist/maps/sources.js.map +1 -1
  384. package/dist/maps/style.d.ts +35 -0
  385. package/dist/maps/style.d.ts.map +1 -1
  386. package/dist/maps/style.js.map +1 -1
  387. package/dist/maps/styles.d.ts +12 -0
  388. package/dist/maps/styles.d.ts.map +1 -1
  389. package/dist/maps/styles.js +120 -6
  390. package/dist/maps/styles.js.map +1 -1
  391. package/dist/maps/theme.d.ts +19 -0
  392. package/dist/maps/theme.d.ts.map +1 -0
  393. package/dist/maps/theme.js +44 -0
  394. package/dist/maps/theme.js.map +1 -0
  395. package/dist/maps/tiles.d.ts +147 -27
  396. package/dist/maps/tiles.d.ts.map +1 -1
  397. package/dist/maps/tiles.js +221 -54
  398. package/dist/maps/tiles.js.map +1 -1
  399. package/dist/maps/types.d.ts +213 -21
  400. package/dist/maps/types.d.ts.map +1 -1
  401. package/dist/markdown/expressions.d.ts +1 -1
  402. package/dist/markdown/expressions.d.ts.map +1 -1
  403. package/dist/markdown/expressions.js.map +1 -1
  404. package/dist/markdown/index.d.ts +7 -6
  405. package/dist/markdown/index.d.ts.map +1 -1
  406. package/dist/markdown/index.js +121 -50
  407. package/dist/markdown/index.js.map +1 -1
  408. package/dist/markdown/spans.d.ts +1 -1
  409. package/dist/markdown/spans.d.ts.map +1 -1
  410. package/dist/markdown/spans.js +6 -0
  411. package/dist/markdown/spans.js.map +1 -1
  412. package/dist/media-player/index.d.ts +11 -3
  413. package/dist/media-player/index.d.ts.map +1 -1
  414. package/dist/media-player/index.js +13 -2
  415. package/dist/media-player/index.js.map +1 -1
  416. package/dist/qml/containers.d.ts.map +1 -1
  417. package/dist/qml/containers.js +6 -1
  418. package/dist/qml/containers.js.map +1 -1
  419. package/dist/qml/interaction.d.ts.map +1 -1
  420. package/dist/qml/interaction.js +38 -5
  421. package/dist/qml/interaction.js.map +1 -1
  422. package/dist/qml/layouts.d.ts.map +1 -1
  423. package/dist/qml/layouts.js +21 -6
  424. package/dist/qml/layouts.js.map +1 -1
  425. package/dist/qml/qtquick.d.ts.map +1 -1
  426. package/dist/qml/qtquick.js +9 -2
  427. package/dist/qml/qtquick.js.map +1 -1
  428. package/dist/qml/react.d.ts.map +1 -1
  429. package/dist/qml/react.js +9 -7
  430. package/dist/qml/react.js.map +1 -1
  431. package/dist/reorder/clock.d.ts +7 -0
  432. package/dist/reorder/clock.d.ts.map +1 -0
  433. package/dist/reorder/clock.js +26 -0
  434. package/dist/reorder/clock.js.map +1 -0
  435. package/dist/reorder/index.d.ts +25 -3
  436. package/dist/reorder/index.d.ts.map +1 -1
  437. package/dist/reorder/index.js +64 -19
  438. package/dist/reorder/index.js.map +1 -1
  439. package/dist/rich-text-editor/clipboard.d.ts +23 -0
  440. package/dist/rich-text-editor/clipboard.d.ts.map +1 -0
  441. package/dist/rich-text-editor/clipboard.js +307 -0
  442. package/dist/rich-text-editor/clipboard.js.map +1 -0
  443. package/dist/rich-text-editor/collab.d.ts +32 -0
  444. package/dist/rich-text-editor/collab.d.ts.map +1 -0
  445. package/dist/rich-text-editor/collab.js +55 -0
  446. package/dist/rich-text-editor/collab.js.map +1 -0
  447. package/dist/rich-text-editor/commands.d.ts +50 -0
  448. package/dist/rich-text-editor/commands.d.ts.map +1 -0
  449. package/dist/rich-text-editor/commands.js +376 -0
  450. package/dist/rich-text-editor/commands.js.map +1 -0
  451. package/dist/rich-text-editor/drag.d.ts +68 -0
  452. package/dist/rich-text-editor/drag.d.ts.map +1 -0
  453. package/dist/rich-text-editor/drag.js +148 -0
  454. package/dist/rich-text-editor/drag.js.map +1 -0
  455. package/dist/rich-text-editor/html.d.ts +145 -0
  456. package/dist/rich-text-editor/html.d.ts.map +1 -0
  457. package/dist/rich-text-editor/html.js +516 -0
  458. package/dist/rich-text-editor/html.js.map +1 -0
  459. package/dist/rich-text-editor/index.d.ts +252 -0
  460. package/dist/rich-text-editor/index.d.ts.map +1 -0
  461. package/dist/rich-text-editor/index.js +856 -0
  462. package/dist/rich-text-editor/index.js.map +1 -0
  463. package/dist/rich-text-editor/inline.d.ts +94 -0
  464. package/dist/rich-text-editor/inline.d.ts.map +1 -0
  465. package/dist/rich-text-editor/inline.js +252 -0
  466. package/dist/rich-text-editor/inline.js.map +1 -0
  467. package/dist/rich-text-editor/keymap.d.ts +71 -0
  468. package/dist/rich-text-editor/keymap.d.ts.map +1 -0
  469. package/dist/rich-text-editor/keymap.js +394 -0
  470. package/dist/rich-text-editor/keymap.js.map +1 -0
  471. package/dist/rich-text-editor/keys.d.ts +40 -0
  472. package/dist/rich-text-editor/keys.d.ts.map +1 -0
  473. package/dist/rich-text-editor/keys.js +202 -0
  474. package/dist/rich-text-editor/keys.js.map +1 -0
  475. package/dist/rich-text-editor/look.d.ts +71 -0
  476. package/dist/rich-text-editor/look.d.ts.map +1 -0
  477. package/dist/rich-text-editor/look.js +342 -0
  478. package/dist/rich-text-editor/look.js.map +1 -0
  479. package/dist/rich-text-editor/markdown.d.ts +18 -0
  480. package/dist/rich-text-editor/markdown.d.ts.map +1 -0
  481. package/dist/rich-text-editor/markdown.js +496 -0
  482. package/dist/rich-text-editor/markdown.js.map +1 -0
  483. package/dist/rich-text-editor/marks.d.ts +9 -0
  484. package/dist/rich-text-editor/marks.d.ts.map +1 -0
  485. package/dist/rich-text-editor/marks.js +83 -0
  486. package/dist/rich-text-editor/marks.js.map +1 -0
  487. package/dist/rich-text-editor/nodes.d.ts +135 -0
  488. package/dist/rich-text-editor/nodes.d.ts.map +1 -0
  489. package/dist/rich-text-editor/nodes.js +397 -0
  490. package/dist/rich-text-editor/nodes.js.map +1 -0
  491. package/dist/rich-text-editor/render.d.ts +68 -0
  492. package/dist/rich-text-editor/render.d.ts.map +1 -0
  493. package/dist/rich-text-editor/render.js +518 -0
  494. package/dist/rich-text-editor/render.js.map +1 -0
  495. package/dist/rich-text-editor/schema.d.ts +16 -0
  496. package/dist/rich-text-editor/schema.d.ts.map +1 -0
  497. package/dist/rich-text-editor/schema.js +386 -0
  498. package/dist/rich-text-editor/schema.js.map +1 -0
  499. package/dist/rich-text-editor/store.d.ts +11 -0
  500. package/dist/rich-text-editor/store.d.ts.map +1 -0
  501. package/dist/rich-text-editor/store.js +43 -0
  502. package/dist/rich-text-editor/store.js.map +1 -0
  503. package/dist/rich-text-editor/suggest.d.ts +127 -0
  504. package/dist/rich-text-editor/suggest.d.ts.map +1 -0
  505. package/dist/rich-text-editor/suggest.js +0 -0
  506. package/dist/rich-text-editor/suggest.js.map +1 -0
  507. package/dist/rich-text-editor/tables.d.ts +41 -0
  508. package/dist/rich-text-editor/tables.d.ts.map +1 -0
  509. package/dist/rich-text-editor/tables.js +204 -0
  510. package/dist/rich-text-editor/tables.js.map +1 -0
  511. package/dist/rich-text-editor/toolbar.d.ts +58 -0
  512. package/dist/rich-text-editor/toolbar.d.ts.map +1 -0
  513. package/dist/rich-text-editor/toolbar.js +548 -0
  514. package/dist/rich-text-editor/toolbar.js.map +1 -0
  515. package/dist/rich-text-editor/view.d.ts +368 -0
  516. package/dist/rich-text-editor/view.d.ts.map +1 -0
  517. package/dist/rich-text-editor/view.js +1968 -0
  518. package/dist/rich-text-editor/view.js.map +1 -0
  519. package/dist/rich-text-editor/virtual.d.ts +54 -0
  520. package/dist/rich-text-editor/virtual.d.ts.map +1 -0
  521. package/dist/rich-text-editor/virtual.js +279 -0
  522. package/dist/rich-text-editor/virtual.js.map +1 -0
  523. package/dist/richtext/node.d.ts +71 -4
  524. package/dist/richtext/node.d.ts.map +1 -1
  525. package/dist/richtext/node.js +233 -28
  526. package/dist/richtext/node.js.map +1 -1
  527. package/dist/richtext/runs.d.ts +13 -8
  528. package/dist/richtext/runs.d.ts.map +1 -1
  529. package/dist/richtext/runs.js +18 -8
  530. package/dist/richtext/runs.js.map +1 -1
  531. package/dist/table/index.d.ts.map +1 -1
  532. package/dist/table/index.js +23 -0
  533. package/dist/table/index.js.map +1 -1
  534. package/dist/table/rows.d.ts +3 -2
  535. package/dist/table/rows.d.ts.map +1 -1
  536. package/dist/table/rows.js +20 -6
  537. package/dist/table/rows.js.map +1 -1
  538. package/dist/terminal/backends.d.ts +4 -1
  539. package/dist/terminal/backends.d.ts.map +1 -1
  540. package/dist/terminal/backends.js.map +1 -1
  541. package/dist/terminal/index.d.ts +18 -7
  542. package/dist/terminal/index.d.ts.map +1 -1
  543. package/dist/terminal/index.js +32 -11
  544. package/dist/terminal/index.js.map +1 -1
  545. package/dist/terminal/vt/pty.d.ts +13 -2
  546. package/dist/terminal/vt/pty.d.ts.map +1 -1
  547. package/dist/terminal/vt/pty.js +18 -3
  548. package/dist/terminal/vt/pty.js.map +1 -1
  549. package/dist/terminal-output/index.d.ts.map +1 -1
  550. package/dist/terminal-output/index.js +6 -1
  551. package/dist/terminal-output/index.js.map +1 -1
  552. package/dist/three/canvas.d.ts.map +1 -1
  553. package/dist/three/canvas.js +85 -7
  554. package/dist/three/canvas.js.map +1 -1
  555. package/dist/three/events.d.ts +22 -4
  556. package/dist/three/events.d.ts.map +1 -1
  557. package/dist/three/events.js +34 -4
  558. package/dist/three/events.js.map +1 -1
  559. package/dist/tree/index.d.ts.map +1 -1
  560. package/dist/tree/index.js +17 -0
  561. package/dist/tree/index.js.map +1 -1
  562. package/package.json +59 -31
  563. package/src/charts/node.ts +68 -28
  564. package/src/charts/render.ts +120 -30
  565. package/src/code/index.ts +3 -1
  566. package/src/code-editor/completion.ts +3 -2
  567. package/src/code-editor/index.ts +19 -0
  568. package/src/code-editor/node.ts +1574 -184
  569. package/src/code-language/languages/glsl.ts +12 -2
  570. package/src/code-language/languages/javascript.ts +21 -4
  571. package/src/code-language/languages/json.ts +12 -2
  572. package/src/code-language/languages/shell.ts +12 -2
  573. package/src/code-language/languages/sql.ts +22 -2
  574. package/src/code-language/stream.ts +257 -17
  575. package/src/code-language/types.ts +5 -4
  576. package/src/codeblock/index.ts +20 -3
  577. package/src/embed/client.ts +102 -8
  578. package/src/embed/index.ts +2 -0
  579. package/src/flow/draw.ts +167 -41
  580. package/src/flow/gl/color.ts +85 -0
  581. package/src/flow/gl/index.ts +342 -0
  582. package/src/flow/gl/pack.ts +585 -0
  583. package/src/flow/gl/renderer.ts +679 -0
  584. package/src/flow/gl/shaders.ts +371 -0
  585. package/src/flow/gl/text.ts +1295 -0
  586. package/src/flow/index.ts +794 -67
  587. package/src/flow/node.ts +2496 -1256
  588. package/src/flow/paint.ts +511 -0
  589. package/src/flow/paths.ts +80 -15
  590. package/src/flow/scene.ts +2199 -0
  591. package/src/flow/types.ts +113 -1
  592. package/src/html/controls.ts +73 -2
  593. package/src/html/css/calc.ts +385 -0
  594. package/src/html/css/cascade.ts +1403 -62
  595. package/src/html/css/color.ts +755 -0
  596. package/src/html/css/content.ts +417 -0
  597. package/src/html/css/counter-styles.ts +973 -0
  598. package/src/html/css/decode.ts +130 -0
  599. package/src/html/css/parse.ts +1514 -160
  600. package/src/html/css/style.ts +4102 -222
  601. package/src/html/css/ua.ts +58 -12
  602. package/src/html/css/values.ts +150 -50
  603. package/src/html/css/vars.ts +348 -0
  604. package/src/html/dom.ts +284 -17
  605. package/src/html/fonts.ts +641 -0
  606. package/src/html/gif.ts +233 -0
  607. package/src/html/index.ts +180 -20
  608. package/src/html/layout/block.ts +3456 -230
  609. package/src/html/layout/boxes.ts +2100 -190
  610. package/src/html/layout/cache.ts +289 -0
  611. package/src/html/layout/collapse.ts +317 -0
  612. package/src/html/layout/css-grid.ts +1063 -0
  613. package/src/html/layout/flex.ts +1115 -106
  614. package/src/html/layout/floats.ts +128 -14
  615. package/src/html/layout/grid-lines.ts +141 -0
  616. package/src/html/layout/grid.ts +181 -0
  617. package/src/html/layout/inline.ts +3943 -192
  618. package/src/html/layout/shaping.ts +140 -0
  619. package/src/html/layout/table.ts +696 -186
  620. package/src/html/layout/tracks.ts +437 -0
  621. package/src/html/node.ts +1486 -121
  622. package/src/html/paint.ts +4293 -169
  623. package/src/html/resources.ts +161 -50
  624. package/src/html/surfaces.ts +81 -0
  625. package/src/html/svg.ts +493 -0
  626. package/src/html/url.ts +86 -0
  627. package/src/index.ts +4 -0
  628. package/src/internal/collate.ts +12 -0
  629. package/src/{markdown → internal/markdown}/ast.ts +35 -7
  630. package/src/{markdown → internal/markdown}/parse.ts +288 -35
  631. package/src/internal/markdown/stringify.ts +772 -0
  632. package/src/internal/prewarm.ts +45 -0
  633. package/src/internal/scroll.ts +5 -3
  634. package/src/internal/sdf.ts +227 -0
  635. package/src/internal/splice.ts +25 -0
  636. package/src/internal/window.ts +36 -5
  637. package/src/maps/anchors.ts +913 -0
  638. package/src/maps/controller.ts +1084 -0
  639. package/src/maps/gl/buckets.ts +461 -0
  640. package/src/maps/gl/build-worker.ts +66 -0
  641. package/src/maps/gl/color.ts +62 -0
  642. package/src/maps/gl/cover.ts +205 -0
  643. package/src/maps/gl/index.ts +23 -0
  644. package/src/maps/gl/markers.ts +83 -0
  645. package/src/maps/gl/overlays.ts +379 -0
  646. package/src/maps/gl/pane.ts +42 -0
  647. package/src/maps/gl/placement.ts +968 -0
  648. package/src/maps/gl/renderer.ts +1660 -0
  649. package/src/maps/gl/shaders.ts +489 -0
  650. package/src/maps/gl/store.ts +615 -0
  651. package/src/maps/gl/text.ts +868 -0
  652. package/src/maps/gl/view.ts +1489 -0
  653. package/src/maps/icons.ts +183 -0
  654. package/src/maps/index.ts +274 -81
  655. package/src/maps/labels.ts +457 -144
  656. package/src/maps/node.ts +832 -665
  657. package/src/maps/overlay.ts +148 -43
  658. package/src/maps/paint.ts +3 -0
  659. package/src/maps/proj.ts +118 -0
  660. package/src/maps/renderer.ts +155 -0
  661. package/src/maps/sources.ts +43 -6
  662. package/src/maps/style.ts +32 -0
  663. package/src/maps/styles.ts +215 -4
  664. package/src/maps/theme.ts +51 -0
  665. package/src/maps/tiles.ts +253 -62
  666. package/src/maps/types.ts +213 -21
  667. package/src/markdown/expressions.ts +5 -1
  668. package/src/markdown/index.ts +163 -78
  669. package/src/markdown/spans.ts +6 -1
  670. package/src/media-player/index.ts +18 -4
  671. package/src/qml/containers.tsx +6 -1
  672. package/src/qml/interaction.tsx +42 -5
  673. package/src/qml/layouts.tsx +21 -6
  674. package/src/qml/qtquick.tsx +9 -2
  675. package/src/qml/react.tsx +7 -5
  676. package/src/reorder/clock.ts +27 -0
  677. package/src/reorder/index.ts +100 -27
  678. package/src/rich-text-editor/clipboard.ts +439 -0
  679. package/src/rich-text-editor/collab.ts +91 -0
  680. package/src/rich-text-editor/commands.ts +448 -0
  681. package/src/rich-text-editor/dom-globals.d.ts +23 -0
  682. package/src/rich-text-editor/drag.ts +211 -0
  683. package/src/rich-text-editor/html.ts +619 -0
  684. package/src/rich-text-editor/index.ts +1364 -0
  685. package/src/rich-text-editor/inline.ts +345 -0
  686. package/src/rich-text-editor/keymap.ts +510 -0
  687. package/src/rich-text-editor/keys.ts +228 -0
  688. package/src/rich-text-editor/look.ts +427 -0
  689. package/src/rich-text-editor/markdown.ts +653 -0
  690. package/src/rich-text-editor/marks.ts +101 -0
  691. package/src/rich-text-editor/nodes.ts +497 -0
  692. package/src/rich-text-editor/render.ts +837 -0
  693. package/src/rich-text-editor/schema.ts +431 -0
  694. package/src/rich-text-editor/store.ts +39 -0
  695. package/src/rich-text-editor/suggest.ts +597 -0
  696. package/src/rich-text-editor/tables.ts +272 -0
  697. package/src/rich-text-editor/toolbar.ts +724 -0
  698. package/src/rich-text-editor/view.ts +2287 -0
  699. package/src/rich-text-editor/virtual.ts +372 -0
  700. package/src/richtext/node.ts +294 -44
  701. package/src/richtext/runs.ts +23 -12
  702. package/src/table/index.ts +29 -0
  703. package/src/table/rows.ts +18 -8
  704. package/src/terminal/backends.ts +4 -1
  705. package/src/terminal/index.ts +47 -15
  706. package/src/terminal/vt/pty.ts +16 -2
  707. package/src/terminal-output/index.ts +6 -1
  708. package/src/three/canvas.ts +102 -8
  709. package/src/three/events.ts +49 -9
  710. package/src/tree/index.ts +19 -0
  711. package/dist/markdown/ast.d.ts.map +0 -1
  712. package/dist/markdown/ast.js +0 -17
  713. package/dist/markdown/ast.js.map +0 -1
  714. package/dist/markdown/parse.d.ts.map +0 -1
  715. package/dist/markdown/parse.js.map +0 -1
  716. package/dist/markdown/tags.d.ts.map +0 -1
  717. package/dist/markdown/tags.js.map +0 -1
  718. /package/dist/{markdown → internal/markdown}/parse.d.ts +0 -0
  719. /package/dist/{markdown → internal/markdown}/tags.d.ts +0 -0
  720. /package/dist/{markdown → internal/markdown}/tags.js +0 -0
  721. /package/src/{markdown → internal/markdown}/tags.ts +0 -0
@@ -0,0 +1,183 @@
1
+ // Icons: the pictogram a symbol layer can set beside a point's name — the
2
+ // bus on a bus stop, so that "Lyons Ave/Yuille St" reads as a stop and not
3
+ // as a street.
4
+ //
5
+ // An icon is two pieces, each one colour: a rounded **plate** in the layer's
6
+ // colour and a **glyph** over it, white by default. Two single-colour pieces
7
+ // rather than one picture because that is what both renderers already draw
8
+ // text as: the retained renderer fills a path, and the GL renderer keeps a
9
+ // coverage raster in its label atlas and colours it in the shader — so an
10
+ // icon is two more of those, and one raster serves every palette.
11
+ //
12
+ // Both renderers trace the same paths from here, the way both take their
13
+ // label anchors from `./anchors.ts`: a map switched from one renderer to the
14
+ // other draws the same bus.
15
+
16
+ /** The pictograms a symbol layer can name. */
17
+ export type MapIcon = 'bus' | 'tram' | 'train' | 'ferry' | 'airport';
18
+
19
+ /** Every {@link MapIcon}, for a style editor's picker. */
20
+ export const MAP_ICONS: readonly MapIcon[] = [
21
+ 'bus',
22
+ 'tram',
23
+ 'train',
24
+ 'ferry',
25
+ 'airport',
26
+ ];
27
+
28
+ /** Logical pixels across a plate, where the layer does not say. */
29
+ export const DEFAULT_ICON_SIZE = 14;
30
+ export const DEFAULT_ICON_COLOR = '#2a6fb8';
31
+ export const DEFAULT_ICON_GLYPH_COLOR = '#ffffff';
32
+ /** Logical pixels between an icon's plate and the name set beside it. */
33
+ export const ICON_GAP = 3;
34
+
35
+ /** The slice of a 2D context an icon is traced with — `MapCanvas`'s, and
36
+ * the offscreen surface's the GL atlas rasterizes on. */
37
+ export interface IconPathContext {
38
+ beginPath(): void;
39
+ moveTo(x: number, y: number): void;
40
+ lineTo(x: number, y: number): void;
41
+ arc(x: number, y: number, r: number, from: number, to: number): void;
42
+ closePath(): void;
43
+ }
44
+
45
+ /** The grid a glyph is drawn on: a plate is this many units across. */
46
+ const GRID = 16;
47
+
48
+ /**
49
+ * Each glyph as polygons on the {@link GRID}, `[x0, y0, x1, y1, …]`.
50
+ *
51
+ * Solid shapes only, and a window is where no shape is: a glyph is filled
52
+ * with the non-zero rule, where a hole would take a second winding, and
53
+ * {@link wound} turns every polygon the same way so that two that touch
54
+ * fill as one rather than cancelling.
55
+ */
56
+ const GLYPHS: Record<MapIcon, readonly (readonly number[])[]> = {
57
+ // Head on: a roof, the windscreen between two pillars, the lower panel,
58
+ // wheels and mirrors.
59
+ bus: [
60
+ [4, 3.5, 5, 2.5, 11, 2.5, 12, 3.5, 12, 4.6, 4, 4.6],
61
+ rect(4, 4.6, 1.2, 4),
62
+ rect(10.8, 4.6, 1.2, 4),
63
+ rect(4, 8.6, 8, 3.6),
64
+ rect(4.6, 12.2, 2, 1.4),
65
+ rect(9.4, 12.2, 2, 1.4),
66
+ rect(2.9, 5, 0.8, 2),
67
+ rect(12.3, 5, 0.8, 2),
68
+ ],
69
+ // A car under its pantograph, on rails.
70
+ tram: [
71
+ rect(5.4, 1.4, 5.2, 0.8),
72
+ rect(7.6, 2.2, 0.8, 1.4),
73
+ [4.5, 4.6, 5.5, 3.6, 10.5, 3.6, 11.5, 4.6, 11.5, 5.4, 4.5, 5.4],
74
+ rect(4.5, 5.4, 1.1, 3.6),
75
+ rect(10.4, 5.4, 1.1, 3.6),
76
+ rect(4.5, 9, 7, 3),
77
+ [5.6, 12, 6.9, 12, 5.8, 14.2, 4.5, 14.2],
78
+ [9.1, 12, 10.4, 12, 11.5, 14.2, 10.2, 14.2],
79
+ ],
80
+ // A locomotive's rounded nose, with its rails splayed wider than a tram's.
81
+ train: [
82
+ [4, 5, 4.6, 3, 6, 2.2, 10, 2.2, 11.4, 3, 12, 5, 12, 5.6, 4, 5.6],
83
+ rect(4, 5.6, 1.2, 3),
84
+ rect(10.8, 5.6, 1.2, 3),
85
+ rect(4, 8.6, 8, 3),
86
+ [5, 11.6, 6.4, 11.6, 4.8, 14.2, 3.4, 14.2],
87
+ [9.6, 11.6, 11, 11.6, 12.6, 14.2, 11.2, 14.2],
88
+ ],
89
+ // Side on: a hull, a deckhouse, a funnel.
90
+ ferry: [
91
+ [2, 9, 14, 9, 12.2, 12.6, 3.8, 12.6],
92
+ rect(4.4, 6, 6.8, 3),
93
+ rect(6.2, 3.6, 2.2, 2.4),
94
+ ],
95
+ // An aircraft from above, nose up.
96
+ airport: [
97
+ [
98
+ 8, 1.8, 8.9, 2.8, 8.9, 6.6, 14, 9.6, 14, 10.8, 8.9, 9.3, 8.9, 12.3, 10.6,
99
+ 13.6, 10.6, 14.4, 8, 13.7, 5.4, 14.4, 5.4, 13.6, 7.1, 12.3, 7.1, 9.3, 2,
100
+ 10.8, 2, 9.6, 7.1, 6.6, 7.1, 2.8,
101
+ ],
102
+ ],
103
+ };
104
+
105
+ function rect(x: number, y: number, w: number, h: number): number[] {
106
+ return [x, y, x + w, y, x + w, y + h, x, y + h];
107
+ }
108
+
109
+ /** The polygon wound clockwise on screen (y down) — positive shoelace
110
+ * area — whichever way it was written. */
111
+ function wound(points: readonly number[]): readonly number[] {
112
+ let area = 0;
113
+ const n = points.length / 2;
114
+ for (let i = 0; i < n; i++) {
115
+ const j = (i + 1) % n;
116
+ area +=
117
+ points[i * 2] * points[j * 2 + 1] - points[j * 2] * points[i * 2 + 1];
118
+ }
119
+ if (area >= 0) return points;
120
+ const out: number[] = [];
121
+ for (let i = n - 1; i >= 0; i--) out.push(points[i * 2], points[i * 2 + 1]);
122
+ return out;
123
+ }
124
+
125
+ const WOUND = {} as Record<MapIcon, readonly (readonly number[])[]>;
126
+ for (const name of MAP_ICONS) WOUND[name] = GLYPHS[name].map(wound);
127
+
128
+ /** Whether `name` is an icon this module draws — a style is data, and may
129
+ * come from a file that names one this version does not have. */
130
+ export function isMapIcon(name: unknown): name is MapIcon {
131
+ return (
132
+ typeof name === 'string' &&
133
+ Object.prototype.hasOwnProperty.call(GLYPHS, name)
134
+ );
135
+ }
136
+
137
+ /**
138
+ * Trace a plate `size` across, centred on `cx, cy`: a square with corners
139
+ * rounded by a fifth of it. Adds to the current path; the caller begins it
140
+ * and fills it.
141
+ */
142
+ export function tracePlate(
143
+ ctx: IconPathContext,
144
+ cx: number,
145
+ cy: number,
146
+ size: number,
147
+ ): void {
148
+ const x = cx - size / 2;
149
+ const y = cy - size / 2;
150
+ const r = size * 0.2;
151
+ const e = size - r;
152
+ ctx.moveTo(x + r, y);
153
+ ctx.lineTo(x + e, y);
154
+ ctx.arc(x + e, y + r, r, -Math.PI / 2, 0);
155
+ ctx.lineTo(x + size, y + e);
156
+ ctx.arc(x + e, y + e, r, 0, Math.PI / 2);
157
+ ctx.lineTo(x + r, y + size);
158
+ ctx.arc(x + r, y + e, r, Math.PI / 2, Math.PI);
159
+ ctx.lineTo(x, y + r);
160
+ ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5);
161
+ ctx.closePath();
162
+ }
163
+
164
+ /** Trace `icon`'s glyph over a plate `size` across, centred on `cx, cy`.
165
+ * Adds to the current path, as {@link tracePlate} does. */
166
+ export function traceGlyph(
167
+ ctx: IconPathContext,
168
+ icon: MapIcon,
169
+ cx: number,
170
+ cy: number,
171
+ size: number,
172
+ ): void {
173
+ const unit = size / GRID;
174
+ const x = cx - size / 2;
175
+ const y = cy - size / 2;
176
+ for (const shape of WOUND[icon]) {
177
+ ctx.moveTo(x + shape[0] * unit, y + shape[1] * unit);
178
+ for (let i = 2; i < shape.length; i += 2) {
179
+ ctx.lineTo(x + shape[i] * unit, y + shape[i + 1] * unit);
180
+ }
181
+ ctx.closePath();
182
+ }
183
+ }
package/src/maps/index.ts CHANGED
@@ -14,8 +14,9 @@
14
14
  // until an application imports the component that needs it, so
15
15
  // `sideEffects: false` stays honest. Do not move it into `../index.ts`
16
16
  // (AGENTS.md, "Tree-shaking is a constraint").
17
- import React, { useImperativeHandle, useRef } from 'react';
18
- import type { ReactElement } from 'react';
17
+ import React, { useEffect, useImperativeHandle, useRef, useState } from 'react';
18
+ import type { ReactElement, ReactNode } from 'react';
19
+ import { useApp, useSupports, useTheme } from 'react-x11';
19
20
  import { registerElement, registeredElements } from 'react-x11/host';
20
21
  import { createStyles, flattenStyle } from 'react-x11/style';
21
22
  // Loads the module the JSX augmentation at the bottom targets: nothing in
@@ -24,16 +25,25 @@ import { createStyles, flattenStyle } from 'react-x11/style';
24
25
  // addition. Type-only, so it is erased.
25
26
  import type {} from 'react-x11/jsx-runtime';
26
27
 
28
+ import { DEFAULT_CAMERA, MapController } from './controller.js';
27
29
  import { ELEMENT, MapViewNode, SELF_DAMAGED_PROPS } from './node.js';
30
+ import {
31
+ chooseRenderer,
32
+ glRendererModule,
33
+ loadGlRenderer,
34
+ rendererFromEnv,
35
+ rendererRequest,
36
+ } from './renderer.js';
37
+ import type { GlRendererModule } from './renderer.js';
38
+ import { defaultStyleFor, isDarkTheme } from './theme.js';
28
39
  import type {
29
- FitBoundsOptions,
30
- MapCamera,
31
- MapHandle,
32
40
  MapProps,
41
+ MapRenderer,
42
+ MapRendererReason,
33
43
  MapViewProps,
34
44
  } from './types.js';
35
- import type { LngLat, LngLatBounds } from './proj.js';
36
- import type { MapMarker } from './overlay.js';
45
+
46
+ const h = React.createElement;
37
47
 
38
48
  if (!registeredElements().includes(ELEMENT)) {
39
49
  registerElement(ELEMENT, {
@@ -65,8 +75,6 @@ const styles = createStyles({
65
75
  fill: { flexGrow: 1 },
66
76
  });
67
77
 
68
- const DEFAULT_CAMERA: MapCamera = { center: { lon: 0, lat: 20 }, zoom: 2 };
69
-
70
78
  /**
71
79
  * A map.
72
80
  *
@@ -91,87 +99,264 @@ const DEFAULT_CAMERA: MapCamera = { center: { lon: 0, lat: 20 }, zoom: 2 };
91
99
  * controlled form, where the application owns where the map is looking.
92
100
  */
93
101
  export function Map(props: MapProps): ReactElement {
94
- const {
95
- camera,
96
- defaultCamera,
97
- onCameraChange,
98
- style,
99
- children,
100
- ref,
101
- ...rest
102
- } = props;
103
-
104
- const view = useRef<MapViewNode | null>(null);
105
- const controlled = camera !== undefined;
106
-
107
- useImperativeHandle(
108
- ref,
109
- (): MapHandle => ({
110
- // Every method reads the node at call time rather than closing over
111
- // it: the ref attaches after the commit that created the node, and a
112
- // handle built once must still work for the whole mount.
113
- getCamera: () => view.current?.getCamera() ?? DEFAULT_CAMERA,
114
- setCamera: (next: Partial<MapCamera>) => view.current?.setCamera(next),
115
- panBy: (dx: number, dy: number) => view.current?.panBy(dx, dy),
116
- zoomIn: (step?: number) => view.current?.zoomIn(step),
117
- zoomOut: (step?: number) => view.current?.zoomOut(step),
118
- zoomTo: (zoom: number) => view.current?.zoomTo(zoom),
119
- fitBounds: (bounds: LngLatBounds, options?: FitBoundsOptions) =>
120
- view.current?.fitBounds(bounds, options),
121
- fitMarkers: (ids?: readonly string[], options?: FitBoundsOptions) =>
122
- view.current?.fitMarkers(ids, options),
123
- getBounds: () =>
124
- view.current?.getBounds() ?? {
125
- west: -180,
126
- south: -85,
127
- east: 180,
128
- north: 85,
129
- },
130
- project: (position: LngLat) =>
131
- view.current?.project(position) ?? { x: 0, y: 0 },
132
- unproject: (x: number, y: number) =>
133
- view.current?.unproject(x, y) ?? { lon: 0, lat: 0 },
134
- markerAt: (x: number, y: number): MapMarker | null =>
135
- view.current?.markerAt(x, y) ?? null,
136
- refresh: () => view.current?.refresh(),
137
- stats: () => view.current?.stats() ?? null,
138
- }),
139
- [],
102
+ // One controller for the life of the mount: the camera, the gestures and
103
+ // the handle, which whichever renderer is drawing answers to (see
104
+ // `./controller.ts`). Seeded here, once — `defaultCamera` is read on the
105
+ // first render and never again, which is what makes it a *default*.
106
+ const [controller] = useState(
107
+ () => new MapController(props.defaultCamera ?? DEFAULT_CAMERA),
140
108
  );
109
+ // Read at event and frame time, so the latest props are always the ones
110
+ // that count — and the controlled/uncontrolled fork is simply whether
111
+ // `camera` is among them.
112
+ controller.setProps(props);
113
+ // The controller's own handle, made once: the same object for the whole
114
+ // mount, whatever draws the map — across a renderer switch too.
115
+ useImperativeHandle(props.ref, () => controller.handle, [controller]);
116
+ useEffect(() => () => controller.dispose(), [controller]);
141
117
 
142
- const flat = flattenStyle(style ?? null);
118
+ // A GL failure is the map's for the rest of its mount: an `'auto'` map
119
+ // that met one draws through the retained renderer from then on.
120
+ const [failure, setFailure] = useState<Error | null>(null);
121
+ const latest = useRef(props);
122
+ latest.current = props;
123
+
124
+ const flat = flattenStyle(props.style ?? null);
143
125
  const sized =
144
126
  flat.height !== undefined ||
145
127
  flat.flexGrow !== undefined ||
146
128
  flat.flexBasis !== undefined;
147
129
 
148
- // The pane and anything the application puts over it are siblings rather
149
- // than parent and children: a registered element's own drawing happens
150
- // *after* `super.paint` has painted its children, so anything mounted
151
- // inside would be painted over by the map. Beside it, and after it, a
152
- // legend or a control panel lands on top. `<Flow>` makes the same
153
- // arrangement for the same reason.
154
- return React.createElement(
130
+ const { asked, forced } = rendererRequest(props.renderer, rendererFromEnv());
131
+ const pane =
132
+ asked === 'auto'
133
+ ? h(AutoPane, {
134
+ key: 'auto',
135
+ map: props,
136
+ controller,
137
+ failed: failure !== null,
138
+ onFailure: setFailure,
139
+ })
140
+ : h(MapPane, {
141
+ key: asked,
142
+ renderer: asked,
143
+ reason: forced ? 'forced' : null,
144
+ map: props,
145
+ controller,
146
+ // Asked for by name: never a fallback, always the application's
147
+ // to hear about.
148
+ onFailure: (error: Error) => latest.current.onError?.(error),
149
+ });
150
+
151
+ return h(
155
152
  'box',
156
- { style: sized ? [styles.clip, style] : [styles.pane, style] },
157
- React.createElement(ELEMENT, {
158
- ...(rest as MapViewProps),
159
- key: 'pane',
160
- ref: view,
161
- // The controlled/uncontrolled fork, and the whole of it. Controlled:
162
- // the application's camera goes down and the element only ever
163
- // *asks* to move. Uncontrolled: nothing goes down after the seed, the
164
- // element owns the camera, and a pan never reaches React — which is
165
- // the difference between a drag that blits a strip and one that
166
- // re-renders and re-claims the pane on every pointer step.
167
- camera: controlled ? camera : undefined,
168
- defaultCamera: controlled ? undefined : (defaultCamera ?? DEFAULT_CAMERA),
169
- onCameraChange,
170
- style: styles.fill,
171
- role: rest.role ?? 'group',
172
- 'aria-label': rest['aria-label'] ?? 'Map',
153
+ { style: sized ? [styles.clip, props.style] : [styles.pane, props.style] },
154
+ pane,
155
+ );
156
+ }
157
+
158
+ /** Props `<Map>` reads itself, or that only the GL renderer reads — kept off
159
+ * the `<mapview>` element, which would take each as a prop of its own. */
160
+ const NOT_FOR_THE_ELEMENT: readonly string[] = [
161
+ 'camera',
162
+ 'defaultCamera',
163
+ 'style',
164
+ 'children',
165
+ 'ref',
166
+ 'renderer',
167
+ 'onRendererChange',
168
+ 'onError',
169
+ 'levelFade',
170
+ 'adaptive',
171
+ 'buildWorkers',
172
+ 'antialias',
173
+ 'fillRule',
174
+ 'labelsWhileMoving',
175
+ 'onAfterDraw',
176
+ ];
177
+
178
+ function elementProps(map: MapProps): MapViewProps {
179
+ const out: Record<string, unknown> = { ...map };
180
+ for (const name of NOT_FOR_THE_ELEMENT) delete out[name];
181
+ return out as MapViewProps;
182
+ }
183
+
184
+ interface PaneProps {
185
+ map: MapProps;
186
+ controller: MapController;
187
+ onFailure: (error: Error) => void;
188
+ }
189
+
190
+ /**
191
+ * `renderer="auto"`: GL where this connection draws through the direct
192
+ * backend, the retained renderer everywhere else — `./renderer.ts` is the
193
+ * decision, and this is where it reads the connection. Its own component so
194
+ * that a map that asked for a renderer by name never asks the connection: on
195
+ * the Cocoa backend the question is a GL runtime brought up to answer it.
196
+ */
197
+ function AutoPane(props: PaneProps & { failed: boolean }): ReactElement {
198
+ const { map } = props;
199
+ const app = useApp();
200
+ const shaders = useSupports('shaders');
201
+ const probing = useDirectGlProbe(app, shaders);
202
+ const choice = chooseRenderer({
203
+ requested: 'auto',
204
+ shaders,
205
+ probing,
206
+ failed: props.failed,
207
+ });
208
+ return h(MapPane, {
209
+ renderer: choice.renderer,
210
+ reason: choice.reason,
211
+ map,
212
+ controller: props.controller,
213
+ onFailure: props.onFailure,
214
+ });
215
+ }
216
+
217
+ /**
218
+ * Whether this connection's answer to `useSupports('shaders')` is still to
219
+ * come. Under a policy that could choose direct GL, X11 settles it before
220
+ * `createRoot()` hands the app back; the Cocoa backend settles it on the
221
+ * first ask, which is this. Until it has, a map shows its background rather
222
+ * than drawing through the retained renderer for a few milliseconds and
223
+ * fetching the view's tiles twice.
224
+ */
225
+ function useDirectGlProbe(app: unknown, shaders: boolean): boolean {
226
+ const mode = (app as { glPolicy?: { mode?: string } } | null)?.glPolicy?.mode;
227
+ const wants = mode === 'auto' || mode === 'direct';
228
+ const [settled, setSettled] = useState(false);
229
+ const pending = wants && !shaders && !settled;
230
+ useEffect(() => {
231
+ if (!pending) return;
232
+ const probe = (
233
+ app as { glCapabilities?(): Promise<unknown> } | null
234
+ )?.glCapabilities?.();
235
+ if (!probe) {
236
+ setSettled(true);
237
+ return;
238
+ }
239
+ let live = true;
240
+ const done = (): void => {
241
+ if (live) setSettled(true);
242
+ };
243
+ probe.then(done, done);
244
+ return () => {
245
+ live = false;
246
+ };
247
+ }, [app, pending]);
248
+ return pending;
249
+ }
250
+
251
+ /**
252
+ * The pane, drawn by the renderer chosen: the `<mapview>` element, the GL
253
+ * renderer once its module has loaded, or — while the connection's answer
254
+ * or the module is on its way — a box in the style's background. Whichever
255
+ * it is, it answers to the map's one controller.
256
+ */
257
+ function MapPane(
258
+ props: PaneProps & {
259
+ renderer: MapRenderer | 'pending';
260
+ reason: MapRendererReason | null;
261
+ },
262
+ ): ReactElement {
263
+ const { renderer, reason, map, controller } = props;
264
+ const theme = useTheme();
265
+ const overlay = useSupports('glOverlay');
266
+
267
+ // `onRendererChange`: whenever the map lands somewhere it did not ask for
268
+ // — its first renderer, or the one it falls back to.
269
+ const reported = useRef<MapRenderer | null>(null);
270
+ useEffect(() => {
271
+ if (renderer === 'pending') return;
272
+ const before = reported.current;
273
+ reported.current = renderer;
274
+ if (before === renderer || reason === null) return;
275
+ map.onRendererChange?.(renderer, reason);
276
+ }, [renderer, reason]);
277
+
278
+ const wantGl = renderer === 'gl';
279
+ const [gl, setGl] = useState<GlRendererModule | null>(glRendererModule);
280
+ useEffect(() => {
281
+ if (!wantGl || gl) return;
282
+ let live = true;
283
+ loadGlRenderer().then(
284
+ (module) => {
285
+ if (live) setGl(module);
286
+ },
287
+ (error: unknown) => {
288
+ if (!live) return;
289
+ props.onFailure(
290
+ error instanceof Error ? error : new Error(String(error)),
291
+ );
292
+ },
293
+ );
294
+ return () => {
295
+ live = false;
296
+ };
297
+ }, [wantGl, gl]);
298
+
299
+ const common = {
300
+ style: styles.fill,
301
+ role: map.role ?? 'group',
302
+ 'aria-label': map['aria-label'] ?? 'Map',
303
+ 'data-testname': map['data-testname'],
304
+ };
305
+ // What the application puts over the map is the pane's sibling, after
306
+ // it, rather than its child: a registered element's own drawing happens
307
+ // *after* `super.paint` has painted its children, so anything mounted
308
+ // inside `<mapview>` would be painted over by the map. `<Flow>` makes the
309
+ // same arrangement for the same reason. The one exception is a GL pane:
310
+ // a sibling is under its surface, so there they go inside the surface,
311
+ // whose children core draws above it.
312
+ const over = (pane: ReactElement, children: ReactNode): ReactElement =>
313
+ h(React.Fragment, null, pane, children);
314
+ if (renderer === 'retained') {
315
+ return over(
316
+ h(ELEMENT, {
317
+ ...elementProps(map),
318
+ ...common,
319
+ key: 'retained',
320
+ mapController: controller,
321
+ // The controlled/uncontrolled fork, and the whole of it.
322
+ // Controlled: the application's camera goes down and the element
323
+ // only ever *asks* to move. Uncontrolled: nothing goes down, the
324
+ // controller owns the camera, and a pan never reaches React —
325
+ // which is the difference between a drag that blits a strip and
326
+ // one that re-renders and re-claims the pane on every pointer
327
+ // step.
328
+ camera: map.camera,
329
+ } as MapViewProps),
330
+ map.children,
331
+ );
332
+ }
333
+ if (renderer === 'gl' && gl) {
334
+ return over(
335
+ h(
336
+ gl.GlMapPane,
337
+ {
338
+ ...common,
339
+ key: 'gl',
340
+ controller,
341
+ map,
342
+ onFailure: props.onFailure,
343
+ },
344
+ overlay ? map.children : undefined,
345
+ ),
346
+ overlay ? null : map.children,
347
+ );
348
+ }
349
+ const background = (map.mapStyle ?? defaultStyleFor(isDarkTheme(theme)))
350
+ .background;
351
+ return over(
352
+ h('box', {
353
+ ...common,
354
+ key: 'pending',
355
+ style: background
356
+ ? [styles.fill, { backgroundColor: background }]
357
+ : styles.fill,
173
358
  }),
174
- children,
359
+ map.children,
175
360
  );
176
361
  }
177
362
 
@@ -242,6 +427,8 @@ export {
242
427
 
243
428
  export { compileFilter, resolveZoomed } from './style.js';
244
429
 
430
+ export { MAP_ICONS } from './icons.js';
431
+
245
432
  export {
246
433
  decodePolyline,
247
434
  geoJsonOverlays,
@@ -256,9 +443,14 @@ export { TileCache } from './tiles.js';
256
443
  export type {
257
444
  FitBoundsOptions,
258
445
  MapFrameStats,
446
+ MapGlFrameStats,
447
+ MapGlProps,
259
448
  MapHandle,
260
449
  MapPointerEvent,
261
450
  MapProps,
451
+ MapRenderer,
452
+ MapRendererReason,
453
+ MapRendererRequest,
262
454
  MapViewProps,
263
455
  } from './types.js';
264
456
  export type {
@@ -290,6 +482,7 @@ export type {
290
482
  SymbolLayer,
291
483
  Zoomed,
292
484
  } from './style.js';
485
+ export type { MapIcon } from './icons.js';
293
486
  export type {
294
487
  MapPalette,
295
488
  OpenMapTilesStyleOptions,