mapbox-gl 1.13.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 (460) hide show
  1. package/.flowconfig +61 -0
  2. package/CHANGELOG.md +2485 -0
  3. package/LICENSE.txt +84 -0
  4. package/README.md +34 -0
  5. package/build/banner.js +4 -0
  6. package/build/check-bundle-size.js +140 -0
  7. package/build/diff-tarball.js +18 -0
  8. package/build/generate-access-token-script.js +11 -0
  9. package/build/generate-flow-typed-style-spec.js +188 -0
  10. package/build/generate-release-list.js +21 -0
  11. package/build/generate-struct-arrays.js +243 -0
  12. package/build/generate-style-code.js +159 -0
  13. package/build/mapbox-gl.js.flow +3 -0
  14. package/build/print-release-url.js +6 -0
  15. package/build/rollup_plugin_minify_style_spec.js +24 -0
  16. package/build/rollup_plugins.js +80 -0
  17. package/build/run-node +3 -0
  18. package/build/run-tap +8 -0
  19. package/build/test/build-tape.js +19 -0
  20. package/dist/mapbox-gl-csp-worker.js +2 -0
  21. package/dist/mapbox-gl-csp-worker.js.map +1 -0
  22. package/dist/mapbox-gl-csp.js +2 -0
  23. package/dist/mapbox-gl-csp.js.map +1 -0
  24. package/dist/mapbox-gl-dev.js +65889 -0
  25. package/dist/mapbox-gl-dev.js.flow +3 -0
  26. package/dist/mapbox-gl-unminified.js +42889 -0
  27. package/dist/mapbox-gl-unminified.js.map +1 -0
  28. package/dist/mapbox-gl.css +1 -0
  29. package/dist/mapbox-gl.js +42 -0
  30. package/dist/mapbox-gl.js.flow +3 -0
  31. package/dist/mapbox-gl.js.map +1 -0
  32. package/dist/style-spec/index.es.js +15032 -0
  33. package/dist/style-spec/index.es.js.map +1 -0
  34. package/dist/style-spec/index.js +15058 -0
  35. package/dist/style-spec/index.js.map +1 -0
  36. package/flow-typed/gl.js +5 -0
  37. package/flow-typed/jsdom.js +18 -0
  38. package/flow-typed/mapbox-gl-supported.js +9 -0
  39. package/flow-typed/mapbox-unitbezier.js +14 -0
  40. package/flow-typed/offscreen-canvas.js +9 -0
  41. package/flow-typed/pbf.js +25 -0
  42. package/flow-typed/point-geometry.js +44 -0
  43. package/flow-typed/potpack.js +12 -0
  44. package/flow-typed/sinon.js +28 -0
  45. package/flow-typed/vector-tile.js +41 -0
  46. package/package.json +173 -0
  47. package/src/css/mapbox-gl.css +812 -0
  48. package/src/css/svg/mapboxgl-ctrl-attrib.svg +3 -0
  49. package/src/css/svg/mapboxgl-ctrl-compass.svg +4 -0
  50. package/src/css/svg/mapboxgl-ctrl-fullscreen.svg +3 -0
  51. package/src/css/svg/mapboxgl-ctrl-geolocate.svg +5 -0
  52. package/src/css/svg/mapboxgl-ctrl-logo.svg +20 -0
  53. package/src/css/svg/mapboxgl-ctrl-shrink.svg +3 -0
  54. package/src/css/svg/mapboxgl-ctrl-zoom-in.svg +3 -0
  55. package/src/css/svg/mapboxgl-ctrl-zoom-out.svg +3 -0
  56. package/src/data/array_types.js +1135 -0
  57. package/src/data/bucket/circle_attributes.js +9 -0
  58. package/src/data/bucket/circle_bucket.js +201 -0
  59. package/src/data/bucket/fill_attributes.js +9 -0
  60. package/src/data/bucket/fill_bucket.js +229 -0
  61. package/src/data/bucket/fill_extrusion_attributes.js +10 -0
  62. package/src/data/bucket/fill_extrusion_bucket.js +283 -0
  63. package/src/data/bucket/heatmap_bucket.js +17 -0
  64. package/src/data/bucket/line_attributes.js +10 -0
  65. package/src/data/bucket/line_attributes_ext.js +10 -0
  66. package/src/data/bucket/line_bucket.js +594 -0
  67. package/src/data/bucket/pattern_attributes.js +12 -0
  68. package/src/data/bucket/pattern_bucket_features.js +60 -0
  69. package/src/data/bucket/symbol_attributes.js +117 -0
  70. package/src/data/bucket/symbol_bucket.js +937 -0
  71. package/src/data/bucket.js +123 -0
  72. package/src/data/dem_data.js +125 -0
  73. package/src/data/evaluation_feature.js +25 -0
  74. package/src/data/extent.js +18 -0
  75. package/src/data/feature_index.js +322 -0
  76. package/src/data/feature_position_map.js +131 -0
  77. package/src/data/index_array_type.js +16 -0
  78. package/src/data/load_geometry.js +46 -0
  79. package/src/data/pos_attributes.js +6 -0
  80. package/src/data/program_configuration.js +708 -0
  81. package/src/data/raster_bounds_attributes.js +7 -0
  82. package/src/data/segment.js +76 -0
  83. package/src/geo/edge_insets.js +102 -0
  84. package/src/geo/lng_lat.js +168 -0
  85. package/src/geo/lng_lat_bounds.js +276 -0
  86. package/src/geo/mercator_coordinate.js +150 -0
  87. package/src/geo/transform.js +834 -0
  88. package/src/gl/color_mode.js +34 -0
  89. package/src/gl/context.js +302 -0
  90. package/src/gl/cull_face_mode.js +26 -0
  91. package/src/gl/depth_mode.js +29 -0
  92. package/src/gl/framebuffer.js +44 -0
  93. package/src/gl/index_buffer.js +55 -0
  94. package/src/gl/stencil_mode.js +30 -0
  95. package/src/gl/types.js +84 -0
  96. package/src/gl/value.js +520 -0
  97. package/src/gl/vertex_buffer.js +119 -0
  98. package/src/index.js +230 -0
  99. package/src/render/draw_background.js +57 -0
  100. package/src/render/draw_circle.js +113 -0
  101. package/src/render/draw_collision_debug.js +172 -0
  102. package/src/render/draw_custom.js +49 -0
  103. package/src/render/draw_debug.js +127 -0
  104. package/src/render/draw_fill.js +124 -0
  105. package/src/render/draw_fill_extrusion.js +95 -0
  106. package/src/render/draw_heatmap.js +133 -0
  107. package/src/render/draw_hillshade.js +107 -0
  108. package/src/render/draw_line.js +125 -0
  109. package/src/render/draw_raster.js +125 -0
  110. package/src/render/draw_symbol.js +392 -0
  111. package/src/render/glyph_atlas.js +71 -0
  112. package/src/render/glyph_manager.js +182 -0
  113. package/src/render/image_atlas.js +149 -0
  114. package/src/render/image_manager.js +306 -0
  115. package/src/render/line_atlas.js +210 -0
  116. package/src/render/painter.js +654 -0
  117. package/src/render/program/background_program.js +103 -0
  118. package/src/render/program/circle_program.js +69 -0
  119. package/src/render/program/clipping_mask_program.js +20 -0
  120. package/src/render/program/collision_program.js +76 -0
  121. package/src/render/program/debug_program.js +35 -0
  122. package/src/render/program/fill_extrusion_program.js +122 -0
  123. package/src/render/program/fill_program.js +126 -0
  124. package/src/render/program/heatmap_program.js +83 -0
  125. package/src/render/program/hillshade_program.js +119 -0
  126. package/src/render/program/line_program.js +211 -0
  127. package/src/render/program/pattern.js +102 -0
  128. package/src/render/program/program_uniforms.js +42 -0
  129. package/src/render/program/raster_program.js +92 -0
  130. package/src/render/program/symbol_program.js +224 -0
  131. package/src/render/program.js +188 -0
  132. package/src/render/texture.js +122 -0
  133. package/src/render/uniform_binding.js +147 -0
  134. package/src/render/vertex_array_object.js +163 -0
  135. package/src/shaders/README.md +42 -0
  136. package/src/shaders/_prelude.fragment.glsl +17 -0
  137. package/src/shaders/_prelude.vertex.glsl +73 -0
  138. package/src/shaders/background.fragment.glsl +10 -0
  139. package/src/shaders/background.vertex.glsl +7 -0
  140. package/src/shaders/background_pattern.fragment.glsl +28 -0
  141. package/src/shaders/background_pattern.vertex.glsl +20 -0
  142. package/src/shaders/circle.fragment.glsl +39 -0
  143. package/src/shaders/circle.vertex.glsl +64 -0
  144. package/src/shaders/clipping_mask.fragment.glsl +3 -0
  145. package/src/shaders/clipping_mask.vertex.glsl +7 -0
  146. package/src/shaders/collision_box.fragment.glsl +21 -0
  147. package/src/shaders/collision_box.vertex.glsl +27 -0
  148. package/src/shaders/collision_circle.fragment.glsl +17 -0
  149. package/src/shaders/collision_circle.vertex.glsl +59 -0
  150. package/src/shaders/debug.fragment.glsl +9 -0
  151. package/src/shaders/debug.vertex.glsl +12 -0
  152. package/src/shaders/encode_attribute.js +17 -0
  153. package/src/shaders/fill.fragment.glsl +13 -0
  154. package/src/shaders/fill.vertex.glsl +13 -0
  155. package/src/shaders/fill_extrusion.fragment.glsl +9 -0
  156. package/src/shaders/fill_extrusion.vertex.glsl +66 -0
  157. package/src/shaders/fill_extrusion_pattern.fragment.glsl +45 -0
  158. package/src/shaders/fill_extrusion_pattern.vertex.glsl +79 -0
  159. package/src/shaders/fill_outline.fragment.glsl +17 -0
  160. package/src/shaders/fill_outline.vertex.glsl +17 -0
  161. package/src/shaders/fill_outline_pattern.fragment.glsl +43 -0
  162. package/src/shaders/fill_outline_pattern.vertex.glsl +44 -0
  163. package/src/shaders/fill_pattern.fragment.glsl +36 -0
  164. package/src/shaders/fill_pattern.vertex.glsl +39 -0
  165. package/src/shaders/heatmap.fragment.glsl +22 -0
  166. package/src/shaders/heatmap.vertex.glsl +54 -0
  167. package/src/shaders/heatmap_texture.fragment.glsl +14 -0
  168. package/src/shaders/heatmap_texture.vertex.glsl +11 -0
  169. package/src/shaders/hillshade.fragment.glsl +52 -0
  170. package/src/shaders/hillshade.vertex.glsl +11 -0
  171. package/src/shaders/hillshade_prepare.fragment.glsl +75 -0
  172. package/src/shaders/hillshade_prepare.vertex.glsl +15 -0
  173. package/src/shaders/index.js +20 -0
  174. package/src/shaders/line.fragment.glsl +30 -0
  175. package/src/shaders/line.vertex.glsl +85 -0
  176. package/src/shaders/line_gradient.fragment.glsl +34 -0
  177. package/src/shaders/line_gradient.vertex.glsl +88 -0
  178. package/src/shaders/line_pattern.fragment.glsl +74 -0
  179. package/src/shaders/line_pattern.vertex.glsl +99 -0
  180. package/src/shaders/line_sdf.fragment.glsl +45 -0
  181. package/src/shaders/line_sdf.vertex.glsl +98 -0
  182. package/src/shaders/raster.fragment.glsl +52 -0
  183. package/src/shaders/raster.vertex.glsl +21 -0
  184. package/src/shaders/shaders.js +185 -0
  185. package/src/shaders/symbol_icon.fragment.glsl +17 -0
  186. package/src/shaders/symbol_icon.vertex.glsl +94 -0
  187. package/src/shaders/symbol_sdf.fragment.glsl +52 -0
  188. package/src/shaders/symbol_sdf.vertex.glsl +115 -0
  189. package/src/shaders/symbol_text_and_icon.fragment.glsl +68 -0
  190. package/src/shaders/symbol_text_and_icon.vertex.glsl +116 -0
  191. package/src/source/canvas_source.js +238 -0
  192. package/src/source/geojson_source.js +370 -0
  193. package/src/source/geojson_worker_source.js +366 -0
  194. package/src/source/geojson_wrapper.js +94 -0
  195. package/src/source/image_source.js +307 -0
  196. package/src/source/load_tilejson.js +39 -0
  197. package/src/source/pixels_to_tile_units.js +21 -0
  198. package/src/source/query_features.js +208 -0
  199. package/src/source/raster_dem_tile_source.js +138 -0
  200. package/src/source/raster_dem_tile_worker_source.js +62 -0
  201. package/src/source/raster_tile_source.js +169 -0
  202. package/src/source/rtl_text_plugin.js +143 -0
  203. package/src/source/source.js +137 -0
  204. package/src/source/source_cache.js +953 -0
  205. package/src/source/source_state.js +159 -0
  206. package/src/source/tile.js +458 -0
  207. package/src/source/tile_bounds.js +38 -0
  208. package/src/source/tile_cache.js +212 -0
  209. package/src/source/tile_id.js +199 -0
  210. package/src/source/vector_tile_source.js +259 -0
  211. package/src/source/vector_tile_worker_source.js +216 -0
  212. package/src/source/video_source.js +203 -0
  213. package/src/source/worker.js +240 -0
  214. package/src/source/worker_source.js +107 -0
  215. package/src/source/worker_tile.js +224 -0
  216. package/src/style/create_style_layer.js +36 -0
  217. package/src/style/evaluation_parameters.js +62 -0
  218. package/src/style/format_section_override.js +56 -0
  219. package/src/style/light.js +130 -0
  220. package/src/style/load_glyph_range.js +38 -0
  221. package/src/style/load_sprite.js +67 -0
  222. package/src/style/parse_glyph_pbf.js +44 -0
  223. package/src/style/pauseable_placement.js +132 -0
  224. package/src/style/properties.js +753 -0
  225. package/src/style/query_utils.js +43 -0
  226. package/src/style/style.js +1374 -0
  227. package/src/style/style_glyph.js +17 -0
  228. package/src/style/style_image.js +137 -0
  229. package/src/style/style_layer/background_style_layer.js +21 -0
  230. package/src/style/style_layer/background_style_layer_properties.js +40 -0
  231. package/src/style/style_layer/circle_style_layer.js +98 -0
  232. package/src/style/style_layer/circle_style_layer_properties.js +63 -0
  233. package/src/style/style_layer/custom_style_layer.js +223 -0
  234. package/src/style/style_layer/fill_extrusion_style_layer.js +224 -0
  235. package/src/style/style_layer/fill_extrusion_style_layer_properties.js +50 -0
  236. package/src/style/style_layer/fill_style_layer.js +67 -0
  237. package/src/style/style_layer/fill_style_layer_properties.js +55 -0
  238. package/src/style/style_layer/heatmap_style_layer.js +73 -0
  239. package/src/style/style_layer/heatmap_style_layer_properties.js +44 -0
  240. package/src/style/style_layer/hillshade_style_layer.js +25 -0
  241. package/src/style/style_layer/hillshade_style_layer_properties.js +46 -0
  242. package/src/style/style_layer/layer_properties.js.ejs +69 -0
  243. package/src/style/style_layer/line_style_layer.js +150 -0
  244. package/src/style/style_layer/line_style_layer_properties.js +71 -0
  245. package/src/style/style_layer/raster_style_layer.js +21 -0
  246. package/src/style/style_layer/raster_style_layer_properties.js +50 -0
  247. package/src/style/style_layer/symbol_style_layer.js +190 -0
  248. package/src/style/style_layer/symbol_style_layer_properties.js +153 -0
  249. package/src/style/style_layer/typed_style_layer.js +17 -0
  250. package/src/style/style_layer.js +283 -0
  251. package/src/style/style_layer_index.js +80 -0
  252. package/src/style/validate_style.js +42 -0
  253. package/src/style/zoom_history.js +44 -0
  254. package/src/style-spec/.eslintrc +5 -0
  255. package/src/style-spec/CHANGELOG.md +468 -0
  256. package/src/style-spec/README.md +59 -0
  257. package/src/style-spec/bin/gl-style-composite +9 -0
  258. package/src/style-spec/bin/gl-style-format +22 -0
  259. package/src/style-spec/bin/gl-style-migrate +9 -0
  260. package/src/style-spec/bin/gl-style-validate +50 -0
  261. package/src/style-spec/composite.js +50 -0
  262. package/src/style-spec/declass.js +42 -0
  263. package/src/style-spec/deref.js +52 -0
  264. package/src/style-spec/diff.js +393 -0
  265. package/src/style-spec/dist/.gitkeep +0 -0
  266. package/src/style-spec/dist/index.es.js +15032 -0
  267. package/src/style-spec/dist/index.es.js.map +1 -0
  268. package/src/style-spec/dist/index.js +15058 -0
  269. package/src/style-spec/dist/index.js.map +1 -0
  270. package/src/style-spec/empty.js +29 -0
  271. package/src/style-spec/error/parsing_error.js +16 -0
  272. package/src/style-spec/error/validation_error.js +18 -0
  273. package/src/style-spec/expression/compound_expression.js +162 -0
  274. package/src/style-spec/expression/definitions/assertion.js +130 -0
  275. package/src/style-spec/expression/definitions/at.js +70 -0
  276. package/src/style-spec/expression/definitions/case.js +85 -0
  277. package/src/style-spec/expression/definitions/coalesce.js +93 -0
  278. package/src/style-spec/expression/definitions/coercion.js +133 -0
  279. package/src/style-spec/expression/definitions/collator.js +78 -0
  280. package/src/style-spec/expression/definitions/comparison.js +184 -0
  281. package/src/style-spec/expression/definitions/format.js +144 -0
  282. package/src/style-spec/expression/definitions/image.js +52 -0
  283. package/src/style-spec/expression/definitions/in.js +72 -0
  284. package/src/style-spec/expression/definitions/index.js +565 -0
  285. package/src/style-spec/expression/definitions/index_of.js +89 -0
  286. package/src/style-spec/expression/definitions/interpolate.js +267 -0
  287. package/src/style-spec/expression/definitions/length.js +61 -0
  288. package/src/style-spec/expression/definitions/let.js +72 -0
  289. package/src/style-spec/expression/definitions/literal.js +77 -0
  290. package/src/style-spec/expression/definitions/match.js +158 -0
  291. package/src/style-spec/expression/definitions/number_format.js +142 -0
  292. package/src/style-spec/expression/definitions/slice.js +86 -0
  293. package/src/style-spec/expression/definitions/step.js +120 -0
  294. package/src/style-spec/expression/definitions/var.js +46 -0
  295. package/src/style-spec/expression/definitions/within.js +342 -0
  296. package/src/style-spec/expression/evaluation_context.js +59 -0
  297. package/src/style-spec/expression/expression.js +27 -0
  298. package/src/style-spec/expression/index.js +392 -0
  299. package/src/style-spec/expression/is_constant.js +59 -0
  300. package/src/style-spec/expression/parsing_context.js +233 -0
  301. package/src/style-spec/expression/parsing_error.js +13 -0
  302. package/src/style-spec/expression/runtime_error.js +17 -0
  303. package/src/style-spec/expression/scope.js +36 -0
  304. package/src/style-spec/expression/stops.js +39 -0
  305. package/src/style-spec/expression/types/collator.js +61 -0
  306. package/src/style-spec/expression/types/formatted.js +73 -0
  307. package/src/style-spec/expression/types/resolved_image.js +29 -0
  308. package/src/style-spec/expression/types.js +126 -0
  309. package/src/style-spec/expression/values.js +123 -0
  310. package/src/style-spec/feature_filter/README.md +55 -0
  311. package/src/style-spec/feature_filter/convert.js +208 -0
  312. package/src/style-spec/feature_filter/index.js +175 -0
  313. package/src/style-spec/format.js +51 -0
  314. package/src/style-spec/function/convert.js +270 -0
  315. package/src/style-spec/function/index.js +262 -0
  316. package/src/style-spec/group_by_layout.js +75 -0
  317. package/src/style-spec/migrate/expressions.js +39 -0
  318. package/src/style-spec/migrate/v8.js +203 -0
  319. package/src/style-spec/migrate/v9.js +26 -0
  320. package/src/style-spec/migrate.js +36 -0
  321. package/src/style-spec/package.json +41 -0
  322. package/src/style-spec/read_style.js +14 -0
  323. package/src/style-spec/reference/latest.js +3 -0
  324. package/src/style-spec/reference/v8.json +5914 -0
  325. package/src/style-spec/rollup.config.js +65 -0
  326. package/src/style-spec/style-spec.js +124 -0
  327. package/src/style-spec/types.js +432 -0
  328. package/src/style-spec/util/color.js +95 -0
  329. package/src/style-spec/util/color_spaces.js +139 -0
  330. package/src/style-spec/util/deep_equal.js +28 -0
  331. package/src/style-spec/util/extend.js +10 -0
  332. package/src/style-spec/util/get_type.js +17 -0
  333. package/src/style-spec/util/interpolate.js +22 -0
  334. package/src/style-spec/util/properties.js +15 -0
  335. package/src/style-spec/util/ref_properties.js +2 -0
  336. package/src/style-spec/util/result.js +19 -0
  337. package/src/style-spec/util/unbundle_jsonlint.js +24 -0
  338. package/src/style-spec/validate/latest.js +11 -0
  339. package/src/style-spec/validate/validate.js +75 -0
  340. package/src/style-spec/validate/validate_array.js +52 -0
  341. package/src/style-spec/validate/validate_boolean.js +15 -0
  342. package/src/style-spec/validate/validate_color.js +20 -0
  343. package/src/style-spec/validate/validate_constants.js +13 -0
  344. package/src/style-spec/validate/validate_enum.js +21 -0
  345. package/src/style-spec/validate/validate_expression.js +43 -0
  346. package/src/style-spec/validate/validate_filter.js +117 -0
  347. package/src/style-spec/validate/validate_formatted.js +11 -0
  348. package/src/style-spec/validate/validate_function.js +207 -0
  349. package/src/style-spec/validate/validate_glyphs_url.js +21 -0
  350. package/src/style-spec/validate/validate_image.js +11 -0
  351. package/src/style-spec/validate/validate_layer.js +134 -0
  352. package/src/style-spec/validate/validate_layout_property.js +6 -0
  353. package/src/style-spec/validate/validate_light.js +47 -0
  354. package/src/style-spec/validate/validate_number.js +29 -0
  355. package/src/style-spec/validate/validate_object.js +61 -0
  356. package/src/style-spec/validate/validate_paint_property.js +6 -0
  357. package/src/style-spec/validate/validate_property.js +64 -0
  358. package/src/style-spec/validate/validate_source.js +111 -0
  359. package/src/style-spec/validate/validate_string.js +15 -0
  360. package/src/style-spec/validate_mapbox_api_supported.js +171 -0
  361. package/src/style-spec/validate_style.js +39 -0
  362. package/src/style-spec/validate_style.min.js +78 -0
  363. package/src/style-spec/visit.js +77 -0
  364. package/src/symbol/anchor.js +26 -0
  365. package/src/symbol/check_max_angle.js +81 -0
  366. package/src/symbol/clip_line.js +71 -0
  367. package/src/symbol/collision_feature.js +109 -0
  368. package/src/symbol/collision_index.js +373 -0
  369. package/src/symbol/cross_tile_symbol_index.js +301 -0
  370. package/src/symbol/get_anchors.js +167 -0
  371. package/src/symbol/grid_index.js +335 -0
  372. package/src/symbol/mergelines.js +82 -0
  373. package/src/symbol/one_em.js +4 -0
  374. package/src/symbol/opacity_state.js +27 -0
  375. package/src/symbol/path_interpolator.js +61 -0
  376. package/src/symbol/placement.js +1124 -0
  377. package/src/symbol/projection.js +451 -0
  378. package/src/symbol/quads.js +334 -0
  379. package/src/symbol/shaping.js +816 -0
  380. package/src/symbol/symbol_layout.js +796 -0
  381. package/src/symbol/symbol_size.js +113 -0
  382. package/src/symbol/transform_text.js +29 -0
  383. package/src/types/callback.js +17 -0
  384. package/src/types/cancelable.js +3 -0
  385. package/src/types/tilejson.js +17 -0
  386. package/src/types/transferable.js +3 -0
  387. package/src/types/window.js +172 -0
  388. package/src/ui/anchor.js +32 -0
  389. package/src/ui/camera.js +1277 -0
  390. package/src/ui/control/attribution_control.js +212 -0
  391. package/src/ui/control/fullscreen_control.js +147 -0
  392. package/src/ui/control/geolocate_control.js +707 -0
  393. package/src/ui/control/logo_control.js +92 -0
  394. package/src/ui/control/navigation_control.js +257 -0
  395. package/src/ui/control/scale_control.js +142 -0
  396. package/src/ui/default_locale.js +22 -0
  397. package/src/ui/events.js +1301 -0
  398. package/src/ui/handler/box_zoom.js +170 -0
  399. package/src/ui/handler/click_zoom.js +52 -0
  400. package/src/ui/handler/handler_util.js +12 -0
  401. package/src/ui/handler/keyboard.js +208 -0
  402. package/src/ui/handler/map_event.js +156 -0
  403. package/src/ui/handler/mouse.js +171 -0
  404. package/src/ui/handler/scroll_zoom.js +350 -0
  405. package/src/ui/handler/shim/dblclick_zoom.js +62 -0
  406. package/src/ui/handler/shim/drag_pan.js +88 -0
  407. package/src/ui/handler/shim/drag_rotate.js +67 -0
  408. package/src/ui/handler/shim/touch_zoom_rotate.js +108 -0
  409. package/src/ui/handler/tap_drag_zoom.js +103 -0
  410. package/src/ui/handler/tap_recognizer.js +133 -0
  411. package/src/ui/handler/tap_zoom.js +93 -0
  412. package/src/ui/handler/touch_pan.js +101 -0
  413. package/src/ui/handler/touch_zoom_rotate.js +305 -0
  414. package/src/ui/handler_inertia.js +158 -0
  415. package/src/ui/handler_manager.js +531 -0
  416. package/src/ui/hash.js +148 -0
  417. package/src/ui/map.js +2874 -0
  418. package/src/ui/marker.js +672 -0
  419. package/src/ui/popup.js +640 -0
  420. package/src/util/actor.js +212 -0
  421. package/src/util/ajax.js +388 -0
  422. package/src/util/browser/web_worker.js +10 -0
  423. package/src/util/browser/window.js +6 -0
  424. package/src/util/browser.js +70 -0
  425. package/src/util/classify_rings.js +52 -0
  426. package/src/util/color_ramp.js +61 -0
  427. package/src/util/config.js +30 -0
  428. package/src/util/debug.js +28 -0
  429. package/src/util/dictionary_coder.js +30 -0
  430. package/src/util/dispatcher.js +70 -0
  431. package/src/util/dom.js +142 -0
  432. package/src/util/evented.js +174 -0
  433. package/src/util/find_pole_of_inaccessibility.js +129 -0
  434. package/src/util/global_worker_pool.js +35 -0
  435. package/src/util/image.js +142 -0
  436. package/src/util/intersection_tests.js +208 -0
  437. package/src/util/is_char_in_unicode_block.js +311 -0
  438. package/src/util/mapbox.js +491 -0
  439. package/src/util/offscreen_canvas_supported.js +14 -0
  440. package/src/util/performance.js +112 -0
  441. package/src/util/primitives.js +145 -0
  442. package/src/util/resolve_tokens.js +16 -0
  443. package/src/util/script_detection.js +328 -0
  444. package/src/util/sku_token.js +42 -0
  445. package/src/util/smart_wrap.js +55 -0
  446. package/src/util/struct_array.js +243 -0
  447. package/src/util/struct_array.js.ejs +112 -0
  448. package/src/util/struct_array_layout.js.ejs +98 -0
  449. package/src/util/task_queue.js +68 -0
  450. package/src/util/throttle.js +27 -0
  451. package/src/util/throttled_invoker.js +46 -0
  452. package/src/util/tile_request_cache.js +172 -0
  453. package/src/util/util.js +524 -0
  454. package/src/util/vectortile_to_geojson.js +50 -0
  455. package/src/util/verticalize_punctuation.js +114 -0
  456. package/src/util/web_worker.js +91 -0
  457. package/src/util/web_worker_transfer.js +266 -0
  458. package/src/util/webp_supported.js +69 -0
  459. package/src/util/window.js +102 -0
  460. package/src/util/worker_pool.js +57 -0
@@ -0,0 +1,208 @@
1
+ // @flow
2
+
3
+ import {isExpressionFilter} from './index';
4
+
5
+ import type {FilterSpecification} from '../types';
6
+
7
+ type ExpectedTypes = {[_: string]: 'string' | 'number' | 'boolean'};
8
+
9
+ /**
10
+ * Convert the given legacy filter to (the JSON representation of) an
11
+ * equivalent expression
12
+ * @private
13
+ */
14
+ export default function convertFilter(filter: FilterSpecification): mixed {
15
+ return _convertFilter(filter, {});
16
+ }
17
+
18
+ /*
19
+ * Convert the given filter to an expression, storing the expected types for
20
+ * any feature properties referenced in expectedTypes.
21
+ *
22
+ * These expected types are needed in order to construct preflight type checks
23
+ * needed for handling 'any' filters. A preflight type check is necessary in
24
+ * order to mimic legacy filters' semantics around expected type mismatches.
25
+ * For example, consider the legacy filter:
26
+ *
27
+ * ["any", ["all", [">", "y", 0], [">", "y", 0]], [">", "x", 0]]
28
+ *
29
+ * Naively, we might convert this to the expression:
30
+ *
31
+ * ["any", ["all", [">", ["get", "y"], 0], [">", ["get", "z"], 0]], [">", ["get", "x"], 0]]
32
+ *
33
+ * But if we tried to evaluate this against, say `{x: 1, y: null, z: 0}`, the
34
+ * [">", ["get", "y"], 0] would cause an evaluation error, leading to the
35
+ * entire filter returning false. Legacy filter semantics, though, ask for
36
+ * [">", "y", 0] to simply return `false` when `y` is of the wrong type,
37
+ * allowing the subsequent terms of the outer "any" expression to be evaluated
38
+ * (resulting, in this case, in a `true` value, because x > 0).
39
+ *
40
+ * We account for this by inserting a preflight type-checking expression before
41
+ * each "any" term, allowing us to avoid evaluating the actual converted filter
42
+ * if any type mismatches would cause it to produce an evalaution error:
43
+ *
44
+ * ["any",
45
+ * ["case",
46
+ * ["all", ["==", ["typeof", ["get", "y"]], "number"], ["==", ["typeof", ["get", "z"], "number]],
47
+ * ["all", [">", ["get", "y"], 0], [">", ["get", "z"], 0]],
48
+ * false
49
+ * ],
50
+ * ["case",
51
+ * ["==", ["typeof", ["get", "x"], "number"]],
52
+ * [">", ["get", "x"], 0],
53
+ * false
54
+ * ]
55
+ * ]
56
+ *
57
+ * An alternative, possibly more direct approach would be to use type checks
58
+ * in the conversion of each comparison operator, so that the converted version
59
+ * of each individual ==, >=, etc. would mimic the legacy filter semantics. The
60
+ * downside of this approach is that it can lead to many more type checks than
61
+ * would otherwise be necessary: outside the context of an "any" expression,
62
+ * bailing out due to a runtime type error (expression semantics) and returning
63
+ * false (legacy filter semantics) are equivalent: they cause the filter to
64
+ * produce a `false` result.
65
+ */
66
+ function _convertFilter(filter: FilterSpecification, expectedTypes: ExpectedTypes): mixed {
67
+ if (isExpressionFilter(filter)) { return filter; }
68
+
69
+ if (!filter) return true;
70
+ const op = filter[0];
71
+ if (filter.length <= 1) return (op !== 'any');
72
+
73
+ let converted;
74
+
75
+ if (
76
+ op === '==' ||
77
+ op === '!=' ||
78
+ op === '<' ||
79
+ op === '>' ||
80
+ op === '<=' ||
81
+ op === '>='
82
+ ) {
83
+ const [, property, value] = (filter: any);
84
+ converted = convertComparisonOp(property, value, op, expectedTypes);
85
+ } else if (op === 'any') {
86
+ const children = (filter: any).slice(1).map(f => {
87
+ const types = {};
88
+ const child = _convertFilter(f, types);
89
+ const typechecks = runtimeTypeChecks(types);
90
+ return typechecks === true ? child : ['case', typechecks, child, false];
91
+ });
92
+ return ['any'].concat(children);
93
+ } else if (op === 'all') {
94
+ const children = (filter: any).slice(1).map(f => _convertFilter(f, expectedTypes));
95
+ return children.length > 1 ? ['all'].concat(children) : [].concat(...children);
96
+ } else if (op === 'none') {
97
+ return ['!', _convertFilter(['any'].concat(filter.slice(1)), {})];
98
+ } else if (op === 'in') {
99
+ converted = convertInOp((filter[1]: any), filter.slice(2));
100
+ } else if (op === '!in') {
101
+ converted = convertInOp((filter[1]: any), filter.slice(2), true);
102
+ } else if (op === 'has') {
103
+ converted = convertHasOp((filter[1]: any));
104
+ } else if (op === '!has') {
105
+ converted = ['!', convertHasOp((filter[1]: any))];
106
+ } else {
107
+ converted = true;
108
+ }
109
+
110
+ return converted;
111
+ }
112
+
113
+ // Given a set of feature properties and an expected type for each one,
114
+ // construct an boolean expression that tests whether each property has the
115
+ // right type.
116
+ // E.g.: for {name: 'string', population: 'number'}, return
117
+ // [ 'all',
118
+ // ['==', ['typeof', ['get', 'name'], 'string']],
119
+ // ['==', ['typeof', ['get', 'population'], 'number]]
120
+ // ]
121
+ function runtimeTypeChecks(expectedTypes: ExpectedTypes) {
122
+ const conditions = [];
123
+ for (const property in expectedTypes) {
124
+ const get = property === '$id' ? ['id'] : ['get', property];
125
+ conditions.push(['==', ['typeof', get], expectedTypes[property]]);
126
+ }
127
+ if (conditions.length === 0) return true;
128
+ if (conditions.length === 1) return conditions[0];
129
+ return ['all'].concat(conditions);
130
+ }
131
+
132
+ function convertComparisonOp(property: string, value: any, op: string, expectedTypes: ?ExpectedTypes) {
133
+ let get;
134
+ if (property === '$type') {
135
+ return [op, ['geometry-type'], value];
136
+ } else if (property === '$id') {
137
+ get = ['id'];
138
+ } else {
139
+ get = ['get', property];
140
+ }
141
+
142
+ if (expectedTypes && value !== null) {
143
+ const type = ((typeof value): any);
144
+ expectedTypes[property] = type;
145
+ }
146
+
147
+ if (op === '==' && property !== '$id' && value === null) {
148
+ return [
149
+ 'all',
150
+ ['has', property], // missing property != null for legacy filters
151
+ ['==', get, null]
152
+ ];
153
+ } else if (op === '!=' && property !== '$id' && value === null) {
154
+ return [
155
+ 'any',
156
+ ['!', ['has', property]], // missing property != null for legacy filters
157
+ ['!=', get, null]
158
+ ];
159
+ }
160
+
161
+ return [op, get, value];
162
+ }
163
+
164
+ function convertInOp(property: string, values: Array<any>, negate = false) {
165
+ if (values.length === 0) return negate;
166
+
167
+ let get;
168
+ if (property === '$type') {
169
+ get = ['geometry-type'];
170
+ } else if (property === '$id') {
171
+ get = ['id'];
172
+ } else {
173
+ get = ['get', property];
174
+ }
175
+
176
+ // Determine if the list of values to be searched is homogenously typed.
177
+ // If so (and if the type is string or number), then we can use a
178
+ // [match, input, [...values], true, false] construction rather than a
179
+ // bunch of `==` tests.
180
+ let uniformTypes = true;
181
+ const type = typeof values[0];
182
+ for (const value of values) {
183
+ if (typeof value !== type) {
184
+ uniformTypes = false;
185
+ break;
186
+ }
187
+ }
188
+
189
+ if (uniformTypes && (type === 'string' || type === 'number')) {
190
+ // Match expressions must have unique values.
191
+ const uniqueValues = values.sort().filter((v, i) => i === 0 || values[i - 1] !== v);
192
+ return ['match', get, uniqueValues, !negate, negate];
193
+ }
194
+
195
+ return [ negate ? 'all' : 'any' ].concat(
196
+ values.map(v => [negate ? '!=' : '==', get, v])
197
+ );
198
+ }
199
+
200
+ function convertHasOp(property: string) {
201
+ if (property === '$type') {
202
+ return true;
203
+ } else if (property === '$id') {
204
+ return ['!=', ['id'], null];
205
+ } else {
206
+ return ['has', property];
207
+ }
208
+ }
@@ -0,0 +1,175 @@
1
+ // @flow
2
+
3
+ import {createExpression} from '../expression';
4
+ import type {GlobalProperties, Feature} from '../expression';
5
+ import type {CanonicalTileID} from '../../source/tile_id';
6
+
7
+ type FilterExpression = (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID) => boolean;
8
+ export type FeatureFilter ={filter: FilterExpression, needGeometry: boolean};
9
+
10
+ export default createFilter;
11
+ export {isExpressionFilter};
12
+
13
+ function isExpressionFilter(filter: any) {
14
+ if (filter === true || filter === false) {
15
+ return true;
16
+ }
17
+
18
+ if (!Array.isArray(filter) || filter.length === 0) {
19
+ return false;
20
+ }
21
+ switch (filter[0]) {
22
+ case 'has':
23
+ return filter.length >= 2 && filter[1] !== '$id' && filter[1] !== '$type';
24
+
25
+ case 'in':
26
+ return filter.length >= 3 && (typeof filter[1] !== 'string' || Array.isArray(filter[2]));
27
+
28
+ case '!in':
29
+ case '!has':
30
+ case 'none':
31
+ return false;
32
+
33
+ case '==':
34
+ case '!=':
35
+ case '>':
36
+ case '>=':
37
+ case '<':
38
+ case '<=':
39
+ return filter.length !== 3 || (Array.isArray(filter[1]) || Array.isArray(filter[2]));
40
+
41
+ case 'any':
42
+ case 'all':
43
+ for (const f of filter.slice(1)) {
44
+ if (!isExpressionFilter(f) && typeof f !== 'boolean') {
45
+ return false;
46
+ }
47
+ }
48
+ return true;
49
+
50
+ default:
51
+ return true;
52
+ }
53
+ }
54
+
55
+ const filterSpec = {
56
+ 'type': 'boolean',
57
+ 'default': false,
58
+ 'transition': false,
59
+ 'property-type': 'data-driven',
60
+ 'expression': {
61
+ 'interpolated': false,
62
+ 'parameters': ['zoom', 'feature']
63
+ }
64
+ };
65
+
66
+ /**
67
+ * Given a filter expressed as nested arrays, return a new function
68
+ * that evaluates whether a given feature (with a .properties or .tags property)
69
+ * passes its test.
70
+ *
71
+ * @private
72
+ * @param {Array} filter mapbox gl filter
73
+ * @returns {Function} filter-evaluating function
74
+ */
75
+ function createFilter(filter: any): FeatureFilter {
76
+ if (filter === null || filter === undefined) {
77
+ return {filter: () => true, needGeometry: false};
78
+ }
79
+
80
+ if (!isExpressionFilter(filter)) {
81
+ filter = convertFilter(filter);
82
+ }
83
+
84
+ const compiled = createExpression(filter, filterSpec);
85
+ if (compiled.result === 'error') {
86
+ throw new Error(compiled.value.map(err => `${err.key}: ${err.message}`).join(', '));
87
+ } else {
88
+ const needGeometry = geometryNeeded(filter);
89
+ return {filter: (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID) => compiled.value.evaluate(globalProperties, feature, {}, canonical),
90
+ needGeometry};
91
+ }
92
+ }
93
+
94
+ // Comparison function to sort numbers and strings
95
+ function compare(a, b) {
96
+ return a < b ? -1 : a > b ? 1 : 0;
97
+ }
98
+
99
+ function geometryNeeded(filter) {
100
+ if (!Array.isArray(filter)) return false;
101
+ if (filter[0] === 'within') return true;
102
+ for (let index = 1; index < filter.length; index++) {
103
+ if (geometryNeeded(filter[index])) return true;
104
+ }
105
+ return false;
106
+ }
107
+
108
+ function convertFilter(filter: ?Array<any>): mixed {
109
+ if (!filter) return true;
110
+ const op = filter[0];
111
+ if (filter.length <= 1) return (op !== 'any');
112
+ const converted =
113
+ op === '==' ? convertComparisonOp(filter[1], filter[2], '==') :
114
+ op === '!=' ? convertNegation(convertComparisonOp(filter[1], filter[2], '==')) :
115
+ op === '<' ||
116
+ op === '>' ||
117
+ op === '<=' ||
118
+ op === '>=' ? convertComparisonOp(filter[1], filter[2], op) :
119
+ op === 'any' ? convertDisjunctionOp(filter.slice(1)) :
120
+ op === 'all' ? ['all'].concat(filter.slice(1).map(convertFilter)) :
121
+ op === 'none' ? ['all'].concat(filter.slice(1).map(convertFilter).map(convertNegation)) :
122
+ op === 'in' ? convertInOp(filter[1], filter.slice(2)) :
123
+ op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) :
124
+ op === 'has' ? convertHasOp(filter[1]) :
125
+ op === '!has' ? convertNegation(convertHasOp(filter[1])) :
126
+ op === 'within' ? filter :
127
+ true;
128
+ return converted;
129
+ }
130
+
131
+ function convertComparisonOp(property: string, value: any, op: string) {
132
+ switch (property) {
133
+ case '$type':
134
+ return [`filter-type-${op}`, value];
135
+ case '$id':
136
+ return [`filter-id-${op}`, value];
137
+ default:
138
+ return [`filter-${op}`, property, value];
139
+ }
140
+ }
141
+
142
+ function convertDisjunctionOp(filters: Array<Array<any>>) {
143
+ return ['any'].concat(filters.map(convertFilter));
144
+ }
145
+
146
+ function convertInOp(property: string, values: Array<any>) {
147
+ if (values.length === 0) { return false; }
148
+ switch (property) {
149
+ case '$type':
150
+ return [`filter-type-in`, ['literal', values]];
151
+ case '$id':
152
+ return [`filter-id-in`, ['literal', values]];
153
+ default:
154
+ if (values.length > 200 && !values.some(v => typeof v !== typeof values[0])) {
155
+ return ['filter-in-large', property, ['literal', values.sort(compare)]];
156
+ } else {
157
+ return ['filter-in-small', property, ['literal', values]];
158
+ }
159
+ }
160
+ }
161
+
162
+ function convertHasOp(property: string) {
163
+ switch (property) {
164
+ case '$type':
165
+ return true;
166
+ case '$id':
167
+ return [`filter-has-id`];
168
+ default:
169
+ return [`filter-has`, property];
170
+ }
171
+ }
172
+
173
+ function convertNegation(filter: mixed) {
174
+ return ['!', filter];
175
+ }
@@ -0,0 +1,51 @@
1
+
2
+ import reference from './reference/latest.js';
3
+ import stringifyPretty from 'json-stringify-pretty-compact';
4
+
5
+ function sortKeysBy(obj, reference) {
6
+ const result = {};
7
+ for (const key in reference) {
8
+ if (obj[key] !== undefined) {
9
+ result[key] = obj[key];
10
+ }
11
+ }
12
+ for (const key in obj) {
13
+ if (result[key] === undefined) {
14
+ result[key] = obj[key];
15
+ }
16
+ }
17
+ return result;
18
+ }
19
+
20
+ /**
21
+ * Format a Mapbox GL Style. Returns a stringified style with its keys
22
+ * sorted in the same order as the reference style.
23
+ *
24
+ * The optional `space` argument is passed to
25
+ * [`JSON.stringify`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)
26
+ * to generate formatted output.
27
+ *
28
+ * If `space` is unspecified, a default of `2` spaces will be used.
29
+ *
30
+ * @private
31
+ * @param {Object} style a Mapbox GL Style
32
+ * @param {number} [space] space argument to pass to `JSON.stringify`
33
+ * @returns {string} stringified formatted JSON
34
+ * @example
35
+ * var fs = require('fs');
36
+ * var format = require('mapbox-gl-style-spec').format;
37
+ * var style = fs.readFileSync('./source.json', 'utf8');
38
+ * fs.writeFileSync('./dest.json', format(style));
39
+ * fs.writeFileSync('./dest.min.json', format(style, 0));
40
+ */
41
+ function format(style, space = 2) {
42
+ style = sortKeysBy(style, reference.$root);
43
+
44
+ if (style.layers) {
45
+ style.layers = style.layers.map((layer) => sortKeysBy(layer, reference.layer));
46
+ }
47
+
48
+ return stringifyPretty(style, {indent: space});
49
+ }
50
+
51
+ export default format;