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,145 @@
1
+ // @flow
2
+
3
+ import {vec3, vec4} from 'gl-matrix';
4
+ import assert from 'assert';
5
+
6
+ class Frustum {
7
+ points: Array<Array<number>>;
8
+ planes: Array<Array<number>>;
9
+
10
+ constructor(points_: Array<Array<number>>, planes_: Array<Array<number>>) {
11
+ this.points = points_;
12
+ this.planes = planes_;
13
+ }
14
+
15
+ static fromInvProjectionMatrix(invProj: Float64Array, worldSize: number, zoom: number): Frustum {
16
+ const clipSpaceCorners = [
17
+ [-1, 1, -1, 1],
18
+ [ 1, 1, -1, 1],
19
+ [ 1, -1, -1, 1],
20
+ [-1, -1, -1, 1],
21
+ [-1, 1, 1, 1],
22
+ [ 1, 1, 1, 1],
23
+ [ 1, -1, 1, 1],
24
+ [-1, -1, 1, 1]
25
+ ];
26
+
27
+ const scale = Math.pow(2, zoom);
28
+
29
+ // Transform frustum corner points from clip space to tile space
30
+ const frustumCoords = clipSpaceCorners
31
+ .map(v => vec4.transformMat4([], v, invProj))
32
+ .map(v => vec4.scale([], v, 1.0 / v[3] / worldSize * scale));
33
+
34
+ const frustumPlanePointIndices = [
35
+ [0, 1, 2], // near
36
+ [6, 5, 4], // far
37
+ [0, 3, 7], // left
38
+ [2, 1, 5], // right
39
+ [3, 2, 6], // bottom
40
+ [0, 4, 5] // top
41
+ ];
42
+
43
+ const frustumPlanes = frustumPlanePointIndices.map((p: Array<number>) => {
44
+ const a = vec3.sub([], frustumCoords[p[0]], frustumCoords[p[1]]);
45
+ const b = vec3.sub([], frustumCoords[p[2]], frustumCoords[p[1]]);
46
+ const n = vec3.normalize([], vec3.cross([], a, b));
47
+ const d = -vec3.dot(n, frustumCoords[p[1]]);
48
+ return n.concat(d);
49
+ });
50
+
51
+ return new Frustum(frustumCoords, frustumPlanes);
52
+ }
53
+ }
54
+
55
+ class Aabb {
56
+ min: vec3;
57
+ max: vec3;
58
+ center: vec3;
59
+
60
+ constructor(min_: vec3, max_: vec3) {
61
+ this.min = min_;
62
+ this.max = max_;
63
+ this.center = vec3.scale([], vec3.add([], this.min, this.max), 0.5);
64
+ }
65
+
66
+ quadrant(index: number): Aabb {
67
+ const split = [(index % 2) === 0, index < 2];
68
+ const qMin = vec3.clone(this.min);
69
+ const qMax = vec3.clone(this.max);
70
+ for (let axis = 0; axis < split.length; axis++) {
71
+ qMin[axis] = split[axis] ? this.min[axis] : this.center[axis];
72
+ qMax[axis] = split[axis] ? this.center[axis] : this.max[axis];
73
+ }
74
+ // Elevation is always constant, hence quadrant.max.z = this.max.z
75
+ qMax[2] = this.max[2];
76
+ return new Aabb(qMin, qMax);
77
+ }
78
+
79
+ distanceX(point: Array<number>): number {
80
+ const pointOnAabb = Math.max(Math.min(this.max[0], point[0]), this.min[0]);
81
+ return pointOnAabb - point[0];
82
+ }
83
+
84
+ distanceY(point: Array<number>): number {
85
+ const pointOnAabb = Math.max(Math.min(this.max[1], point[1]), this.min[1]);
86
+ return pointOnAabb - point[1];
87
+ }
88
+
89
+ // Performs a frustum-aabb intersection test. Returns 0 if there's no intersection,
90
+ // 1 if shapes are intersecting and 2 if the aabb if fully inside the frustum.
91
+ intersects(frustum: Frustum): number {
92
+ // Execute separating axis test between two convex objects to find intersections
93
+ // Each frustum plane together with 3 major axes define the separating axes
94
+ // Note: test only 4 points as both min and max points have equal elevation
95
+ assert(this.min[2] === 0 && this.max[2] === 0);
96
+
97
+ const aabbPoints = [
98
+ [this.min[0], this.min[1], 0.0, 1],
99
+ [this.max[0], this.min[1], 0.0, 1],
100
+ [this.max[0], this.max[1], 0.0, 1],
101
+ [this.min[0], this.max[1], 0.0, 1]
102
+ ];
103
+
104
+ let fullyInside = true;
105
+
106
+ for (let p = 0; p < frustum.planes.length; p++) {
107
+ const plane = frustum.planes[p];
108
+ let pointsInside = 0;
109
+
110
+ for (let i = 0; i < aabbPoints.length; i++) {
111
+ pointsInside += vec4.dot(plane, aabbPoints[i]) >= 0;
112
+ }
113
+
114
+ if (pointsInside === 0)
115
+ return 0;
116
+
117
+ if (pointsInside !== aabbPoints.length)
118
+ fullyInside = false;
119
+ }
120
+
121
+ if (fullyInside)
122
+ return 2;
123
+
124
+ for (let axis = 0; axis < 3; axis++) {
125
+ let projMin = Number.MAX_VALUE;
126
+ let projMax = -Number.MAX_VALUE;
127
+
128
+ for (let p = 0; p < frustum.points.length; p++) {
129
+ const projectedPoint = frustum.points[p][axis] - this.min[axis];
130
+
131
+ projMin = Math.min(projMin, projectedPoint);
132
+ projMax = Math.max(projMax, projectedPoint);
133
+ }
134
+
135
+ if (projMax < 0 || projMin > this.max[axis] - this.min[axis])
136
+ return 0;
137
+ }
138
+
139
+ return 1;
140
+ }
141
+ }
142
+ export {
143
+ Aabb,
144
+ Frustum
145
+ };
@@ -0,0 +1,16 @@
1
+ // @flow
2
+ export default resolveTokens;
3
+
4
+ /**
5
+ * Replace tokens in a string template with values in an object
6
+ *
7
+ * @param properties a key/value relationship between tokens and replacements
8
+ * @param text the template string
9
+ * @returns the template with tokens replaced
10
+ * @private
11
+ */
12
+ function resolveTokens(properties: {+[string]: mixed}, text: string): string {
13
+ return text.replace(/{([^{}]+)}/g, (match, key: string) => {
14
+ return key in properties ? String(properties[key]) : '';
15
+ });
16
+ }
@@ -0,0 +1,328 @@
1
+ // @flow
2
+
3
+ /* eslint-disable new-cap */
4
+
5
+ import isChar from './is_char_in_unicode_block';
6
+
7
+ export function allowsIdeographicBreaking(chars: string) {
8
+ for (const char of chars) {
9
+ if (!charAllowsIdeographicBreaking(char.charCodeAt(0))) return false;
10
+ }
11
+ return true;
12
+ }
13
+
14
+ export function allowsVerticalWritingMode(chars: string) {
15
+ for (const char of chars) {
16
+ if (charHasUprightVerticalOrientation(char.charCodeAt(0))) return true;
17
+ }
18
+ return false;
19
+ }
20
+
21
+ export function allowsLetterSpacing(chars: string) {
22
+ for (const char of chars) {
23
+ if (!charAllowsLetterSpacing(char.charCodeAt(0))) return false;
24
+ }
25
+ return true;
26
+ }
27
+
28
+ export function charAllowsLetterSpacing(char: number) {
29
+ if (isChar['Arabic'](char)) return false;
30
+ if (isChar['Arabic Supplement'](char)) return false;
31
+ if (isChar['Arabic Extended-A'](char)) return false;
32
+ if (isChar['Arabic Presentation Forms-A'](char)) return false;
33
+ if (isChar['Arabic Presentation Forms-B'](char)) return false;
34
+
35
+ return true;
36
+ }
37
+
38
+ export function charAllowsIdeographicBreaking(char: number) {
39
+ // Return early for characters outside all ideographic ranges.
40
+ if (char < 0x2E80) return false;
41
+
42
+ if (isChar['Bopomofo Extended'](char)) return true;
43
+ if (isChar['Bopomofo'](char)) return true;
44
+ if (isChar['CJK Compatibility Forms'](char)) return true;
45
+ if (isChar['CJK Compatibility Ideographs'](char)) return true;
46
+ if (isChar['CJK Compatibility'](char)) return true;
47
+ if (isChar['CJK Radicals Supplement'](char)) return true;
48
+ if (isChar['CJK Strokes'](char)) return true;
49
+ if (isChar['CJK Symbols and Punctuation'](char)) return true;
50
+ if (isChar['CJK Unified Ideographs Extension A'](char)) return true;
51
+ if (isChar['CJK Unified Ideographs'](char)) return true;
52
+ if (isChar['Enclosed CJK Letters and Months'](char)) return true;
53
+ if (isChar['Halfwidth and Fullwidth Forms'](char)) return true;
54
+ if (isChar['Hiragana'](char)) return true;
55
+ if (isChar['Ideographic Description Characters'](char)) return true;
56
+ if (isChar['Kangxi Radicals'](char)) return true;
57
+ if (isChar['Katakana Phonetic Extensions'](char)) return true;
58
+ if (isChar['Katakana'](char)) return true;
59
+ if (isChar['Vertical Forms'](char)) return true;
60
+ if (isChar['Yi Radicals'](char)) return true;
61
+ if (isChar['Yi Syllables'](char)) return true;
62
+
63
+ return false;
64
+ }
65
+
66
+ // The following logic comes from
67
+ // <http://www.unicode.org/Public/12.0.0/ucd/VerticalOrientation.txt>.
68
+ // Keep it synchronized with
69
+ // <http://www.unicode.org/Public/UCD/latest/ucd/VerticalOrientation.txt>.
70
+ // The data file denotes with “U” or “Tu” any codepoint that may be drawn
71
+ // upright in vertical text but does not distinguish between upright and
72
+ // “neutral” characters.
73
+
74
+ // Blocks in the Unicode supplementary planes are excluded from this module due
75
+ // to <https://github.com/mapbox/mapbox-gl/issues/29>.
76
+
77
+ /**
78
+ * Returns true if the given Unicode codepoint identifies a character with
79
+ * upright orientation.
80
+ *
81
+ * A character has upright orientation if it is drawn upright (unrotated)
82
+ * whether the line is oriented horizontally or vertically, even if both
83
+ * adjacent characters can be rotated. For example, a Chinese character is
84
+ * always drawn upright. An uprightly oriented character causes an adjacent
85
+ * “neutral” character to be drawn upright as well.
86
+ * @private
87
+ */
88
+ export function charHasUprightVerticalOrientation(char: number) {
89
+ if (char === 0x02EA /* modifier letter yin departing tone mark */ ||
90
+ char === 0x02EB /* modifier letter yang departing tone mark */) {
91
+ return true;
92
+ }
93
+
94
+ // Return early for characters outside all ranges whose characters remain
95
+ // upright in vertical writing mode.
96
+ if (char < 0x1100) return false;
97
+
98
+ if (isChar['Bopomofo Extended'](char)) return true;
99
+ if (isChar['Bopomofo'](char)) return true;
100
+ if (isChar['CJK Compatibility Forms'](char)) {
101
+ if (!((char >= 0xFE49 /* dashed overline */ && char <= 0xFE4F) /* wavy low line */)) {
102
+ return true;
103
+ }
104
+ }
105
+ if (isChar['CJK Compatibility Ideographs'](char)) return true;
106
+ if (isChar['CJK Compatibility'](char)) return true;
107
+ if (isChar['CJK Radicals Supplement'](char)) return true;
108
+ if (isChar['CJK Strokes'](char)) return true;
109
+ if (isChar['CJK Symbols and Punctuation'](char)) {
110
+ if (!((char >= 0x3008 /* left angle bracket */ && char <= 0x3011) /* right black lenticular bracket */) &&
111
+ !((char >= 0x3014 /* left tortoise shell bracket */ && char <= 0x301F) /* low double prime quotation mark */) &&
112
+ char !== 0x3030 /* wavy dash */) {
113
+ return true;
114
+ }
115
+ }
116
+ if (isChar['CJK Unified Ideographs Extension A'](char)) return true;
117
+ if (isChar['CJK Unified Ideographs'](char)) return true;
118
+ if (isChar['Enclosed CJK Letters and Months'](char)) return true;
119
+ if (isChar['Hangul Compatibility Jamo'](char)) return true;
120
+ if (isChar['Hangul Jamo Extended-A'](char)) return true;
121
+ if (isChar['Hangul Jamo Extended-B'](char)) return true;
122
+ if (isChar['Hangul Jamo'](char)) return true;
123
+ if (isChar['Hangul Syllables'](char)) return true;
124
+ if (isChar['Hiragana'](char)) return true;
125
+ if (isChar['Ideographic Description Characters'](char)) return true;
126
+ if (isChar['Kanbun'](char)) return true;
127
+ if (isChar['Kangxi Radicals'](char)) return true;
128
+ if (isChar['Katakana Phonetic Extensions'](char)) return true;
129
+ if (isChar['Katakana'](char)) {
130
+ if (char !== 0x30FC /* katakana-hiragana prolonged sound mark */) {
131
+ return true;
132
+ }
133
+ }
134
+ if (isChar['Halfwidth and Fullwidth Forms'](char)) {
135
+ if (char !== 0xFF08 /* fullwidth left parenthesis */ &&
136
+ char !== 0xFF09 /* fullwidth right parenthesis */ &&
137
+ char !== 0xFF0D /* fullwidth hyphen-minus */ &&
138
+ !((char >= 0xFF1A /* fullwidth colon */ && char <= 0xFF1E) /* fullwidth greater-than sign */) &&
139
+ char !== 0xFF3B /* fullwidth left square bracket */ &&
140
+ char !== 0xFF3D /* fullwidth right square bracket */ &&
141
+ char !== 0xFF3F /* fullwidth low line */ &&
142
+ !(char >= 0xFF5B /* fullwidth left curly bracket */ && char <= 0xFFDF) &&
143
+ char !== 0xFFE3 /* fullwidth macron */ &&
144
+ !(char >= 0xFFE8 /* halfwidth forms light vertical */ && char <= 0xFFEF)) {
145
+ return true;
146
+ }
147
+ }
148
+ if (isChar['Small Form Variants'](char)) {
149
+ if (!((char >= 0xFE58 /* small em dash */ && char <= 0xFE5E) /* small right tortoise shell bracket */) &&
150
+ !((char >= 0xFE63 /* small hyphen-minus */ && char <= 0xFE66) /* small equals sign */)) {
151
+ return true;
152
+ }
153
+ }
154
+ if (isChar['Unified Canadian Aboriginal Syllabics'](char)) return true;
155
+ if (isChar['Unified Canadian Aboriginal Syllabics Extended'](char)) return true;
156
+ if (isChar['Vertical Forms'](char)) return true;
157
+ if (isChar['Yijing Hexagram Symbols'](char)) return true;
158
+ if (isChar['Yi Syllables'](char)) return true;
159
+ if (isChar['Yi Radicals'](char)) return true;
160
+
161
+ return false;
162
+ }
163
+
164
+ /**
165
+ * Returns true if the given Unicode codepoint identifies a character with
166
+ * neutral orientation.
167
+ *
168
+ * A character has neutral orientation if it may be drawn rotated or unrotated
169
+ * when the line is oriented vertically, depending on the orientation of the
170
+ * adjacent characters. For example, along a verticlly oriented line, the vulgar
171
+ * fraction ½ is drawn upright among Chinese characters but rotated among Latin
172
+ * letters. A neutrally oriented character does not influence whether an
173
+ * adjacent character is drawn upright or rotated.
174
+ * @private
175
+ */
176
+ export function charHasNeutralVerticalOrientation(char: number) {
177
+ if (isChar['Latin-1 Supplement'](char)) {
178
+ if (char === 0x00A7 /* section sign */ ||
179
+ char === 0x00A9 /* copyright sign */ ||
180
+ char === 0x00AE /* registered sign */ ||
181
+ char === 0x00B1 /* plus-minus sign */ ||
182
+ char === 0x00BC /* vulgar fraction one quarter */ ||
183
+ char === 0x00BD /* vulgar fraction one half */ ||
184
+ char === 0x00BE /* vulgar fraction three quarters */ ||
185
+ char === 0x00D7 /* multiplication sign */ ||
186
+ char === 0x00F7 /* division sign */) {
187
+ return true;
188
+ }
189
+ }
190
+ if (isChar['General Punctuation'](char)) {
191
+ if (char === 0x2016 /* double vertical line */ ||
192
+ char === 0x2020 /* dagger */ ||
193
+ char === 0x2021 /* double dagger */ ||
194
+ char === 0x2030 /* per mille sign */ ||
195
+ char === 0x2031 /* per ten thousand sign */ ||
196
+ char === 0x203B /* reference mark */ ||
197
+ char === 0x203C /* double exclamation mark */ ||
198
+ char === 0x2042 /* asterism */ ||
199
+ char === 0x2047 /* double question mark */ ||
200
+ char === 0x2048 /* question exclamation mark */ ||
201
+ char === 0x2049 /* exclamation question mark */ ||
202
+ char === 0x2051 /* two asterisks aligned vertically */) {
203
+ return true;
204
+ }
205
+ }
206
+ if (isChar['Letterlike Symbols'](char)) return true;
207
+ if (isChar['Number Forms'](char)) return true;
208
+ if (isChar['Miscellaneous Technical'](char)) {
209
+ if ((char >= 0x2300 /* diameter sign */ && char <= 0x2307 /* wavy line */) ||
210
+ (char >= 0x230C /* bottom right crop */ && char <= 0x231F /* bottom right corner */) ||
211
+ (char >= 0x2324 /* up arrowhead between two horizontal bars */ && char <= 0x2328 /* keyboard */) ||
212
+ char === 0x232B /* erase to the left */ ||
213
+ (char >= 0x237D /* shouldered open box */ && char <= 0x239A /* clear screen symbol */) ||
214
+ (char >= 0x23BE /* dentistry symbol light vertical and top right */ && char <= 0x23CD /* square foot */) ||
215
+ char === 0x23CF /* eject symbol */ ||
216
+ (char >= 0x23D1 /* metrical breve */ && char <= 0x23DB /* fuse */) ||
217
+ (char >= 0x23E2 /* white trapezium */ && char <= 0x23FF)) {
218
+ return true;
219
+ }
220
+ }
221
+ if (isChar['Control Pictures'](char) && char !== 0x2423 /* open box */) return true;
222
+ if (isChar['Optical Character Recognition'](char)) return true;
223
+ if (isChar['Enclosed Alphanumerics'](char)) return true;
224
+ if (isChar['Geometric Shapes'](char)) return true;
225
+ if (isChar['Miscellaneous Symbols'](char)) {
226
+ if (!((char >= 0x261A /* black left pointing index */ && char <= 0x261F) /* white down pointing index */)) {
227
+ return true;
228
+ }
229
+ }
230
+ if (isChar['Miscellaneous Symbols and Arrows'](char)) {
231
+ if ((char >= 0x2B12 /* square with top half black */ && char <= 0x2B2F /* white vertical ellipse */) ||
232
+ (char >= 0x2B50 /* white medium star */ && char <= 0x2B59 /* heavy circled saltire */) ||
233
+ (char >= 0x2BB8 /* upwards white arrow from bar with horizontal bar */ && char <= 0x2BEB)) {
234
+ return true;
235
+ }
236
+ }
237
+ if (isChar['CJK Symbols and Punctuation'](char)) return true;
238
+ if (isChar['Katakana'](char)) return true;
239
+ if (isChar['Private Use Area'](char)) return true;
240
+ if (isChar['CJK Compatibility Forms'](char)) return true;
241
+ if (isChar['Small Form Variants'](char)) return true;
242
+ if (isChar['Halfwidth and Fullwidth Forms'](char)) return true;
243
+
244
+ if (char === 0x221E /* infinity */ ||
245
+ char === 0x2234 /* therefore */ ||
246
+ char === 0x2235 /* because */ ||
247
+ (char >= 0x2700 /* black safety scissors */ && char <= 0x2767 /* rotated floral heart bullet */) ||
248
+ (char >= 0x2776 /* dingbat negative circled digit one */ && char <= 0x2793 /* dingbat negative circled sans-serif number ten */) ||
249
+ char === 0xFFFC /* object replacement character */ ||
250
+ char === 0xFFFD /* replacement character */) {
251
+ return true;
252
+ }
253
+
254
+ return false;
255
+ }
256
+
257
+ /**
258
+ * Returns true if the given Unicode codepoint identifies a character with
259
+ * rotated orientation.
260
+ *
261
+ * A character has rotated orientation if it is drawn rotated when the line is
262
+ * oriented vertically, even if both adjacent characters are upright. For
263
+ * example, a Latin letter is drawn rotated along a vertical line. A rotated
264
+ * character causes an adjacent “neutral” character to be drawn rotated as well.
265
+ * @private
266
+ */
267
+ export function charHasRotatedVerticalOrientation(char: number) {
268
+ return !(charHasUprightVerticalOrientation(char) ||
269
+ charHasNeutralVerticalOrientation(char));
270
+ }
271
+
272
+ export function charInComplexShapingScript(char: number) {
273
+ return isChar['Arabic'](char) ||
274
+ isChar['Arabic Supplement'](char) ||
275
+ isChar['Arabic Extended-A'](char) ||
276
+ isChar['Arabic Presentation Forms-A'](char) ||
277
+ isChar['Arabic Presentation Forms-B'](char);
278
+ }
279
+
280
+ export function charInRTLScript(char: number) {
281
+ // Main blocks for Hebrew, Arabic, Thaana and other RTL scripts
282
+ return (char >= 0x0590 && char <= 0x08FF) ||
283
+ isChar['Arabic Presentation Forms-A'](char) ||
284
+ isChar['Arabic Presentation Forms-B'](char);
285
+ }
286
+
287
+ export function charInSupportedScript(char: number, canRenderRTL: boolean) {
288
+ // This is a rough heuristic: whether we "can render" a script
289
+ // actually depends on the properties of the font being used
290
+ // and whether differences from the ideal rendering are considered
291
+ // semantically significant.
292
+
293
+ // Even in Latin script, we "can't render" combinations such as the fi
294
+ // ligature, but we don't consider that semantically significant.
295
+ if (!canRenderRTL && charInRTLScript(char)) {
296
+ return false;
297
+ }
298
+ if ((char >= 0x0900 && char <= 0x0DFF) ||
299
+ // Main blocks for Indic scripts and Sinhala
300
+ (char >= 0x0F00 && char <= 0x109F) ||
301
+ // Main blocks for Tibetan and Myanmar
302
+ isChar['Khmer'](char)) {
303
+ // These blocks cover common scripts that require
304
+ // complex text shaping, based on unicode script metadata:
305
+ // http://www.unicode.org/repos/cldr/trunk/common/properties/scriptMetadata.txt
306
+ // where "Web Rank <= 32" "Shaping Required = YES"
307
+ return false;
308
+ }
309
+ return true;
310
+ }
311
+
312
+ export function stringContainsRTLText(chars: string): boolean {
313
+ for (const char of chars) {
314
+ if (charInRTLScript(char.charCodeAt(0))) {
315
+ return true;
316
+ }
317
+ }
318
+ return false;
319
+ }
320
+
321
+ export function isStringInSupportedScript(chars: string, canRenderRTL: boolean) {
322
+ for (const char of chars) {
323
+ if (!charInSupportedScript(char.charCodeAt(0), canRenderRTL)) {
324
+ return false;
325
+ }
326
+ }
327
+ return true;
328
+ }
@@ -0,0 +1,42 @@
1
+ // @flow
2
+
3
+ /***** START WARNING - IF YOU USE THIS CODE WITH MAPBOX MAPPING APIS, REMOVAL OR
4
+ * MODIFICATION OF THE FOLLOWING CODE VIOLATES THE MAPBOX TERMS OF SERVICE ******
5
+ * The following code is used to access Mapbox's Mapping APIs. Removal or modification
6
+ * of this code when used with Mapbox's Mapping APIs can result in higher fees and/or
7
+ * termination of your account with Mapbox.
8
+ *
9
+ * Under the Mapbox Terms of Service, you may not use this code to access Mapbox
10
+ * Mapping APIs other than through Mapbox SDKs.
11
+ *
12
+ * The Mapping APIs documentation is available at https://docs.mapbox.com/api/maps/#maps
13
+ * and the Mapbox Terms of Service are available at https://www.mapbox.com/tos/
14
+ ******************************************************************************/
15
+
16
+ type SkuTokenObject = {|
17
+ token: string,
18
+ tokenExpiresAt: number
19
+ |};
20
+
21
+ const SKU_ID = '01';
22
+
23
+ function createSkuToken(): SkuTokenObject {
24
+ // SKU_ID and TOKEN_VERSION are specified by an internal schema and should not change
25
+ const TOKEN_VERSION = '1';
26
+ const base62chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
27
+ // sessionRandomizer is a randomized 10-digit base-62 number
28
+ let sessionRandomizer = '';
29
+ for (let i = 0; i < 10; i++) {
30
+ sessionRandomizer += base62chars[Math.floor(Math.random() * 62)];
31
+ }
32
+ const expiration = 12 * 60 * 60 * 1000; // 12 hours
33
+ const token = [TOKEN_VERSION, SKU_ID, sessionRandomizer].join('');
34
+ const tokenExpiresAt = Date.now() + expiration;
35
+
36
+ return {token, tokenExpiresAt};
37
+ }
38
+
39
+ export {createSkuToken, SKU_ID};
40
+
41
+ /***** END WARNING - REMOVAL OR MODIFICATION OF THE
42
+ PRECEDING CODE VIOLATES THE MAPBOX TERMS OF SERVICE ******/
@@ -0,0 +1,55 @@
1
+ // @flow
2
+
3
+ import LngLat from '../geo/lng_lat';
4
+
5
+ import type Point from '@mapbox/point-geometry';
6
+ import type Transform from '../geo/transform';
7
+
8
+ /**
9
+ * Given a LngLat, prior projected position, and a transform, return a new LngLat shifted
10
+ * n × 360° east or west for some n ≥ 0 such that:
11
+ *
12
+ * * the projected location of the result is on screen, if possible, and secondarily:
13
+ * * the difference between the projected location of the result and the prior position
14
+ * is minimized.
15
+ *
16
+ * The object is to preserve perceived object constancy for Popups and Markers as much as
17
+ * possible; they should avoid shifting large distances across the screen, even when the
18
+ * map center changes by ±360° due to automatic wrapping, and when about to go off screen,
19
+ * should wrap just enough to avoid doing so.
20
+ *
21
+ * @private
22
+ */
23
+ export default function(lngLat: LngLat, priorPos: ?Point, transform: Transform): LngLat {
24
+ lngLat = new LngLat(lngLat.lng, lngLat.lat);
25
+
26
+ // First, try shifting one world in either direction, and see if either is closer to the
27
+ // prior position. This preserves object constancy when the map center is auto-wrapped
28
+ // during animations.
29
+ if (priorPos) {
30
+ const left = new LngLat(lngLat.lng - 360, lngLat.lat);
31
+ const right = new LngLat(lngLat.lng + 360, lngLat.lat);
32
+ const delta = transform.locationPoint(lngLat).distSqr(priorPos);
33
+ if (transform.locationPoint(left).distSqr(priorPos) < delta) {
34
+ lngLat = left;
35
+ } else if (transform.locationPoint(right).distSqr(priorPos) < delta) {
36
+ lngLat = right;
37
+ }
38
+ }
39
+
40
+ // Second, wrap toward the center until the new position is on screen, or we can't get
41
+ // any closer.
42
+ while (Math.abs(lngLat.lng - transform.center.lng) > 180) {
43
+ const pos = transform.locationPoint(lngLat);
44
+ if (pos.x >= 0 && pos.y >= 0 && pos.x <= transform.width && pos.y <= transform.height) {
45
+ break;
46
+ }
47
+ if (lngLat.lng > transform.center.lng) {
48
+ lngLat.lng -= 360;
49
+ } else {
50
+ lngLat.lng += 360;
51
+ }
52
+ }
53
+
54
+ return lngLat;
55
+ }