@scoova/mgl 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +116 -0
- package/README.md +174 -0
- package/build/banner.ts +12 -0
- package/build/bump-version-changelog.js +26 -0
- package/build/check-bundle-size.js +77 -0
- package/build/generate-dist-package.js +26 -0
- package/build/generate-doc-images.ts +78 -0
- package/build/generate-docs.ts +190 -0
- package/build/generate-shaders.ts +68 -0
- package/build/generate-struct-arrays.ts +438 -0
- package/build/generate-style-code.ts +283 -0
- package/build/readme.md +56 -0
- package/build/release-notes.js +45 -0
- package/build/rollup/bundle_prelude.js +29 -0
- package/build/rollup/maplibregl.js +22 -0
- package/build/rollup_plugins.ts +58 -0
- package/dist/LICENSE.txt +116 -0
- package/dist/maplibre-gl.css +1 -0
- package/dist/maplibre-gl.d.ts +13304 -0
- package/dist/maplibre-gl.js +59 -0
- package/dist/maplibre-gl.js.map +1 -0
- package/dist/package.json +1 -0
- package/package.json +192 -0
- package/src/css/maplibre-gl.css +854 -0
- package/src/css/svg/maplibregl-ctrl-attrib.svg +3 -0
- package/src/css/svg/maplibregl-ctrl-compass.svg +4 -0
- package/src/css/svg/maplibregl-ctrl-fullscreen.svg +3 -0
- package/src/css/svg/maplibregl-ctrl-geolocate.svg +5 -0
- package/src/css/svg/maplibregl-ctrl-logo.svg +11 -0
- package/src/css/svg/maplibregl-ctrl-shrink.svg +3 -0
- package/src/css/svg/maplibregl-ctrl-terrain.svg +3 -0
- package/src/css/svg/maplibregl-ctrl-zoom-in.svg +3 -0
- package/src/css/svg/maplibregl-ctrl-zoom-out.svg +3 -0
- package/src/data/array_types.g.ts +1130 -0
- package/src/data/bucket/circle_attributes.ts +8 -0
- package/src/data/bucket/circle_bucket.ts +197 -0
- package/src/data/bucket/fill_attributes.ts +8 -0
- package/src/data/bucket/fill_bucket.test.ts +95 -0
- package/src/data/bucket/fill_bucket.ts +228 -0
- package/src/data/bucket/fill_extrusion_attributes.ts +13 -0
- package/src/data/bucket/fill_extrusion_bucket.ts +305 -0
- package/src/data/bucket/heatmap_bucket.ts +12 -0
- package/src/data/bucket/line_attributes.ts +8 -0
- package/src/data/bucket/line_attributes_ext.ts +8 -0
- package/src/data/bucket/line_bucket.test.ts +142 -0
- package/src/data/bucket/line_bucket.ts +592 -0
- package/src/data/bucket/pattern_attributes.ts +9 -0
- package/src/data/bucket/pattern_bucket_features.ts +57 -0
- package/src/data/bucket/symbol_attributes.ts +122 -0
- package/src/data/bucket/symbol_bucket.test.ts +243 -0
- package/src/data/bucket/symbol_bucket.ts +975 -0
- package/src/data/bucket.ts +123 -0
- package/src/data/dem_data.test.ts +237 -0
- package/src/data/dem_data.ts +171 -0
- package/src/data/evaluation_feature.ts +18 -0
- package/src/data/extent.ts +13 -0
- package/src/data/feature_index.ts +337 -0
- package/src/data/feature_position_map.test.ts +33 -0
- package/src/data/feature_position_map.ts +126 -0
- package/src/data/index_array_type.ts +9 -0
- package/src/data/load_geometry.test.ts +49 -0
- package/src/data/load_geometry.ts +44 -0
- package/src/data/pos3d_attributes.ts +5 -0
- package/src/data/pos_attributes.ts +5 -0
- package/src/data/program_configuration.ts +735 -0
- package/src/data/raster_bounds_attributes.ts +6 -0
- package/src/data/segment.ts +89 -0
- package/src/geo/edge_insets.test.ts +83 -0
- package/src/geo/edge_insets.ts +146 -0
- package/src/geo/lng_lat.test.ts +65 -0
- package/src/geo/lng_lat.ts +169 -0
- package/src/geo/lng_lat_bounds.test.ts +357 -0
- package/src/geo/lng_lat_bounds.ts +356 -0
- package/src/geo/mercator_coordinate.test.ts +34 -0
- package/src/geo/mercator_coordinate.ts +157 -0
- package/src/geo/projection/projection.ts +72 -0
- package/src/geo/transform.test.ts +509 -0
- package/src/geo/transform.ts +1072 -0
- package/src/gl/color_mode.ts +31 -0
- package/src/gl/context.ts +321 -0
- package/src/gl/cull_face_mode.ts +22 -0
- package/src/gl/depth_mode.ts +26 -0
- package/src/gl/framebuffer.ts +48 -0
- package/src/gl/index_buffer.ts +55 -0
- package/src/gl/render_pool.test.ts +69 -0
- package/src/gl/render_pool.ts +93 -0
- package/src/gl/state.test.ts +125 -0
- package/src/gl/stencil_mode.ts +27 -0
- package/src/gl/types.ts +59 -0
- package/src/gl/value.ts +534 -0
- package/src/gl/vertex_buffer.test.ts +57 -0
- package/src/gl/vertex_buffer.ts +111 -0
- package/src/gl/webgl2.ts +12 -0
- package/src/index.test.ts +121 -0
- package/src/index.ts +250 -0
- package/src/render/draw_background.ts +53 -0
- package/src/render/draw_circle.ts +113 -0
- package/src/render/draw_collision_debug.ts +168 -0
- package/src/render/draw_custom.test.ts +73 -0
- package/src/render/draw_custom.ts +45 -0
- package/src/render/draw_debug.test.ts +122 -0
- package/src/render/draw_debug.ts +148 -0
- package/src/render/draw_fill.test.ts +137 -0
- package/src/render/draw_fill.ts +128 -0
- package/src/render/draw_fill_extrusion.ts +97 -0
- package/src/render/draw_heatmap.ts +228 -0
- package/src/render/draw_hillshade.ts +119 -0
- package/src/render/draw_line.ts +125 -0
- package/src/render/draw_raster.ts +133 -0
- package/src/render/draw_sky.ts +44 -0
- package/src/render/draw_symbol.test.ts +223 -0
- package/src/render/draw_symbol.ts +499 -0
- package/src/render/draw_terrain.ts +99 -0
- package/src/render/glyph_atlas.ts +83 -0
- package/src/render/glyph_manager.test.ts +147 -0
- package/src/render/glyph_manager.ts +198 -0
- package/src/render/image_atlas.ts +159 -0
- package/src/render/image_manager.ts +337 -0
- package/src/render/line_atlas.test.ts +38 -0
- package/src/render/line_atlas.ts +214 -0
- package/src/render/mesh.ts +25 -0
- package/src/render/painter.test.ts +51 -0
- package/src/render/painter.ts +666 -0
- package/src/render/program/background_program.ts +100 -0
- package/src/render/program/circle_program.ts +61 -0
- package/src/render/program/clipping_mask_program.ts +19 -0
- package/src/render/program/collision_program.ts +47 -0
- package/src/render/program/debug_program.ts +29 -0
- package/src/render/program/fill_extrusion_program.ts +120 -0
- package/src/render/program/fill_program.ts +121 -0
- package/src/render/program/heatmap_program.ts +76 -0
- package/src/render/program/hillshade_program.ts +116 -0
- package/src/render/program/line_program.ts +207 -0
- package/src/render/program/pattern.ts +102 -0
- package/src/render/program/program_uniforms.ts +46 -0
- package/src/render/program/raster_program.ts +88 -0
- package/src/render/program/sky_program.ts +28 -0
- package/src/render/program/symbol_program.ts +266 -0
- package/src/render/program/terrain_program.ts +116 -0
- package/src/render/program.ts +233 -0
- package/src/render/render_to_texture.test.ts +151 -0
- package/src/render/render_to_texture.ts +197 -0
- package/src/render/terrain.test.ts +322 -0
- package/src/render/terrain.ts +464 -0
- package/src/render/texture.ts +114 -0
- package/src/render/uniform_binding.test.ts +122 -0
- package/src/render/uniform_binding.ts +157 -0
- package/src/render/update_pattern_positions_in_program.test.ts +74 -0
- package/src/render/update_pattern_positions_in_program.ts +50 -0
- package/src/render/vertex_array_object.ts +163 -0
- package/src/shaders/README.md +42 -0
- package/src/shaders/_prelude.fragment.glsl +19 -0
- package/src/shaders/_prelude.fragment.glsl.g.ts +2 -0
- package/src/shaders/_prelude.vertex.glsl +148 -0
- package/src/shaders/_prelude.vertex.glsl.g.ts +2 -0
- package/src/shaders/background.fragment.glsl +10 -0
- package/src/shaders/background.fragment.glsl.g.ts +2 -0
- package/src/shaders/background.vertex.glsl +7 -0
- package/src/shaders/background.vertex.glsl.g.ts +2 -0
- package/src/shaders/background_pattern.fragment.glsl +28 -0
- package/src/shaders/background_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/background_pattern.vertex.glsl +19 -0
- package/src/shaders/background_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/circle.fragment.glsl +34 -0
- package/src/shaders/circle.fragment.glsl.g.ts +2 -0
- package/src/shaders/circle.vertex.glsl +68 -0
- package/src/shaders/circle.vertex.glsl.g.ts +2 -0
- package/src/shaders/clipping_mask.fragment.glsl +3 -0
- package/src/shaders/clipping_mask.fragment.glsl.g.ts +2 -0
- package/src/shaders/clipping_mask.vertex.glsl +7 -0
- package/src/shaders/clipping_mask.vertex.glsl.g.ts +2 -0
- package/src/shaders/collision_box.fragment.glsl +20 -0
- package/src/shaders/collision_box.fragment.glsl.g.ts +2 -0
- package/src/shaders/collision_box.vertex.glsl +27 -0
- package/src/shaders/collision_box.vertex.glsl.g.ts +2 -0
- package/src/shaders/collision_circle.fragment.glsl +17 -0
- package/src/shaders/collision_circle.fragment.glsl.g.ts +2 -0
- package/src/shaders/collision_circle.vertex.glsl +59 -0
- package/src/shaders/collision_circle.vertex.glsl.g.ts +2 -0
- package/src/shaders/debug.fragment.glsl +9 -0
- package/src/shaders/debug.fragment.glsl.g.ts +2 -0
- package/src/shaders/debug.vertex.glsl +12 -0
- package/src/shaders/debug.vertex.glsl.g.ts +2 -0
- package/src/shaders/encode_attribute.test.ts +11 -0
- package/src/shaders/encode_attribute.ts +13 -0
- package/src/shaders/fill.fragment.glsl +13 -0
- package/src/shaders/fill.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill.vertex.glsl +13 -0
- package/src/shaders/fill.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion.fragment.glsl +9 -0
- package/src/shaders/fill_extrusion.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion.vertex.glsl +84 -0
- package/src/shaders/fill_extrusion.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion_pattern.fragment.glsl +47 -0
- package/src/shaders/fill_extrusion_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion_pattern.vertex.glsl +96 -0
- package/src/shaders/fill_extrusion_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_outline.fragment.glsl +17 -0
- package/src/shaders/fill_outline.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_outline.vertex.glsl +17 -0
- package/src/shaders/fill_outline.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_outline_pattern.fragment.glsl +43 -0
- package/src/shaders/fill_outline_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_outline_pattern.vertex.glsl +44 -0
- package/src/shaders/fill_outline_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_pattern.fragment.glsl +39 -0
- package/src/shaders/fill_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_pattern.vertex.glsl +39 -0
- package/src/shaders/fill_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/heatmap.fragment.glsl +22 -0
- package/src/shaders/heatmap.fragment.glsl.g.ts +2 -0
- package/src/shaders/heatmap.vertex.glsl +54 -0
- package/src/shaders/heatmap.vertex.glsl.g.ts +2 -0
- package/src/shaders/heatmap_texture.fragment.glsl +15 -0
- package/src/shaders/heatmap_texture.fragment.glsl.g.ts +2 -0
- package/src/shaders/heatmap_texture.vertex.glsl +11 -0
- package/src/shaders/heatmap_texture.vertex.glsl.g.ts +2 -0
- package/src/shaders/hillshade.fragment.glsl +52 -0
- package/src/shaders/hillshade.fragment.glsl.g.ts +2 -0
- package/src/shaders/hillshade.vertex.glsl +11 -0
- package/src/shaders/hillshade.vertex.glsl.g.ts +2 -0
- package/src/shaders/hillshade_prepare.fragment.glsl +77 -0
- package/src/shaders/hillshade_prepare.fragment.glsl.g.ts +2 -0
- package/src/shaders/hillshade_prepare.vertex.glsl +15 -0
- package/src/shaders/hillshade_prepare.vertex.glsl.g.ts +2 -0
- package/src/shaders/line.fragment.glsl +30 -0
- package/src/shaders/line.fragment.glsl.g.ts +2 -0
- package/src/shaders/line.vertex.glsl +89 -0
- package/src/shaders/line.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_gradient.fragment.glsl +34 -0
- package/src/shaders/line_gradient.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_gradient.vertex.glsl +92 -0
- package/src/shaders/line_gradient.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_pattern.fragment.glsl +77 -0
- package/src/shaders/line_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_pattern.vertex.glsl +103 -0
- package/src/shaders/line_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_sdf.fragment.glsl +45 -0
- package/src/shaders/line_sdf.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_sdf.vertex.glsl +101 -0
- package/src/shaders/line_sdf.vertex.glsl.g.ts +2 -0
- package/src/shaders/raster.fragment.glsl +53 -0
- package/src/shaders/raster.fragment.glsl.g.ts +2 -0
- package/src/shaders/raster.vertex.glsl +21 -0
- package/src/shaders/raster.vertex.glsl.g.ts +2 -0
- package/src/shaders/shaders.ts +197 -0
- package/src/shaders/sky.fragment.glsl +17 -0
- package/src/shaders/sky.fragment.glsl.g.ts +2 -0
- package/src/shaders/sky.vertex.glsl +5 -0
- package/src/shaders/sky.vertex.glsl.g.ts +2 -0
- package/src/shaders/symbol_icon.fragment.glsl +17 -0
- package/src/shaders/symbol_icon.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_icon.vertex.glsl +117 -0
- package/src/shaders/symbol_icon.vertex.glsl.g.ts +2 -0
- package/src/shaders/symbol_sdf.fragment.glsl +58 -0
- package/src/shaders/symbol_sdf.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_sdf.vertex.glsl +142 -0
- package/src/shaders/symbol_sdf.vertex.glsl.g.ts +2 -0
- package/src/shaders/symbol_text_and_icon.fragment.glsl +68 -0
- package/src/shaders/symbol_text_and_icon.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_text_and_icon.vertex.glsl +140 -0
- package/src/shaders/symbol_text_and_icon.vertex.glsl.g.ts +2 -0
- package/src/shaders/terrain.fragment.glsl +32 -0
- package/src/shaders/terrain.fragment.glsl.g.ts +2 -0
- package/src/shaders/terrain.vertex.glsl +17 -0
- package/src/shaders/terrain.vertex.glsl.g.ts +2 -0
- package/src/shaders/terrain_coords.fragment.glsl +11 -0
- package/src/shaders/terrain_coords.fragment.glsl.g.ts +2 -0
- package/src/shaders/terrain_coords.vertex.glsl +13 -0
- package/src/shaders/terrain_coords.vertex.glsl.g.ts +2 -0
- package/src/shaders/terrain_depth.fragment.glsl +15 -0
- package/src/shaders/terrain_depth.fragment.glsl.g.ts +2 -0
- package/src/shaders/terrain_depth.vertex.glsl +13 -0
- package/src/shaders/terrain_depth.vertex.glsl.g.ts +2 -0
- package/src/source/canvas_source.test.ts +210 -0
- package/src/source/canvas_source.ts +227 -0
- package/src/source/geojson_source.test.ts +492 -0
- package/src/source/geojson_source.ts +431 -0
- package/src/source/geojson_source_diff.test.ts +364 -0
- package/src/source/geojson_source_diff.ts +172 -0
- package/src/source/geojson_worker_source.test.ts +399 -0
- package/src/source/geojson_worker_source.ts +303 -0
- package/src/source/geojson_wrapper.test.ts +32 -0
- package/src/source/geojson_wrapper.ts +81 -0
- package/src/source/image_source.test.ts +235 -0
- package/src/source/image_source.ts +338 -0
- package/src/source/load_tilejson.ts +47 -0
- package/src/source/pixels_to_tile_units.ts +25 -0
- package/src/source/protocol_crud.ts +48 -0
- package/src/source/query_features.test.ts +31 -0
- package/src/source/query_features.ts +252 -0
- package/src/source/raster_dem_tile_source.test.ts +158 -0
- package/src/source/raster_dem_tile_source.ts +166 -0
- package/src/source/raster_dem_tile_worker_source.test.ts +36 -0
- package/src/source/raster_dem_tile_worker_source.ts +38 -0
- package/src/source/raster_tile_source.test.ts +206 -0
- package/src/source/raster_tile_source.ts +227 -0
- package/src/source/rtl_text_plugin_main_thread.test.ts +170 -0
- package/src/source/rtl_text_plugin_main_thread.ts +89 -0
- package/src/source/rtl_text_plugin_status.ts +33 -0
- package/src/source/rtl_text_plugin_worker.ts +49 -0
- package/src/source/source.test.ts +41 -0
- package/src/source/source.ts +186 -0
- package/src/source/source_cache.test.ts +2069 -0
- package/src/source/source_cache.ts +1102 -0
- package/src/source/source_state.ts +157 -0
- package/src/source/terrain_source_cache.test.ts +105 -0
- package/src/source/terrain_source_cache.ts +204 -0
- package/src/source/tile.test.ts +290 -0
- package/src/source/tile.ts +478 -0
- package/src/source/tile_bounds.ts +34 -0
- package/src/source/tile_cache.test.ts +130 -0
- package/src/source/tile_cache.ts +208 -0
- package/src/source/tile_id.test.ts +112 -0
- package/src/source/tile_id.ts +221 -0
- package/src/source/vector_tile_source.test.ts +401 -0
- package/src/source/vector_tile_source.ts +283 -0
- package/src/source/vector_tile_worker_source.test.ts +396 -0
- package/src/source/vector_tile_worker_source.ts +199 -0
- package/src/source/video_source.test.ts +124 -0
- package/src/source/video_source.ts +204 -0
- package/src/source/worker.test.ts +233 -0
- package/src/source/worker.ts +301 -0
- package/src/source/worker_source.ts +117 -0
- package/src/source/worker_tile.test.ts +226 -0
- package/src/source/worker_tile.ts +208 -0
- package/src/style/create_style_layer.ts +39 -0
- package/src/style/evaluation_parameters.ts +62 -0
- package/src/style/format_section_override.test.ts +62 -0
- package/src/style/format_section_override.ts +50 -0
- package/src/style/light.test.ts +86 -0
- package/src/style/light.ts +135 -0
- package/src/style/load_glyph_range.test.ts +40 -0
- package/src/style/load_glyph_range.ts +32 -0
- package/src/style/load_sprite.test.ts +227 -0
- package/src/style/load_sprite.ts +71 -0
- package/src/style/parse_glyph_pbf.ts +42 -0
- package/src/style/pauseable_placement.ts +138 -0
- package/src/style/properties.ts +726 -0
- package/src/style/query_utils.test.ts +107 -0
- package/src/style/query_utils.ts +70 -0
- package/src/style/sky.ts +127 -0
- package/src/style/style.test.ts +2654 -0
- package/src/style/style.ts +1814 -0
- package/src/style/style_glyph.ts +25 -0
- package/src/style/style_image.ts +188 -0
- package/src/style/style_layer/background_style_layer.ts +17 -0
- package/src/style/style_layer/background_style_layer_properties.g.ts +40 -0
- package/src/style/style_layer/circle_style_layer.ts +98 -0
- package/src/style/style_layer/circle_style_layer_properties.g.ts +76 -0
- package/src/style/style_layer/custom_style_layer.ts +233 -0
- package/src/style/style_layer/fill_extrusion_style_layer.ts +224 -0
- package/src/style/style_layer/fill_extrusion_style_layer_properties.g.ts +55 -0
- package/src/style/style_layer/fill_style_layer.test.ts +37 -0
- package/src/style/style_layer/fill_style_layer.ts +65 -0
- package/src/style/style_layer/fill_style_layer_properties.g.ts +64 -0
- package/src/style/style_layer/heatmap_style_layer.ts +74 -0
- package/src/style/style_layer/heatmap_style_layer_properties.g.ts +46 -0
- package/src/style/style_layer/hillshade_style_layer.ts +21 -0
- package/src/style/style_layer/hillshade_style_layer_properties.g.ts +49 -0
- package/src/style/style_layer/line_style_layer.test.ts +50 -0
- package/src/style/style_layer/line_style_layer.ts +131 -0
- package/src/style/style_layer/line_style_layer_properties.g.ts +88 -0
- package/src/style/style_layer/overlap_mode.test.ts +57 -0
- package/src/style/style_layer/overlap_mode.ts +25 -0
- package/src/style/style_layer/raster_style_layer.ts +17 -0
- package/src/style/style_layer/raster_style_layer_properties.g.ts +55 -0
- package/src/style/style_layer/symbol_style_layer.ts +195 -0
- package/src/style/style_layer/symbol_style_layer_properties.g.ts +218 -0
- package/src/style/style_layer/typed_style_layer.ts +9 -0
- package/src/style/style_layer/variable_text_anchor.test.ts +117 -0
- package/src/style/style_layer/variable_text_anchor.ts +163 -0
- package/src/style/style_layer.test.ts +372 -0
- package/src/style/style_layer.ts +287 -0
- package/src/style/style_layer_index.test.ts +99 -0
- package/src/style/style_layer_index.ts +78 -0
- package/src/style/validate_style.ts +53 -0
- package/src/style/zoom_history.ts +40 -0
- package/src/symbol/anchor.test.ts +14 -0
- package/src/symbol/anchor.ts +22 -0
- package/src/symbol/check_max_angle.test.ts +54 -0
- package/src/symbol/check_max_angle.ts +76 -0
- package/src/symbol/clip_line.test.ts +154 -0
- package/src/symbol/clip_line.ts +66 -0
- package/src/symbol/collision_feature.test.ts +98 -0
- package/src/symbol/collision_feature.ts +114 -0
- package/src/symbol/collision_index.test.ts +19 -0
- package/src/symbol/collision_index.ts +618 -0
- package/src/symbol/cross_tile_symbol_index.test.ts +260 -0
- package/src/symbol/cross_tile_symbol_index.ts +367 -0
- package/src/symbol/get_anchors.test.ts +113 -0
- package/src/symbol/get_anchors.ts +167 -0
- package/src/symbol/grid_index.test.ts +75 -0
- package/src/symbol/grid_index.ts +414 -0
- package/src/symbol/merge_lines.test.ts +30 -0
- package/src/symbol/merge_lines.ts +80 -0
- package/src/symbol/one_em.ts +3 -0
- package/src/symbol/opacity_state.ts +23 -0
- package/src/symbol/path_interpolator.test.ts +134 -0
- package/src/symbol/path_interpolator.ts +55 -0
- package/src/symbol/placement.ts +1371 -0
- package/src/symbol/projection.test.ts +171 -0
- package/src/symbol/projection.ts +833 -0
- package/src/symbol/quads.test.ts +157 -0
- package/src/symbol/quads.ts +349 -0
- package/src/symbol/shaping.test.ts +360 -0
- package/src/symbol/shaping.ts +911 -0
- package/src/symbol/symbol_layout.ts +739 -0
- package/src/symbol/symbol_size.ts +129 -0
- package/src/symbol/symbol_style_layer.test.ts +103 -0
- package/src/symbol/transform_text.ts +27 -0
- package/src/ui/anchor.ts +27 -0
- package/src/ui/camera.test.ts +2301 -0
- package/src/ui/camera.ts +1520 -0
- package/src/ui/control/attribution_control.test.ts +543 -0
- package/src/ui/control/attribution_control.ts +209 -0
- package/src/ui/control/control.ts +67 -0
- package/src/ui/control/fullscreen_control.test.ts +114 -0
- package/src/ui/control/fullscreen_control.ts +189 -0
- package/src/ui/control/geolocate_control.test.ts +619 -0
- package/src/ui/control/geolocate_control.ts +725 -0
- package/src/ui/control/logo_control.test.ts +88 -0
- package/src/ui/control/logo_control.ts +86 -0
- package/src/ui/control/navigation_control.test.ts +238 -0
- package/src/ui/control/navigation_control.ts +294 -0
- package/src/ui/control/scale_control.test.ts +52 -0
- package/src/ui/control/scale_control.ts +152 -0
- package/src/ui/control/terrain_control.test.ts +58 -0
- package/src/ui/control/terrain_control.ts +74 -0
- package/src/ui/default_locale.ts +25 -0
- package/src/ui/events.ts +758 -0
- package/src/ui/handler/box_zoom.test.ts +163 -0
- package/src/ui/handler/box_zoom.ts +171 -0
- package/src/ui/handler/click_zoom.ts +55 -0
- package/src/ui/handler/cooperative_gestures.test.ts +338 -0
- package/src/ui/handler/cooperative_gestures.ts +111 -0
- package/src/ui/handler/dblclick_zoom.test.ts +151 -0
- package/src/ui/handler/drag_handler.ts +174 -0
- package/src/ui/handler/drag_move_state_manager.ts +115 -0
- package/src/ui/handler/drag_pan.test.ts +487 -0
- package/src/ui/handler/drag_rotate.test.ts +859 -0
- package/src/ui/handler/handler_util.ts +10 -0
- package/src/ui/handler/keyboard.test.ts +235 -0
- package/src/ui/handler/keyboard.ts +212 -0
- package/src/ui/handler/map_event.test.ts +158 -0
- package/src/ui/handler/map_event.ts +161 -0
- package/src/ui/handler/mouse.ts +92 -0
- package/src/ui/handler/mouse_handler_interface.test.ts +111 -0
- package/src/ui/handler/mouse_rotate.test.ts +62 -0
- package/src/ui/handler/one_finger_touch_drag.ts +45 -0
- package/src/ui/handler/one_finger_touch_drag_handler_interface.test.ts +77 -0
- package/src/ui/handler/scroll_zoom.test.ts +382 -0
- package/src/ui/handler/scroll_zoom.ts +379 -0
- package/src/ui/handler/shim/dblclick_zoom.ts +64 -0
- package/src/ui/handler/shim/drag_pan.ts +104 -0
- package/src/ui/handler/shim/drag_rotate.ts +76 -0
- package/src/ui/handler/shim/two_fingers_touch.ts +112 -0
- package/src/ui/handler/tap_drag_zoom.test.ts +113 -0
- package/src/ui/handler/tap_drag_zoom.ts +112 -0
- package/src/ui/handler/tap_recognizer.ts +138 -0
- package/src/ui/handler/tap_zoom.ts +98 -0
- package/src/ui/handler/touch_pan.ts +115 -0
- package/src/ui/handler/transform-provider.ts +44 -0
- package/src/ui/handler/two_fingers_touch.test.ts +283 -0
- package/src/ui/handler/two_fingers_touch.ts +336 -0
- package/src/ui/handler_inertia.ts +157 -0
- package/src/ui/handler_manager.ts +637 -0
- package/src/ui/hash.test.ts +404 -0
- package/src/ui/hash.ts +153 -0
- package/src/ui/map.ts +3393 -0
- package/src/ui/map_tests/map_animation.test.ts +61 -0
- package/src/ui/map_tests/map_basic.test.ts +223 -0
- package/src/ui/map_tests/map_bounds.test.ts +123 -0
- package/src/ui/map_tests/map_calculate_camera_options.test.ts +113 -0
- package/src/ui/map_tests/map_canvas.test.ts +59 -0
- package/src/ui/map_tests/map_control.test.ts +61 -0
- package/src/ui/map_tests/map_disable_handlers.test.ts +38 -0
- package/src/ui/map_tests/map_events.test.ts +1001 -0
- package/src/ui/map_tests/map_feature_state.test.ts +421 -0
- package/src/ui/map_tests/map_images.test.ts +175 -0
- package/src/ui/map_tests/map_is_moving.test.ts +164 -0
- package/src/ui/map_tests/map_is_rotating.test.ts +62 -0
- package/src/ui/map_tests/map_is_zooming.test.ts +86 -0
- package/src/ui/map_tests/map_layer.test.ts +457 -0
- package/src/ui/map_tests/map_options.test.ts +64 -0
- package/src/ui/map_tests/map_pitch.test.ts +90 -0
- package/src/ui/map_tests/map_pixel_ratio.test.ts +75 -0
- package/src/ui/map_tests/map_query_rendered_features.test.ts +93 -0
- package/src/ui/map_tests/map_render.test.ts +90 -0
- package/src/ui/map_tests/map_request_render_frame.test.ts +51 -0
- package/src/ui/map_tests/map_resize.test.ts +120 -0
- package/src/ui/map_tests/map_style.test.ts +541 -0
- package/src/ui/map_tests/map_terrian.test.ts +104 -0
- package/src/ui/map_tests/map_webgl.test.ts +72 -0
- package/src/ui/map_tests/map_world_copies.test.ts +103 -0
- package/src/ui/map_tests/map_zoom.test.ts +95 -0
- package/src/ui/marker.test.ts +1149 -0
- package/src/ui/marker.ts +880 -0
- package/src/ui/popup.test.ts +827 -0
- package/src/ui/popup.ts +717 -0
- package/src/util/abort_error.ts +21 -0
- package/src/util/actor.test.ts +218 -0
- package/src/util/actor.ts +241 -0
- package/src/util/actor_messages.ts +149 -0
- package/src/util/ajax.test.ts +237 -0
- package/src/util/ajax.ts +297 -0
- package/src/util/browser.test.ts +23 -0
- package/src/util/browser.ts +63 -0
- package/src/util/color_ramp.test.ts +105 -0
- package/src/util/color_ramp.ts +56 -0
- package/src/util/config.ts +29 -0
- package/src/util/dictionary_coder.ts +23 -0
- package/src/util/dispatcher.test.ts +76 -0
- package/src/util/dispatcher.ts +78 -0
- package/src/util/dom.ts +135 -0
- package/src/util/evented.test.ts +231 -0
- package/src/util/evented.ts +178 -0
- package/src/util/find_pole_of_inaccessibility.test.ts +21 -0
- package/src/util/find_pole_of_inaccessibility.ts +130 -0
- package/src/util/geolocation_support.test.ts +43 -0
- package/src/util/geolocation_support.ts +23 -0
- package/src/util/global_worker_pool.ts +65 -0
- package/src/util/image.ts +150 -0
- package/src/util/image_request.test.ts +408 -0
- package/src/util/image_request.ts +246 -0
- package/src/util/intersection_tests.ts +206 -0
- package/src/util/is_char_in_unicode_block.test.ts +15 -0
- package/src/util/is_char_in_unicode_block.ts +345 -0
- package/src/util/offscreen_canvas_distorted.test.ts +13 -0
- package/src/util/offscreen_canvas_distorted.ts +39 -0
- package/src/util/offscreen_canvas_supported.ts +11 -0
- package/src/util/performance.ts +117 -0
- package/src/util/primitives.test.ts +140 -0
- package/src/util/primitives.ts +143 -0
- package/src/util/request_manager.ts +42 -0
- package/src/util/resolve_tokens.test.ts +45 -0
- package/src/util/resolve_tokens.ts +17 -0
- package/src/util/script_detection.test.ts +138 -0
- package/src/util/script_detection.ts +376 -0
- package/src/util/smart_wrap.test.ts +97 -0
- package/src/util/smart_wrap.ts +58 -0
- package/src/util/struct_array.test.ts +101 -0
- package/src/util/struct_array.ts +246 -0
- package/src/util/style.test.ts +34 -0
- package/src/util/style.ts +28 -0
- package/src/util/task_queue.test.ts +114 -0
- package/src/util/task_queue.ts +64 -0
- package/src/util/test/util.ts +185 -0
- package/src/util/throttle.test.ts +42 -0
- package/src/util/throttle.ts +28 -0
- package/src/util/throttled_invoker.ts +41 -0
- package/src/util/transferable_grid_index.test.ts +56 -0
- package/src/util/transferable_grid_index.ts +214 -0
- package/src/util/util.test.ts +414 -0
- package/src/util/util.ts +724 -0
- package/src/util/vectortile_to_geojson.ts +72 -0
- package/src/util/verticalize_punctuation.ts +110 -0
- package/src/util/web_worker.ts +16 -0
- package/src/util/web_worker_transfer.test.ts +153 -0
- package/src/util/web_worker_transfer.ts +254 -0
- package/src/util/webp_supported.ts +63 -0
- package/src/util/worker_pool.test.ts +43 -0
- package/src/util/worker_pool.ts +58 -0
- package/src/util/world_bounds.test.ts +59 -0
- package/src/util/world_bounds.ts +46 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// This file is generated. Edit build/generate-style-code.ts, then run 'npm run codegen'.
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
|
|
4
|
+
import {latest as styleSpec} from '@maplibre/maplibre-gl-style-spec';
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
Properties,
|
|
8
|
+
DataConstantProperty,
|
|
9
|
+
DataDrivenProperty,
|
|
10
|
+
CrossFadedDataDrivenProperty,
|
|
11
|
+
CrossFadedProperty,
|
|
12
|
+
ColorRampProperty,
|
|
13
|
+
PossiblyEvaluatedPropertyValue,
|
|
14
|
+
CrossFaded
|
|
15
|
+
} from '../properties';
|
|
16
|
+
|
|
17
|
+
import type {Color, Formatted, Padding, ResolvedImage, VariableAnchorOffsetCollection} from '@maplibre/maplibre-gl-style-spec';
|
|
18
|
+
import {StylePropertySpecification} from '@maplibre/maplibre-gl-style-spec';
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
ColorType
|
|
22
|
+
} from '@maplibre/maplibre-gl-style-spec';
|
|
23
|
+
|
|
24
|
+
export type SymbolLayoutProps = {
|
|
25
|
+
"symbol-placement": DataConstantProperty<"point" | "line" | "line-center">,
|
|
26
|
+
"symbol-spacing": DataConstantProperty<number>,
|
|
27
|
+
"symbol-avoid-edges": DataConstantProperty<boolean>,
|
|
28
|
+
"symbol-sort-key": DataDrivenProperty<number>,
|
|
29
|
+
"symbol-z-order": DataConstantProperty<"auto" | "viewport-y" | "source">,
|
|
30
|
+
"icon-allow-overlap": DataConstantProperty<boolean>,
|
|
31
|
+
"icon-overlap": DataConstantProperty<"never" | "always" | "cooperative">,
|
|
32
|
+
"icon-ignore-placement": DataConstantProperty<boolean>,
|
|
33
|
+
"icon-optional": DataConstantProperty<boolean>,
|
|
34
|
+
"icon-rotation-alignment": DataConstantProperty<"map" | "viewport" | "auto">,
|
|
35
|
+
"icon-size": DataDrivenProperty<number>,
|
|
36
|
+
"icon-text-fit": DataConstantProperty<"none" | "width" | "height" | "both">,
|
|
37
|
+
"icon-text-fit-padding": DataConstantProperty<[number, number, number, number]>,
|
|
38
|
+
"icon-image": DataDrivenProperty<ResolvedImage>,
|
|
39
|
+
"icon-rotate": DataDrivenProperty<number>,
|
|
40
|
+
"icon-padding": DataDrivenProperty<Padding>,
|
|
41
|
+
"icon-keep-upright": DataConstantProperty<boolean>,
|
|
42
|
+
"icon-offset": DataDrivenProperty<[number, number]>,
|
|
43
|
+
"icon-anchor": DataDrivenProperty<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">,
|
|
44
|
+
"icon-pitch-alignment": DataConstantProperty<"map" | "viewport" | "auto">,
|
|
45
|
+
"text-pitch-alignment": DataConstantProperty<"map" | "viewport" | "auto">,
|
|
46
|
+
"text-rotation-alignment": DataConstantProperty<"map" | "viewport" | "viewport-glyph" | "auto">,
|
|
47
|
+
"text-field": DataDrivenProperty<Formatted>,
|
|
48
|
+
"text-font": DataDrivenProperty<Array<string>>,
|
|
49
|
+
"text-size": DataDrivenProperty<number>,
|
|
50
|
+
"text-max-width": DataDrivenProperty<number>,
|
|
51
|
+
"text-line-height": DataConstantProperty<number>,
|
|
52
|
+
"text-letter-spacing": DataDrivenProperty<number>,
|
|
53
|
+
"text-justify": DataDrivenProperty<"auto" | "left" | "center" | "right">,
|
|
54
|
+
"text-radial-offset": DataDrivenProperty<number>,
|
|
55
|
+
"text-variable-anchor": DataConstantProperty<Array<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">>,
|
|
56
|
+
"text-variable-anchor-offset": DataDrivenProperty<VariableAnchorOffsetCollection>,
|
|
57
|
+
"text-anchor": DataDrivenProperty<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">,
|
|
58
|
+
"text-max-angle": DataConstantProperty<number>,
|
|
59
|
+
"text-writing-mode": DataConstantProperty<Array<"horizontal" | "vertical">>,
|
|
60
|
+
"text-rotate": DataDrivenProperty<number>,
|
|
61
|
+
"text-padding": DataConstantProperty<number>,
|
|
62
|
+
"text-keep-upright": DataConstantProperty<boolean>,
|
|
63
|
+
"text-transform": DataDrivenProperty<"none" | "uppercase" | "lowercase">,
|
|
64
|
+
"text-offset": DataDrivenProperty<[number, number]>,
|
|
65
|
+
"text-allow-overlap": DataConstantProperty<boolean>,
|
|
66
|
+
"text-overlap": DataConstantProperty<"never" | "always" | "cooperative">,
|
|
67
|
+
"text-ignore-placement": DataConstantProperty<boolean>,
|
|
68
|
+
"text-optional": DataConstantProperty<boolean>,
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export type SymbolLayoutPropsPossiblyEvaluated = {
|
|
72
|
+
"symbol-placement": "point" | "line" | "line-center",
|
|
73
|
+
"symbol-spacing": number,
|
|
74
|
+
"symbol-avoid-edges": boolean,
|
|
75
|
+
"symbol-sort-key": PossiblyEvaluatedPropertyValue<number>,
|
|
76
|
+
"symbol-z-order": "auto" | "viewport-y" | "source",
|
|
77
|
+
"icon-allow-overlap": boolean,
|
|
78
|
+
"icon-overlap": "never" | "always" | "cooperative",
|
|
79
|
+
"icon-ignore-placement": boolean,
|
|
80
|
+
"icon-optional": boolean,
|
|
81
|
+
"icon-rotation-alignment": "map" | "viewport" | "auto",
|
|
82
|
+
"icon-size": PossiblyEvaluatedPropertyValue<number>,
|
|
83
|
+
"icon-text-fit": "none" | "width" | "height" | "both",
|
|
84
|
+
"icon-text-fit-padding": [number, number, number, number],
|
|
85
|
+
"icon-image": PossiblyEvaluatedPropertyValue<ResolvedImage>,
|
|
86
|
+
"icon-rotate": PossiblyEvaluatedPropertyValue<number>,
|
|
87
|
+
"icon-padding": PossiblyEvaluatedPropertyValue<Padding>,
|
|
88
|
+
"icon-keep-upright": boolean,
|
|
89
|
+
"icon-offset": PossiblyEvaluatedPropertyValue<[number, number]>,
|
|
90
|
+
"icon-anchor": PossiblyEvaluatedPropertyValue<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">,
|
|
91
|
+
"icon-pitch-alignment": "map" | "viewport" | "auto",
|
|
92
|
+
"text-pitch-alignment": "map" | "viewport" | "auto",
|
|
93
|
+
"text-rotation-alignment": "map" | "viewport" | "viewport-glyph" | "auto",
|
|
94
|
+
"text-field": PossiblyEvaluatedPropertyValue<Formatted>,
|
|
95
|
+
"text-font": PossiblyEvaluatedPropertyValue<Array<string>>,
|
|
96
|
+
"text-size": PossiblyEvaluatedPropertyValue<number>,
|
|
97
|
+
"text-max-width": PossiblyEvaluatedPropertyValue<number>,
|
|
98
|
+
"text-line-height": number,
|
|
99
|
+
"text-letter-spacing": PossiblyEvaluatedPropertyValue<number>,
|
|
100
|
+
"text-justify": PossiblyEvaluatedPropertyValue<"auto" | "left" | "center" | "right">,
|
|
101
|
+
"text-radial-offset": PossiblyEvaluatedPropertyValue<number>,
|
|
102
|
+
"text-variable-anchor": Array<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">,
|
|
103
|
+
"text-variable-anchor-offset": PossiblyEvaluatedPropertyValue<VariableAnchorOffsetCollection>,
|
|
104
|
+
"text-anchor": PossiblyEvaluatedPropertyValue<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">,
|
|
105
|
+
"text-max-angle": number,
|
|
106
|
+
"text-writing-mode": Array<"horizontal" | "vertical">,
|
|
107
|
+
"text-rotate": PossiblyEvaluatedPropertyValue<number>,
|
|
108
|
+
"text-padding": number,
|
|
109
|
+
"text-keep-upright": boolean,
|
|
110
|
+
"text-transform": PossiblyEvaluatedPropertyValue<"none" | "uppercase" | "lowercase">,
|
|
111
|
+
"text-offset": PossiblyEvaluatedPropertyValue<[number, number]>,
|
|
112
|
+
"text-allow-overlap": boolean,
|
|
113
|
+
"text-overlap": "never" | "always" | "cooperative",
|
|
114
|
+
"text-ignore-placement": boolean,
|
|
115
|
+
"text-optional": boolean,
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
let layout: Properties<SymbolLayoutProps>;
|
|
119
|
+
const getLayout = () => layout = layout || new Properties({
|
|
120
|
+
"symbol-placement": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-placement"] as any as StylePropertySpecification),
|
|
121
|
+
"symbol-spacing": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-spacing"] as any as StylePropertySpecification),
|
|
122
|
+
"symbol-avoid-edges": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-avoid-edges"] as any as StylePropertySpecification),
|
|
123
|
+
"symbol-sort-key": new DataDrivenProperty(styleSpec["layout_symbol"]["symbol-sort-key"] as any as StylePropertySpecification),
|
|
124
|
+
"symbol-z-order": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-z-order"] as any as StylePropertySpecification),
|
|
125
|
+
"icon-allow-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["icon-allow-overlap"] as any as StylePropertySpecification),
|
|
126
|
+
"icon-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["icon-overlap"] as any as StylePropertySpecification),
|
|
127
|
+
"icon-ignore-placement": new DataConstantProperty(styleSpec["layout_symbol"]["icon-ignore-placement"] as any as StylePropertySpecification),
|
|
128
|
+
"icon-optional": new DataConstantProperty(styleSpec["layout_symbol"]["icon-optional"] as any as StylePropertySpecification),
|
|
129
|
+
"icon-rotation-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["icon-rotation-alignment"] as any as StylePropertySpecification),
|
|
130
|
+
"icon-size": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-size"] as any as StylePropertySpecification),
|
|
131
|
+
"icon-text-fit": new DataConstantProperty(styleSpec["layout_symbol"]["icon-text-fit"] as any as StylePropertySpecification),
|
|
132
|
+
"icon-text-fit-padding": new DataConstantProperty(styleSpec["layout_symbol"]["icon-text-fit-padding"] as any as StylePropertySpecification),
|
|
133
|
+
"icon-image": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-image"] as any as StylePropertySpecification),
|
|
134
|
+
"icon-rotate": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-rotate"] as any as StylePropertySpecification),
|
|
135
|
+
"icon-padding": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-padding"] as any as StylePropertySpecification),
|
|
136
|
+
"icon-keep-upright": new DataConstantProperty(styleSpec["layout_symbol"]["icon-keep-upright"] as any as StylePropertySpecification),
|
|
137
|
+
"icon-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-offset"] as any as StylePropertySpecification),
|
|
138
|
+
"icon-anchor": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-anchor"] as any as StylePropertySpecification),
|
|
139
|
+
"icon-pitch-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["icon-pitch-alignment"] as any as StylePropertySpecification),
|
|
140
|
+
"text-pitch-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["text-pitch-alignment"] as any as StylePropertySpecification),
|
|
141
|
+
"text-rotation-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["text-rotation-alignment"] as any as StylePropertySpecification),
|
|
142
|
+
"text-field": new DataDrivenProperty(styleSpec["layout_symbol"]["text-field"] as any as StylePropertySpecification),
|
|
143
|
+
"text-font": new DataDrivenProperty(styleSpec["layout_symbol"]["text-font"] as any as StylePropertySpecification),
|
|
144
|
+
"text-size": new DataDrivenProperty(styleSpec["layout_symbol"]["text-size"] as any as StylePropertySpecification),
|
|
145
|
+
"text-max-width": new DataDrivenProperty(styleSpec["layout_symbol"]["text-max-width"] as any as StylePropertySpecification),
|
|
146
|
+
"text-line-height": new DataConstantProperty(styleSpec["layout_symbol"]["text-line-height"] as any as StylePropertySpecification),
|
|
147
|
+
"text-letter-spacing": new DataDrivenProperty(styleSpec["layout_symbol"]["text-letter-spacing"] as any as StylePropertySpecification),
|
|
148
|
+
"text-justify": new DataDrivenProperty(styleSpec["layout_symbol"]["text-justify"] as any as StylePropertySpecification),
|
|
149
|
+
"text-radial-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["text-radial-offset"] as any as StylePropertySpecification),
|
|
150
|
+
"text-variable-anchor": new DataConstantProperty(styleSpec["layout_symbol"]["text-variable-anchor"] as any as StylePropertySpecification),
|
|
151
|
+
"text-variable-anchor-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["text-variable-anchor-offset"] as any as StylePropertySpecification),
|
|
152
|
+
"text-anchor": new DataDrivenProperty(styleSpec["layout_symbol"]["text-anchor"] as any as StylePropertySpecification),
|
|
153
|
+
"text-max-angle": new DataConstantProperty(styleSpec["layout_symbol"]["text-max-angle"] as any as StylePropertySpecification),
|
|
154
|
+
"text-writing-mode": new DataConstantProperty(styleSpec["layout_symbol"]["text-writing-mode"] as any as StylePropertySpecification),
|
|
155
|
+
"text-rotate": new DataDrivenProperty(styleSpec["layout_symbol"]["text-rotate"] as any as StylePropertySpecification),
|
|
156
|
+
"text-padding": new DataConstantProperty(styleSpec["layout_symbol"]["text-padding"] as any as StylePropertySpecification),
|
|
157
|
+
"text-keep-upright": new DataConstantProperty(styleSpec["layout_symbol"]["text-keep-upright"] as any as StylePropertySpecification),
|
|
158
|
+
"text-transform": new DataDrivenProperty(styleSpec["layout_symbol"]["text-transform"] as any as StylePropertySpecification),
|
|
159
|
+
"text-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["text-offset"] as any as StylePropertySpecification),
|
|
160
|
+
"text-allow-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["text-allow-overlap"] as any as StylePropertySpecification),
|
|
161
|
+
"text-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["text-overlap"] as any as StylePropertySpecification),
|
|
162
|
+
"text-ignore-placement": new DataConstantProperty(styleSpec["layout_symbol"]["text-ignore-placement"] as any as StylePropertySpecification),
|
|
163
|
+
"text-optional": new DataConstantProperty(styleSpec["layout_symbol"]["text-optional"] as any as StylePropertySpecification),
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
export type SymbolPaintProps = {
|
|
167
|
+
"icon-opacity": DataDrivenProperty<number>,
|
|
168
|
+
"icon-color": DataDrivenProperty<Color>,
|
|
169
|
+
"icon-halo-color": DataDrivenProperty<Color>,
|
|
170
|
+
"icon-halo-width": DataDrivenProperty<number>,
|
|
171
|
+
"icon-halo-blur": DataDrivenProperty<number>,
|
|
172
|
+
"icon-translate": DataConstantProperty<[number, number]>,
|
|
173
|
+
"icon-translate-anchor": DataConstantProperty<"map" | "viewport">,
|
|
174
|
+
"text-opacity": DataDrivenProperty<number>,
|
|
175
|
+
"text-color": DataDrivenProperty<Color>,
|
|
176
|
+
"text-halo-color": DataDrivenProperty<Color>,
|
|
177
|
+
"text-halo-width": DataDrivenProperty<number>,
|
|
178
|
+
"text-halo-blur": DataDrivenProperty<number>,
|
|
179
|
+
"text-translate": DataConstantProperty<[number, number]>,
|
|
180
|
+
"text-translate-anchor": DataConstantProperty<"map" | "viewport">,
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
export type SymbolPaintPropsPossiblyEvaluated = {
|
|
184
|
+
"icon-opacity": PossiblyEvaluatedPropertyValue<number>,
|
|
185
|
+
"icon-color": PossiblyEvaluatedPropertyValue<Color>,
|
|
186
|
+
"icon-halo-color": PossiblyEvaluatedPropertyValue<Color>,
|
|
187
|
+
"icon-halo-width": PossiblyEvaluatedPropertyValue<number>,
|
|
188
|
+
"icon-halo-blur": PossiblyEvaluatedPropertyValue<number>,
|
|
189
|
+
"icon-translate": [number, number],
|
|
190
|
+
"icon-translate-anchor": "map" | "viewport",
|
|
191
|
+
"text-opacity": PossiblyEvaluatedPropertyValue<number>,
|
|
192
|
+
"text-color": PossiblyEvaluatedPropertyValue<Color>,
|
|
193
|
+
"text-halo-color": PossiblyEvaluatedPropertyValue<Color>,
|
|
194
|
+
"text-halo-width": PossiblyEvaluatedPropertyValue<number>,
|
|
195
|
+
"text-halo-blur": PossiblyEvaluatedPropertyValue<number>,
|
|
196
|
+
"text-translate": [number, number],
|
|
197
|
+
"text-translate-anchor": "map" | "viewport",
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
let paint: Properties<SymbolPaintProps>;
|
|
201
|
+
const getPaint = () => paint = paint || new Properties({
|
|
202
|
+
"icon-opacity": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-opacity"] as any as StylePropertySpecification),
|
|
203
|
+
"icon-color": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-color"] as any as StylePropertySpecification),
|
|
204
|
+
"icon-halo-color": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-color"] as any as StylePropertySpecification),
|
|
205
|
+
"icon-halo-width": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-width"] as any as StylePropertySpecification),
|
|
206
|
+
"icon-halo-blur": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-blur"] as any as StylePropertySpecification),
|
|
207
|
+
"icon-translate": new DataConstantProperty(styleSpec["paint_symbol"]["icon-translate"] as any as StylePropertySpecification),
|
|
208
|
+
"icon-translate-anchor": new DataConstantProperty(styleSpec["paint_symbol"]["icon-translate-anchor"] as any as StylePropertySpecification),
|
|
209
|
+
"text-opacity": new DataDrivenProperty(styleSpec["paint_symbol"]["text-opacity"] as any as StylePropertySpecification),
|
|
210
|
+
"text-color": new DataDrivenProperty(styleSpec["paint_symbol"]["text-color"] as any as StylePropertySpecification, { runtimeType: ColorType, getOverride: (o) => o.textColor, hasOverride: (o) => !!o.textColor }),
|
|
211
|
+
"text-halo-color": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-color"] as any as StylePropertySpecification),
|
|
212
|
+
"text-halo-width": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-width"] as any as StylePropertySpecification),
|
|
213
|
+
"text-halo-blur": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-blur"] as any as StylePropertySpecification),
|
|
214
|
+
"text-translate": new DataConstantProperty(styleSpec["paint_symbol"]["text-translate"] as any as StylePropertySpecification),
|
|
215
|
+
"text-translate-anchor": new DataConstantProperty(styleSpec["paint_symbol"]["text-translate-anchor"] as any as StylePropertySpecification),
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
export default ({ get paint() { return getPaint() }, get layout() { return getLayout() } });
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type {CircleStyleLayer} from './circle_style_layer';
|
|
2
|
+
import type {FillStyleLayer} from './fill_style_layer';
|
|
3
|
+
import type {FillExtrusionStyleLayer} from './fill_extrusion_style_layer';
|
|
4
|
+
import type {HeatmapStyleLayer} from './heatmap_style_layer';
|
|
5
|
+
import type {HillshadeStyleLayer} from './hillshade_style_layer';
|
|
6
|
+
import type {LineStyleLayer} from './line_style_layer';
|
|
7
|
+
import type {SymbolStyleLayer} from './symbol_style_layer';
|
|
8
|
+
|
|
9
|
+
export type TypedStyleLayer = CircleStyleLayer | FillStyleLayer | FillExtrusionStyleLayer | HeatmapStyleLayer | HillshadeStyleLayer | LineStyleLayer | SymbolStyleLayer;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import {EvaluationParameters} from '../evaluation_parameters';
|
|
2
|
+
import {ZoomHistory} from '../zoom_history';
|
|
3
|
+
import {SymbolStyleLayer} from './symbol_style_layer';
|
|
4
|
+
import {INVALID_TEXT_OFFSET, evaluateVariableOffset, getTextVariableAnchorOffset} from './variable_text_anchor';
|
|
5
|
+
|
|
6
|
+
describe('evaluateVariableOffset', () => {
|
|
7
|
+
test('fromRadialOffset', () => {
|
|
8
|
+
// Radial offset mode is invoked by using INVALID_TEXT_OFFSET as the Y value
|
|
9
|
+
const srcOffset = [10, INVALID_TEXT_OFFSET] as [number, number];
|
|
10
|
+
|
|
11
|
+
expect(evaluateVariableOffset('center', srcOffset)).toEqual([0, 0]);
|
|
12
|
+
|
|
13
|
+
// Top/bottom offsets are shifted by the default baseline (7)
|
|
14
|
+
expect(evaluateVariableOffset('top', srcOffset)).toEqual([0, 3]);
|
|
15
|
+
expect(evaluateVariableOffset('bottom', srcOffset)).toEqual([0, -3]);
|
|
16
|
+
expect(evaluateVariableOffset('left', srcOffset)).toEqual([10, 0]);
|
|
17
|
+
expect(evaluateVariableOffset('right', srcOffset)).toEqual([-10, 0]);
|
|
18
|
+
|
|
19
|
+
const hypotenuse = 10 / Math.SQRT2;
|
|
20
|
+
expect(evaluateVariableOffset('top-left', srcOffset)).toEqual([expect.closeTo(hypotenuse), expect.closeTo(hypotenuse - 7)]);
|
|
21
|
+
expect(evaluateVariableOffset('top-right', srcOffset)).toEqual([expect.closeTo(-hypotenuse), expect.closeTo(hypotenuse - 7)]);
|
|
22
|
+
expect(evaluateVariableOffset('bottom-left', srcOffset)).toEqual([expect.closeTo(hypotenuse), expect.closeTo(-hypotenuse + 7)]);
|
|
23
|
+
expect(evaluateVariableOffset('bottom-right', srcOffset)).toEqual([expect.closeTo(-hypotenuse), expect.closeTo(-hypotenuse + 7)]);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test('fromTextOffset', () => {
|
|
27
|
+
const srcOffset = [10, -10] as [number, number];
|
|
28
|
+
|
|
29
|
+
expect(evaluateVariableOffset('center', srcOffset)).toEqual([0, 0]);
|
|
30
|
+
|
|
31
|
+
// Top/bottom offsets are shifted by the default baseline (7)
|
|
32
|
+
expect(evaluateVariableOffset('top', srcOffset)).toEqual([0, 3]);
|
|
33
|
+
expect(evaluateVariableOffset('bottom', srcOffset)).toEqual([0, -3]);
|
|
34
|
+
expect(evaluateVariableOffset('left', srcOffset)).toEqual([10, 0]);
|
|
35
|
+
expect(evaluateVariableOffset('right', srcOffset)).toEqual([-10, 0]);
|
|
36
|
+
expect(evaluateVariableOffset('top-left', srcOffset)).toEqual([10, 3]);
|
|
37
|
+
expect(evaluateVariableOffset('top-right', srcOffset)).toEqual([-10, 3]);
|
|
38
|
+
expect(evaluateVariableOffset('bottom-left', srcOffset)).toEqual([10, -3]);
|
|
39
|
+
expect(evaluateVariableOffset('bottom-right', srcOffset)).toEqual([-10, -3]);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
function createSymbolLayer(layerProperties) {
|
|
44
|
+
const layer = new SymbolStyleLayer(layerProperties);
|
|
45
|
+
layer.recalculate({zoom: 0, zoomHistory: {} as ZoomHistory} as EvaluationParameters, []);
|
|
46
|
+
return layer;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
describe('getTextVariableAnchorOffset', () => {
|
|
50
|
+
test('defaults - no props set', () => {
|
|
51
|
+
const props = {};
|
|
52
|
+
const layer = createSymbolLayer(props);
|
|
53
|
+
|
|
54
|
+
expect(getTextVariableAnchorOffset(layer, null, null)).toBeNull();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('text-variable-anchor-offset set', () => {
|
|
58
|
+
const props = {layout: {'text-variable-anchor-offset': ['top', [1, 1], 'bottom', [2, 2]]}};
|
|
59
|
+
const layer = createSymbolLayer(props);
|
|
60
|
+
|
|
61
|
+
const offset = getTextVariableAnchorOffset(layer, null, null);
|
|
62
|
+
expect(offset).toBeDefined();
|
|
63
|
+
// Offset converted to EMs, accounting for baseline shift on Y axis
|
|
64
|
+
expect(offset.toString()).toBe('["top",[24,17],"bottom",[48,55]]');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('text-variable-anchor set', () => {
|
|
68
|
+
const props = {layout: {'text-variable-anchor': ['top']}};
|
|
69
|
+
const layer = createSymbolLayer(props);
|
|
70
|
+
|
|
71
|
+
const offset = getTextVariableAnchorOffset(layer, null, null);
|
|
72
|
+
expect(offset).toBeDefined();
|
|
73
|
+
// Default offset (0, 0) converted to EMs, accounting for baseline shift on Y axis
|
|
74
|
+
expect(offset.toString()).toBe('["top",[0,-7]]');
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test('text-variable-anchor and text-offset set', () => {
|
|
78
|
+
const props = {layout: {'text-variable-anchor': ['top'], 'text-offset': [1, 1]}};
|
|
79
|
+
const layer = createSymbolLayer(props);
|
|
80
|
+
|
|
81
|
+
const offset = getTextVariableAnchorOffset(layer, null, null);
|
|
82
|
+
expect(offset).toBeDefined();
|
|
83
|
+
// Offset converted to EMs, accounting for baseline shift on Y axis
|
|
84
|
+
expect(offset.toString()).toBe('["top",[0,17]]');
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('text-variable-anchor and text-radial-offset set', () => {
|
|
88
|
+
const props = {layout: {'text-variable-anchor': ['top'], 'text-radial-offset': 2}};
|
|
89
|
+
const layer = createSymbolLayer(props);
|
|
90
|
+
|
|
91
|
+
const offset = getTextVariableAnchorOffset(layer, null, null);
|
|
92
|
+
expect(offset).toBeDefined();
|
|
93
|
+
// Offset converted to EMs, accounting for baseline shift on Y axis
|
|
94
|
+
expect(offset.toString()).toBe('["top",[0,41]]');
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test('text-variable-anchor, text-offset, and text-radial-offset set', () => {
|
|
98
|
+
const props = {layout: {'text-variable-anchor': ['top'], 'text-offset': [1, 1], 'text-radial-offset': 2}};
|
|
99
|
+
const layer = createSymbolLayer(props);
|
|
100
|
+
|
|
101
|
+
const offset = getTextVariableAnchorOffset(layer, null, null);
|
|
102
|
+
expect(offset).toBeDefined();
|
|
103
|
+
// Offset converted to EMs, accounting for baseline shift on Y axis
|
|
104
|
+
expect(offset.toString()).toBe('["top",[0,41]]');
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test('text-variable-anchor and text-variable-anchor-offset set', () => {
|
|
108
|
+
const props = {layout: {'text-variable-anchor-offset': ['top', [1, 1]], 'text-variable-anchor': ['bottom']}};
|
|
109
|
+
const layer = createSymbolLayer(props);
|
|
110
|
+
|
|
111
|
+
const offset = getTextVariableAnchorOffset(layer, null, null);
|
|
112
|
+
expect(offset).toBeDefined();
|
|
113
|
+
// Offset converted to EMs, accounting for baseline shift on Y axis
|
|
114
|
+
expect(offset.toString()).toBe('["top",[24,17]]');
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import {VariableAnchorOffsetCollection, VariableAnchorOffsetCollectionSpecification} from '@maplibre/maplibre-gl-style-spec';
|
|
2
|
+
import {SymbolFeature} from '../../data/bucket/symbol_bucket';
|
|
3
|
+
import {CanonicalTileID} from '../../source/tile_id';
|
|
4
|
+
import ONE_EM from '../../symbol/one_em';
|
|
5
|
+
import {SymbolStyleLayer} from './symbol_style_layer';
|
|
6
|
+
|
|
7
|
+
export enum TextAnchorEnum {
|
|
8
|
+
'center' = 1,
|
|
9
|
+
'left' = 2,
|
|
10
|
+
'right' = 3,
|
|
11
|
+
'top' = 4,
|
|
12
|
+
'bottom' = 5,
|
|
13
|
+
'top-left' = 6,
|
|
14
|
+
'top-right' = 7,
|
|
15
|
+
'bottom-left' = 8,
|
|
16
|
+
'bottom-right' = 9
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type TextAnchor = keyof typeof TextAnchorEnum;
|
|
20
|
+
|
|
21
|
+
// The radial offset is to the edge of the text box
|
|
22
|
+
// In the horizontal direction, the edge of the text box is where glyphs start
|
|
23
|
+
// But in the vertical direction, the glyphs appear to "start" at the baseline
|
|
24
|
+
// We don't actually load baseline data, but we assume an offset of ONE_EM - 17
|
|
25
|
+
// (see "yOffset" in shaping.js)
|
|
26
|
+
const baselineOffset = 7;
|
|
27
|
+
export const INVALID_TEXT_OFFSET = Number.POSITIVE_INFINITY;
|
|
28
|
+
|
|
29
|
+
export function evaluateVariableOffset(anchor: TextAnchor, offset: [number, number]): [number, number] {
|
|
30
|
+
|
|
31
|
+
function fromRadialOffset(anchor: TextAnchor, radialOffset: number): [number, number] {
|
|
32
|
+
let x = 0, y = 0;
|
|
33
|
+
if (radialOffset < 0) radialOffset = 0; // Ignore negative offset.
|
|
34
|
+
// solve for r where r^2 + r^2 = radialOffset^2
|
|
35
|
+
const hypotenuse = radialOffset / Math.SQRT2;
|
|
36
|
+
switch (anchor) {
|
|
37
|
+
case 'top-right':
|
|
38
|
+
case 'top-left':
|
|
39
|
+
y = hypotenuse - baselineOffset;
|
|
40
|
+
break;
|
|
41
|
+
case 'bottom-right':
|
|
42
|
+
case 'bottom-left':
|
|
43
|
+
y = -hypotenuse + baselineOffset;
|
|
44
|
+
break;
|
|
45
|
+
case 'bottom':
|
|
46
|
+
y = -radialOffset + baselineOffset;
|
|
47
|
+
break;
|
|
48
|
+
case 'top':
|
|
49
|
+
y = radialOffset - baselineOffset;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
switch (anchor) {
|
|
54
|
+
case 'top-right':
|
|
55
|
+
case 'bottom-right':
|
|
56
|
+
x = -hypotenuse;
|
|
57
|
+
break;
|
|
58
|
+
case 'top-left':
|
|
59
|
+
case 'bottom-left':
|
|
60
|
+
x = hypotenuse;
|
|
61
|
+
break;
|
|
62
|
+
case 'left':
|
|
63
|
+
x = radialOffset;
|
|
64
|
+
break;
|
|
65
|
+
case 'right':
|
|
66
|
+
x = -radialOffset;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return [x, y];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function fromTextOffset(anchor: TextAnchor, offsetX: number, offsetY: number): [number, number] {
|
|
74
|
+
let x = 0, y = 0;
|
|
75
|
+
// Use absolute offset values.
|
|
76
|
+
offsetX = Math.abs(offsetX);
|
|
77
|
+
offsetY = Math.abs(offsetY);
|
|
78
|
+
|
|
79
|
+
switch (anchor) {
|
|
80
|
+
case 'top-right':
|
|
81
|
+
case 'top-left':
|
|
82
|
+
case 'top':
|
|
83
|
+
y = offsetY - baselineOffset;
|
|
84
|
+
break;
|
|
85
|
+
case 'bottom-right':
|
|
86
|
+
case 'bottom-left':
|
|
87
|
+
case 'bottom':
|
|
88
|
+
y = -offsetY + baselineOffset;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
switch (anchor) {
|
|
93
|
+
case 'top-right':
|
|
94
|
+
case 'bottom-right':
|
|
95
|
+
case 'right':
|
|
96
|
+
x = -offsetX;
|
|
97
|
+
break;
|
|
98
|
+
case 'top-left':
|
|
99
|
+
case 'bottom-left':
|
|
100
|
+
case 'left':
|
|
101
|
+
x = offsetX;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return [x, y];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return (offset[1] !== INVALID_TEXT_OFFSET) ? fromTextOffset(anchor, offset[0], offset[1]) : fromRadialOffset(anchor, offset[0]);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Helper to support both text-variable-anchor and text-variable-anchor-offset. Offset values converted from EMs to PXs
|
|
112
|
+
export function getTextVariableAnchorOffset(layer: SymbolStyleLayer, feature: SymbolFeature, canonical: CanonicalTileID): VariableAnchorOffsetCollection | null {
|
|
113
|
+
const layout = layer.layout;
|
|
114
|
+
// If style specifies text-variable-anchor-offset, just return it
|
|
115
|
+
const variableAnchorOffset = layout.get('text-variable-anchor-offset')?.evaluate(feature, {}, canonical);
|
|
116
|
+
|
|
117
|
+
if (variableAnchorOffset) {
|
|
118
|
+
const sourceValues = variableAnchorOffset.values;
|
|
119
|
+
const destValues: VariableAnchorOffsetCollectionSpecification = [];
|
|
120
|
+
|
|
121
|
+
// Convert offsets from EM to PX, and apply baseline shift
|
|
122
|
+
for (let i = 0; i < sourceValues.length; i += 2) {
|
|
123
|
+
const anchor = destValues[i] = sourceValues[i] as TextAnchor;
|
|
124
|
+
const offset = (sourceValues[i + 1] as [number, number]).map(t => t * ONE_EM) as [number, number];
|
|
125
|
+
|
|
126
|
+
if (anchor.startsWith('top')) {
|
|
127
|
+
offset[1] -= baselineOffset;
|
|
128
|
+
} else if (anchor.startsWith('bottom')) {
|
|
129
|
+
offset[1] += baselineOffset;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
destValues[i + 1] = offset;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return new VariableAnchorOffsetCollection(destValues);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// If style specifies text-variable-anchor, convert to the new format
|
|
139
|
+
const variableAnchor = layout.get('text-variable-anchor');
|
|
140
|
+
|
|
141
|
+
if (variableAnchor) {
|
|
142
|
+
let textOffset: [number, number];
|
|
143
|
+
const unevaluatedLayout = layer._unevaluatedLayout;
|
|
144
|
+
|
|
145
|
+
// The style spec says don't use `text-offset` and `text-radial-offset` together
|
|
146
|
+
// but doesn't actually specify what happens if you use both. We go with the radial offset.
|
|
147
|
+
if (unevaluatedLayout.getValue('text-radial-offset') !== undefined) {
|
|
148
|
+
textOffset = [layout.get('text-radial-offset').evaluate(feature, {}, canonical) * ONE_EM, INVALID_TEXT_OFFSET];
|
|
149
|
+
} else {
|
|
150
|
+
textOffset = layout.get('text-offset').evaluate(feature, {}, canonical).map(t => t * ONE_EM) as [number, number];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const anchorOffsets: VariableAnchorOffsetCollectionSpecification = [];
|
|
154
|
+
|
|
155
|
+
for (const anchor of variableAnchor) {
|
|
156
|
+
anchorOffsets.push(anchor, evaluateVariableOffset(anchor, textOffset));
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return new VariableAnchorOffsetCollection(anchorOffsets);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return null;
|
|
163
|
+
}
|