@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,25 @@
1
+ import type {AlphaImage} from '../util/image';
2
+
3
+ /**
4
+ * Some metices related to a glyph
5
+ */
6
+ export type GlyphMetrics = {
7
+ width: number;
8
+ height: number;
9
+ left: number;
10
+ top: number;
11
+ advance: number;
12
+ /**
13
+ * isDoubleResolution = true for 48px textures
14
+ */
15
+ isDoubleResolution?: boolean;
16
+ };
17
+
18
+ /**
19
+ * A style glyph type
20
+ */
21
+ export type StyleGlyph = {
22
+ id: number;
23
+ bitmap: AlphaImage;
24
+ metrics: GlyphMetrics;
25
+ };
@@ -0,0 +1,188 @@
1
+ import {RGBAImage} from '../util/image';
2
+
3
+ import type {Map} from '../ui/map';
4
+
5
+ export type SpriteJSON = {[id: string]: StyleImageMetadata & {
6
+ width: number;
7
+ height: number;
8
+ x: number;
9
+ y: number;
10
+ };}
11
+
12
+ /**
13
+ * The sprite data
14
+ */
15
+ export type SpriteOnDemandStyleImage = {
16
+ width: number;
17
+ height: number;
18
+ x: number;
19
+ y: number;
20
+ context: CanvasRenderingContext2D;
21
+ };
22
+
23
+ /**
24
+ * The style's image metadata
25
+ */
26
+ export type StyleImageData = {
27
+ data: RGBAImage;
28
+ version?: number;
29
+ hasRenderCallback?: boolean;
30
+ userImage?: StyleImageInterface;
31
+ spriteData?: SpriteOnDemandStyleImage;
32
+ };
33
+
34
+ /**
35
+ * Enumeration of possible values for StyleImageMetadata.textFitWidth and textFitHeight.
36
+ */
37
+ export const enum TextFit {
38
+ /**
39
+ * The image will be resized on the specified axis to tightly fit the content rectangle to target text.
40
+ * This is the same as not being defined.
41
+ */
42
+ stretchOrShrink = 'stretchOrShrink',
43
+ /**
44
+ * The image will be resized on the specified axis to fit the content rectangle to the target text, but will not
45
+ * fall below the aspect ratio of the original content rectangle if the other axis is set to proportional.
46
+ */
47
+ stretchOnly = 'stretchOnly',
48
+ /**
49
+ * The image will be resized on the specified axis to fit the content rectangle to the target text and
50
+ * will resize the other axis to maintain the aspect ratio of the content rectangle.
51
+ */
52
+ proportional = 'proportional'
53
+ }
54
+
55
+ /**
56
+ * The style's image metadata
57
+ */
58
+ export type StyleImageMetadata = {
59
+ /**
60
+ * The ratio of pixels in the image to physical pixels on the screen
61
+ */
62
+ pixelRatio: number;
63
+ /**
64
+ * Whether the image should be interpreted as an SDF image
65
+ */
66
+ sdf: boolean;
67
+ /**
68
+ * If `icon-text-fit` is used in a layer with this image, this option defines the part(s) of the image that can be stretched horizontally.
69
+ */
70
+ stretchX?: Array<[number, number]>;
71
+ /**
72
+ * If `icon-text-fit` is used in a layer with this image, this option defines the part(s) of the image that can be stretched vertically.
73
+ */
74
+ stretchY?: Array<[number, number]>;
75
+ /**
76
+ * If `icon-text-fit` is used in a layer with this image, this option defines the part of the image that can be covered by the content in `text-field`.
77
+ */
78
+ content?: [number, number, number, number];
79
+ /**
80
+ * If `icon-text-fit` is used in a layer with this image, this option defines constraints on the horizontal scaling of the image.
81
+ */
82
+ textFitWidth?: TextFit;
83
+ /**
84
+ * If `icon-text-fit` is used in a layer with this image, this option defines constraints on the vertical scaling of the image.
85
+ */
86
+ textFitHeight?: TextFit;
87
+ };
88
+
89
+ /**
90
+ * the style's image, including data and metedata
91
+ */
92
+ export type StyleImage = StyleImageData & StyleImageMetadata;
93
+
94
+ /**
95
+ * Interface for dynamically generated style images. This is a specification for
96
+ * implementers to model: it is not an exported method or class.
97
+ *
98
+ * Images implementing this interface can be redrawn for every frame. They can be used to animate
99
+ * icons and patterns or make them respond to user input. Style images can implement a
100
+ * {@link StyleImageInterface#render} method. The method is called every frame and
101
+ * can be used to update the image.
102
+ *
103
+ * @see [Add an animated icon to the map.](https://maplibre.org/maplibre-gl-js/docs/examples/add-image-animated/)
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * let flashingSquare = {
108
+ * width: 64,
109
+ * height: 64,
110
+ * data: new Uint8Array(64 * 64 * 4),
111
+ *
112
+ * onAdd: function(map) {
113
+ * this.map = map;
114
+ * },
115
+ *
116
+ * render: function() {
117
+ * // keep repainting while the icon is on the map
118
+ * this.map.triggerRepaint();
119
+ *
120
+ * // alternate between black and white based on the time
121
+ * let value = Math.round(Date.now() / 1000) % 2 === 0 ? 255 : 0;
122
+ *
123
+ * // check if image needs to be changed
124
+ * if (value !== this.previousValue) {
125
+ * this.previousValue = value;
126
+ *
127
+ * let bytesPerPixel = 4;
128
+ * for (let x = 0; x < this.width; x++) {
129
+ * for (let y = 0; y < this.height; y++) {
130
+ * let offset = (y * this.width + x) * bytesPerPixel;
131
+ * this.data[offset + 0] = value;
132
+ * this.data[offset + 1] = value;
133
+ * this.data[offset + 2] = value;
134
+ * this.data[offset + 3] = 255;
135
+ * }
136
+ * }
137
+ *
138
+ * // return true to indicate that the image changed
139
+ * return true;
140
+ * }
141
+ * }
142
+ * }
143
+ *
144
+ * map.addImage('flashing_square', flashingSquare);
145
+ * ```
146
+ */
147
+
148
+ export interface StyleImageInterface {
149
+ width: number;
150
+ height: number;
151
+ data: Uint8Array | Uint8ClampedArray;
152
+ /**
153
+ * This method is called once before every frame where the icon will be used.
154
+ * The method can optionally update the image's `data` member with a new image.
155
+ *
156
+ * If the method updates the image it must return `true` to commit the change.
157
+ * If the method returns `false` or nothing the image is assumed to not have changed.
158
+ *
159
+ * If updates are infrequent it maybe easier to use {@link Map#updateImage} to update
160
+ * the image instead of implementing this method.
161
+ *
162
+ * @returns `true` if this method updated the image. `false` if the image was not changed.
163
+ */
164
+ render?: () => boolean;
165
+ /**
166
+ * Optional method called when the layer has been added to the Map with {@link Map#addImage}.
167
+ *
168
+ * @param map - The Map this custom layer was just added to.
169
+ */
170
+ onAdd?: (map: Map, id: string) => void;
171
+ /**
172
+ * Optional method called when the icon is removed from the map with {@link Map#removeImage}.
173
+ * This gives the image a chance to clean up resources and event listeners.
174
+ */
175
+ onRemove?: () => void;
176
+ }
177
+
178
+ export function renderStyleImage(image: StyleImage) {
179
+ const {userImage} = image;
180
+ if (userImage && userImage.render) {
181
+ const updated = userImage.render();
182
+ if (updated) {
183
+ image.data.replace(new Uint8Array(userImage.data.buffer));
184
+ return true;
185
+ }
186
+ }
187
+ return false;
188
+ }
@@ -0,0 +1,17 @@
1
+ import {StyleLayer} from '../style_layer';
2
+
3
+ import properties, {BackgroundPaintPropsPossiblyEvaluated} from './background_style_layer_properties.g';
4
+ import {Transitionable, Transitioning, PossiblyEvaluated} from '../properties';
5
+
6
+ import type {BackgroundPaintProps} from './background_style_layer_properties.g';
7
+ import type {LayerSpecification} from '@maplibre/maplibre-gl-style-spec';
8
+
9
+ export class BackgroundStyleLayer extends StyleLayer {
10
+ _transitionablePaint: Transitionable<BackgroundPaintProps>;
11
+ _transitioningPaint: Transitioning<BackgroundPaintProps>;
12
+ paint: PossiblyEvaluated<BackgroundPaintProps, BackgroundPaintPropsPossiblyEvaluated>;
13
+
14
+ constructor(layer: LayerSpecification) {
15
+ super(layer, properties);
16
+ }
17
+ }
@@ -0,0 +1,40 @@
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
+
21
+ export type BackgroundPaintProps = {
22
+ "background-color": DataConstantProperty<Color>,
23
+ "background-pattern": CrossFadedProperty<ResolvedImage>,
24
+ "background-opacity": DataConstantProperty<number>,
25
+ };
26
+
27
+ export type BackgroundPaintPropsPossiblyEvaluated = {
28
+ "background-color": Color,
29
+ "background-pattern": CrossFaded<ResolvedImage>,
30
+ "background-opacity": number,
31
+ };
32
+
33
+ let paint: Properties<BackgroundPaintProps>;
34
+ const getPaint = () => paint = paint || new Properties({
35
+ "background-color": new DataConstantProperty(styleSpec["paint_background"]["background-color"] as any as StylePropertySpecification),
36
+ "background-pattern": new CrossFadedProperty(styleSpec["paint_background"]["background-pattern"] as any as StylePropertySpecification),
37
+ "background-opacity": new DataConstantProperty(styleSpec["paint_background"]["background-opacity"] as any as StylePropertySpecification),
38
+ });
39
+
40
+ export default ({ get paint() { return getPaint() } });
@@ -0,0 +1,98 @@
1
+ import {StyleLayer} from '../style_layer';
2
+
3
+ import {CircleBucket} from '../../data/bucket/circle_bucket';
4
+ import {polygonIntersectsBufferedPoint} from '../../util/intersection_tests';
5
+ import {getMaximumPaintValue, translateDistance, translate} from '../query_utils';
6
+ import properties, {CircleLayoutPropsPossiblyEvaluated, CirclePaintPropsPossiblyEvaluated} from './circle_style_layer_properties.g';
7
+ import {Transitionable, Transitioning, Layout, PossiblyEvaluated} from '../properties';
8
+ import {mat4, vec4} from 'gl-matrix';
9
+ import Point from '@mapbox/point-geometry';
10
+ import type {FeatureState, LayerSpecification} from '@maplibre/maplibre-gl-style-spec';
11
+ import type {Transform} from '../../geo/transform';
12
+ import type {Bucket, BucketParameters} from '../../data/bucket';
13
+ import type {CircleLayoutProps, CirclePaintProps} from './circle_style_layer_properties.g';
14
+ import type {VectorTileFeature} from '@mapbox/vector-tile';
15
+
16
+ /**
17
+ * A style layer that defines a circle
18
+ */
19
+ export class CircleStyleLayer extends StyleLayer {
20
+ _unevaluatedLayout: Layout<CircleLayoutProps>;
21
+ layout: PossiblyEvaluated<CircleLayoutProps, CircleLayoutPropsPossiblyEvaluated>;
22
+
23
+ _transitionablePaint: Transitionable<CirclePaintProps>;
24
+ _transitioningPaint: Transitioning<CirclePaintProps>;
25
+ paint: PossiblyEvaluated<CirclePaintProps, CirclePaintPropsPossiblyEvaluated>;
26
+
27
+ constructor(layer: LayerSpecification) {
28
+ super(layer, properties);
29
+ }
30
+
31
+ createBucket(parameters: BucketParameters<any>) {
32
+ return new CircleBucket(parameters);
33
+ }
34
+
35
+ queryRadius(bucket: Bucket): number {
36
+ const circleBucket: CircleBucket<CircleStyleLayer> = (bucket as any);
37
+ return getMaximumPaintValue('circle-radius', this, circleBucket) +
38
+ getMaximumPaintValue('circle-stroke-width', this, circleBucket) +
39
+ translateDistance(this.paint.get('circle-translate'));
40
+ }
41
+
42
+ queryIntersectsFeature(
43
+ queryGeometry: Array<Point>,
44
+ feature: VectorTileFeature,
45
+ featureState: FeatureState,
46
+ geometry: Array<Array<Point>>,
47
+ zoom: number,
48
+ transform: Transform,
49
+ pixelsToTileUnits: number,
50
+ pixelPosMatrix: mat4
51
+ ): boolean {
52
+ const translatedPolygon = translate(queryGeometry,
53
+ this.paint.get('circle-translate'),
54
+ this.paint.get('circle-translate-anchor'),
55
+ transform.angle, pixelsToTileUnits);
56
+ const radius = this.paint.get('circle-radius').evaluate(feature, featureState);
57
+ const stroke = this.paint.get('circle-stroke-width').evaluate(feature, featureState);
58
+ const size = radius + stroke;
59
+
60
+ // For pitch-alignment: map, compare feature geometry to query geometry in the plane of the tile
61
+ // // Otherwise, compare geometry in the plane of the viewport
62
+ // // A circle with fixed scaling relative to the viewport gets larger in tile space as it moves into the distance
63
+ // // A circle with fixed scaling relative to the map gets smaller in viewport space as it moves into the distance
64
+ const alignWithMap = this.paint.get('circle-pitch-alignment') === 'map';
65
+ const transformedPolygon = alignWithMap ? translatedPolygon : projectQueryGeometry(translatedPolygon, pixelPosMatrix);
66
+ const transformedSize = alignWithMap ? size * pixelsToTileUnits : size;
67
+
68
+ for (const ring of geometry) {
69
+ for (const point of ring) {
70
+
71
+ const transformedPoint = alignWithMap ? point : projectPoint(point, pixelPosMatrix);
72
+
73
+ let adjustedSize = transformedSize;
74
+ const projectedCenter = vec4.transformMat4([] as any, [point.x, point.y, 0, 1], pixelPosMatrix);
75
+ if (this.paint.get('circle-pitch-scale') === 'viewport' && this.paint.get('circle-pitch-alignment') === 'map') {
76
+ adjustedSize *= projectedCenter[3] / transform.cameraToCenterDistance;
77
+ } else if (this.paint.get('circle-pitch-scale') === 'map' && this.paint.get('circle-pitch-alignment') === 'viewport') {
78
+ adjustedSize *= transform.cameraToCenterDistance / projectedCenter[3];
79
+ }
80
+
81
+ if (polygonIntersectsBufferedPoint(transformedPolygon, transformedPoint, adjustedSize)) return true;
82
+ }
83
+ }
84
+
85
+ return false;
86
+ }
87
+ }
88
+
89
+ function projectPoint(p: Point, pixelPosMatrix: mat4) {
90
+ const point = vec4.transformMat4([] as any, [p.x, p.y, 0, 1], pixelPosMatrix);
91
+ return new Point(point[0] / point[3], point[1] / point[3]);
92
+ }
93
+
94
+ function projectQueryGeometry(queryGeometry: Array<Point>, pixelPosMatrix: mat4) {
95
+ return queryGeometry.map((p) => {
96
+ return projectPoint(p, pixelPosMatrix);
97
+ });
98
+ }
@@ -0,0 +1,76 @@
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
+ export type CircleLayoutProps = {
21
+ "circle-sort-key": DataDrivenProperty<number>,
22
+ };
23
+
24
+ export type CircleLayoutPropsPossiblyEvaluated = {
25
+ "circle-sort-key": PossiblyEvaluatedPropertyValue<number>,
26
+ };
27
+
28
+ let layout: Properties<CircleLayoutProps>;
29
+ const getLayout = () => layout = layout || new Properties({
30
+ "circle-sort-key": new DataDrivenProperty(styleSpec["layout_circle"]["circle-sort-key"] as any as StylePropertySpecification),
31
+ });
32
+
33
+ export type CirclePaintProps = {
34
+ "circle-radius": DataDrivenProperty<number>,
35
+ "circle-color": DataDrivenProperty<Color>,
36
+ "circle-blur": DataDrivenProperty<number>,
37
+ "circle-opacity": DataDrivenProperty<number>,
38
+ "circle-translate": DataConstantProperty<[number, number]>,
39
+ "circle-translate-anchor": DataConstantProperty<"map" | "viewport">,
40
+ "circle-pitch-scale": DataConstantProperty<"map" | "viewport">,
41
+ "circle-pitch-alignment": DataConstantProperty<"map" | "viewport">,
42
+ "circle-stroke-width": DataDrivenProperty<number>,
43
+ "circle-stroke-color": DataDrivenProperty<Color>,
44
+ "circle-stroke-opacity": DataDrivenProperty<number>,
45
+ };
46
+
47
+ export type CirclePaintPropsPossiblyEvaluated = {
48
+ "circle-radius": PossiblyEvaluatedPropertyValue<number>,
49
+ "circle-color": PossiblyEvaluatedPropertyValue<Color>,
50
+ "circle-blur": PossiblyEvaluatedPropertyValue<number>,
51
+ "circle-opacity": PossiblyEvaluatedPropertyValue<number>,
52
+ "circle-translate": [number, number],
53
+ "circle-translate-anchor": "map" | "viewport",
54
+ "circle-pitch-scale": "map" | "viewport",
55
+ "circle-pitch-alignment": "map" | "viewport",
56
+ "circle-stroke-width": PossiblyEvaluatedPropertyValue<number>,
57
+ "circle-stroke-color": PossiblyEvaluatedPropertyValue<Color>,
58
+ "circle-stroke-opacity": PossiblyEvaluatedPropertyValue<number>,
59
+ };
60
+
61
+ let paint: Properties<CirclePaintProps>;
62
+ const getPaint = () => paint = paint || new Properties({
63
+ "circle-radius": new DataDrivenProperty(styleSpec["paint_circle"]["circle-radius"] as any as StylePropertySpecification),
64
+ "circle-color": new DataDrivenProperty(styleSpec["paint_circle"]["circle-color"] as any as StylePropertySpecification),
65
+ "circle-blur": new DataDrivenProperty(styleSpec["paint_circle"]["circle-blur"] as any as StylePropertySpecification),
66
+ "circle-opacity": new DataDrivenProperty(styleSpec["paint_circle"]["circle-opacity"] as any as StylePropertySpecification),
67
+ "circle-translate": new DataConstantProperty(styleSpec["paint_circle"]["circle-translate"] as any as StylePropertySpecification),
68
+ "circle-translate-anchor": new DataConstantProperty(styleSpec["paint_circle"]["circle-translate-anchor"] as any as StylePropertySpecification),
69
+ "circle-pitch-scale": new DataConstantProperty(styleSpec["paint_circle"]["circle-pitch-scale"] as any as StylePropertySpecification),
70
+ "circle-pitch-alignment": new DataConstantProperty(styleSpec["paint_circle"]["circle-pitch-alignment"] as any as StylePropertySpecification),
71
+ "circle-stroke-width": new DataDrivenProperty(styleSpec["paint_circle"]["circle-stroke-width"] as any as StylePropertySpecification),
72
+ "circle-stroke-color": new DataDrivenProperty(styleSpec["paint_circle"]["circle-stroke-color"] as any as StylePropertySpecification),
73
+ "circle-stroke-opacity": new DataDrivenProperty(styleSpec["paint_circle"]["circle-stroke-opacity"] as any as StylePropertySpecification),
74
+ });
75
+
76
+ export default ({ get paint() { return getPaint() }, get layout() { return getLayout() } });
@@ -0,0 +1,233 @@
1
+ import {StyleLayer} from '../style_layer';
2
+ import type {Map} from '../../ui/map';
3
+ import {mat4} from 'gl-matrix';
4
+ import {LayerSpecification} from '@maplibre/maplibre-gl-style-spec';
5
+
6
+ /**
7
+ * Input arguments exposed by custom render function.
8
+ */
9
+ type CustomRenderMethodInput = {
10
+ /**
11
+ * This value represents the distance from the camera to the far clipping plane.
12
+ * It is used in the calculation of the projection matrix to determine which objects are visible.
13
+ * farZ should be larger than nearZ.
14
+ */
15
+ farZ: number;
16
+ /**
17
+ * This value represents the distance from the camera to the near clipping plane.
18
+ * It is used in the calculation of the projection matrix to determine which objects are visible.
19
+ * nearZ should be smaller than farZ.
20
+ */
21
+ nearZ: number;
22
+ /** field of view of camera **/
23
+ fov: number;
24
+ /**
25
+ * model view projection matrix
26
+ * represents the matrix converting from world space to clip space
27
+ * https://learnopengl.com/Getting-started/Coordinate-Systems
28
+ * **/
29
+ modelViewProjectionMatrix: mat4;
30
+ /**
31
+ * projection matrix
32
+ * represents the matrix converting from view space to clip space
33
+ * https://learnopengl.com/Getting-started/Coordinate-Systems
34
+ */
35
+ projectionMatrix: mat4;
36
+ }
37
+
38
+ /**
39
+ * @param gl - The map's gl context.
40
+ * @param matrix - The map's camera matrix. It projects spherical mercator
41
+ * coordinates to gl clip space coordinates. The spherical mercator coordinate `[0, 0]` represents the
42
+ * top left corner of the mercator world and `[1, 1]` represents the bottom right corner. When
43
+ * the `renderingMode` is `"3d"`, the z coordinate is conformal. A box with identical x, y, and z
44
+ * lengths in mercator units would be rendered as a cube. {@link MercatorCoordinate.fromLngLat}
45
+ * can be used to project a `LngLat` to a mercator coordinate.
46
+ * @param options - Argument object with additional render inputs like camera properties.
47
+ */
48
+ type CustomRenderMethod = (gl: WebGLRenderingContext|WebGL2RenderingContext, matrix: mat4, options: CustomRenderMethodInput) => void;
49
+
50
+ /**
51
+ * Interface for custom style layers. This is a specification for
52
+ * implementers to model: it is not an exported method or class.
53
+ *
54
+ * Custom layers allow a user to render directly into the map's GL context using the map's camera.
55
+ * These layers can be added between any regular layers using {@link Map#addLayer}.
56
+ *
57
+ * Custom layers must have a unique `id` and must have the `type` of `"custom"`.
58
+ * They must implement `render` and may implement `prerender`, `onAdd` and `onRemove`.
59
+ * They can trigger rendering using {@link Map#triggerRepaint}
60
+ * and they should appropriately handle {@link MapContextEvent} with `webglcontextlost` and `webglcontextrestored`.
61
+ *
62
+ * The `renderingMode` property controls whether the layer is treated as a `"2d"` or `"3d"` map layer. Use:
63
+ *
64
+ * - `"renderingMode": "3d"` to use the depth buffer and share it with other layers
65
+ * - `"renderingMode": "2d"` to add a layer with no depth. If you need to use the depth buffer for a `"2d"` layer you must use an offscreen
66
+ * framebuffer and {@link CustomLayerInterface#prerender}
67
+ *
68
+ * @example
69
+ * Custom layer implemented as ES6 class
70
+ * ```ts
71
+ * class NullIslandLayer {
72
+ * constructor() {
73
+ * this.id = 'null-island';
74
+ * this.type = 'custom';
75
+ * this.renderingMode = '2d';
76
+ * }
77
+ *
78
+ * onAdd(map, gl) {
79
+ * const vertexSource = `
80
+ * uniform mat4 u_matrix;
81
+ * void main() {
82
+ * gl_Position = u_matrix * vec4(0.5, 0.5, 0.0, 1.0);
83
+ * gl_PointSize = 20.0;
84
+ * }`;
85
+ *
86
+ * const fragmentSource = `
87
+ * void main() {
88
+ * fragColor = vec4(1.0, 0.0, 0.0, 1.0);
89
+ * }`;
90
+ *
91
+ * const vertexShader = gl.createShader(gl.VERTEX_SHADER);
92
+ * gl.shaderSource(vertexShader, vertexSource);
93
+ * gl.compileShader(vertexShader);
94
+ * const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
95
+ * gl.shaderSource(fragmentShader, fragmentSource);
96
+ * gl.compileShader(fragmentShader);
97
+ *
98
+ * this.program = gl.createProgram();
99
+ * gl.attachShader(this.program, vertexShader);
100
+ * gl.attachShader(this.program, fragmentShader);
101
+ * gl.linkProgram(this.program);
102
+ * }
103
+ *
104
+ * render(gl, matrix) {
105
+ * gl.useProgram(this.program);
106
+ * gl.uniformMatrix4fv(gl.getUniformLocation(this.program, "u_matrix"), false, matrix);
107
+ * gl.drawArrays(gl.POINTS, 0, 1);
108
+ * }
109
+ * }
110
+ *
111
+ * map.on('load', () => {
112
+ * map.addLayer(new NullIslandLayer());
113
+ * });
114
+ * ```
115
+ */
116
+ export interface CustomLayerInterface {
117
+ /**
118
+ * A unique layer id.
119
+ */
120
+ id: string;
121
+ /**
122
+ * The layer's type. Must be `"custom"`.
123
+ */
124
+ type: 'custom';
125
+ /**
126
+ * Either `"2d"` or `"3d"`. Defaults to `"2d"`.
127
+ */
128
+ renderingMode?: '2d' | '3d';
129
+ /**
130
+ * Called during a render frame allowing the layer to draw into the GL context.
131
+ *
132
+ * The layer can assume blending and depth state is set to allow the layer to properly
133
+ * blend and clip other layers. The layer cannot make any other assumptions about the
134
+ * current GL state.
135
+ *
136
+ * If the layer needs to render to a texture, it should implement the `prerender` method
137
+ * to do this and only use the `render` method for drawing directly into the main framebuffer.
138
+ *
139
+ * The blend function is set to `gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA)`. This expects
140
+ * colors to be provided in premultiplied alpha form where the `r`, `g` and `b` values are already
141
+ * multiplied by the `a` value. If you are unable to provide colors in premultiplied form you
142
+ * may want to change the blend function to
143
+ * `gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA)`.
144
+ */
145
+ render: CustomRenderMethod;
146
+ /**
147
+ * Optional method called during a render frame to allow a layer to prepare resources or render into a texture.
148
+ *
149
+ * The layer cannot make any assumptions about the current GL state and must bind a framebuffer before rendering.
150
+ */
151
+ prerender?: CustomRenderMethod;
152
+ /**
153
+ * Optional method called when the layer has been added to the Map with {@link Map#addLayer}. This
154
+ * gives the layer a chance to initialize gl resources and register event listeners.
155
+ *
156
+ * @param map - The Map this custom layer was just added to.
157
+ * @param gl - The gl context for the map.
158
+ */
159
+ onAdd?(map: Map, gl: WebGLRenderingContext | WebGL2RenderingContext): void;
160
+ /**
161
+ * Optional method called when the layer has been removed from the Map with {@link Map#removeLayer}. This
162
+ * gives the layer a chance to clean up gl resources and event listeners.
163
+ *
164
+ * @param map - The Map this custom layer was just added to.
165
+ * @param gl - The gl context for the map.
166
+ */
167
+ onRemove?(map: Map, gl: WebGLRenderingContext | WebGL2RenderingContext): void;
168
+ }
169
+
170
+ export function validateCustomStyleLayer(layerObject: CustomLayerInterface) {
171
+ const errors = [];
172
+ const id = layerObject.id;
173
+
174
+ if (id === undefined) {
175
+ errors.push({
176
+ message: `layers.${id}: missing required property "id"`
177
+ });
178
+ }
179
+
180
+ if (layerObject.render === undefined) {
181
+ errors.push({
182
+ message: `layers.${id}: missing required method "render"`
183
+ });
184
+ }
185
+
186
+ if (layerObject.renderingMode &&
187
+ layerObject.renderingMode !== '2d' &&
188
+ layerObject.renderingMode !== '3d') {
189
+ errors.push({
190
+ message: `layers.${id}: property "renderingMode" must be either "2d" or "3d"`
191
+ });
192
+ }
193
+
194
+ return errors;
195
+ }
196
+
197
+ export class CustomStyleLayer extends StyleLayer {
198
+
199
+ implementation: CustomLayerInterface;
200
+
201
+ constructor(implementation: CustomLayerInterface) {
202
+ super(implementation, {});
203
+ this.implementation = implementation;
204
+ }
205
+
206
+ is3D() {
207
+ return this.implementation.renderingMode === '3d';
208
+ }
209
+
210
+ hasOffscreenPass() {
211
+ return this.implementation.prerender !== undefined;
212
+ }
213
+
214
+ recalculate() {}
215
+ updateTransitions() {}
216
+ hasTransition() { return false; }
217
+
218
+ serialize(): LayerSpecification {
219
+ throw new Error('Custom layers cannot be serialized');
220
+ }
221
+
222
+ onAdd = (map: Map) => {
223
+ if (this.implementation.onAdd) {
224
+ this.implementation.onAdd(map, map.painter.context.gl);
225
+ }
226
+ };
227
+
228
+ onRemove = (map: Map) => {
229
+ if (this.implementation.onRemove) {
230
+ this.implementation.onRemove(map, map.painter.context.gl);
231
+ }
232
+ };
233
+ }