maplibre-gl 3.1.0 → 3.2.0-pre.2

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 (338) hide show
  1. package/README.md +7 -7
  2. package/build/generate-doc-images.ts +73 -0
  3. package/build/generate-docs.ts +100 -0
  4. package/build/generate-struct-arrays.ts +9 -12
  5. package/dist/maplibre-gl-csp-worker.js +1 -1
  6. package/dist/maplibre-gl-csp-worker.js.map +1 -1
  7. package/dist/maplibre-gl-csp.js +1 -1
  8. package/dist/maplibre-gl-csp.js.map +1 -1
  9. package/dist/maplibre-gl-dev.js +3303 -3398
  10. package/dist/maplibre-gl-dev.js.map +1 -1
  11. package/dist/maplibre-gl.d.ts +3899 -3531
  12. package/dist/maplibre-gl.js +3 -3
  13. package/dist/maplibre-gl.js.map +1 -1
  14. package/package.json +28 -25
  15. package/src/data/array_types.g.ts +14 -48
  16. package/src/data/bucket/circle_bucket.ts +11 -14
  17. package/src/data/bucket/fill_bucket.test.ts +6 -6
  18. package/src/data/bucket/fill_bucket.ts +10 -12
  19. package/src/data/bucket/fill_extrusion_bucket.ts +11 -13
  20. package/src/data/bucket/heatmap_bucket.ts +3 -6
  21. package/src/data/bucket/line_attributes.ts +1 -2
  22. package/src/data/bucket/line_attributes_ext.ts +1 -2
  23. package/src/data/bucket/line_bucket.test.ts +5 -5
  24. package/src/data/bucket/line_bucket.ts +18 -21
  25. package/src/data/bucket/pattern_attributes.ts +1 -3
  26. package/src/data/bucket/pattern_bucket_features.ts +3 -3
  27. package/src/data/bucket/symbol_bucket.test.ts +5 -5
  28. package/src/data/bucket/symbol_bucket.ts +12 -15
  29. package/src/data/bucket.ts +7 -11
  30. package/src/data/dem_data.test.ts +1 -1
  31. package/src/data/dem_data.ts +1 -1
  32. package/src/data/evaluation_feature.ts +4 -5
  33. package/src/data/extent.ts +1 -4
  34. package/src/data/feature_index.ts +14 -13
  35. package/src/data/feature_position_map.test.ts +4 -4
  36. package/src/data/feature_position_map.ts +1 -1
  37. package/src/data/index_array_type.ts +0 -1
  38. package/src/data/load_geometry.test.ts +1 -1
  39. package/src/data/load_geometry.ts +3 -4
  40. package/src/data/program_configuration.ts +6 -11
  41. package/src/data/segment.ts +9 -6
  42. package/src/geo/edge_insets.test.ts +1 -1
  43. package/src/geo/edge_insets.ts +36 -26
  44. package/src/geo/lng_lat.test.ts +1 -1
  45. package/src/geo/lng_lat.ts +61 -44
  46. package/src/geo/lng_lat_bounds.test.ts +2 -2
  47. package/src/geo/lng_lat_bounds.ts +88 -68
  48. package/src/geo/mercator_coordinate.test.ts +2 -2
  49. package/src/geo/mercator_coordinate.ts +34 -27
  50. package/src/geo/transform.test.ts +3 -3
  51. package/src/geo/transform.ts +58 -79
  52. package/src/gl/color_mode.ts +1 -3
  53. package/src/gl/context.ts +12 -11
  54. package/src/gl/cull_face_mode.ts +1 -3
  55. package/src/gl/depth_mode.ts +1 -3
  56. package/src/gl/framebuffer.ts +5 -4
  57. package/src/gl/index_buffer.ts +5 -4
  58. package/src/gl/render_pool.test.ts +2 -2
  59. package/src/gl/render_pool.ts +5 -5
  60. package/src/gl/state.test.ts +1 -1
  61. package/src/gl/stencil_mode.ts +1 -3
  62. package/src/gl/value.ts +1 -1
  63. package/src/gl/vertex_buffer.test.ts +2 -2
  64. package/src/gl/vertex_buffer.ts +8 -14
  65. package/src/index.test.ts +2 -2
  66. package/src/index.ts +121 -113
  67. package/src/render/draw_background.ts +7 -9
  68. package/src/render/draw_circle.ts +13 -15
  69. package/src/render/draw_collision_debug.ts +11 -13
  70. package/src/render/draw_custom.ts +6 -8
  71. package/src/render/draw_debug.test.ts +4 -4
  72. package/src/render/draw_debug.ts +8 -10
  73. package/src/render/draw_fill.test.ts +13 -13
  74. package/src/render/draw_fill.ts +9 -11
  75. package/src/render/draw_fill_extrusion.ts +10 -12
  76. package/src/render/draw_heatmap.ts +12 -14
  77. package/src/render/draw_hillshade.ts +10 -12
  78. package/src/render/draw_line.ts +9 -9
  79. package/src/render/draw_raster.ts +9 -11
  80. package/src/render/draw_symbol.test.ts +16 -16
  81. package/src/render/draw_symbol.ts +15 -16
  82. package/src/render/draw_terrain.ts +11 -11
  83. package/src/render/glyph_atlas.ts +10 -1
  84. package/src/render/glyph_manager.test.ts +3 -3
  85. package/src/render/glyph_manager.ts +7 -7
  86. package/src/render/image_atlas.ts +6 -3
  87. package/src/render/image_manager.ts +3 -5
  88. package/src/render/line_atlas.test.ts +1 -1
  89. package/src/render/line_atlas.ts +19 -14
  90. package/src/render/painter.ts +85 -65
  91. package/src/render/program/background_program.ts +2 -2
  92. package/src/render/program/circle_program.ts +5 -5
  93. package/src/render/program/clipping_mask_program.ts +1 -1
  94. package/src/render/program/collision_program.ts +4 -4
  95. package/src/render/program/debug_program.ts +1 -1
  96. package/src/render/program/fill_extrusion_program.ts +3 -3
  97. package/src/render/program/fill_program.ts +3 -3
  98. package/src/render/program/heatmap_program.ts +5 -5
  99. package/src/render/program/hillshade_program.ts +7 -7
  100. package/src/render/program/line_program.ts +6 -6
  101. package/src/render/program/pattern.ts +3 -3
  102. package/src/render/program/raster_program.ts +2 -2
  103. package/src/render/program/symbol_program.ts +2 -2
  104. package/src/render/program/terrain_program.ts +1 -1
  105. package/src/render/program.ts +18 -16
  106. package/src/render/render_to_texture.test.ts +15 -15
  107. package/src/render/render_to_texture.ts +10 -10
  108. package/src/render/terrain.test.ts +38 -7
  109. package/src/render/terrain.ts +103 -67
  110. package/src/render/texture.ts +5 -4
  111. package/src/render/uniform_binding.test.ts +1 -1
  112. package/src/render/uniform_binding.ts +7 -1
  113. package/src/render/update_pattern_positions_in_program.ts +5 -5
  114. package/src/render/vertex_array_object.ts +9 -8
  115. package/src/shaders/encode_attribute.ts +0 -2
  116. package/src/shaders/shaders.ts +1 -3
  117. package/src/source/canvas_source.test.ts +6 -6
  118. package/src/source/canvas_source.ts +46 -60
  119. package/src/source/geojson_source.test.ts +5 -5
  120. package/src/source/geojson_source.ts +75 -59
  121. package/src/source/geojson_source_diff.ts +39 -2
  122. package/src/source/geojson_worker_source.test.ts +3 -3
  123. package/src/source/geojson_worker_source.ts +20 -26
  124. package/src/source/geojson_wrapper.test.ts +3 -3
  125. package/src/source/geojson_wrapper.ts +2 -4
  126. package/src/source/image_source.test.ts +9 -8
  127. package/src/source/image_source.ts +49 -35
  128. package/src/source/load_tilejson.ts +2 -2
  129. package/src/source/pixels_to_tile_units.ts +2 -3
  130. package/src/source/query_features.test.ts +3 -3
  131. package/src/source/query_features.ts +50 -19
  132. package/src/source/raster_dem_tile_source.test.ts +3 -3
  133. package/src/source/raster_dem_tile_source.ts +23 -10
  134. package/src/source/raster_dem_tile_worker_source.test.ts +2 -2
  135. package/src/source/raster_dem_tile_worker_source.ts +3 -5
  136. package/src/source/raster_tile_source.test.ts +3 -3
  137. package/src/source/raster_tile_source.ts +38 -11
  138. package/src/source/rtl_text_plugin.ts +4 -1
  139. package/src/source/source.ts +67 -59
  140. package/src/source/source_cache.test.ts +7 -7
  141. package/src/source/source_cache.ts +17 -38
  142. package/src/source/source_state.ts +2 -5
  143. package/src/source/terrain_source_cache.test.ts +8 -8
  144. package/src/source/terrain_source_cache.ts +42 -27
  145. package/src/source/tile.test.ts +3 -3
  146. package/src/source/tile.ts +32 -38
  147. package/src/source/tile_bounds.ts +2 -4
  148. package/src/source/tile_cache.test.ts +2 -2
  149. package/src/source/tile_cache.ts +20 -30
  150. package/src/source/tile_id.ts +11 -2
  151. package/src/source/vector_tile_source.test.ts +3 -3
  152. package/src/source/vector_tile_source.ts +34 -24
  153. package/src/source/vector_tile_worker_source.test.ts +4 -4
  154. package/src/source/vector_tile_worker_source.ts +11 -23
  155. package/src/source/video_source.test.ts +5 -5
  156. package/src/source/video_source.ts +21 -28
  157. package/src/source/worker.ts +6 -8
  158. package/src/source/worker_source.ts +6 -8
  159. package/src/source/worker_tile.test.ts +5 -5
  160. package/src/source/worker_tile.ts +13 -16
  161. package/src/style/create_style_layer.ts +31 -26
  162. package/src/style/evaluation_parameters.ts +5 -4
  163. package/src/style/format_section_override.test.ts +2 -2
  164. package/src/style/format_section_override.ts +1 -1
  165. package/src/style/light.test.ts +2 -2
  166. package/src/style/light.ts +3 -5
  167. package/src/style/load_glyph_range.test.ts +1 -1
  168. package/src/style/load_glyph_range.ts +3 -3
  169. package/src/style/load_sprite.test.ts +1 -1
  170. package/src/style/load_sprite.ts +3 -3
  171. package/src/style/parse_glyph_pbf.ts +1 -1
  172. package/src/style/pauseable_placement.ts +7 -9
  173. package/src/style/properties.ts +4 -53
  174. package/src/style/query_utils.ts +3 -3
  175. package/src/style/style.test.ts +22 -19
  176. package/src/style/style.ts +118 -84
  177. package/src/style/style_glyph.ts +6 -0
  178. package/src/style/style_image.ts +39 -33
  179. package/src/style/style_layer/background_style_layer.ts +2 -4
  180. package/src/style/style_layer/circle_style_layer.ts +7 -6
  181. package/src/style/style_layer/custom_style_layer.ts +23 -48
  182. package/src/style/style_layer/fill_extrusion_style_layer.ts +4 -6
  183. package/src/style/style_layer/fill_style_layer.ts +5 -7
  184. package/src/style/style_layer/heatmap_style_layer.ts +8 -7
  185. package/src/style/style_layer/hillshade_style_layer.ts +2 -4
  186. package/src/style/style_layer/line_style_layer.ts +6 -8
  187. package/src/style/style_layer/overlap_mode.test.ts +3 -3
  188. package/src/style/style_layer/overlap_mode.ts +3 -0
  189. package/src/style/style_layer/raster_style_layer.ts +2 -4
  190. package/src/style/style_layer/symbol_style_layer.ts +6 -8
  191. package/src/style/style_layer/typed_style_layer.ts +7 -7
  192. package/src/style/style_layer.test.ts +5 -5
  193. package/src/style/style_layer.ts +7 -6
  194. package/src/style/style_layer_index.test.ts +1 -1
  195. package/src/style/style_layer_index.ts +3 -5
  196. package/src/style/zoom_history.ts +1 -3
  197. package/src/symbol/anchor.test.ts +1 -1
  198. package/src/symbol/anchor.ts +1 -3
  199. package/src/symbol/check_max_angle.test.ts +8 -2
  200. package/src/symbol/check_max_angle.ts +10 -13
  201. package/src/symbol/clip_line.test.ts +1 -1
  202. package/src/symbol/clip_line.ts +6 -9
  203. package/src/symbol/collision_feature.test.ts +2 -2
  204. package/src/symbol/collision_feature.ts +7 -12
  205. package/src/symbol/collision_index.test.ts +2 -2
  206. package/src/symbol/collision_index.ts +5 -11
  207. package/src/symbol/cross_tile_symbol_index.test.ts +2 -2
  208. package/src/symbol/cross_tile_symbol_index.ts +5 -7
  209. package/src/symbol/get_anchors.ts +2 -2
  210. package/src/symbol/grid_index.test.ts +1 -1
  211. package/src/symbol/grid_index.ts +4 -5
  212. package/src/symbol/merge_lines.test.ts +1 -1
  213. package/src/symbol/merge_lines.ts +1 -1
  214. package/src/symbol/opacity_state.ts +1 -3
  215. package/src/symbol/path_interpolator.test.ts +1 -1
  216. package/src/symbol/path_interpolator.ts +1 -3
  217. package/src/symbol/placement.ts +9 -9
  218. package/src/symbol/projection.ts +61 -34
  219. package/src/symbol/quads.ts +7 -11
  220. package/src/symbol/shaping.ts +1 -1
  221. package/src/symbol/symbol_layout.ts +9 -12
  222. package/src/symbol/symbol_size.ts +1 -1
  223. package/src/symbol/symbol_style_layer.test.ts +4 -4
  224. package/src/symbol/transform_text.ts +2 -2
  225. package/src/types/callback.ts +14 -14
  226. package/src/types/cancelable.ts +3 -0
  227. package/src/types/transferable.ts +3 -0
  228. package/src/ui/anchor.ts +4 -0
  229. package/src/ui/camera.test.ts +6 -6
  230. package/src/ui/camera.ts +392 -361
  231. package/src/ui/control/attribution_control.test.ts +1 -1
  232. package/src/ui/control/attribution_control.ts +34 -30
  233. package/src/ui/control/control.ts +14 -20
  234. package/src/ui/control/fullscreen_control.test.ts +1 -1
  235. package/src/ui/control/fullscreen_control.ts +21 -26
  236. package/src/ui/control/geolocate_control.test.ts +5 -5
  237. package/src/ui/control/geolocate_control.ts +181 -194
  238. package/src/ui/control/logo_control.ts +20 -16
  239. package/src/ui/control/navigation_control.test.ts +1 -1
  240. package/src/ui/control/navigation_control.ts +46 -42
  241. package/src/ui/control/scale_control.test.ts +1 -1
  242. package/src/ui/control/scale_control.ts +30 -21
  243. package/src/ui/control/terrain_control.test.ts +1 -1
  244. package/src/ui/control/terrain_control.ts +14 -18
  245. package/src/ui/default_locale.ts +1 -3
  246. package/src/ui/events.ts +570 -1281
  247. package/src/ui/handler/box_zoom.test.ts +2 -2
  248. package/src/ui/handler/box_zoom.ts +16 -11
  249. package/src/ui/handler/click_zoom.ts +11 -3
  250. package/src/ui/handler/cooperative_gestures.test.ts +3 -3
  251. package/src/ui/handler/dblclick_zoom.test.ts +1 -1
  252. package/src/ui/handler/drag_handler.ts +30 -22
  253. package/src/ui/handler/drag_move_state_manager.ts +1 -1
  254. package/src/ui/handler/drag_pan.test.ts +2 -2
  255. package/src/ui/handler/drag_rotate.test.ts +3 -3
  256. package/src/ui/handler/keyboard.test.ts +2 -2
  257. package/src/ui/handler/keyboard.ts +22 -13
  258. package/src/ui/handler/map_event.test.ts +2 -2
  259. package/src/ui/handler/map_event.ts +1 -1
  260. package/src/ui/handler/mouse.ts +1 -1
  261. package/src/ui/handler/mouse_rotate.test.ts +3 -3
  262. package/src/ui/handler/scroll_zoom.test.ts +3 -3
  263. package/src/ui/handler/scroll_zoom.ts +45 -52
  264. package/src/ui/handler/shim/dblclick_zoom.ts +12 -6
  265. package/src/ui/handler/shim/drag_pan.ts +34 -14
  266. package/src/ui/handler/shim/drag_rotate.ts +20 -12
  267. package/src/ui/handler/shim/two_fingers_touch.ts +24 -18
  268. package/src/ui/handler/tap_drag_zoom.test.ts +113 -0
  269. package/src/ui/handler/tap_drag_zoom.ts +18 -10
  270. package/src/ui/handler/tap_recognizer.ts +1 -1
  271. package/src/ui/handler/tap_zoom.ts +4 -3
  272. package/src/ui/handler/touch_pan.ts +3 -2
  273. package/src/ui/handler/transform-provider.ts +4 -6
  274. package/src/ui/handler/two_fingers_touch.test.ts +3 -3
  275. package/src/ui/handler/two_fingers_touch.ts +64 -47
  276. package/src/ui/handler_inertia.ts +4 -4
  277. package/src/ui/handler_manager.ts +86 -52
  278. package/src/ui/hash.test.ts +1 -1
  279. package/src/ui/hash.ts +21 -28
  280. package/src/ui/map/isMoving.test.ts +3 -3
  281. package/src/ui/map/isRotating.test.ts +3 -3
  282. package/src/ui/map/isZooming.test.ts +3 -3
  283. package/src/ui/map.test.ts +97 -8
  284. package/src/ui/map.ts +856 -702
  285. package/src/ui/map_events.test.ts +1 -1
  286. package/src/ui/marker.test.ts +35 -15
  287. package/src/ui/marker.ts +220 -141
  288. package/src/ui/popup.test.ts +2 -2
  289. package/src/ui/popup.ts +179 -147
  290. package/src/util/actor.test.ts +7 -7
  291. package/src/util/actor.ts +25 -22
  292. package/src/util/ajax.ts +37 -17
  293. package/src/util/browser.test.ts +1 -1
  294. package/src/util/browser.ts +2 -6
  295. package/src/util/classify_rings.test.ts +1 -1
  296. package/src/util/classify_rings.ts +1 -1
  297. package/src/util/color_ramp.ts +0 -2
  298. package/src/util/config.ts +6 -3
  299. package/src/util/debug.ts +0 -2
  300. package/src/util/dictionary_coder.ts +1 -4
  301. package/src/util/dispatcher.test.ts +3 -3
  302. package/src/util/dispatcher.ts +4 -9
  303. package/src/util/dom.ts +1 -1
  304. package/src/util/evented.ts +23 -18
  305. package/src/util/find_pole_of_inaccessibility.test.ts +1 -1
  306. package/src/util/find_pole_of_inaccessibility.ts +4 -5
  307. package/src/util/global_worker_pool.ts +2 -3
  308. package/src/util/image.ts +10 -4
  309. package/src/util/image_request.test.ts +3 -3
  310. package/src/util/image_request.ts +15 -14
  311. package/src/util/is_char_in_unicode_block.ts +1 -3
  312. package/src/util/offscreen_canvas_supported.ts +1 -1
  313. package/src/util/performance.ts +1 -2
  314. package/src/util/request_manager.ts +4 -0
  315. package/src/util/resolve_tokens.test.ts +1 -1
  316. package/src/util/resolve_tokens.ts +3 -6
  317. package/src/util/script_detection.ts +1 -4
  318. package/src/util/smart_wrap.ts +3 -5
  319. package/src/util/struct_array.ts +18 -14
  320. package/src/util/style.ts +2 -2
  321. package/src/util/task_queue.test.ts +1 -1
  322. package/src/util/task_queue.ts +1 -3
  323. package/src/util/test/mock_webgl.ts +6 -0
  324. package/src/util/test/util.ts +2 -2
  325. package/src/util/throttle.test.ts +1 -1
  326. package/src/util/throttle.ts +1 -2
  327. package/src/util/throttled_invoker.ts +1 -5
  328. package/src/util/transferable_grid_index.test.ts +1 -1
  329. package/src/util/transferable_grid_index.ts +1 -3
  330. package/src/util/util.test.ts +1 -14
  331. package/src/util/util.ts +44 -107
  332. package/src/util/vectortile_to_geojson.ts +13 -3
  333. package/src/util/verticalize_punctuation.ts +1 -1
  334. package/src/util/web_worker.ts +2 -2
  335. package/src/util/web_worker_transfer.ts +11 -8
  336. package/src/util/webp_supported.ts +2 -4
  337. package/src/util/worker_pool.test.ts +1 -1
  338. package/src/util/worker_pool.ts +4 -5
@@ -1,22 +1,23 @@
1
1
  import {Event, ErrorEvent, Evented} from '../util/evented';
2
2
 
3
3
  import {extend} from '../util/util';
4
- import EXTENT from '../data/extent';
4
+ import {EXTENT} from '../data/extent';
5
5
  import {ResourceType} from '../util/request_manager';
6
- import browser from '../util/browser';
6
+ import {browser} from '../util/browser';
7
7
 
8
8
  import type {Source} from './source';
9
- import type Map from '../ui/map';
10
- import type Dispatcher from '../util/dispatcher';
11
- import type Tile from './tile';
12
- import type Actor from '../util/actor';
9
+ import type {Map} from '../ui/map';
10
+ import type {Dispatcher} from '../util/dispatcher';
11
+ import type {Tile} from './tile';
12
+ import type {Actor} from '../util/actor';
13
13
  import type {Callback} from '../types/callback';
14
14
  import type {GeoJSONSourceSpecification, PromoteIdSpecification} from '@maplibre/maplibre-gl-style-spec';
15
15
  import type {GeoJSONSourceDiff} from './geojson_source_diff';
16
+ import type {Options, ClusterProperties} from 'supercluster';
16
17
 
17
18
  export type GeoJSONSourceOptions = GeoJSONSourceSpecification & {
18
- workerOptions?: any;
19
- collectResourceTiming: boolean;
19
+ workerOptions?: WorkerOptions;
20
+ collectResourceTiming?: boolean;
20
21
  }
21
22
 
22
23
  export type GeoJsonSourceOptions = {
@@ -38,23 +39,28 @@ export type WorkerOptions = {
38
39
  linemetrics?: boolean;
39
40
  generateId?: boolean;
40
41
  };
41
- superclusterOptions?: {
42
- maxZoom?: number;
43
- miniPoints?: number;
44
- extent?: number;
45
- radius?: number;
46
- log?: boolean;
47
- generateId?: boolean;
48
- };
49
- clusterProperties?: any;
42
+ superclusterOptions?: Options<any, any>;
43
+ clusterProperties?: ClusterProperties;
50
44
  fliter?: any;
51
45
  promoteId?: any;
52
46
  collectResourceTiming?: boolean;
53
47
  }
54
48
 
49
+ /**
50
+ * The cluster options to set
51
+ */
55
52
  export type SetClusterOptions = {
53
+ /**
54
+ * Whether or not to cluster
55
+ */
56
56
  cluster?: boolean;
57
+ /**
58
+ * The cluster's max zoom
59
+ */
57
60
  clusterMaxZoom?: number;
61
+ /**
62
+ * The cluster's radius
63
+ */
58
64
  clusterRadius?: number;
59
65
  }
60
66
 
@@ -62,13 +68,18 @@ export type SetClusterOptions = {
62
68
  * A source containing GeoJSON.
63
69
  * (See the [Style Specification](https://maplibre.org/maplibre-style-spec/#sources-geojson) for detailed documentation of options.)
64
70
  *
71
+ * @group Sources
72
+ *
65
73
  * @example
74
+ * ```ts
66
75
  * map.addSource('some id', {
67
76
  * type: 'geojson',
68
77
  * data: 'https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_10m_ports.geojson'
69
78
  * });
79
+ * ```
70
80
  *
71
81
  * @example
82
+ * ```ts
72
83
  * map.addSource('some id', {
73
84
  * type: 'geojson',
74
85
  * data: {
@@ -86,8 +97,10 @@ export type SetClusterOptions = {
86
97
  * }]
87
98
  * }
88
99
  * });
100
+ * ```
89
101
  *
90
102
  * @example
103
+ * ```ts
91
104
  * map.getSource('some id').setData({
92
105
  * "type": "FeatureCollection",
93
106
  * "features": [{
@@ -99,12 +112,13 @@ export type SetClusterOptions = {
99
112
  * }
100
113
  * }]
101
114
  * });
102
- * @see [Draw GeoJSON points](https://maplibre.org/maplibre-gl-js-docs/example/geojson-markers/)
103
- * @see [Add a GeoJSON line](https://maplibre.org/maplibre-gl-js-docs/example/geojson-line/)
104
- * @see [Create a heatmap from points](https://maplibre.org/maplibre-gl-js-docs/example/heatmap/)
105
- * @see [Create and style clusters](https://maplibre.org/maplibre-gl-js-docs/example/cluster/)
115
+ * ```
116
+ * @see [Draw GeoJSON points](https://maplibre.org/maplibre-gl-js/docs/examples/geojson-markers/)
117
+ * @see [Add a GeoJSON line](https://maplibre.org/maplibre-gl-js/docs/examples/geojson-line/)
118
+ * @see [Create a heatmap from points](https://maplibre.org/maplibre-gl-js/docs/examples/heatmap/)
119
+ * @see [Create and style clusters](https://maplibre.org/maplibre-gl-js/docs/examples/cluster/)
106
120
  */
107
- class GeoJSONSource extends Evented implements Source {
121
+ export class GeoJSONSource extends Evented implements Source {
108
122
  type: 'geojson';
109
123
  id: string;
110
124
  minzoom: number;
@@ -125,7 +139,7 @@ class GeoJSONSource extends Evented implements Source {
125
139
  _removed: boolean;
126
140
 
127
141
  /**
128
- * @private
142
+ * @hidden
129
143
  */
130
144
  constructor(id: string, options: GeoJSONSourceOptions, dispatcher: Dispatcher, eventedParent: Evented) {
131
145
  super();
@@ -192,9 +206,9 @@ class GeoJSONSource extends Evented implements Source {
192
206
  }
193
207
  }
194
208
 
195
- load() {
209
+ load = () => {
196
210
  this._updateWorkerData();
197
- }
211
+ };
198
212
 
199
213
  onAdd(map: Map) {
200
214
  this.map = map;
@@ -204,10 +218,10 @@ class GeoJSONSource extends Evented implements Source {
204
218
  /**
205
219
  * Sets the GeoJSON data and re-renders the map.
206
220
  *
207
- * @param {Object|string} data A GeoJSON data object or a URL to one. The latter is preferable in the case of large GeoJSON files.
208
- * @returns {GeoJSONSource} this
221
+ * @param data - A GeoJSON data object or a URL to one. The latter is preferable in the case of large GeoJSON files.
222
+ * @returns `this`
209
223
  */
210
- setData(data: GeoJSON.GeoJSON | string) {
224
+ setData(data: GeoJSON.GeoJSON | string): this {
211
225
  this._data = data;
212
226
  this._updateWorkerData();
213
227
 
@@ -226,10 +240,10 @@ class GeoJSONSource extends Evented implements Source {
226
240
  *
227
241
  * Updates are applied on a best-effort basis, updating an ID that does not exist will not result in an error.
228
242
  *
229
- * @param {GeoJSONSourceDiff} diff The changes that need to be applied.
230
- * @returns {GeoJSONSource} this
243
+ * @param diff - The changes that need to be applied.
244
+ * @returns `this`
231
245
  */
232
- updateData(diff: GeoJSONSourceDiff) {
246
+ updateData(diff: GeoJSONSourceDiff): this {
233
247
  this._updateWorkerData(diff);
234
248
 
235
249
  return this;
@@ -237,14 +251,15 @@ class GeoJSONSource extends Evented implements Source {
237
251
 
238
252
  /**
239
253
  * To disable/enable clustering on the source options
240
- * @param {SetClusterOptions} options The options to set
241
- * @returns {GeoJSONSource} this
254
+ * @param options - The options to set
255
+ * @returns `this`
242
256
  * @example
257
+ * ```ts
243
258
  * map.getSource('some id').setClusterOptions({cluster: false});
244
259
  * map.getSource('some id').setClusterOptions({cluster: false, clusterRadius: 50, clusterMaxZoom: 14});
245
- *
260
+ * ```
246
261
  */
247
- setClusterOptions(options:SetClusterOptions) {
262
+ setClusterOptions(options: SetClusterOptions): this {
248
263
  this.workerOptions.cluster = options.cluster;
249
264
  if (options) {
250
265
  if (options.clusterRadius !== undefined) this.workerOptions.superclusterOptions.radius = options.clusterRadius;
@@ -257,11 +272,11 @@ class GeoJSONSource extends Evented implements Source {
257
272
  /**
258
273
  * For clustered sources, fetches the zoom at which the given cluster expands.
259
274
  *
260
- * @param clusterId The value of the cluster's `cluster_id` property.
261
- * @param callback A callback to be called when the zoom value is retrieved (`(error, zoom) => { ... }`).
262
- * @returns {GeoJSONSource} this
275
+ * @param clusterId - The value of the cluster's `cluster_id` property.
276
+ * @param callback - A callback to be called when the zoom value is retrieved (`(error, zoom) => { ... }`).
277
+ * @returns `this`
263
278
  */
264
- getClusterExpansionZoom(clusterId: number, callback: Callback<number>) {
279
+ getClusterExpansionZoom(clusterId: number, callback: Callback<number>): this {
265
280
  this.actor.send('geojson.getClusterExpansionZoom', {clusterId, source: this.id}, callback);
266
281
  return this;
267
282
  }
@@ -269,11 +284,11 @@ class GeoJSONSource extends Evented implements Source {
269
284
  /**
270
285
  * For clustered sources, fetches the children of the given cluster on the next zoom level (as an array of GeoJSON features).
271
286
  *
272
- * @param clusterId The value of the cluster's `cluster_id` property.
273
- * @param callback A callback to be called when the features are retrieved (`(error, features) => { ... }`).
274
- * @returns {GeoJSONSource} this
287
+ * @param clusterId - The value of the cluster's `cluster_id` property.
288
+ * @param callback - A callback to be called when the features are retrieved (`(error, features) => { ... }`).
289
+ * @returns `this`
275
290
  */
276
- getClusterChildren(clusterId: number, callback: Callback<Array<GeoJSON.Feature>>) {
291
+ getClusterChildren(clusterId: number, callback: Callback<Array<GeoJSON.Feature>>): this {
277
292
  this.actor.send('geojson.getClusterChildren', {clusterId, source: this.id}, callback);
278
293
  return this;
279
294
  }
@@ -281,29 +296,31 @@ class GeoJSONSource extends Evented implements Source {
281
296
  /**
282
297
  * For clustered sources, fetches the original points that belong to the cluster (as an array of GeoJSON features).
283
298
  *
284
- * @param clusterId The value of the cluster's `cluster_id` property.
285
- * @param limit The maximum number of features to return.
286
- * @param offset The number of features to skip (e.g. for pagination).
287
- * @param callback A callback to be called when the features are retrieved (`(error, features) => { ... }`).
288
- * @returns {GeoJSONSource} this
299
+ * @param clusterId - The value of the cluster's `cluster_id` property.
300
+ * @param limit - The maximum number of features to return.
301
+ * @param offset - The number of features to skip (e.g. for pagination).
302
+ * @param callback - A callback to be called when the features are retrieved (`(error, features) => { ... }`).
303
+ * @returns `this`
289
304
  * @example
290
- * // Retrieve cluster leaves on click
305
+ * Retrieve cluster leaves on click
306
+ * ```ts
291
307
  * map.on('click', 'clusters', function(e) {
292
- * var features = map.queryRenderedFeatures(e.point, {
308
+ * let features = map.queryRenderedFeatures(e.point, {
293
309
  * layers: ['clusters']
294
310
  * });
295
311
  *
296
- * var clusterId = features[0].properties.cluster_id;
297
- * var pointCount = features[0].properties.point_count;
298
- * var clusterSource = map.getSource('clusters');
312
+ * let clusterId = features[0].properties.cluster_id;
313
+ * let pointCount = features[0].properties.point_count;
314
+ * let clusterSource = map.getSource('clusters');
299
315
  *
300
316
  * clusterSource.getClusterLeaves(clusterId, pointCount, 0, function(error, features) {
301
317
  * // Print cluster leaves in the console
302
318
  * console.log('Cluster leaves:', error, features);
303
319
  * })
304
320
  * });
321
+ * ```
305
322
  */
306
- getClusterLeaves(clusterId: number, limit: number, offset: number, callback: Callback<Array<GeoJSON.Feature>>) {
323
+ getClusterLeaves(clusterId: number, limit: number, offset: number, callback: Callback<Array<GeoJSON.Feature>>): this {
307
324
  this.actor.send('geojson.getClusterLeaves', {
308
325
  source: this.id,
309
326
  clusterId,
@@ -313,10 +330,11 @@ class GeoJSONSource extends Evented implements Source {
313
330
  return this;
314
331
  }
315
332
 
316
- /*
333
+ /**
317
334
  * Responsible for invoking WorkerSource's geojson.loadData target, which
318
335
  * handles loading the geojson data and preparing to serve it up as tiles,
319
336
  * using geojson-vt or supercluster as appropriate.
337
+ * @param diff - the diff object
320
338
  */
321
339
  _updateWorkerData(diff?: GeoJSONSourceDiff) {
322
340
  const options = extend({}, this.workerOptions);
@@ -419,16 +437,14 @@ class GeoJSONSource extends Evented implements Source {
419
437
  this.actor.send('removeSource', {type: this.type, source: this.id});
420
438
  }
421
439
 
422
- serialize() {
440
+ serialize = (): GeoJSONSourceSpecification => {
423
441
  return extend({}, this._options, {
424
442
  type: this.type,
425
443
  data: this._data
426
444
  });
427
- }
445
+ };
428
446
 
429
447
  hasTransition() {
430
448
  return false;
431
449
  }
432
450
  }
433
-
434
- export default GeoJSONSource;
@@ -1,16 +1,53 @@
1
+ /**
2
+ * A way to indentify a feature, either by string or by number
3
+ */
1
4
  export type GeoJSONFeatureId = number | string;
2
- export interface GeoJSONSourceDiff {
5
+
6
+ /**
7
+ * The geojson source diff object
8
+ */
9
+ export type GeoJSONSourceDiff = {
10
+ /**
11
+ * When set to `true` it will remove all features
12
+ */
3
13
  removeAll?: boolean;
14
+ /**
15
+ * An array of features IDs to remove
16
+ */
4
17
  remove?: Array<GeoJSONFeatureId>;
18
+ /**
19
+ * An array of features to add
20
+ */
5
21
  add?: Array<GeoJSON.Feature>;
22
+ /**
23
+ * An array of update objects
24
+ */
6
25
  update?: Array<GeoJSONFeatureDiff>;
7
26
  }
8
27
 
9
- export interface GeoJSONFeatureDiff {
28
+ /**
29
+ * A geojson feature diff object
30
+ */
31
+ export type GeoJSONFeatureDiff = {
32
+ /**
33
+ * The feature ID
34
+ */
10
35
  id: GeoJSONFeatureId;
36
+ /**
37
+ * If it's a new geometry, place it here
38
+ */
11
39
  newGeometry?: GeoJSON.Geometry;
40
+ /**
41
+ * Setting to `true` will remove all preperties
42
+ */
12
43
  removeAllProperties?: boolean;
44
+ /**
45
+ * The properties keys to remove
46
+ */
13
47
  removeProperties?: Array<string>;
48
+ /**
49
+ * The properties to add or update along side their values
50
+ */
14
51
  addOrUpdateProperties?: Array<{key: string; value: any}>;
15
52
  }
16
53
 
@@ -1,9 +1,9 @@
1
- import GeoJSONWorkerSource, {LoadGeoJSONParameters} from './geojson_worker_source';
2
- import StyleLayerIndex from '../style/style_layer_index';
1
+ import {GeoJSONWorkerSource, LoadGeoJSONParameters} from './geojson_worker_source';
2
+ import {StyleLayerIndex} from '../style/style_layer_index';
3
3
  import {OverscaledTileID} from './tile_id';
4
4
  import perf from '../util/performance';
5
5
  import {LayerSpecification} from '@maplibre/maplibre-gl-style-spec';
6
- import Actor from '../util/actor';
6
+ import {Actor} from '../util/actor';
7
7
  import {WorkerTileParameters} from './worker_source';
8
8
  import {setPerformance} from '../util/test/util';
9
9
  import {type FakeServer, fakeServer} from 'nise';
@@ -2,11 +2,11 @@ import {getJSON} from '../util/ajax';
2
2
 
3
3
  import {RequestPerformance} from '../util/performance';
4
4
  import rewind from '@mapbox/geojson-rewind';
5
- import GeoJSONWrapper from './geojson_wrapper';
5
+ import {GeoJSONWrapper} from './geojson_wrapper';
6
6
  import vtpbf from 'vt-pbf';
7
- import Supercluster from 'supercluster';
7
+ import Supercluster, {type Options, type ClusterProperties} from 'supercluster';
8
8
  import geojsonvt from 'geojson-vt';
9
- import VectorTileWorkerSource from './vector_tile_worker_source';
9
+ import {VectorTileWorkerSource} from './vector_tile_worker_source';
10
10
  import {createExpression} from '@maplibre/maplibre-gl-style-spec';
11
11
 
12
12
  import type {
@@ -14,8 +14,8 @@ import type {
14
14
  WorkerTileCallback,
15
15
  } from '../source/worker_source';
16
16
 
17
- import type Actor from '../util/actor';
18
- import type StyleLayerIndex from '../style/style_layer_index';
17
+ import type {Actor} from '../util/actor';
18
+ import type {StyleLayerIndex} from '../style/style_layer_index';
19
19
 
20
20
  import type {LoadVectorDataCallback} from './vector_tile_worker_source';
21
21
  import type {RequestParameters, ResponseCallback} from '../util/ajax';
@@ -25,13 +25,16 @@ import {isUpdateableGeoJSON, type GeoJSONSourceDiff, applySourceDiff, toUpdateab
25
25
 
26
26
  export type LoadGeoJSONParameters = {
27
27
  request?: RequestParameters;
28
+ /**
29
+ * Literal GeoJSON data. Must be provided if `request.url` is not.
30
+ */
28
31
  data?: string;
29
32
  dataDiff?: GeoJSONSourceDiff;
30
33
  source: string;
31
34
  cluster: boolean;
32
- superclusterOptions?: any;
35
+ superclusterOptions?: Options<any, any>;
33
36
  geojsonVtOptions?: any;
34
- clusterProperties?: any;
37
+ clusterProperties?: ClusterProperties;
35
38
  filter?: Array<unknown>;
36
39
  promoteId?: string;
37
40
  };
@@ -82,10 +85,8 @@ function loadGeoJSONTile(params: WorkerTileParameters, callback: LoadVectorDataC
82
85
  * representation. To do so, create it with
83
86
  * `new GeoJSONWorkerSource(actor, layerIndex, customLoadGeoJSONFunction)`.
84
87
  * For a full example, see [mapbox-gl-topojson](https://github.com/developmentseed/mapbox-gl-topojson).
85
- *
86
- * @private
87
88
  */
88
- class GeoJSONWorkerSource extends VectorTileWorkerSource {
89
+ export class GeoJSONWorkerSource extends VectorTileWorkerSource {
89
90
  _pendingCallback: Callback<{
90
91
  resourceTiming?: {[_: string]: Array<PerformanceResourceTiming>};
91
92
  abandoned?: boolean;
@@ -95,10 +96,9 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource {
95
96
  _dataUpdateable = new Map<GeoJSONFeatureId, GeoJSON.Feature>();
96
97
 
97
98
  /**
98
- * @param [loadGeoJSON] Optional method for custom loading/parsing of
99
+ * @param loadGeoJSON - Optional method for custom loading/parsing of
99
100
  * GeoJSON based on parameters passed from the main-thread Source.
100
101
  * See {@link GeoJSONWorkerSource#loadGeoJSON}.
101
- * @private
102
102
  */
103
103
  constructor(actor: Actor, layerIndex: StyleLayerIndex, availableImages: Array<string>, loadGeoJSON?: LoadGeoJSON | null) {
104
104
  super(actor, layerIndex, availableImages, loadGeoJSONTile);
@@ -119,9 +119,8 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource {
119
119
  * When a `loadData` request comes in while a previous one is being processed,
120
120
  * the previous one is aborted.
121
121
  *
122
- * @param params
123
- * @param callback
124
- * @private
122
+ * @param params - the parameters
123
+ * @param callback - the callback for completion or error
125
124
  */
126
125
  loadData(params: LoadGeoJSONParameters, callback: Callback<{
127
126
  resourceTiming?: {[_: string]: Array<PerformanceResourceTiming>};
@@ -188,9 +187,8 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource {
188
187
  * If the tile is loaded, uses the implementation in VectorTileWorkerSource.
189
188
  * Otherwise, such as after a setData() call, we load the tile fresh.
190
189
  *
191
- * @param params
192
- * @param params.uid The UID for this tile.
193
- * @private
190
+ * @param params - the parameters
191
+ * @param callback - the callback for completion or error
194
192
  */
195
193
  reloadTile(params: WorkerTileParameters, callback: WorkerTileCallback) {
196
194
  const loaded = this.loaded,
@@ -210,11 +208,9 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource {
210
208
  * GeoJSON is loaded and parsed from `params.url` if it exists, or else
211
209
  * expected as a literal (string or object) `params.data`.
212
210
  *
213
- * @param params
214
- * @param [params.url] A URL to the remote GeoJSON data.
215
- * @param [params.data] Literal GeoJSON data. Must be provided if `params.url` is not.
216
- * @returns {Cancelable} A Cancelable object.
217
- * @private
211
+ * @param params - the parameters
212
+ * @param callback - the callback for completion or error
213
+ * @returns A Cancelable object.
218
214
  */
219
215
  loadGeoJSON = (params: LoadGeoJSONParameters, callback: ResponseCallback<any>): Cancelable => {
220
216
  const {promoteId} = params;
@@ -297,7 +293,7 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource {
297
293
  }
298
294
  }
299
295
 
300
- function getSuperclusterOptions({superclusterOptions, clusterProperties}: { superclusterOptions?: any; clusterProperties?: any}) {
296
+ function getSuperclusterOptions({superclusterOptions, clusterProperties}: LoadGeoJSONParameters) {
301
297
  if (!clusterProperties || !superclusterOptions) return superclusterOptions;
302
298
 
303
299
  const mapExpressions = {};
@@ -335,5 +331,3 @@ function getSuperclusterOptions({superclusterOptions, clusterProperties}: { supe
335
331
 
336
332
  return superclusterOptions;
337
333
  }
338
-
339
- export default GeoJSONWorkerSource;
@@ -1,4 +1,4 @@
1
- import Wrapper from './geojson_wrapper';
1
+ import {GeoJSONWrapper} from './geojson_wrapper';
2
2
 
3
3
  describe('geojsonwrapper', () => {
4
4
  test('linestring', () => {
@@ -8,7 +8,7 @@ describe('geojsonwrapper', () => {
8
8
  tags: {hello: 'world'}
9
9
  }];
10
10
 
11
- const wrap = new Wrapper(features as any);
11
+ const wrap = new GeoJSONWrapper(features as any);
12
12
  const feature = wrap.feature(0);
13
13
 
14
14
  expect(feature).toBeTruthy();
@@ -25,7 +25,7 @@ describe('geojsonwrapper', () => {
25
25
  tags: {}
26
26
  }];
27
27
 
28
- const wrap = new Wrapper(features as any);
28
+ const wrap = new GeoJSONWrapper(features as any);
29
29
  const feature = wrap.feature(0);
30
30
  expect(feature.loadGeometry()).toEqual([[{x: 0, y: 1}]]);
31
31
  });
@@ -3,7 +3,7 @@ import Point from '@mapbox/point-geometry';
3
3
  import mvt from '@mapbox/vector-tile';
4
4
  import type {VectorTileFeature, VectorTileLayer, VectorTile} from '@mapbox/vector-tile';
5
5
  const toGeoJSON = mvt.VectorTileFeature.prototype.toGeoJSON;
6
- import EXTENT from '../data/extent';
6
+ import {EXTENT} from '../data/extent';
7
7
 
8
8
  // The feature type used by geojson-vt and supercluster. Should be extracted to
9
9
  // global type and used in module definitions for those two modules.
@@ -70,7 +70,7 @@ class FeatureWrapper implements VectorTileFeature {
70
70
  }
71
71
  }
72
72
 
73
- class GeoJSONWrapper implements VectorTile, VectorTileLayer {
73
+ export class GeoJSONWrapper implements VectorTile, VectorTileLayer {
74
74
  layers: {[_: string]: VectorTileLayer};
75
75
  name: string;
76
76
  extent: number;
@@ -89,5 +89,3 @@ class GeoJSONWrapper implements VectorTile, VectorTileLayer {
89
89
  return new FeatureWrapper(this._features[i]);
90
90
  }
91
91
  }
92
-
93
- export default GeoJSONWrapper;
@@ -1,16 +1,17 @@
1
- import ImageSource from './image_source';
1
+ import {ImageSource} from './image_source';
2
2
  import {Evented} from '../util/evented';
3
- import Transform from '../geo/transform';
3
+ import {Transform} from '../geo/transform';
4
4
  import {extend} from '../util/util';
5
5
  import {fakeXhr} from 'nise';
6
6
  import {RequestManager} from '../util/request_manager';
7
- import Dispatcher from '../util/dispatcher';
7
+ import {Dispatcher} from '../util/dispatcher';
8
8
  import {stubAjaxGetImage} from '../util/test/util';
9
- import Tile from './tile';
9
+ import {Tile} from './tile';
10
10
  import {OverscaledTileID} from './tile_id';
11
- import VertexBuffer from '../gl/vertex_buffer';
12
- import SegmentVector from '../data/segment';
13
- import Texture from '../render/texture';
11
+ import {VertexBuffer} from '../gl/vertex_buffer';
12
+ import {SegmentVector} from '../data/segment';
13
+ import {Texture} from '../render/texture';
14
+ import type {ImageSourceSpecification} from '@maplibre/maplibre-gl-style-spec';
14
15
 
15
16
  function createSource(options) {
16
17
  options = extend({
@@ -177,7 +178,7 @@ describe('ImageSource', () => {
177
178
  test('serialize url and coordinates', () => {
178
179
  const source = createSource({url: '/image.png'});
179
180
 
180
- const serialized = source.serialize();
181
+ const serialized = source.serialize() as ImageSourceSpecification;
181
182
  expect(serialized.type).toBe('image');
182
183
  expect(serialized.url).toBe('/image.png');
183
184
  expect(serialized.coordinates).toEqual([[0, 0], [1, 0], [1, 1], [0, 1]]);