@scoova/mgl 1.0.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 (565) hide show
  1. package/LICENSE.txt +116 -0
  2. package/README.md +174 -0
  3. package/build/banner.ts +12 -0
  4. package/build/bump-version-changelog.js +26 -0
  5. package/build/check-bundle-size.js +77 -0
  6. package/build/generate-dist-package.js +26 -0
  7. package/build/generate-doc-images.ts +78 -0
  8. package/build/generate-docs.ts +190 -0
  9. package/build/generate-shaders.ts +68 -0
  10. package/build/generate-struct-arrays.ts +438 -0
  11. package/build/generate-style-code.ts +283 -0
  12. package/build/readme.md +56 -0
  13. package/build/release-notes.js +45 -0
  14. package/build/rollup/bundle_prelude.js +29 -0
  15. package/build/rollup/maplibregl.js +22 -0
  16. package/build/rollup_plugins.ts +58 -0
  17. package/dist/LICENSE.txt +116 -0
  18. package/dist/maplibre-gl.css +1 -0
  19. package/dist/maplibre-gl.d.ts +13304 -0
  20. package/dist/maplibre-gl.js +59 -0
  21. package/dist/maplibre-gl.js.map +1 -0
  22. package/dist/package.json +1 -0
  23. package/package.json +192 -0
  24. package/src/css/maplibre-gl.css +854 -0
  25. package/src/css/svg/maplibregl-ctrl-attrib.svg +3 -0
  26. package/src/css/svg/maplibregl-ctrl-compass.svg +4 -0
  27. package/src/css/svg/maplibregl-ctrl-fullscreen.svg +3 -0
  28. package/src/css/svg/maplibregl-ctrl-geolocate.svg +5 -0
  29. package/src/css/svg/maplibregl-ctrl-logo.svg +11 -0
  30. package/src/css/svg/maplibregl-ctrl-shrink.svg +3 -0
  31. package/src/css/svg/maplibregl-ctrl-terrain.svg +3 -0
  32. package/src/css/svg/maplibregl-ctrl-zoom-in.svg +3 -0
  33. package/src/css/svg/maplibregl-ctrl-zoom-out.svg +3 -0
  34. package/src/data/array_types.g.ts +1130 -0
  35. package/src/data/bucket/circle_attributes.ts +8 -0
  36. package/src/data/bucket/circle_bucket.ts +197 -0
  37. package/src/data/bucket/fill_attributes.ts +8 -0
  38. package/src/data/bucket/fill_bucket.test.ts +95 -0
  39. package/src/data/bucket/fill_bucket.ts +228 -0
  40. package/src/data/bucket/fill_extrusion_attributes.ts +13 -0
  41. package/src/data/bucket/fill_extrusion_bucket.ts +305 -0
  42. package/src/data/bucket/heatmap_bucket.ts +12 -0
  43. package/src/data/bucket/line_attributes.ts +8 -0
  44. package/src/data/bucket/line_attributes_ext.ts +8 -0
  45. package/src/data/bucket/line_bucket.test.ts +142 -0
  46. package/src/data/bucket/line_bucket.ts +592 -0
  47. package/src/data/bucket/pattern_attributes.ts +9 -0
  48. package/src/data/bucket/pattern_bucket_features.ts +57 -0
  49. package/src/data/bucket/symbol_attributes.ts +122 -0
  50. package/src/data/bucket/symbol_bucket.test.ts +243 -0
  51. package/src/data/bucket/symbol_bucket.ts +975 -0
  52. package/src/data/bucket.ts +123 -0
  53. package/src/data/dem_data.test.ts +237 -0
  54. package/src/data/dem_data.ts +171 -0
  55. package/src/data/evaluation_feature.ts +18 -0
  56. package/src/data/extent.ts +13 -0
  57. package/src/data/feature_index.ts +337 -0
  58. package/src/data/feature_position_map.test.ts +33 -0
  59. package/src/data/feature_position_map.ts +126 -0
  60. package/src/data/index_array_type.ts +9 -0
  61. package/src/data/load_geometry.test.ts +49 -0
  62. package/src/data/load_geometry.ts +44 -0
  63. package/src/data/pos3d_attributes.ts +5 -0
  64. package/src/data/pos_attributes.ts +5 -0
  65. package/src/data/program_configuration.ts +735 -0
  66. package/src/data/raster_bounds_attributes.ts +6 -0
  67. package/src/data/segment.ts +89 -0
  68. package/src/geo/edge_insets.test.ts +83 -0
  69. package/src/geo/edge_insets.ts +146 -0
  70. package/src/geo/lng_lat.test.ts +65 -0
  71. package/src/geo/lng_lat.ts +169 -0
  72. package/src/geo/lng_lat_bounds.test.ts +357 -0
  73. package/src/geo/lng_lat_bounds.ts +356 -0
  74. package/src/geo/mercator_coordinate.test.ts +34 -0
  75. package/src/geo/mercator_coordinate.ts +157 -0
  76. package/src/geo/projection/projection.ts +72 -0
  77. package/src/geo/transform.test.ts +509 -0
  78. package/src/geo/transform.ts +1072 -0
  79. package/src/gl/color_mode.ts +31 -0
  80. package/src/gl/context.ts +321 -0
  81. package/src/gl/cull_face_mode.ts +22 -0
  82. package/src/gl/depth_mode.ts +26 -0
  83. package/src/gl/framebuffer.ts +48 -0
  84. package/src/gl/index_buffer.ts +55 -0
  85. package/src/gl/render_pool.test.ts +69 -0
  86. package/src/gl/render_pool.ts +93 -0
  87. package/src/gl/state.test.ts +125 -0
  88. package/src/gl/stencil_mode.ts +27 -0
  89. package/src/gl/types.ts +59 -0
  90. package/src/gl/value.ts +534 -0
  91. package/src/gl/vertex_buffer.test.ts +57 -0
  92. package/src/gl/vertex_buffer.ts +111 -0
  93. package/src/gl/webgl2.ts +12 -0
  94. package/src/index.test.ts +121 -0
  95. package/src/index.ts +250 -0
  96. package/src/render/draw_background.ts +53 -0
  97. package/src/render/draw_circle.ts +113 -0
  98. package/src/render/draw_collision_debug.ts +168 -0
  99. package/src/render/draw_custom.test.ts +73 -0
  100. package/src/render/draw_custom.ts +45 -0
  101. package/src/render/draw_debug.test.ts +122 -0
  102. package/src/render/draw_debug.ts +148 -0
  103. package/src/render/draw_fill.test.ts +137 -0
  104. package/src/render/draw_fill.ts +128 -0
  105. package/src/render/draw_fill_extrusion.ts +97 -0
  106. package/src/render/draw_heatmap.ts +228 -0
  107. package/src/render/draw_hillshade.ts +119 -0
  108. package/src/render/draw_line.ts +125 -0
  109. package/src/render/draw_raster.ts +133 -0
  110. package/src/render/draw_sky.ts +44 -0
  111. package/src/render/draw_symbol.test.ts +223 -0
  112. package/src/render/draw_symbol.ts +499 -0
  113. package/src/render/draw_terrain.ts +99 -0
  114. package/src/render/glyph_atlas.ts +83 -0
  115. package/src/render/glyph_manager.test.ts +147 -0
  116. package/src/render/glyph_manager.ts +198 -0
  117. package/src/render/image_atlas.ts +159 -0
  118. package/src/render/image_manager.ts +337 -0
  119. package/src/render/line_atlas.test.ts +38 -0
  120. package/src/render/line_atlas.ts +214 -0
  121. package/src/render/mesh.ts +25 -0
  122. package/src/render/painter.test.ts +51 -0
  123. package/src/render/painter.ts +666 -0
  124. package/src/render/program/background_program.ts +100 -0
  125. package/src/render/program/circle_program.ts +61 -0
  126. package/src/render/program/clipping_mask_program.ts +19 -0
  127. package/src/render/program/collision_program.ts +47 -0
  128. package/src/render/program/debug_program.ts +29 -0
  129. package/src/render/program/fill_extrusion_program.ts +120 -0
  130. package/src/render/program/fill_program.ts +121 -0
  131. package/src/render/program/heatmap_program.ts +76 -0
  132. package/src/render/program/hillshade_program.ts +116 -0
  133. package/src/render/program/line_program.ts +207 -0
  134. package/src/render/program/pattern.ts +102 -0
  135. package/src/render/program/program_uniforms.ts +46 -0
  136. package/src/render/program/raster_program.ts +88 -0
  137. package/src/render/program/sky_program.ts +28 -0
  138. package/src/render/program/symbol_program.ts +266 -0
  139. package/src/render/program/terrain_program.ts +116 -0
  140. package/src/render/program.ts +233 -0
  141. package/src/render/render_to_texture.test.ts +151 -0
  142. package/src/render/render_to_texture.ts +197 -0
  143. package/src/render/terrain.test.ts +322 -0
  144. package/src/render/terrain.ts +464 -0
  145. package/src/render/texture.ts +114 -0
  146. package/src/render/uniform_binding.test.ts +122 -0
  147. package/src/render/uniform_binding.ts +157 -0
  148. package/src/render/update_pattern_positions_in_program.test.ts +74 -0
  149. package/src/render/update_pattern_positions_in_program.ts +50 -0
  150. package/src/render/vertex_array_object.ts +163 -0
  151. package/src/shaders/README.md +42 -0
  152. package/src/shaders/_prelude.fragment.glsl +19 -0
  153. package/src/shaders/_prelude.fragment.glsl.g.ts +2 -0
  154. package/src/shaders/_prelude.vertex.glsl +148 -0
  155. package/src/shaders/_prelude.vertex.glsl.g.ts +2 -0
  156. package/src/shaders/background.fragment.glsl +10 -0
  157. package/src/shaders/background.fragment.glsl.g.ts +2 -0
  158. package/src/shaders/background.vertex.glsl +7 -0
  159. package/src/shaders/background.vertex.glsl.g.ts +2 -0
  160. package/src/shaders/background_pattern.fragment.glsl +28 -0
  161. package/src/shaders/background_pattern.fragment.glsl.g.ts +2 -0
  162. package/src/shaders/background_pattern.vertex.glsl +19 -0
  163. package/src/shaders/background_pattern.vertex.glsl.g.ts +2 -0
  164. package/src/shaders/circle.fragment.glsl +34 -0
  165. package/src/shaders/circle.fragment.glsl.g.ts +2 -0
  166. package/src/shaders/circle.vertex.glsl +68 -0
  167. package/src/shaders/circle.vertex.glsl.g.ts +2 -0
  168. package/src/shaders/clipping_mask.fragment.glsl +3 -0
  169. package/src/shaders/clipping_mask.fragment.glsl.g.ts +2 -0
  170. package/src/shaders/clipping_mask.vertex.glsl +7 -0
  171. package/src/shaders/clipping_mask.vertex.glsl.g.ts +2 -0
  172. package/src/shaders/collision_box.fragment.glsl +20 -0
  173. package/src/shaders/collision_box.fragment.glsl.g.ts +2 -0
  174. package/src/shaders/collision_box.vertex.glsl +27 -0
  175. package/src/shaders/collision_box.vertex.glsl.g.ts +2 -0
  176. package/src/shaders/collision_circle.fragment.glsl +17 -0
  177. package/src/shaders/collision_circle.fragment.glsl.g.ts +2 -0
  178. package/src/shaders/collision_circle.vertex.glsl +59 -0
  179. package/src/shaders/collision_circle.vertex.glsl.g.ts +2 -0
  180. package/src/shaders/debug.fragment.glsl +9 -0
  181. package/src/shaders/debug.fragment.glsl.g.ts +2 -0
  182. package/src/shaders/debug.vertex.glsl +12 -0
  183. package/src/shaders/debug.vertex.glsl.g.ts +2 -0
  184. package/src/shaders/encode_attribute.test.ts +11 -0
  185. package/src/shaders/encode_attribute.ts +13 -0
  186. package/src/shaders/fill.fragment.glsl +13 -0
  187. package/src/shaders/fill.fragment.glsl.g.ts +2 -0
  188. package/src/shaders/fill.vertex.glsl +13 -0
  189. package/src/shaders/fill.vertex.glsl.g.ts +2 -0
  190. package/src/shaders/fill_extrusion.fragment.glsl +9 -0
  191. package/src/shaders/fill_extrusion.fragment.glsl.g.ts +2 -0
  192. package/src/shaders/fill_extrusion.vertex.glsl +84 -0
  193. package/src/shaders/fill_extrusion.vertex.glsl.g.ts +2 -0
  194. package/src/shaders/fill_extrusion_pattern.fragment.glsl +47 -0
  195. package/src/shaders/fill_extrusion_pattern.fragment.glsl.g.ts +2 -0
  196. package/src/shaders/fill_extrusion_pattern.vertex.glsl +96 -0
  197. package/src/shaders/fill_extrusion_pattern.vertex.glsl.g.ts +2 -0
  198. package/src/shaders/fill_outline.fragment.glsl +17 -0
  199. package/src/shaders/fill_outline.fragment.glsl.g.ts +2 -0
  200. package/src/shaders/fill_outline.vertex.glsl +17 -0
  201. package/src/shaders/fill_outline.vertex.glsl.g.ts +2 -0
  202. package/src/shaders/fill_outline_pattern.fragment.glsl +43 -0
  203. package/src/shaders/fill_outline_pattern.fragment.glsl.g.ts +2 -0
  204. package/src/shaders/fill_outline_pattern.vertex.glsl +44 -0
  205. package/src/shaders/fill_outline_pattern.vertex.glsl.g.ts +2 -0
  206. package/src/shaders/fill_pattern.fragment.glsl +39 -0
  207. package/src/shaders/fill_pattern.fragment.glsl.g.ts +2 -0
  208. package/src/shaders/fill_pattern.vertex.glsl +39 -0
  209. package/src/shaders/fill_pattern.vertex.glsl.g.ts +2 -0
  210. package/src/shaders/heatmap.fragment.glsl +22 -0
  211. package/src/shaders/heatmap.fragment.glsl.g.ts +2 -0
  212. package/src/shaders/heatmap.vertex.glsl +54 -0
  213. package/src/shaders/heatmap.vertex.glsl.g.ts +2 -0
  214. package/src/shaders/heatmap_texture.fragment.glsl +15 -0
  215. package/src/shaders/heatmap_texture.fragment.glsl.g.ts +2 -0
  216. package/src/shaders/heatmap_texture.vertex.glsl +11 -0
  217. package/src/shaders/heatmap_texture.vertex.glsl.g.ts +2 -0
  218. package/src/shaders/hillshade.fragment.glsl +52 -0
  219. package/src/shaders/hillshade.fragment.glsl.g.ts +2 -0
  220. package/src/shaders/hillshade.vertex.glsl +11 -0
  221. package/src/shaders/hillshade.vertex.glsl.g.ts +2 -0
  222. package/src/shaders/hillshade_prepare.fragment.glsl +77 -0
  223. package/src/shaders/hillshade_prepare.fragment.glsl.g.ts +2 -0
  224. package/src/shaders/hillshade_prepare.vertex.glsl +15 -0
  225. package/src/shaders/hillshade_prepare.vertex.glsl.g.ts +2 -0
  226. package/src/shaders/line.fragment.glsl +30 -0
  227. package/src/shaders/line.fragment.glsl.g.ts +2 -0
  228. package/src/shaders/line.vertex.glsl +89 -0
  229. package/src/shaders/line.vertex.glsl.g.ts +2 -0
  230. package/src/shaders/line_gradient.fragment.glsl +34 -0
  231. package/src/shaders/line_gradient.fragment.glsl.g.ts +2 -0
  232. package/src/shaders/line_gradient.vertex.glsl +92 -0
  233. package/src/shaders/line_gradient.vertex.glsl.g.ts +2 -0
  234. package/src/shaders/line_pattern.fragment.glsl +77 -0
  235. package/src/shaders/line_pattern.fragment.glsl.g.ts +2 -0
  236. package/src/shaders/line_pattern.vertex.glsl +103 -0
  237. package/src/shaders/line_pattern.vertex.glsl.g.ts +2 -0
  238. package/src/shaders/line_sdf.fragment.glsl +45 -0
  239. package/src/shaders/line_sdf.fragment.glsl.g.ts +2 -0
  240. package/src/shaders/line_sdf.vertex.glsl +101 -0
  241. package/src/shaders/line_sdf.vertex.glsl.g.ts +2 -0
  242. package/src/shaders/raster.fragment.glsl +53 -0
  243. package/src/shaders/raster.fragment.glsl.g.ts +2 -0
  244. package/src/shaders/raster.vertex.glsl +21 -0
  245. package/src/shaders/raster.vertex.glsl.g.ts +2 -0
  246. package/src/shaders/shaders.ts +197 -0
  247. package/src/shaders/sky.fragment.glsl +17 -0
  248. package/src/shaders/sky.fragment.glsl.g.ts +2 -0
  249. package/src/shaders/sky.vertex.glsl +5 -0
  250. package/src/shaders/sky.vertex.glsl.g.ts +2 -0
  251. package/src/shaders/symbol_icon.fragment.glsl +17 -0
  252. package/src/shaders/symbol_icon.fragment.glsl.g.ts +2 -0
  253. package/src/shaders/symbol_icon.vertex.glsl +117 -0
  254. package/src/shaders/symbol_icon.vertex.glsl.g.ts +2 -0
  255. package/src/shaders/symbol_sdf.fragment.glsl +58 -0
  256. package/src/shaders/symbol_sdf.fragment.glsl.g.ts +2 -0
  257. package/src/shaders/symbol_sdf.vertex.glsl +142 -0
  258. package/src/shaders/symbol_sdf.vertex.glsl.g.ts +2 -0
  259. package/src/shaders/symbol_text_and_icon.fragment.glsl +68 -0
  260. package/src/shaders/symbol_text_and_icon.fragment.glsl.g.ts +2 -0
  261. package/src/shaders/symbol_text_and_icon.vertex.glsl +140 -0
  262. package/src/shaders/symbol_text_and_icon.vertex.glsl.g.ts +2 -0
  263. package/src/shaders/terrain.fragment.glsl +32 -0
  264. package/src/shaders/terrain.fragment.glsl.g.ts +2 -0
  265. package/src/shaders/terrain.vertex.glsl +17 -0
  266. package/src/shaders/terrain.vertex.glsl.g.ts +2 -0
  267. package/src/shaders/terrain_coords.fragment.glsl +11 -0
  268. package/src/shaders/terrain_coords.fragment.glsl.g.ts +2 -0
  269. package/src/shaders/terrain_coords.vertex.glsl +13 -0
  270. package/src/shaders/terrain_coords.vertex.glsl.g.ts +2 -0
  271. package/src/shaders/terrain_depth.fragment.glsl +15 -0
  272. package/src/shaders/terrain_depth.fragment.glsl.g.ts +2 -0
  273. package/src/shaders/terrain_depth.vertex.glsl +13 -0
  274. package/src/shaders/terrain_depth.vertex.glsl.g.ts +2 -0
  275. package/src/source/canvas_source.test.ts +210 -0
  276. package/src/source/canvas_source.ts +227 -0
  277. package/src/source/geojson_source.test.ts +492 -0
  278. package/src/source/geojson_source.ts +431 -0
  279. package/src/source/geojson_source_diff.test.ts +364 -0
  280. package/src/source/geojson_source_diff.ts +172 -0
  281. package/src/source/geojson_worker_source.test.ts +399 -0
  282. package/src/source/geojson_worker_source.ts +303 -0
  283. package/src/source/geojson_wrapper.test.ts +32 -0
  284. package/src/source/geojson_wrapper.ts +81 -0
  285. package/src/source/image_source.test.ts +235 -0
  286. package/src/source/image_source.ts +338 -0
  287. package/src/source/load_tilejson.ts +47 -0
  288. package/src/source/pixels_to_tile_units.ts +25 -0
  289. package/src/source/protocol_crud.ts +48 -0
  290. package/src/source/query_features.test.ts +31 -0
  291. package/src/source/query_features.ts +252 -0
  292. package/src/source/raster_dem_tile_source.test.ts +158 -0
  293. package/src/source/raster_dem_tile_source.ts +166 -0
  294. package/src/source/raster_dem_tile_worker_source.test.ts +36 -0
  295. package/src/source/raster_dem_tile_worker_source.ts +38 -0
  296. package/src/source/raster_tile_source.test.ts +206 -0
  297. package/src/source/raster_tile_source.ts +227 -0
  298. package/src/source/rtl_text_plugin_main_thread.test.ts +170 -0
  299. package/src/source/rtl_text_plugin_main_thread.ts +89 -0
  300. package/src/source/rtl_text_plugin_status.ts +33 -0
  301. package/src/source/rtl_text_plugin_worker.ts +49 -0
  302. package/src/source/source.test.ts +41 -0
  303. package/src/source/source.ts +186 -0
  304. package/src/source/source_cache.test.ts +2069 -0
  305. package/src/source/source_cache.ts +1102 -0
  306. package/src/source/source_state.ts +157 -0
  307. package/src/source/terrain_source_cache.test.ts +105 -0
  308. package/src/source/terrain_source_cache.ts +204 -0
  309. package/src/source/tile.test.ts +290 -0
  310. package/src/source/tile.ts +478 -0
  311. package/src/source/tile_bounds.ts +34 -0
  312. package/src/source/tile_cache.test.ts +130 -0
  313. package/src/source/tile_cache.ts +208 -0
  314. package/src/source/tile_id.test.ts +112 -0
  315. package/src/source/tile_id.ts +221 -0
  316. package/src/source/vector_tile_source.test.ts +401 -0
  317. package/src/source/vector_tile_source.ts +283 -0
  318. package/src/source/vector_tile_worker_source.test.ts +396 -0
  319. package/src/source/vector_tile_worker_source.ts +199 -0
  320. package/src/source/video_source.test.ts +124 -0
  321. package/src/source/video_source.ts +204 -0
  322. package/src/source/worker.test.ts +233 -0
  323. package/src/source/worker.ts +301 -0
  324. package/src/source/worker_source.ts +117 -0
  325. package/src/source/worker_tile.test.ts +226 -0
  326. package/src/source/worker_tile.ts +208 -0
  327. package/src/style/create_style_layer.ts +39 -0
  328. package/src/style/evaluation_parameters.ts +62 -0
  329. package/src/style/format_section_override.test.ts +62 -0
  330. package/src/style/format_section_override.ts +50 -0
  331. package/src/style/light.test.ts +86 -0
  332. package/src/style/light.ts +135 -0
  333. package/src/style/load_glyph_range.test.ts +40 -0
  334. package/src/style/load_glyph_range.ts +32 -0
  335. package/src/style/load_sprite.test.ts +227 -0
  336. package/src/style/load_sprite.ts +71 -0
  337. package/src/style/parse_glyph_pbf.ts +42 -0
  338. package/src/style/pauseable_placement.ts +138 -0
  339. package/src/style/properties.ts +726 -0
  340. package/src/style/query_utils.test.ts +107 -0
  341. package/src/style/query_utils.ts +70 -0
  342. package/src/style/sky.ts +127 -0
  343. package/src/style/style.test.ts +2654 -0
  344. package/src/style/style.ts +1814 -0
  345. package/src/style/style_glyph.ts +25 -0
  346. package/src/style/style_image.ts +188 -0
  347. package/src/style/style_layer/background_style_layer.ts +17 -0
  348. package/src/style/style_layer/background_style_layer_properties.g.ts +40 -0
  349. package/src/style/style_layer/circle_style_layer.ts +98 -0
  350. package/src/style/style_layer/circle_style_layer_properties.g.ts +76 -0
  351. package/src/style/style_layer/custom_style_layer.ts +233 -0
  352. package/src/style/style_layer/fill_extrusion_style_layer.ts +224 -0
  353. package/src/style/style_layer/fill_extrusion_style_layer_properties.g.ts +55 -0
  354. package/src/style/style_layer/fill_style_layer.test.ts +37 -0
  355. package/src/style/style_layer/fill_style_layer.ts +65 -0
  356. package/src/style/style_layer/fill_style_layer_properties.g.ts +64 -0
  357. package/src/style/style_layer/heatmap_style_layer.ts +74 -0
  358. package/src/style/style_layer/heatmap_style_layer_properties.g.ts +46 -0
  359. package/src/style/style_layer/hillshade_style_layer.ts +21 -0
  360. package/src/style/style_layer/hillshade_style_layer_properties.g.ts +49 -0
  361. package/src/style/style_layer/line_style_layer.test.ts +50 -0
  362. package/src/style/style_layer/line_style_layer.ts +131 -0
  363. package/src/style/style_layer/line_style_layer_properties.g.ts +88 -0
  364. package/src/style/style_layer/overlap_mode.test.ts +57 -0
  365. package/src/style/style_layer/overlap_mode.ts +25 -0
  366. package/src/style/style_layer/raster_style_layer.ts +17 -0
  367. package/src/style/style_layer/raster_style_layer_properties.g.ts +55 -0
  368. package/src/style/style_layer/symbol_style_layer.ts +195 -0
  369. package/src/style/style_layer/symbol_style_layer_properties.g.ts +218 -0
  370. package/src/style/style_layer/typed_style_layer.ts +9 -0
  371. package/src/style/style_layer/variable_text_anchor.test.ts +117 -0
  372. package/src/style/style_layer/variable_text_anchor.ts +163 -0
  373. package/src/style/style_layer.test.ts +372 -0
  374. package/src/style/style_layer.ts +287 -0
  375. package/src/style/style_layer_index.test.ts +99 -0
  376. package/src/style/style_layer_index.ts +78 -0
  377. package/src/style/validate_style.ts +53 -0
  378. package/src/style/zoom_history.ts +40 -0
  379. package/src/symbol/anchor.test.ts +14 -0
  380. package/src/symbol/anchor.ts +22 -0
  381. package/src/symbol/check_max_angle.test.ts +54 -0
  382. package/src/symbol/check_max_angle.ts +76 -0
  383. package/src/symbol/clip_line.test.ts +154 -0
  384. package/src/symbol/clip_line.ts +66 -0
  385. package/src/symbol/collision_feature.test.ts +98 -0
  386. package/src/symbol/collision_feature.ts +114 -0
  387. package/src/symbol/collision_index.test.ts +19 -0
  388. package/src/symbol/collision_index.ts +618 -0
  389. package/src/symbol/cross_tile_symbol_index.test.ts +260 -0
  390. package/src/symbol/cross_tile_symbol_index.ts +367 -0
  391. package/src/symbol/get_anchors.test.ts +113 -0
  392. package/src/symbol/get_anchors.ts +167 -0
  393. package/src/symbol/grid_index.test.ts +75 -0
  394. package/src/symbol/grid_index.ts +414 -0
  395. package/src/symbol/merge_lines.test.ts +30 -0
  396. package/src/symbol/merge_lines.ts +80 -0
  397. package/src/symbol/one_em.ts +3 -0
  398. package/src/symbol/opacity_state.ts +23 -0
  399. package/src/symbol/path_interpolator.test.ts +134 -0
  400. package/src/symbol/path_interpolator.ts +55 -0
  401. package/src/symbol/placement.ts +1371 -0
  402. package/src/symbol/projection.test.ts +171 -0
  403. package/src/symbol/projection.ts +833 -0
  404. package/src/symbol/quads.test.ts +157 -0
  405. package/src/symbol/quads.ts +349 -0
  406. package/src/symbol/shaping.test.ts +360 -0
  407. package/src/symbol/shaping.ts +911 -0
  408. package/src/symbol/symbol_layout.ts +739 -0
  409. package/src/symbol/symbol_size.ts +129 -0
  410. package/src/symbol/symbol_style_layer.test.ts +103 -0
  411. package/src/symbol/transform_text.ts +27 -0
  412. package/src/ui/anchor.ts +27 -0
  413. package/src/ui/camera.test.ts +2301 -0
  414. package/src/ui/camera.ts +1520 -0
  415. package/src/ui/control/attribution_control.test.ts +543 -0
  416. package/src/ui/control/attribution_control.ts +209 -0
  417. package/src/ui/control/control.ts +67 -0
  418. package/src/ui/control/fullscreen_control.test.ts +114 -0
  419. package/src/ui/control/fullscreen_control.ts +189 -0
  420. package/src/ui/control/geolocate_control.test.ts +619 -0
  421. package/src/ui/control/geolocate_control.ts +725 -0
  422. package/src/ui/control/logo_control.test.ts +88 -0
  423. package/src/ui/control/logo_control.ts +86 -0
  424. package/src/ui/control/navigation_control.test.ts +238 -0
  425. package/src/ui/control/navigation_control.ts +294 -0
  426. package/src/ui/control/scale_control.test.ts +52 -0
  427. package/src/ui/control/scale_control.ts +152 -0
  428. package/src/ui/control/terrain_control.test.ts +58 -0
  429. package/src/ui/control/terrain_control.ts +74 -0
  430. package/src/ui/default_locale.ts +25 -0
  431. package/src/ui/events.ts +758 -0
  432. package/src/ui/handler/box_zoom.test.ts +163 -0
  433. package/src/ui/handler/box_zoom.ts +171 -0
  434. package/src/ui/handler/click_zoom.ts +55 -0
  435. package/src/ui/handler/cooperative_gestures.test.ts +338 -0
  436. package/src/ui/handler/cooperative_gestures.ts +111 -0
  437. package/src/ui/handler/dblclick_zoom.test.ts +151 -0
  438. package/src/ui/handler/drag_handler.ts +174 -0
  439. package/src/ui/handler/drag_move_state_manager.ts +115 -0
  440. package/src/ui/handler/drag_pan.test.ts +487 -0
  441. package/src/ui/handler/drag_rotate.test.ts +859 -0
  442. package/src/ui/handler/handler_util.ts +10 -0
  443. package/src/ui/handler/keyboard.test.ts +235 -0
  444. package/src/ui/handler/keyboard.ts +212 -0
  445. package/src/ui/handler/map_event.test.ts +158 -0
  446. package/src/ui/handler/map_event.ts +161 -0
  447. package/src/ui/handler/mouse.ts +92 -0
  448. package/src/ui/handler/mouse_handler_interface.test.ts +111 -0
  449. package/src/ui/handler/mouse_rotate.test.ts +62 -0
  450. package/src/ui/handler/one_finger_touch_drag.ts +45 -0
  451. package/src/ui/handler/one_finger_touch_drag_handler_interface.test.ts +77 -0
  452. package/src/ui/handler/scroll_zoom.test.ts +382 -0
  453. package/src/ui/handler/scroll_zoom.ts +379 -0
  454. package/src/ui/handler/shim/dblclick_zoom.ts +64 -0
  455. package/src/ui/handler/shim/drag_pan.ts +104 -0
  456. package/src/ui/handler/shim/drag_rotate.ts +76 -0
  457. package/src/ui/handler/shim/two_fingers_touch.ts +112 -0
  458. package/src/ui/handler/tap_drag_zoom.test.ts +113 -0
  459. package/src/ui/handler/tap_drag_zoom.ts +112 -0
  460. package/src/ui/handler/tap_recognizer.ts +138 -0
  461. package/src/ui/handler/tap_zoom.ts +98 -0
  462. package/src/ui/handler/touch_pan.ts +115 -0
  463. package/src/ui/handler/transform-provider.ts +44 -0
  464. package/src/ui/handler/two_fingers_touch.test.ts +283 -0
  465. package/src/ui/handler/two_fingers_touch.ts +336 -0
  466. package/src/ui/handler_inertia.ts +157 -0
  467. package/src/ui/handler_manager.ts +637 -0
  468. package/src/ui/hash.test.ts +404 -0
  469. package/src/ui/hash.ts +153 -0
  470. package/src/ui/map.ts +3393 -0
  471. package/src/ui/map_tests/map_animation.test.ts +61 -0
  472. package/src/ui/map_tests/map_basic.test.ts +223 -0
  473. package/src/ui/map_tests/map_bounds.test.ts +123 -0
  474. package/src/ui/map_tests/map_calculate_camera_options.test.ts +113 -0
  475. package/src/ui/map_tests/map_canvas.test.ts +59 -0
  476. package/src/ui/map_tests/map_control.test.ts +61 -0
  477. package/src/ui/map_tests/map_disable_handlers.test.ts +38 -0
  478. package/src/ui/map_tests/map_events.test.ts +1001 -0
  479. package/src/ui/map_tests/map_feature_state.test.ts +421 -0
  480. package/src/ui/map_tests/map_images.test.ts +175 -0
  481. package/src/ui/map_tests/map_is_moving.test.ts +164 -0
  482. package/src/ui/map_tests/map_is_rotating.test.ts +62 -0
  483. package/src/ui/map_tests/map_is_zooming.test.ts +86 -0
  484. package/src/ui/map_tests/map_layer.test.ts +457 -0
  485. package/src/ui/map_tests/map_options.test.ts +64 -0
  486. package/src/ui/map_tests/map_pitch.test.ts +90 -0
  487. package/src/ui/map_tests/map_pixel_ratio.test.ts +75 -0
  488. package/src/ui/map_tests/map_query_rendered_features.test.ts +93 -0
  489. package/src/ui/map_tests/map_render.test.ts +90 -0
  490. package/src/ui/map_tests/map_request_render_frame.test.ts +51 -0
  491. package/src/ui/map_tests/map_resize.test.ts +120 -0
  492. package/src/ui/map_tests/map_style.test.ts +541 -0
  493. package/src/ui/map_tests/map_terrian.test.ts +104 -0
  494. package/src/ui/map_tests/map_webgl.test.ts +72 -0
  495. package/src/ui/map_tests/map_world_copies.test.ts +103 -0
  496. package/src/ui/map_tests/map_zoom.test.ts +95 -0
  497. package/src/ui/marker.test.ts +1149 -0
  498. package/src/ui/marker.ts +880 -0
  499. package/src/ui/popup.test.ts +827 -0
  500. package/src/ui/popup.ts +717 -0
  501. package/src/util/abort_error.ts +21 -0
  502. package/src/util/actor.test.ts +218 -0
  503. package/src/util/actor.ts +241 -0
  504. package/src/util/actor_messages.ts +149 -0
  505. package/src/util/ajax.test.ts +237 -0
  506. package/src/util/ajax.ts +297 -0
  507. package/src/util/browser.test.ts +23 -0
  508. package/src/util/browser.ts +63 -0
  509. package/src/util/color_ramp.test.ts +105 -0
  510. package/src/util/color_ramp.ts +56 -0
  511. package/src/util/config.ts +29 -0
  512. package/src/util/dictionary_coder.ts +23 -0
  513. package/src/util/dispatcher.test.ts +76 -0
  514. package/src/util/dispatcher.ts +78 -0
  515. package/src/util/dom.ts +135 -0
  516. package/src/util/evented.test.ts +231 -0
  517. package/src/util/evented.ts +178 -0
  518. package/src/util/find_pole_of_inaccessibility.test.ts +21 -0
  519. package/src/util/find_pole_of_inaccessibility.ts +130 -0
  520. package/src/util/geolocation_support.test.ts +43 -0
  521. package/src/util/geolocation_support.ts +23 -0
  522. package/src/util/global_worker_pool.ts +65 -0
  523. package/src/util/image.ts +150 -0
  524. package/src/util/image_request.test.ts +408 -0
  525. package/src/util/image_request.ts +246 -0
  526. package/src/util/intersection_tests.ts +206 -0
  527. package/src/util/is_char_in_unicode_block.test.ts +15 -0
  528. package/src/util/is_char_in_unicode_block.ts +345 -0
  529. package/src/util/offscreen_canvas_distorted.test.ts +13 -0
  530. package/src/util/offscreen_canvas_distorted.ts +39 -0
  531. package/src/util/offscreen_canvas_supported.ts +11 -0
  532. package/src/util/performance.ts +117 -0
  533. package/src/util/primitives.test.ts +140 -0
  534. package/src/util/primitives.ts +143 -0
  535. package/src/util/request_manager.ts +42 -0
  536. package/src/util/resolve_tokens.test.ts +45 -0
  537. package/src/util/resolve_tokens.ts +17 -0
  538. package/src/util/script_detection.test.ts +138 -0
  539. package/src/util/script_detection.ts +376 -0
  540. package/src/util/smart_wrap.test.ts +97 -0
  541. package/src/util/smart_wrap.ts +58 -0
  542. package/src/util/struct_array.test.ts +101 -0
  543. package/src/util/struct_array.ts +246 -0
  544. package/src/util/style.test.ts +34 -0
  545. package/src/util/style.ts +28 -0
  546. package/src/util/task_queue.test.ts +114 -0
  547. package/src/util/task_queue.ts +64 -0
  548. package/src/util/test/util.ts +185 -0
  549. package/src/util/throttle.test.ts +42 -0
  550. package/src/util/throttle.ts +28 -0
  551. package/src/util/throttled_invoker.ts +41 -0
  552. package/src/util/transferable_grid_index.test.ts +56 -0
  553. package/src/util/transferable_grid_index.ts +214 -0
  554. package/src/util/util.test.ts +414 -0
  555. package/src/util/util.ts +724 -0
  556. package/src/util/vectortile_to_geojson.ts +72 -0
  557. package/src/util/verticalize_punctuation.ts +110 -0
  558. package/src/util/web_worker.ts +16 -0
  559. package/src/util/web_worker_transfer.test.ts +153 -0
  560. package/src/util/web_worker_transfer.ts +254 -0
  561. package/src/util/webp_supported.ts +63 -0
  562. package/src/util/worker_pool.test.ts +43 -0
  563. package/src/util/worker_pool.ts +58 -0
  564. package/src/util/world_bounds.test.ts +59 -0
  565. package/src/util/world_bounds.ts +46 -0
@@ -0,0 +1,218 @@
1
+ // This file is generated. Edit build/generate-style-code.ts, then run 'npm run codegen'.
2
+ /* eslint-disable */
3
+
4
+ import {latest as styleSpec} from '@maplibre/maplibre-gl-style-spec';
5
+
6
+ import {
7
+ Properties,
8
+ DataConstantProperty,
9
+ DataDrivenProperty,
10
+ CrossFadedDataDrivenProperty,
11
+ CrossFadedProperty,
12
+ ColorRampProperty,
13
+ PossiblyEvaluatedPropertyValue,
14
+ CrossFaded
15
+ } from '../properties';
16
+
17
+ import type {Color, Formatted, Padding, ResolvedImage, VariableAnchorOffsetCollection} from '@maplibre/maplibre-gl-style-spec';
18
+ import {StylePropertySpecification} from '@maplibre/maplibre-gl-style-spec';
19
+
20
+ import {
21
+ ColorType
22
+ } from '@maplibre/maplibre-gl-style-spec';
23
+
24
+ export type SymbolLayoutProps = {
25
+ "symbol-placement": DataConstantProperty<"point" | "line" | "line-center">,
26
+ "symbol-spacing": DataConstantProperty<number>,
27
+ "symbol-avoid-edges": DataConstantProperty<boolean>,
28
+ "symbol-sort-key": DataDrivenProperty<number>,
29
+ "symbol-z-order": DataConstantProperty<"auto" | "viewport-y" | "source">,
30
+ "icon-allow-overlap": DataConstantProperty<boolean>,
31
+ "icon-overlap": DataConstantProperty<"never" | "always" | "cooperative">,
32
+ "icon-ignore-placement": DataConstantProperty<boolean>,
33
+ "icon-optional": DataConstantProperty<boolean>,
34
+ "icon-rotation-alignment": DataConstantProperty<"map" | "viewport" | "auto">,
35
+ "icon-size": DataDrivenProperty<number>,
36
+ "icon-text-fit": DataConstantProperty<"none" | "width" | "height" | "both">,
37
+ "icon-text-fit-padding": DataConstantProperty<[number, number, number, number]>,
38
+ "icon-image": DataDrivenProperty<ResolvedImage>,
39
+ "icon-rotate": DataDrivenProperty<number>,
40
+ "icon-padding": DataDrivenProperty<Padding>,
41
+ "icon-keep-upright": DataConstantProperty<boolean>,
42
+ "icon-offset": DataDrivenProperty<[number, number]>,
43
+ "icon-anchor": DataDrivenProperty<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">,
44
+ "icon-pitch-alignment": DataConstantProperty<"map" | "viewport" | "auto">,
45
+ "text-pitch-alignment": DataConstantProperty<"map" | "viewport" | "auto">,
46
+ "text-rotation-alignment": DataConstantProperty<"map" | "viewport" | "viewport-glyph" | "auto">,
47
+ "text-field": DataDrivenProperty<Formatted>,
48
+ "text-font": DataDrivenProperty<Array<string>>,
49
+ "text-size": DataDrivenProperty<number>,
50
+ "text-max-width": DataDrivenProperty<number>,
51
+ "text-line-height": DataConstantProperty<number>,
52
+ "text-letter-spacing": DataDrivenProperty<number>,
53
+ "text-justify": DataDrivenProperty<"auto" | "left" | "center" | "right">,
54
+ "text-radial-offset": DataDrivenProperty<number>,
55
+ "text-variable-anchor": DataConstantProperty<Array<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">>,
56
+ "text-variable-anchor-offset": DataDrivenProperty<VariableAnchorOffsetCollection>,
57
+ "text-anchor": DataDrivenProperty<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">,
58
+ "text-max-angle": DataConstantProperty<number>,
59
+ "text-writing-mode": DataConstantProperty<Array<"horizontal" | "vertical">>,
60
+ "text-rotate": DataDrivenProperty<number>,
61
+ "text-padding": DataConstantProperty<number>,
62
+ "text-keep-upright": DataConstantProperty<boolean>,
63
+ "text-transform": DataDrivenProperty<"none" | "uppercase" | "lowercase">,
64
+ "text-offset": DataDrivenProperty<[number, number]>,
65
+ "text-allow-overlap": DataConstantProperty<boolean>,
66
+ "text-overlap": DataConstantProperty<"never" | "always" | "cooperative">,
67
+ "text-ignore-placement": DataConstantProperty<boolean>,
68
+ "text-optional": DataConstantProperty<boolean>,
69
+ };
70
+
71
+ export type SymbolLayoutPropsPossiblyEvaluated = {
72
+ "symbol-placement": "point" | "line" | "line-center",
73
+ "symbol-spacing": number,
74
+ "symbol-avoid-edges": boolean,
75
+ "symbol-sort-key": PossiblyEvaluatedPropertyValue<number>,
76
+ "symbol-z-order": "auto" | "viewport-y" | "source",
77
+ "icon-allow-overlap": boolean,
78
+ "icon-overlap": "never" | "always" | "cooperative",
79
+ "icon-ignore-placement": boolean,
80
+ "icon-optional": boolean,
81
+ "icon-rotation-alignment": "map" | "viewport" | "auto",
82
+ "icon-size": PossiblyEvaluatedPropertyValue<number>,
83
+ "icon-text-fit": "none" | "width" | "height" | "both",
84
+ "icon-text-fit-padding": [number, number, number, number],
85
+ "icon-image": PossiblyEvaluatedPropertyValue<ResolvedImage>,
86
+ "icon-rotate": PossiblyEvaluatedPropertyValue<number>,
87
+ "icon-padding": PossiblyEvaluatedPropertyValue<Padding>,
88
+ "icon-keep-upright": boolean,
89
+ "icon-offset": PossiblyEvaluatedPropertyValue<[number, number]>,
90
+ "icon-anchor": PossiblyEvaluatedPropertyValue<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">,
91
+ "icon-pitch-alignment": "map" | "viewport" | "auto",
92
+ "text-pitch-alignment": "map" | "viewport" | "auto",
93
+ "text-rotation-alignment": "map" | "viewport" | "viewport-glyph" | "auto",
94
+ "text-field": PossiblyEvaluatedPropertyValue<Formatted>,
95
+ "text-font": PossiblyEvaluatedPropertyValue<Array<string>>,
96
+ "text-size": PossiblyEvaluatedPropertyValue<number>,
97
+ "text-max-width": PossiblyEvaluatedPropertyValue<number>,
98
+ "text-line-height": number,
99
+ "text-letter-spacing": PossiblyEvaluatedPropertyValue<number>,
100
+ "text-justify": PossiblyEvaluatedPropertyValue<"auto" | "left" | "center" | "right">,
101
+ "text-radial-offset": PossiblyEvaluatedPropertyValue<number>,
102
+ "text-variable-anchor": Array<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">,
103
+ "text-variable-anchor-offset": PossiblyEvaluatedPropertyValue<VariableAnchorOffsetCollection>,
104
+ "text-anchor": PossiblyEvaluatedPropertyValue<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">,
105
+ "text-max-angle": number,
106
+ "text-writing-mode": Array<"horizontal" | "vertical">,
107
+ "text-rotate": PossiblyEvaluatedPropertyValue<number>,
108
+ "text-padding": number,
109
+ "text-keep-upright": boolean,
110
+ "text-transform": PossiblyEvaluatedPropertyValue<"none" | "uppercase" | "lowercase">,
111
+ "text-offset": PossiblyEvaluatedPropertyValue<[number, number]>,
112
+ "text-allow-overlap": boolean,
113
+ "text-overlap": "never" | "always" | "cooperative",
114
+ "text-ignore-placement": boolean,
115
+ "text-optional": boolean,
116
+ };
117
+
118
+ let layout: Properties<SymbolLayoutProps>;
119
+ const getLayout = () => layout = layout || new Properties({
120
+ "symbol-placement": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-placement"] as any as StylePropertySpecification),
121
+ "symbol-spacing": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-spacing"] as any as StylePropertySpecification),
122
+ "symbol-avoid-edges": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-avoid-edges"] as any as StylePropertySpecification),
123
+ "symbol-sort-key": new DataDrivenProperty(styleSpec["layout_symbol"]["symbol-sort-key"] as any as StylePropertySpecification),
124
+ "symbol-z-order": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-z-order"] as any as StylePropertySpecification),
125
+ "icon-allow-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["icon-allow-overlap"] as any as StylePropertySpecification),
126
+ "icon-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["icon-overlap"] as any as StylePropertySpecification),
127
+ "icon-ignore-placement": new DataConstantProperty(styleSpec["layout_symbol"]["icon-ignore-placement"] as any as StylePropertySpecification),
128
+ "icon-optional": new DataConstantProperty(styleSpec["layout_symbol"]["icon-optional"] as any as StylePropertySpecification),
129
+ "icon-rotation-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["icon-rotation-alignment"] as any as StylePropertySpecification),
130
+ "icon-size": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-size"] as any as StylePropertySpecification),
131
+ "icon-text-fit": new DataConstantProperty(styleSpec["layout_symbol"]["icon-text-fit"] as any as StylePropertySpecification),
132
+ "icon-text-fit-padding": new DataConstantProperty(styleSpec["layout_symbol"]["icon-text-fit-padding"] as any as StylePropertySpecification),
133
+ "icon-image": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-image"] as any as StylePropertySpecification),
134
+ "icon-rotate": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-rotate"] as any as StylePropertySpecification),
135
+ "icon-padding": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-padding"] as any as StylePropertySpecification),
136
+ "icon-keep-upright": new DataConstantProperty(styleSpec["layout_symbol"]["icon-keep-upright"] as any as StylePropertySpecification),
137
+ "icon-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-offset"] as any as StylePropertySpecification),
138
+ "icon-anchor": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-anchor"] as any as StylePropertySpecification),
139
+ "icon-pitch-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["icon-pitch-alignment"] as any as StylePropertySpecification),
140
+ "text-pitch-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["text-pitch-alignment"] as any as StylePropertySpecification),
141
+ "text-rotation-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["text-rotation-alignment"] as any as StylePropertySpecification),
142
+ "text-field": new DataDrivenProperty(styleSpec["layout_symbol"]["text-field"] as any as StylePropertySpecification),
143
+ "text-font": new DataDrivenProperty(styleSpec["layout_symbol"]["text-font"] as any as StylePropertySpecification),
144
+ "text-size": new DataDrivenProperty(styleSpec["layout_symbol"]["text-size"] as any as StylePropertySpecification),
145
+ "text-max-width": new DataDrivenProperty(styleSpec["layout_symbol"]["text-max-width"] as any as StylePropertySpecification),
146
+ "text-line-height": new DataConstantProperty(styleSpec["layout_symbol"]["text-line-height"] as any as StylePropertySpecification),
147
+ "text-letter-spacing": new DataDrivenProperty(styleSpec["layout_symbol"]["text-letter-spacing"] as any as StylePropertySpecification),
148
+ "text-justify": new DataDrivenProperty(styleSpec["layout_symbol"]["text-justify"] as any as StylePropertySpecification),
149
+ "text-radial-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["text-radial-offset"] as any as StylePropertySpecification),
150
+ "text-variable-anchor": new DataConstantProperty(styleSpec["layout_symbol"]["text-variable-anchor"] as any as StylePropertySpecification),
151
+ "text-variable-anchor-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["text-variable-anchor-offset"] as any as StylePropertySpecification),
152
+ "text-anchor": new DataDrivenProperty(styleSpec["layout_symbol"]["text-anchor"] as any as StylePropertySpecification),
153
+ "text-max-angle": new DataConstantProperty(styleSpec["layout_symbol"]["text-max-angle"] as any as StylePropertySpecification),
154
+ "text-writing-mode": new DataConstantProperty(styleSpec["layout_symbol"]["text-writing-mode"] as any as StylePropertySpecification),
155
+ "text-rotate": new DataDrivenProperty(styleSpec["layout_symbol"]["text-rotate"] as any as StylePropertySpecification),
156
+ "text-padding": new DataConstantProperty(styleSpec["layout_symbol"]["text-padding"] as any as StylePropertySpecification),
157
+ "text-keep-upright": new DataConstantProperty(styleSpec["layout_symbol"]["text-keep-upright"] as any as StylePropertySpecification),
158
+ "text-transform": new DataDrivenProperty(styleSpec["layout_symbol"]["text-transform"] as any as StylePropertySpecification),
159
+ "text-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["text-offset"] as any as StylePropertySpecification),
160
+ "text-allow-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["text-allow-overlap"] as any as StylePropertySpecification),
161
+ "text-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["text-overlap"] as any as StylePropertySpecification),
162
+ "text-ignore-placement": new DataConstantProperty(styleSpec["layout_symbol"]["text-ignore-placement"] as any as StylePropertySpecification),
163
+ "text-optional": new DataConstantProperty(styleSpec["layout_symbol"]["text-optional"] as any as StylePropertySpecification),
164
+ });
165
+
166
+ export type SymbolPaintProps = {
167
+ "icon-opacity": DataDrivenProperty<number>,
168
+ "icon-color": DataDrivenProperty<Color>,
169
+ "icon-halo-color": DataDrivenProperty<Color>,
170
+ "icon-halo-width": DataDrivenProperty<number>,
171
+ "icon-halo-blur": DataDrivenProperty<number>,
172
+ "icon-translate": DataConstantProperty<[number, number]>,
173
+ "icon-translate-anchor": DataConstantProperty<"map" | "viewport">,
174
+ "text-opacity": DataDrivenProperty<number>,
175
+ "text-color": DataDrivenProperty<Color>,
176
+ "text-halo-color": DataDrivenProperty<Color>,
177
+ "text-halo-width": DataDrivenProperty<number>,
178
+ "text-halo-blur": DataDrivenProperty<number>,
179
+ "text-translate": DataConstantProperty<[number, number]>,
180
+ "text-translate-anchor": DataConstantProperty<"map" | "viewport">,
181
+ };
182
+
183
+ export type SymbolPaintPropsPossiblyEvaluated = {
184
+ "icon-opacity": PossiblyEvaluatedPropertyValue<number>,
185
+ "icon-color": PossiblyEvaluatedPropertyValue<Color>,
186
+ "icon-halo-color": PossiblyEvaluatedPropertyValue<Color>,
187
+ "icon-halo-width": PossiblyEvaluatedPropertyValue<number>,
188
+ "icon-halo-blur": PossiblyEvaluatedPropertyValue<number>,
189
+ "icon-translate": [number, number],
190
+ "icon-translate-anchor": "map" | "viewport",
191
+ "text-opacity": PossiblyEvaluatedPropertyValue<number>,
192
+ "text-color": PossiblyEvaluatedPropertyValue<Color>,
193
+ "text-halo-color": PossiblyEvaluatedPropertyValue<Color>,
194
+ "text-halo-width": PossiblyEvaluatedPropertyValue<number>,
195
+ "text-halo-blur": PossiblyEvaluatedPropertyValue<number>,
196
+ "text-translate": [number, number],
197
+ "text-translate-anchor": "map" | "viewport",
198
+ };
199
+
200
+ let paint: Properties<SymbolPaintProps>;
201
+ const getPaint = () => paint = paint || new Properties({
202
+ "icon-opacity": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-opacity"] as any as StylePropertySpecification),
203
+ "icon-color": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-color"] as any as StylePropertySpecification),
204
+ "icon-halo-color": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-color"] as any as StylePropertySpecification),
205
+ "icon-halo-width": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-width"] as any as StylePropertySpecification),
206
+ "icon-halo-blur": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-blur"] as any as StylePropertySpecification),
207
+ "icon-translate": new DataConstantProperty(styleSpec["paint_symbol"]["icon-translate"] as any as StylePropertySpecification),
208
+ "icon-translate-anchor": new DataConstantProperty(styleSpec["paint_symbol"]["icon-translate-anchor"] as any as StylePropertySpecification),
209
+ "text-opacity": new DataDrivenProperty(styleSpec["paint_symbol"]["text-opacity"] as any as StylePropertySpecification),
210
+ "text-color": new DataDrivenProperty(styleSpec["paint_symbol"]["text-color"] as any as StylePropertySpecification, { runtimeType: ColorType, getOverride: (o) => o.textColor, hasOverride: (o) => !!o.textColor }),
211
+ "text-halo-color": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-color"] as any as StylePropertySpecification),
212
+ "text-halo-width": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-width"] as any as StylePropertySpecification),
213
+ "text-halo-blur": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-blur"] as any as StylePropertySpecification),
214
+ "text-translate": new DataConstantProperty(styleSpec["paint_symbol"]["text-translate"] as any as StylePropertySpecification),
215
+ "text-translate-anchor": new DataConstantProperty(styleSpec["paint_symbol"]["text-translate-anchor"] as any as StylePropertySpecification),
216
+ });
217
+
218
+ export default ({ get paint() { return getPaint() }, get layout() { return getLayout() } });
@@ -0,0 +1,9 @@
1
+ import type {CircleStyleLayer} from './circle_style_layer';
2
+ import type {FillStyleLayer} from './fill_style_layer';
3
+ import type {FillExtrusionStyleLayer} from './fill_extrusion_style_layer';
4
+ import type {HeatmapStyleLayer} from './heatmap_style_layer';
5
+ import type {HillshadeStyleLayer} from './hillshade_style_layer';
6
+ import type {LineStyleLayer} from './line_style_layer';
7
+ import type {SymbolStyleLayer} from './symbol_style_layer';
8
+
9
+ export type TypedStyleLayer = CircleStyleLayer | FillStyleLayer | FillExtrusionStyleLayer | HeatmapStyleLayer | HillshadeStyleLayer | LineStyleLayer | SymbolStyleLayer;
@@ -0,0 +1,117 @@
1
+ import {EvaluationParameters} from '../evaluation_parameters';
2
+ import {ZoomHistory} from '../zoom_history';
3
+ import {SymbolStyleLayer} from './symbol_style_layer';
4
+ import {INVALID_TEXT_OFFSET, evaluateVariableOffset, getTextVariableAnchorOffset} from './variable_text_anchor';
5
+
6
+ describe('evaluateVariableOffset', () => {
7
+ test('fromRadialOffset', () => {
8
+ // Radial offset mode is invoked by using INVALID_TEXT_OFFSET as the Y value
9
+ const srcOffset = [10, INVALID_TEXT_OFFSET] as [number, number];
10
+
11
+ expect(evaluateVariableOffset('center', srcOffset)).toEqual([0, 0]);
12
+
13
+ // Top/bottom offsets are shifted by the default baseline (7)
14
+ expect(evaluateVariableOffset('top', srcOffset)).toEqual([0, 3]);
15
+ expect(evaluateVariableOffset('bottom', srcOffset)).toEqual([0, -3]);
16
+ expect(evaluateVariableOffset('left', srcOffset)).toEqual([10, 0]);
17
+ expect(evaluateVariableOffset('right', srcOffset)).toEqual([-10, 0]);
18
+
19
+ const hypotenuse = 10 / Math.SQRT2;
20
+ expect(evaluateVariableOffset('top-left', srcOffset)).toEqual([expect.closeTo(hypotenuse), expect.closeTo(hypotenuse - 7)]);
21
+ expect(evaluateVariableOffset('top-right', srcOffset)).toEqual([expect.closeTo(-hypotenuse), expect.closeTo(hypotenuse - 7)]);
22
+ expect(evaluateVariableOffset('bottom-left', srcOffset)).toEqual([expect.closeTo(hypotenuse), expect.closeTo(-hypotenuse + 7)]);
23
+ expect(evaluateVariableOffset('bottom-right', srcOffset)).toEqual([expect.closeTo(-hypotenuse), expect.closeTo(-hypotenuse + 7)]);
24
+ });
25
+
26
+ test('fromTextOffset', () => {
27
+ const srcOffset = [10, -10] as [number, number];
28
+
29
+ expect(evaluateVariableOffset('center', srcOffset)).toEqual([0, 0]);
30
+
31
+ // Top/bottom offsets are shifted by the default baseline (7)
32
+ expect(evaluateVariableOffset('top', srcOffset)).toEqual([0, 3]);
33
+ expect(evaluateVariableOffset('bottom', srcOffset)).toEqual([0, -3]);
34
+ expect(evaluateVariableOffset('left', srcOffset)).toEqual([10, 0]);
35
+ expect(evaluateVariableOffset('right', srcOffset)).toEqual([-10, 0]);
36
+ expect(evaluateVariableOffset('top-left', srcOffset)).toEqual([10, 3]);
37
+ expect(evaluateVariableOffset('top-right', srcOffset)).toEqual([-10, 3]);
38
+ expect(evaluateVariableOffset('bottom-left', srcOffset)).toEqual([10, -3]);
39
+ expect(evaluateVariableOffset('bottom-right', srcOffset)).toEqual([-10, -3]);
40
+ });
41
+ });
42
+
43
+ function createSymbolLayer(layerProperties) {
44
+ const layer = new SymbolStyleLayer(layerProperties);
45
+ layer.recalculate({zoom: 0, zoomHistory: {} as ZoomHistory} as EvaluationParameters, []);
46
+ return layer;
47
+ }
48
+
49
+ describe('getTextVariableAnchorOffset', () => {
50
+ test('defaults - no props set', () => {
51
+ const props = {};
52
+ const layer = createSymbolLayer(props);
53
+
54
+ expect(getTextVariableAnchorOffset(layer, null, null)).toBeNull();
55
+ });
56
+
57
+ test('text-variable-anchor-offset set', () => {
58
+ const props = {layout: {'text-variable-anchor-offset': ['top', [1, 1], 'bottom', [2, 2]]}};
59
+ const layer = createSymbolLayer(props);
60
+
61
+ const offset = getTextVariableAnchorOffset(layer, null, null);
62
+ expect(offset).toBeDefined();
63
+ // Offset converted to EMs, accounting for baseline shift on Y axis
64
+ expect(offset.toString()).toBe('["top",[24,17],"bottom",[48,55]]');
65
+ });
66
+
67
+ test('text-variable-anchor set', () => {
68
+ const props = {layout: {'text-variable-anchor': ['top']}};
69
+ const layer = createSymbolLayer(props);
70
+
71
+ const offset = getTextVariableAnchorOffset(layer, null, null);
72
+ expect(offset).toBeDefined();
73
+ // Default offset (0, 0) converted to EMs, accounting for baseline shift on Y axis
74
+ expect(offset.toString()).toBe('["top",[0,-7]]');
75
+ });
76
+
77
+ test('text-variable-anchor and text-offset set', () => {
78
+ const props = {layout: {'text-variable-anchor': ['top'], 'text-offset': [1, 1]}};
79
+ const layer = createSymbolLayer(props);
80
+
81
+ const offset = getTextVariableAnchorOffset(layer, null, null);
82
+ expect(offset).toBeDefined();
83
+ // Offset converted to EMs, accounting for baseline shift on Y axis
84
+ expect(offset.toString()).toBe('["top",[0,17]]');
85
+ });
86
+
87
+ test('text-variable-anchor and text-radial-offset set', () => {
88
+ const props = {layout: {'text-variable-anchor': ['top'], 'text-radial-offset': 2}};
89
+ const layer = createSymbolLayer(props);
90
+
91
+ const offset = getTextVariableAnchorOffset(layer, null, null);
92
+ expect(offset).toBeDefined();
93
+ // Offset converted to EMs, accounting for baseline shift on Y axis
94
+ expect(offset.toString()).toBe('["top",[0,41]]');
95
+ });
96
+
97
+ test('text-variable-anchor, text-offset, and text-radial-offset set', () => {
98
+ const props = {layout: {'text-variable-anchor': ['top'], 'text-offset': [1, 1], 'text-radial-offset': 2}};
99
+ const layer = createSymbolLayer(props);
100
+
101
+ const offset = getTextVariableAnchorOffset(layer, null, null);
102
+ expect(offset).toBeDefined();
103
+ // Offset converted to EMs, accounting for baseline shift on Y axis
104
+ expect(offset.toString()).toBe('["top",[0,41]]');
105
+ });
106
+
107
+ test('text-variable-anchor and text-variable-anchor-offset set', () => {
108
+ const props = {layout: {'text-variable-anchor-offset': ['top', [1, 1]], 'text-variable-anchor': ['bottom']}};
109
+ const layer = createSymbolLayer(props);
110
+
111
+ const offset = getTextVariableAnchorOffset(layer, null, null);
112
+ expect(offset).toBeDefined();
113
+ // Offset converted to EMs, accounting for baseline shift on Y axis
114
+ expect(offset.toString()).toBe('["top",[24,17]]');
115
+ });
116
+ });
117
+
@@ -0,0 +1,163 @@
1
+ import {VariableAnchorOffsetCollection, VariableAnchorOffsetCollectionSpecification} from '@maplibre/maplibre-gl-style-spec';
2
+ import {SymbolFeature} from '../../data/bucket/symbol_bucket';
3
+ import {CanonicalTileID} from '../../source/tile_id';
4
+ import ONE_EM from '../../symbol/one_em';
5
+ import {SymbolStyleLayer} from './symbol_style_layer';
6
+
7
+ export enum TextAnchorEnum {
8
+ 'center' = 1,
9
+ 'left' = 2,
10
+ 'right' = 3,
11
+ 'top' = 4,
12
+ 'bottom' = 5,
13
+ 'top-left' = 6,
14
+ 'top-right' = 7,
15
+ 'bottom-left' = 8,
16
+ 'bottom-right' = 9
17
+ }
18
+
19
+ export type TextAnchor = keyof typeof TextAnchorEnum;
20
+
21
+ // The radial offset is to the edge of the text box
22
+ // In the horizontal direction, the edge of the text box is where glyphs start
23
+ // But in the vertical direction, the glyphs appear to "start" at the baseline
24
+ // We don't actually load baseline data, but we assume an offset of ONE_EM - 17
25
+ // (see "yOffset" in shaping.js)
26
+ const baselineOffset = 7;
27
+ export const INVALID_TEXT_OFFSET = Number.POSITIVE_INFINITY;
28
+
29
+ export function evaluateVariableOffset(anchor: TextAnchor, offset: [number, number]): [number, number] {
30
+
31
+ function fromRadialOffset(anchor: TextAnchor, radialOffset: number): [number, number] {
32
+ let x = 0, y = 0;
33
+ if (radialOffset < 0) radialOffset = 0; // Ignore negative offset.
34
+ // solve for r where r^2 + r^2 = radialOffset^2
35
+ const hypotenuse = radialOffset / Math.SQRT2;
36
+ switch (anchor) {
37
+ case 'top-right':
38
+ case 'top-left':
39
+ y = hypotenuse - baselineOffset;
40
+ break;
41
+ case 'bottom-right':
42
+ case 'bottom-left':
43
+ y = -hypotenuse + baselineOffset;
44
+ break;
45
+ case 'bottom':
46
+ y = -radialOffset + baselineOffset;
47
+ break;
48
+ case 'top':
49
+ y = radialOffset - baselineOffset;
50
+ break;
51
+ }
52
+
53
+ switch (anchor) {
54
+ case 'top-right':
55
+ case 'bottom-right':
56
+ x = -hypotenuse;
57
+ break;
58
+ case 'top-left':
59
+ case 'bottom-left':
60
+ x = hypotenuse;
61
+ break;
62
+ case 'left':
63
+ x = radialOffset;
64
+ break;
65
+ case 'right':
66
+ x = -radialOffset;
67
+ break;
68
+ }
69
+
70
+ return [x, y];
71
+ }
72
+
73
+ function fromTextOffset(anchor: TextAnchor, offsetX: number, offsetY: number): [number, number] {
74
+ let x = 0, y = 0;
75
+ // Use absolute offset values.
76
+ offsetX = Math.abs(offsetX);
77
+ offsetY = Math.abs(offsetY);
78
+
79
+ switch (anchor) {
80
+ case 'top-right':
81
+ case 'top-left':
82
+ case 'top':
83
+ y = offsetY - baselineOffset;
84
+ break;
85
+ case 'bottom-right':
86
+ case 'bottom-left':
87
+ case 'bottom':
88
+ y = -offsetY + baselineOffset;
89
+ break;
90
+ }
91
+
92
+ switch (anchor) {
93
+ case 'top-right':
94
+ case 'bottom-right':
95
+ case 'right':
96
+ x = -offsetX;
97
+ break;
98
+ case 'top-left':
99
+ case 'bottom-left':
100
+ case 'left':
101
+ x = offsetX;
102
+ break;
103
+ }
104
+
105
+ return [x, y];
106
+ }
107
+
108
+ return (offset[1] !== INVALID_TEXT_OFFSET) ? fromTextOffset(anchor, offset[0], offset[1]) : fromRadialOffset(anchor, offset[0]);
109
+ }
110
+
111
+ // Helper to support both text-variable-anchor and text-variable-anchor-offset. Offset values converted from EMs to PXs
112
+ export function getTextVariableAnchorOffset(layer: SymbolStyleLayer, feature: SymbolFeature, canonical: CanonicalTileID): VariableAnchorOffsetCollection | null {
113
+ const layout = layer.layout;
114
+ // If style specifies text-variable-anchor-offset, just return it
115
+ const variableAnchorOffset = layout.get('text-variable-anchor-offset')?.evaluate(feature, {}, canonical);
116
+
117
+ if (variableAnchorOffset) {
118
+ const sourceValues = variableAnchorOffset.values;
119
+ const destValues: VariableAnchorOffsetCollectionSpecification = [];
120
+
121
+ // Convert offsets from EM to PX, and apply baseline shift
122
+ for (let i = 0; i < sourceValues.length; i += 2) {
123
+ const anchor = destValues[i] = sourceValues[i] as TextAnchor;
124
+ const offset = (sourceValues[i + 1] as [number, number]).map(t => t * ONE_EM) as [number, number];
125
+
126
+ if (anchor.startsWith('top')) {
127
+ offset[1] -= baselineOffset;
128
+ } else if (anchor.startsWith('bottom')) {
129
+ offset[1] += baselineOffset;
130
+ }
131
+
132
+ destValues[i + 1] = offset;
133
+ }
134
+
135
+ return new VariableAnchorOffsetCollection(destValues);
136
+ }
137
+
138
+ // If style specifies text-variable-anchor, convert to the new format
139
+ const variableAnchor = layout.get('text-variable-anchor');
140
+
141
+ if (variableAnchor) {
142
+ let textOffset: [number, number];
143
+ const unevaluatedLayout = layer._unevaluatedLayout;
144
+
145
+ // The style spec says don't use `text-offset` and `text-radial-offset` together
146
+ // but doesn't actually specify what happens if you use both. We go with the radial offset.
147
+ if (unevaluatedLayout.getValue('text-radial-offset') !== undefined) {
148
+ textOffset = [layout.get('text-radial-offset').evaluate(feature, {}, canonical) * ONE_EM, INVALID_TEXT_OFFSET];
149
+ } else {
150
+ textOffset = layout.get('text-offset').evaluate(feature, {}, canonical).map(t => t * ONE_EM) as [number, number];
151
+ }
152
+
153
+ const anchorOffsets: VariableAnchorOffsetCollectionSpecification = [];
154
+
155
+ for (const anchor of variableAnchor) {
156
+ anchorOffsets.push(anchor, evaluateVariableOffset(anchor, textOffset));
157
+ }
158
+
159
+ return new VariableAnchorOffsetCollection(anchorOffsets);
160
+ }
161
+
162
+ return null;
163
+ }