@mapbox/mapbox-gl-style-spec 13.28.0-beta.1 → 14.0.0-beta.1

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 (63) hide show
  1. package/CHANGELOG.md +0 -11
  2. package/bin/gl-style-composite.js +2 -2
  3. package/bin/gl-style-format.js +2 -2
  4. package/bin/gl-style-migrate.js +2 -2
  5. package/bin/gl-style-validate.js +2 -2
  6. package/data/extent.js +18 -0
  7. package/deref.js +1 -1
  8. package/diff.js +36 -15
  9. package/dist/index.cjs +5810 -1995
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.es.js +5808 -1991
  12. package/dist/index.es.js.map +1 -1
  13. package/expression/compound_expression.js +2 -1
  14. package/expression/definitions/assertion.js +2 -2
  15. package/expression/definitions/coercion.js +54 -15
  16. package/expression/definitions/comparison.js +2 -0
  17. package/expression/definitions/distance.js +597 -0
  18. package/expression/definitions/format.js +2 -2
  19. package/expression/definitions/image.js +34 -14
  20. package/expression/definitions/index.js +122 -8
  21. package/expression/definitions/interpolate.js +1 -1
  22. package/expression/definitions/match.js +2 -2
  23. package/expression/definitions/within.js +21 -92
  24. package/expression/evaluation_context.js +12 -1
  25. package/expression/index.js +74 -43
  26. package/expression/is_constant.js +19 -1
  27. package/expression/parsing_context.js +20 -16
  28. package/expression/types/formatted.js +2 -2
  29. package/expression/types/resolved_image.js +19 -8
  30. package/expression/types.js +2 -1
  31. package/expression/values.js +25 -0
  32. package/feature_filter/convert.js +1 -1
  33. package/feature_filter/index.js +4 -4
  34. package/flow-typed/cheap-ruler.js +25 -0
  35. package/flow-typed/geojson.js +8 -7
  36. package/flow-typed/gl-matrix.js +4 -2
  37. package/flow-typed/kdbush.js +9 -0
  38. package/function/convert.js +23 -12
  39. package/group_by_layout.js +2 -2
  40. package/migrate/expressions.js +3 -0
  41. package/package.json +5 -2
  42. package/reference/v8.json +1772 -112
  43. package/style-spec.js +4 -3
  44. package/types.js +190 -24
  45. package/util/color.js +31 -0
  46. package/util/geometry_util.js +145 -0
  47. package/util/properties.js +10 -2
  48. package/util/random.js +12 -0
  49. package/validate/validate.js +17 -7
  50. package/validate/validate_array.js +1 -1
  51. package/validate/validate_filter.js +4 -12
  52. package/validate/validate_function.js +2 -2
  53. package/validate/validate_import.js +31 -0
  54. package/validate/validate_layer.js +3 -2
  55. package/validate/validate_lights.js +84 -0
  56. package/validate/validate_model.js +38 -0
  57. package/validate/validate_property.js +17 -3
  58. package/validate/validate_source.js +3 -2
  59. package/validate/validate_style.js +29 -0
  60. package/validate_mapbox_api_supported.js +55 -11
  61. package/validate_style.js +4 -0
  62. package/validate_style.min.js +11 -19
  63. package/visit.js +3 -2
package/reference/v8.json CHANGED
@@ -10,6 +10,11 @@
10
10
  "doc": "Style specification version number. Must be 8.",
11
11
  "example": 8
12
12
  },
13
+ "fragment": {
14
+ "type": "boolean",
15
+ "doc": "Indicates that a style is a fragment style.",
16
+ "example": true
17
+ },
13
18
  "name": {
14
19
  "type": "string",
15
20
  "doc": "A human-readable name for the style.",
@@ -50,13 +55,40 @@
50
55
  },
51
56
  "light": {
52
57
  "type": "light",
53
- "doc": "The global light source.",
58
+ "doc": "The global light source. Note: This API is deprecated. Prefer using `flat` light type instead in the `lights` API.",
54
59
  "example": {
55
60
  "anchor": "viewport",
56
61
  "color": "white",
57
62
  "intensity": 0.4
58
63
  }
59
64
  },
65
+ "lights": {
66
+ "required": false,
67
+ "type": "array",
68
+ "value": "light-3d",
69
+ "doc": "Array of light sources affecting the whole map and the default for 3D style, mutually exclusive with the light property",
70
+ "example": [
71
+ {
72
+ "id": "environment",
73
+ "type": "ambient",
74
+ "properties": {
75
+ "color": "rgba(255.0, 0.0, 0.0, 1.0)",
76
+ "intensity": 0.4
77
+ }
78
+ },
79
+ {
80
+ "id": "sun_light",
81
+ "type": "directional",
82
+ "properties": {
83
+ "color": "rgba(255.0, 0.0, 0.0, 1.0)",
84
+ "intensity": 0.4,
85
+ "direction": [200.0, 40.0],
86
+ "cast-shadows": true,
87
+ "shadow-intensity": 0.2
88
+ }
89
+ }
90
+ ]
91
+ },
60
92
  "terrain": {
61
93
  "type": "terrain",
62
94
  "doc": "A global modifier that elevates layers and markers based on a DEM data source."
@@ -65,6 +97,35 @@
65
97
  "type": "fog",
66
98
  "doc": "A global effect that fades layers and markers based on their distance to the camera. The fog can be used to approximate the effect of atmosphere on distant objects and enhance the depth perception of the map when used with terrain or 3D features. Note: fog is renamed to atmosphere in the Android and iOS SDKs and planned to be changed in GL-JS v.3.0.0."
67
99
  },
100
+ "camera": {
101
+ "type": "camera",
102
+ "doc": "Global setting to control additional camera intrinsics parameters, e.g. projection type (perspective / orthographic)."
103
+ },
104
+ "imports": {
105
+ "type": "array",
106
+ "value": "import",
107
+ "doc": "Imports other styles into this style.",
108
+ "sdk-support": {
109
+ "basic functionality": {
110
+ "js": "3.0.0",
111
+ "android": "11.0.0",
112
+ "ios": "11.0.0",
113
+ "macos": "11.0.0"
114
+ }
115
+ }
116
+ },
117
+ "schema": {
118
+ "type": "schema",
119
+ "doc": "Definition of the schema for configuration options.",
120
+ "sdk-support": {
121
+ "basic functionality": {
122
+ "js": "3.0.0",
123
+ "android": "11.0.0",
124
+ "ios": "11.0.0",
125
+ "macos": "11.0.0"
126
+ }
127
+ }
128
+ },
68
129
  "sources": {
69
130
  "required": true,
70
131
  "type": "sources",
@@ -119,6 +180,375 @@
119
180
  }
120
181
  }
121
182
  ]
183
+ },
184
+ "models": {
185
+ "type": "models",
186
+ "doc": "Specification of models used in the style.",
187
+ "example": {
188
+ "spruce1-lod0": "asset://spruce1-lod0.glb",
189
+ "spruce1-lod1": "asset://spruce1-lod1.glb",
190
+ "spruce1-lod2": "asset://spruce1-lod2.glb"
191
+ }
192
+ }
193
+ },
194
+ "model": {
195
+ "type": "string",
196
+ "doc": "A URL to a model resource. Supported protocols are `http:`, `https:`, and `mapbox://<Model ID>`.",
197
+ "required": true
198
+ },
199
+ "import": {
200
+ "id": {
201
+ "type": "string",
202
+ "doc": "Unique import name.",
203
+ "required": true
204
+ },
205
+ "url": {
206
+ "type": "string",
207
+ "doc": "The URL of the style.",
208
+ "required": true
209
+ },
210
+ "config": {
211
+ "type": "config",
212
+ "doc": "Configuration values for the imported style's options."
213
+ },
214
+ "data": {
215
+ "type": "$root",
216
+ "doc": "The inlined style that must correspond to the contents of the specified URL."
217
+ }
218
+ },
219
+ "config": {
220
+ "*": {
221
+ "type": "*",
222
+ "doc": "Value of the imported style's configuration option."
223
+ }
224
+ },
225
+ "schema": {
226
+ "*": {
227
+ "type": "option",
228
+ "doc": "Specification of a configuration option."
229
+ }
230
+ },
231
+ "option": {
232
+ "default": {
233
+ "type": "*",
234
+ "doc": "Default configuration value for this option.",
235
+ "required": true
236
+ },
237
+ "type": {
238
+ "type": "enum",
239
+ "doc": "The type this value is coerced to after evaluating the expression. If unspecified, the result is returned as is and is not validated.",
240
+ "values": {
241
+ "string": {
242
+ "doc": "The result will be coerced to a string."
243
+ },
244
+ "number": {
245
+ "doc": "The result will be coerced to a number."
246
+ },
247
+ "boolean": {
248
+ "doc": "The result will be coerced to a boolean."
249
+ },
250
+ "color": {
251
+ "doc": "The result will be coerced to a color."
252
+ }
253
+ }
254
+ },
255
+ "array": {
256
+ "type": "boolean",
257
+ "doc": "If true, this option is returned as an array"
258
+ },
259
+ "minValue": {
260
+ "type": "number",
261
+ "doc": "If this option is a number, this specifies the minimum allowed value. Values lower than this will be clamped to the minimum value."
262
+ },
263
+ "maxValue": {
264
+ "type": "number",
265
+ "doc": "If this option is a number, this specifies the maximum allowed value. Values higher than this will be clamped to the maximum value."
266
+ },
267
+ "stepValue": {
268
+ "type": "number",
269
+ "doc": "If this option is a number, this specifies the increment between allowed values. Values will be rounded towards the nearest allowed value."
270
+ },
271
+ "values": {
272
+ "type": "array",
273
+ "value": "*",
274
+ "doc": "If this option is specified, the result must be one of the given values. Otherwise, the default value is used instead."
275
+ },
276
+ "metadata": {
277
+ "type": "*",
278
+ "doc": "Arbitrary properties useful to track with the layer, but do not influence rendering. Properties should be prefixed to avoid collisions, like 'mapbox:'."
279
+ }
280
+ },
281
+ "models" : {
282
+ "*": {
283
+ "type": "model",
284
+ "doc": "A URL to a model resource. Supported protocols are `http:`, `https:`, and `mapbox://<Model ID>`."
285
+ }
286
+ },
287
+ "light-3d": {
288
+ "id": {
289
+ "type": "string",
290
+ "doc": "Unique light name.",
291
+ "required": true
292
+ },
293
+ "properties": {
294
+ "type": "properties",
295
+ "doc": "Properties of the light."
296
+ },
297
+ "type": {
298
+ "type": "enum",
299
+ "doc": "Type of the light to be added",
300
+ "values": {
301
+ "ambient": {
302
+ "doc": "An indirect light affecting all objects in the map adding a constant amount of light on them. It has no explicit direction and cannot cast shadows.",
303
+ "sdk-support": {
304
+ "basic functionality": {
305
+ "js": "3.0.0",
306
+ "android": "11.0.0",
307
+ "ios": "11.0.0"
308
+ }
309
+ }
310
+ },
311
+ "directional": {
312
+ "doc": "A light that has a direction and is located at infinite, so its rays are parallel. Simulates the sun light and it can cast shadows",
313
+ "sdk-support": {
314
+ "basic functionality": {
315
+ "js": "3.0.0",
316
+ "android": "11.0.0",
317
+ "ios": "11.0.0"
318
+ }
319
+ }
320
+ },
321
+ "flat": {
322
+ "doc": "A global directional light source which is only applied on 3D layers and hillshade layers. Using this type disables other light sources.",
323
+ "sdk-support": {
324
+ "basic functionality": {
325
+ "js": "3.0.0",
326
+ "android": "11.0.0",
327
+ "ios": "11.0.0"
328
+ }
329
+ }
330
+ }
331
+ }
332
+ }
333
+ },
334
+ "properties": [
335
+ "properties_light_directional",
336
+ "properties_light_ambient",
337
+ "properties_light_flat"
338
+ ],
339
+ "properties_light_directional": {
340
+ "direction": {
341
+ "type": "array",
342
+ "default": [
343
+ 210,
344
+ 30
345
+ ],
346
+ "length": 2,
347
+ "value": "number",
348
+ "property-type": "data-constant",
349
+ "transition": true,
350
+ "expression": {
351
+ "interpolated": true,
352
+ "parameters": [
353
+ "zoom"
354
+ ]
355
+ },
356
+ "doc": "Direction of the light source specified as [a azimuthal angle, p polar angle] where a indicates the azimuthal angle of the light relative to north (in degrees and proceeding clockwise), and p indicates polar angle of the light (from 0°, directly above, to 180°, directly below).",
357
+ "example": [
358
+ 90,
359
+ 80
360
+ ]
361
+ },
362
+ "color": {
363
+ "type": "color",
364
+ "property-type": "data-constant",
365
+ "default": "#ffffff",
366
+ "expression": {
367
+ "interpolated": true,
368
+ "parameters": [
369
+ "zoom"
370
+ ]
371
+ },
372
+ "transition": true,
373
+ "doc": "Color of the directional light."
374
+ },
375
+ "intensity": {
376
+ "type": "number",
377
+ "property-type": "data-constant",
378
+ "default": 0.5,
379
+ "minimum": 0,
380
+ "maximum": 1,
381
+ "expression": {
382
+ "interpolated": true,
383
+ "parameters": [
384
+ "zoom"
385
+ ]
386
+ },
387
+ "transition": true,
388
+ "doc": "A multiplier for the color of the directional light."
389
+ },
390
+ "cast-shadows": {
391
+ "type": "boolean",
392
+ "default": false,
393
+ "doc": "Enable/Disable shadow casting for this light",
394
+ "transition": false,
395
+ "expression": {
396
+ "interpolated": false
397
+ },
398
+ "property-type": "data-constant"
399
+ },
400
+ "shadow-intensity": {
401
+ "type": "number",
402
+ "property-type": "data-constant",
403
+ "default": 1.0,
404
+ "minimum": 0,
405
+ "maximum": 1,
406
+ "expression": {
407
+ "interpolated": true,
408
+ "parameters": [
409
+ "zoom"
410
+ ]
411
+ },
412
+ "doc": "Determines the shadow strength, affecting the shadow receiver surfaces final color. Values near 0.0 reduce the shadow contribution to the final color. Values near to 1.0 make occluded surfaces receive almost no directional light. Designed to be used mostly for transitioning between values 0 and 1.",
413
+ "transition": true
414
+ }
415
+ },
416
+ "properties_light_ambient": {
417
+ "color": {
418
+ "type": "color",
419
+ "property-type": "data-constant",
420
+ "default": "#ffffff",
421
+ "expression": {
422
+ "interpolated": true,
423
+ "parameters": [
424
+ "zoom"
425
+ ]
426
+ },
427
+ "transition": true,
428
+ "doc": "Color of the ambient light."
429
+ },
430
+ "intensity": {
431
+ "type": "number",
432
+ "property-type": "data-constant",
433
+ "default": 0.5,
434
+ "minimum": 0,
435
+ "maximum": 1,
436
+ "expression": {
437
+ "interpolated": true,
438
+ "parameters": [
439
+ "zoom"
440
+ ]
441
+ },
442
+ "transition": true,
443
+ "doc": "A multiplier for the color of the ambient light."
444
+ }
445
+ },
446
+ "properties_light_flat": {
447
+ "anchor": {
448
+ "type": "enum",
449
+ "default": "viewport",
450
+ "values": {
451
+ "map": {
452
+ "doc": "The position of the light source is aligned to the rotation of the map."
453
+ },
454
+ "viewport": {
455
+ "doc": "The position of the light source is aligned to the rotation of the viewport."
456
+ }
457
+ },
458
+ "property-type": "data-constant",
459
+ "transition": false,
460
+ "expression": {
461
+ "interpolated": false,
462
+ "parameters": [
463
+ "zoom"
464
+ ]
465
+ },
466
+ "doc": "Whether extruded geometries are lit relative to the map or viewport.",
467
+ "example": "map",
468
+ "sdk-support": {
469
+ "basic functionality": {
470
+ "js": "0.27.0",
471
+ "android": "5.1.0",
472
+ "ios": "3.6.0",
473
+ "macos": "0.5.0"
474
+ }
475
+ }
476
+ },
477
+ "position": {
478
+ "type": "array",
479
+ "default": [
480
+ 1.15,
481
+ 210,
482
+ 30
483
+ ],
484
+ "length": 3,
485
+ "value": "number",
486
+ "property-type": "data-constant",
487
+ "transition": true,
488
+ "expression": {
489
+ "interpolated": true,
490
+ "parameters": [
491
+ "zoom"
492
+ ]
493
+ },
494
+ "doc": "Position of the light source relative to lit (extruded) geometries, in [r radial coordinate, a azimuthal angle, p polar angle] where r indicates the distance from the center of the base of an object to its light, a indicates the position of the light relative to 0° (0° when `light.anchor` is set to `viewport` corresponds to the top of the viewport, or 0° when `light.anchor` is set to `map` corresponds to due north, and degrees proceed clockwise), and p indicates the height of the light (from 0°, directly above, to 180°, directly below).",
495
+ "example": [
496
+ 1.5,
497
+ 90,
498
+ 80
499
+ ],
500
+ "sdk-support": {
501
+ "basic functionality": {
502
+ "js": "0.27.0",
503
+ "android": "5.1.0",
504
+ "ios": "3.6.0",
505
+ "macos": "0.5.0"
506
+ }
507
+ }
508
+ },
509
+ "color": {
510
+ "type": "color",
511
+ "property-type": "data-constant",
512
+ "default": "#ffffff",
513
+ "expression": {
514
+ "interpolated": true,
515
+ "parameters": [
516
+ "zoom"
517
+ ]
518
+ },
519
+ "transition": true,
520
+ "doc": "Color tint for lighting extruded geometries.",
521
+ "sdk-support": {
522
+ "basic functionality": {
523
+ "js": "0.27.0",
524
+ "android": "5.1.0",
525
+ "ios": "3.6.0",
526
+ "macos": "0.5.0"
527
+ }
528
+ }
529
+ },
530
+ "intensity": {
531
+ "type": "number",
532
+ "property-type": "data-constant",
533
+ "default": 0.5,
534
+ "minimum": 0,
535
+ "maximum": 1,
536
+ "expression": {
537
+ "interpolated": true,
538
+ "parameters": [
539
+ "zoom"
540
+ ]
541
+ },
542
+ "transition": true,
543
+ "doc": "Intensity of lighting (on a scale from 0 to 1). Higher numbers will present as more extreme contrast.",
544
+ "sdk-support": {
545
+ "basic functionality": {
546
+ "js": "0.27.0",
547
+ "android": "5.1.0",
548
+ "ios": "3.6.0",
549
+ "macos": "0.5.0"
550
+ }
551
+ }
122
552
  }
123
553
  },
124
554
  "sources": {
@@ -133,7 +563,8 @@
133
563
  "source_raster_dem",
134
564
  "source_geojson",
135
565
  "source_video",
136
- "source_image"
566
+ "source_image",
567
+ "source_model"
137
568
  ],
138
569
  "source_vector": {
139
570
  "type": {
@@ -513,6 +944,36 @@
513
944
  }
514
945
  }
515
946
  },
947
+ "source_model" : {
948
+ "type": {
949
+ "required": true,
950
+ "type": "enum",
951
+ "values": {
952
+ "model": {
953
+ "doc": "A collection of 3D models"
954
+ },
955
+ "batched-model": {
956
+ "doc": "A collection of 3D models with anchor data"
957
+ }
958
+ },
959
+ "doc": "Type of model source to be added. From single models to represent 2D layers to 3D tiled models covering a wide area."
960
+ },
961
+ "maxzoom": {
962
+ "type": "number",
963
+ "default": 18,
964
+ "doc": "Maximum zoom level at which to create batched model tiles. Data from tiles at the maxzoom are used when displaying the map at higher zoom levels."
965
+ },
966
+ "minzoom": {
967
+ "type": "number",
968
+ "default": 0,
969
+ "doc": "Minimum zoom level for which batched-model tiles are available"
970
+ },
971
+ "tiles": {
972
+ "type": "array",
973
+ "value": "string",
974
+ "doc": "An array of one or more tile source URLs, as in the TileJSON spec."
975
+ }
976
+ },
516
977
  "layer": {
517
978
  "id": {
518
979
  "type": "string",
@@ -610,6 +1071,16 @@
610
1071
  }
611
1072
  }
612
1073
  },
1074
+ "model": {
1075
+ "doc": "A 3D model",
1076
+ "sdk-support": {
1077
+ "basic functionality": {
1078
+ "js": "3.0.0",
1079
+ "android": "11.0.0",
1080
+ "ios": "11.0.0"
1081
+ }
1082
+ }
1083
+ },
613
1084
  "background": {
614
1085
  "doc": "The background color or pattern of the map.",
615
1086
  "sdk-support": {
@@ -630,6 +1101,17 @@
630
1101
  "android": "10.0.0"
631
1102
  }
632
1103
  }
1104
+ },
1105
+ "slot": {
1106
+ "doc": "Marks the position of a slot.",
1107
+ "sdk-support": {
1108
+ "basic functionality": {
1109
+ "js": "3.0.0",
1110
+ "android": "11.0.0",
1111
+ "ios": "11.0.0",
1112
+ "macos": "11.0.0"
1113
+ }
1114
+ }
633
1115
  }
634
1116
  },
635
1117
  "doc": "Rendering type of this layer.",
@@ -641,12 +1123,24 @@
641
1123
  },
642
1124
  "source": {
643
1125
  "type": "string",
644
- "doc": "Name of a source description to be used for this layer. Required for all layer types except `background`."
1126
+ "doc": "Name of a source description to be used for this layer. Required for all layer types except `background` and `slot`."
645
1127
  },
646
1128
  "source-layer": {
647
1129
  "type": "string",
648
1130
  "doc": "Layer to use from a vector tile source. Required for vector tile sources; prohibited for all other source types, including GeoJSON sources."
649
1131
  },
1132
+ "slot": {
1133
+ "type": "string",
1134
+ "doc": "The slot this layer is assigned to. If specified, and a slot with that name exists, it will be placed at that position in the layer order.",
1135
+ "sdk-support": {
1136
+ "basic functionality": {
1137
+ "js": "3.0.0",
1138
+ "android": "11.0.0",
1139
+ "ios": "11.0.0",
1140
+ "macos": "11.0.0"
1141
+ }
1142
+ }
1143
+ },
650
1144
  "minzoom": {
651
1145
  "type": "number",
652
1146
  "minimum": 0,
@@ -682,7 +1176,8 @@
682
1176
  "layout_raster",
683
1177
  "layout_hillshade",
684
1178
  "layout_background",
685
- "layout_sky"
1179
+ "layout_sky",
1180
+ "layout_model"
686
1181
  ],
687
1182
  "layout_background": {
688
1183
  "visibility": {
@@ -703,8 +1198,17 @@
703
1198
  "android": "2.0.1",
704
1199
  "ios": "2.0.0",
705
1200
  "macos": "0.1.0"
1201
+ },
1202
+ "expressions support": {
1203
+ "js": "3.0.0",
1204
+ "android": "11.0.0",
1205
+ "ios": "11.0.0",
1206
+ "macos": "11.0.0"
706
1207
  }
707
1208
  },
1209
+ "expression": {
1210
+ "interpolated": false
1211
+ },
708
1212
  "property-type": "constant"
709
1213
  }
710
1214
  },
@@ -726,9 +1230,77 @@
726
1230
  "js": "2.0.0",
727
1231
  "ios": "10.0.0",
728
1232
  "android": "10.0.0"
1233
+ },
1234
+ "expressions support": {
1235
+ "js": "3.0.0",
1236
+ "android": "11.0.0",
1237
+ "ios": "11.0.0",
1238
+ "macos": "11.0.0"
1239
+ }
1240
+ },
1241
+ "expression": {
1242
+ "interpolated": false
1243
+ },
1244
+ "property-type": "constant"
1245
+ }
1246
+ },
1247
+ "layout_model": {
1248
+ "visibility": {
1249
+ "type": "enum",
1250
+ "values": {
1251
+ "visible": {
1252
+ "doc": "The layer is shown."
1253
+ },
1254
+ "none": {
1255
+ "doc": "The layer is not shown."
1256
+ }
1257
+ },
1258
+ "default": "visible",
1259
+ "doc": "Whether this layer is displayed.",
1260
+ "sdk-support": {
1261
+ "basic functionality": {
1262
+ "js": "3.0.0",
1263
+ "android": "11.0.0",
1264
+ "ios": "11.0.0",
1265
+ "macos": "11.0.0"
729
1266
  }
730
1267
  },
1268
+ "expression": {
1269
+ "interpolated": false
1270
+ },
731
1271
  "property-type": "constant"
1272
+ },
1273
+ "model-id": {
1274
+ "type": "string",
1275
+ "doc": "Model to render.",
1276
+ "property-type": "data-driven",
1277
+ "expression": {
1278
+ "interpolated": false,
1279
+ "parameters": [
1280
+ "zoom",
1281
+ "feature"
1282
+ ]
1283
+ },
1284
+ "sdk-support": {
1285
+ "basic functionality": {
1286
+ "js": "3.0.0",
1287
+ "android": "11.0.0",
1288
+ "ios": "11.0.0"
1289
+ },
1290
+ "data-driven styling": {
1291
+ "js": "3.0.0",
1292
+ "android": "11.0.0",
1293
+ "ios": "11.0.0"
1294
+ }
1295
+ },
1296
+ "transition": false,
1297
+ "requires": [
1298
+ {
1299
+ "source": [
1300
+ "geojson",
1301
+ "vector"
1302
+ ]
1303
+ }]
732
1304
  }
733
1305
  },
734
1306
  "layout_fill": {
@@ -776,8 +1348,17 @@
776
1348
  "android": "2.0.1",
777
1349
  "ios": "2.0.0",
778
1350
  "macos": "0.1.0"
1351
+ },
1352
+ "expressions support": {
1353
+ "js": "3.0.0",
1354
+ "android": "11.0.0",
1355
+ "ios": "11.0.0",
1356
+ "macos": "11.0.0"
779
1357
  }
780
1358
  },
1359
+ "expression": {
1360
+ "interpolated": false
1361
+ },
781
1362
  "property-type": "constant"
782
1363
  }
783
1364
  },
@@ -826,8 +1407,17 @@
826
1407
  "android": "2.0.1",
827
1408
  "ios": "2.0.0",
828
1409
  "macos": "0.1.0"
1410
+ },
1411
+ "expressions support": {
1412
+ "js": "3.0.0",
1413
+ "android": "11.0.0",
1414
+ "ios": "11.0.0",
1415
+ "macos": "11.0.0"
829
1416
  }
830
1417
  },
1418
+ "expression": {
1419
+ "interpolated": false
1420
+ },
831
1421
  "property-type": "constant"
832
1422
  }
833
1423
  },
@@ -850,8 +1440,17 @@
850
1440
  "android": "6.0.0",
851
1441
  "ios": "4.0.0",
852
1442
  "macos": "0.7.0"
1443
+ },
1444
+ "expressions support": {
1445
+ "js": "3.0.0",
1446
+ "android": "11.0.0",
1447
+ "ios": "11.0.0",
1448
+ "macos": "11.0.0"
853
1449
  }
854
1450
  },
1451
+ "expression": {
1452
+ "interpolated": false
1453
+ },
855
1454
  "property-type": "constant"
856
1455
  }
857
1456
  },
@@ -874,8 +1473,17 @@
874
1473
  "android": "5.1.0",
875
1474
  "ios": "3.6.0",
876
1475
  "macos": "0.5.0"
1476
+ },
1477
+ "expressions support": {
1478
+ "js": "3.0.0",
1479
+ "android": "11.0.0",
1480
+ "ios": "11.0.0",
1481
+ "macos": "11.0.0"
877
1482
  }
878
1483
  },
1484
+ "expression": {
1485
+ "interpolated": false
1486
+ },
879
1487
  "property-type": "constant"
880
1488
  },
881
1489
  "fill-extrusion-edge-radius": {
@@ -890,8 +1498,17 @@
890
1498
  "js": "v2.10.0",
891
1499
  "android": "10.7.0",
892
1500
  "ios": "10.7.0"
1501
+ },
1502
+ "expressions support": {
1503
+ "js": "3.0.0",
1504
+ "android": "11.0.0",
1505
+ "ios": "11.0.0",
1506
+ "macos": "11.0.0"
893
1507
  }
894
1508
  },
1509
+ "expression": {
1510
+ "interpolated": false
1511
+ },
895
1512
  "property-type": "constant"
896
1513
  }
897
1514
  },
@@ -1063,8 +1680,17 @@
1063
1680
  "android": "2.0.1",
1064
1681
  "ios": "2.0.0",
1065
1682
  "macos": "0.1.0"
1683
+ },
1684
+ "expressions support": {
1685
+ "js": "3.0.0",
1686
+ "android": "11.0.0",
1687
+ "ios": "11.0.0",
1688
+ "macos": "11.0.0"
1066
1689
  }
1067
1690
  },
1691
+ "expression": {
1692
+ "interpolated": false
1693
+ },
1068
1694
  "property-type": "constant"
1069
1695
  }
1070
1696
  },
@@ -1386,15 +2012,21 @@
1386
2012
  "android": "9.2.0",
1387
2013
  "ios": "5.8.0",
1388
2014
  "macos": "0.15.0"
2015
+ },
2016
+ "data-driven styling": {
2017
+ "js": "3.0.0",
2018
+ "android": "11.0.0",
2019
+ "ios": "11.0.0"
1389
2020
  }
1390
2021
  },
1391
2022
  "expression": {
1392
2023
  "interpolated": false,
1393
2024
  "parameters": [
1394
- "zoom"
2025
+ "zoom",
2026
+ "feature"
1395
2027
  ]
1396
2028
  },
1397
- "property-type": "data-constant"
2029
+ "property-type": "data-driven"
1398
2030
  },
1399
2031
  "icon-text-fit-padding": {
1400
2032
  "type": "array",
@@ -1425,15 +2057,21 @@
1425
2057
  "android": "4.2.0",
1426
2058
  "ios": "3.4.0",
1427
2059
  "macos": "0.2.1"
2060
+ },
2061
+ "data-driven styling": {
2062
+ "js": "3.0.0",
2063
+ "android": "11.0.0",
2064
+ "ios": "11.0.0"
1428
2065
  }
1429
2066
  },
1430
2067
  "expression": {
1431
2068
  "interpolated": true,
1432
2069
  "parameters": [
1433
- "zoom"
2070
+ "zoom",
2071
+ "feature"
1434
2072
  ]
1435
2073
  },
1436
- "property-type": "data-constant"
2074
+ "property-type": "data-driven"
1437
2075
  },
1438
2076
  "icon-image": {
1439
2077
  "type": "resolvedImage",
@@ -2469,8 +3107,17 @@
2469
3107
  "android": "2.0.1",
2470
3108
  "ios": "2.0.0",
2471
3109
  "macos": "0.1.0"
3110
+ },
3111
+ "expressions support": {
3112
+ "js": "3.0.0",
3113
+ "android": "11.0.0",
3114
+ "ios": "11.0.0",
3115
+ "macos": "11.0.0"
2472
3116
  }
2473
3117
  },
3118
+ "expression": {
3119
+ "interpolated": false
3120
+ },
2474
3121
  "property-type": "constant"
2475
3122
  }
2476
3123
  },
@@ -2493,8 +3140,17 @@
2493
3140
  "android": "2.0.1",
2494
3141
  "ios": "2.0.0",
2495
3142
  "macos": "0.1.0"
3143
+ },
3144
+ "expressions support": {
3145
+ "js": "3.0.0",
3146
+ "android": "11.0.0",
3147
+ "ios": "11.0.0",
3148
+ "macos": "11.0.0"
2496
3149
  }
2497
3150
  },
3151
+ "expression": {
3152
+ "interpolated": false
3153
+ },
2498
3154
  "property-type": "constant"
2499
3155
  }
2500
3156
  },
@@ -2517,8 +3173,17 @@
2517
3173
  "android": "6.0.0",
2518
3174
  "ios": "4.0.0",
2519
3175
  "macos": "0.7.0"
3176
+ },
3177
+ "expressions support": {
3178
+ "js": "3.0.0",
3179
+ "android": "11.0.0",
3180
+ "ios": "11.0.0",
3181
+ "macos": "11.0.0"
2520
3182
  }
2521
3183
  },
3184
+ "expression": {
3185
+ "interpolated": false
3186
+ },
2522
3187
  "property-type": "constant"
2523
3188
  }
2524
3189
  },
@@ -2634,9 +3299,6 @@
2634
3299
  },
2635
3300
  "!has": {
2636
3301
  "doc": "`[\"!has\", key]` `feature[key]` does not exist"
2637
- },
2638
- "within": {
2639
- "doc": "`[\"within\", object]` feature geometry is within object geometry"
2640
3302
  }
2641
3303
  },
2642
3304
  "doc": "The filter operator."
@@ -2763,6 +3425,18 @@
2763
3425
  }
2764
3426
  }
2765
3427
  },
3428
+ "config": {
3429
+ "doc": "Retrieves the configuration value for the given option.",
3430
+ "group": "Lookup",
3431
+ "sdk-support": {
3432
+ "basic functionality": {
3433
+ "js": "3.0.0",
3434
+ "android": "11.0.0",
3435
+ "ios": "11.0.0",
3436
+ "macos": "11.0.0"
3437
+ }
3438
+ }
3439
+ },
2766
3440
  "literal": {
2767
3441
  "doc": "Provides a literal array or object value.",
2768
3442
  "group": "Types",
@@ -3163,6 +3837,28 @@
3163
3837
  }
3164
3838
  }
3165
3839
  },
3840
+ "hsl": {
3841
+ "doc": "Creates a color value from hue (range 0-360), saturation and lightness components (range 0-100), and an alpha component of 1. If any component is out of range, the expression is an error.",
3842
+ "group": "Color",
3843
+ "sdk-support": {
3844
+ "basic functionality": {
3845
+ "js": "2.12.1",
3846
+ "android": "10.11.0",
3847
+ "ios": "10.11.0"
3848
+ }
3849
+ }
3850
+ },
3851
+ "hsla": {
3852
+ "doc": "Creates a color value from hue (range 0-360), saturation and lightness components (range 0-100), and an alpha component (range 0-1). If any component is out of range, the expression is an error.",
3853
+ "group": "Color",
3854
+ "sdk-support": {
3855
+ "basic functionality": {
3856
+ "js": "2.12.1",
3857
+ "android": "10.11.0",
3858
+ "ios": "10.11.0"
3859
+ }
3860
+ }
3861
+ },
3166
3862
  "get": {
3167
3863
  "doc": "Retrieves a property value from the current feature's properties, or from another object if a second argument is provided. Returns `null` if the requested property is missing.",
3168
3864
  "group": "Lookup",
@@ -3280,6 +3976,17 @@
3280
3976
  }
3281
3977
  }
3282
3978
  },
3979
+ "measure-light": {
3980
+ "doc": "Returns a requested property of the light configuration based on the supplied options. Currently the only supported option is `brightness` which returns the global brightness value of the lights on a scale of 0 to 1, where 0 means total darkness and 1 means full brightness. This expression works only with 3D light, i.e. when `lights` root property is defined.",
3981
+ "group": "Lookup",
3982
+ "sdk-support": {
3983
+ "basic functionality": {
3984
+ "js": "3.0.0",
3985
+ "android": "11.0.0",
3986
+ "ios": "11.0.0"
3987
+ }
3988
+ }
3989
+ },
3283
3990
  "heatmap-density": {
3284
3991
  "doc": "Returns the kernel density estimation of a pixel in a heatmap layer, which is a relative measure of how many data points are crowded around a particular pixel. Can only be used in the `heatmap-color` property.",
3285
3992
  "group": "Heatmap",
@@ -3596,6 +4303,7 @@
3596
4303
  "group": "Math",
3597
4304
  "sdk-support": {
3598
4305
  "basic functionality": {
4306
+ "js": "3.0.0",
3599
4307
  "android": "9.2.0",
3600
4308
  "ios": "5.9.0",
3601
4309
  "macos": "0.16.0"
@@ -3817,6 +4525,28 @@
3817
4525
  "macos": "0.9.0"
3818
4526
  }
3819
4527
  }
4528
+ },
4529
+ "raster-value": {
4530
+ "doc": "Returns the raster value of a pixel computed via `raster-color-mix`. Can only be used in the `raster-color` property.",
4531
+ "group": "Raster Colorization",
4532
+ "sdk-support": {
4533
+ "basic functionality": {
4534
+ "js": "3.0.0",
4535
+ "android": "11.0.0",
4536
+ "ios": "11.0.0"
4537
+ }
4538
+ }
4539
+ },
4540
+ "random": {
4541
+ "doc": "Returns a random value in the specified range (first two input numbers) based on a supplied seed (third input). The seed can be an expression or a constant number or string value.",
4542
+ "group": "Math",
4543
+ "sdk-support": {
4544
+ "basic functionality": {
4545
+ "js": "3.0.0",
4546
+ "android": "11.0.0",
4547
+ "ios": "11.0.0"
4548
+ }
4549
+ }
3820
4550
  }
3821
4551
  }
3822
4552
  },
@@ -3836,8 +4566,10 @@
3836
4566
  "expression": {
3837
4567
  "interpolated": true,
3838
4568
  "parameters": [
3839
- "zoom"
3840
- ]
4569
+ "zoom",
4570
+ "measure-light"
4571
+ ],
4572
+ "relaxZoomRestriction": true
3841
4573
  },
3842
4574
  "doc": "The start and end distance range in which fog fades from fully transparent to fully opaque. The distance to the point at the center of the map is defined as zero, so that negative range values are closer to the camera, and positive values are farther away.",
3843
4575
  "example": [
@@ -3859,8 +4591,10 @@
3859
4591
  "expression": {
3860
4592
  "interpolated": true,
3861
4593
  "parameters": [
3862
- "zoom"
3863
- ]
4594
+ "zoom",
4595
+ "measure-light"
4596
+ ],
4597
+ "relaxZoomRestriction": true
3864
4598
  },
3865
4599
  "transition": true,
3866
4600
  "doc": "The color of the atmosphere region immediately below the horizon and within the `range` and above the horizon and within `horizon-blend`. Using opacity is recommended only for smoothly transitioning fog on/off as anything less than 100% opacity results in more tiles loaded and drawn.",
@@ -3879,8 +4613,10 @@
3879
4613
  "expression": {
3880
4614
  "interpolated": true,
3881
4615
  "parameters": [
3882
- "zoom"
3883
- ]
4616
+ "zoom",
4617
+ "measure-light"
4618
+ ],
4619
+ "relaxZoomRestriction": true
3884
4620
  },
3885
4621
  "transition": true,
3886
4622
  "doc": "The color of the atmosphere region above the horizon, `high-color` extends further above the horizon than the `color` property and its spread can be controlled with `horizon-blend`. The opacity can be set to `0` to remove the high atmosphere color contribution.",
@@ -3913,8 +4649,10 @@
3913
4649
  "expression": {
3914
4650
  "interpolated": true,
3915
4651
  "parameters": [
3916
- "zoom"
3917
- ]
4652
+ "zoom",
4653
+ "measure-light"
4654
+ ],
4655
+ "relaxZoomRestriction": true
3918
4656
  },
3919
4657
  "transition": true,
3920
4658
  "doc": "The color of the region above the horizon and after the end of the `horizon-blend` contribution. The opacity can be set to `0` to have a transparent background.",
@@ -3948,8 +4686,10 @@
3948
4686
  "expression": {
3949
4687
  "interpolated": true,
3950
4688
  "parameters": [
3951
- "zoom"
3952
- ]
4689
+ "zoom",
4690
+ "measure-light"
4691
+ ],
4692
+ "relaxZoomRestriction": true
3953
4693
  },
3954
4694
  "transition": true,
3955
4695
  "doc": "Horizon blend applies a smooth fade from the color of the atmosphere to the color of space. A value of zero leaves a sharp transition from atmosphere to space. Increasing the value blends the color of atmosphere into increasingly high angles of the sky.",
@@ -3983,8 +4723,10 @@
3983
4723
  "expression": {
3984
4724
  "interpolated": true,
3985
4725
  "parameters": [
3986
- "zoom"
3987
- ]
4726
+ "zoom",
4727
+ "measure-light"
4728
+ ],
4729
+ "relaxZoomRestriction": true
3988
4730
  },
3989
4731
  "transition": true,
3990
4732
  "doc": "A value controlling the star intensity where `0` will show no stars and `1` will show stars at their maximum intensity.",
@@ -3997,6 +4739,36 @@
3997
4739
  }
3998
4740
  }
3999
4741
  },
4742
+ "camera": {
4743
+ "camera-projection" : {
4744
+ "doc": "Camera projection describes how 3D world geometry get projected into 2D screen",
4745
+ "type": "enum",
4746
+ "values": {
4747
+ "perspective": {
4748
+ "doc": "linear projection where distant objects appear smaller than closer objects. Lines that are parallel seem to converge towards a vanishing point"
4749
+ },
4750
+ "orthographic": {
4751
+ "doc": "Projection where objects are of the same scale regardless of whether they are far away or near to the camera. Parallel lines remains parallel and there is no vanishing point."
4752
+ }
4753
+ },
4754
+ "transition": true,
4755
+ "expression": {
4756
+ "interpolated": true,
4757
+ "parameters": [
4758
+ "zoom"
4759
+ ]
4760
+ },
4761
+ "sdk-support": {
4762
+ "basic functionality": {
4763
+ "js": "3.0.0",
4764
+ "android": "11.0.0",
4765
+ "ios": "11.0.0"
4766
+ }
4767
+ },
4768
+ "default": "perspective",
4769
+ "property-type": "data-constant"
4770
+ }
4771
+ },
4000
4772
  "light": {
4001
4773
  "anchor": {
4002
4774
  "type": "enum",
@@ -4139,7 +4911,9 @@
4139
4911
  "required": true,
4140
4912
  "sdk-support": {
4141
4913
  "basic functionality": {
4142
- "js": "2.6.0"
4914
+ "js": "2.6.0",
4915
+ "ios": "10.5.0",
4916
+ "android": "10.5.0"
4143
4917
  }
4144
4918
  }
4145
4919
  },
@@ -4247,7 +5021,8 @@
4247
5021
  "paint_raster",
4248
5022
  "paint_hillshade",
4249
5023
  "paint_background",
4250
- "paint_sky"
5024
+ "paint_sky",
5025
+ "paint_model"
4251
5026
  ],
4252
5027
  "paint_fill": {
4253
5028
  "fill-antialias": {
@@ -4296,7 +5071,8 @@
4296
5071
  "parameters": [
4297
5072
  "zoom",
4298
5073
  "feature",
4299
- "feature-state"
5074
+ "feature-state",
5075
+ "measure-light"
4300
5076
  ]
4301
5077
  },
4302
5078
  "property-type": "data-driven"
@@ -4330,7 +5106,8 @@
4330
5106
  "parameters": [
4331
5107
  "zoom",
4332
5108
  "feature",
4333
- "feature-state"
5109
+ "feature-state",
5110
+ "measure-light"
4334
5111
  ]
4335
5112
  },
4336
5113
  "property-type": "data-driven"
@@ -4366,7 +5143,8 @@
4366
5143
  "parameters": [
4367
5144
  "zoom",
4368
5145
  "feature",
4369
- "feature-state"
5146
+ "feature-state",
5147
+ "measure-light"
4370
5148
  ]
4371
5149
  },
4372
5150
  "property-type": "data-driven"
@@ -4455,6 +5233,29 @@
4455
5233
  ]
4456
5234
  },
4457
5235
  "property-type": "data-driven"
5236
+ },
5237
+ "fill-emissive-strength": {
5238
+ "type": "number",
5239
+ "default": 0,
5240
+ "minimum": 0,
5241
+ "transition": true,
5242
+ "units": "intensity",
5243
+ "doc": "Emission strength",
5244
+ "sdk-support": {
5245
+ "basic functionality": {
5246
+ "js": "3.0.0",
5247
+ "android": "11.0.0",
5248
+ "ios": "11.0.0"
5249
+ }
5250
+ },
5251
+ "expression": {
5252
+ "interpolated": true,
5253
+ "parameters": [
5254
+ "zoom",
5255
+ "measure-light"
5256
+ ]
5257
+ },
5258
+ "property-type": "data-constant"
4458
5259
  }
4459
5260
  },
4460
5261
  "paint_fill-extrusion": {
@@ -4510,7 +5311,8 @@
4510
5311
  "parameters": [
4511
5312
  "zoom",
4512
5313
  "feature",
4513
- "feature-state"
5314
+ "feature-state",
5315
+ "measure-light"
4514
5316
  ]
4515
5317
  },
4516
5318
  "property-type": "data-driven"
@@ -4625,113 +5427,348 @@
4625
5427
  "interpolated": true,
4626
5428
  "parameters": [
4627
5429
  "zoom",
4628
- "feature",
4629
- "feature-state"
5430
+ "feature",
5431
+ "feature-state",
5432
+ "measure-light"
5433
+ ]
5434
+ },
5435
+ "property-type": "data-driven"
5436
+ },
5437
+ "fill-extrusion-base": {
5438
+ "type": "number",
5439
+ "default": 0,
5440
+ "minimum": 0,
5441
+ "units": "meters",
5442
+ "doc": "The height with which to extrude the base of this layer. Must be less than or equal to `fill-extrusion-height`.",
5443
+ "transition": true,
5444
+ "requires": [
5445
+ "fill-extrusion-height"
5446
+ ],
5447
+ "sdk-support": {
5448
+ "basic functionality": {
5449
+ "js": "0.27.0",
5450
+ "android": "5.1.0",
5451
+ "ios": "3.6.0",
5452
+ "macos": "0.5.0"
5453
+ },
5454
+ "data-driven styling": {
5455
+ "js": "0.27.0",
5456
+ "android": "5.1.0",
5457
+ "ios": "3.6.0",
5458
+ "macos": "0.5.0"
5459
+ }
5460
+ },
5461
+ "expression": {
5462
+ "interpolated": true,
5463
+ "parameters": [
5464
+ "zoom",
5465
+ "feature",
5466
+ "feature-state",
5467
+ "measure-light"
5468
+ ]
5469
+ },
5470
+ "property-type": "data-driven"
5471
+ },
5472
+ "fill-extrusion-vertical-gradient": {
5473
+ "type": "boolean",
5474
+ "default": true,
5475
+ "doc": "Whether to apply a vertical gradient to the sides of a fill-extrusion layer. If true, sides will be shaded slightly darker farther down.",
5476
+ "transition": false,
5477
+ "sdk-support": {
5478
+ "basic functionality": {
5479
+ "js": "0.50.0",
5480
+ "android": "7.0.0",
5481
+ "ios": "4.7.0",
5482
+ "macos": "0.13.0"
5483
+ }
5484
+ },
5485
+ "expression": {
5486
+ "interpolated": false,
5487
+ "parameters": [
5488
+ "zoom"
5489
+ ]
5490
+ },
5491
+ "property-type": "data-constant"
5492
+ },
5493
+ "fill-extrusion-ambient-occlusion-intensity": {
5494
+ "property-type": "data-constant",
5495
+ "type": "number",
5496
+ "private": true,
5497
+ "default": 0.0,
5498
+ "minimum": 0,
5499
+ "maximum": 1,
5500
+ "expression": {
5501
+ "interpolated": true,
5502
+ "parameters": [
5503
+ "zoom"
5504
+ ]
5505
+ },
5506
+ "transition": true,
5507
+ "doc": "Controls the intensity of shading near ground and concave angles between walls. Default value 0.0 disables ambient occlusion and values around 0.3 provide the most plausible results for buildings.",
5508
+ "sdk-support": {
5509
+ "basic functionality": {
5510
+ "js": "2.10.0",
5511
+ "android": "10.7.0",
5512
+ "ios": "10.7.0"
5513
+ }
5514
+ }
5515
+ },
5516
+ "fill-extrusion-ambient-occlusion-radius": {
5517
+ "property-type": "data-constant",
5518
+ "type": "number",
5519
+ "private": true,
5520
+ "default": 3.0,
5521
+ "minimum": 0,
5522
+ "expression": {
5523
+ "interpolated": true,
5524
+ "parameters": [
5525
+ "zoom"
5526
+ ]
5527
+ },
5528
+ "transition": true,
5529
+ "doc": "Shades area near ground and concave angles between walls where the radius defines only vertical impact. Default value 3.0 corresponds to height of one floor and brings the most plausible results for buildings. This property works only with legacy light. When 3D light is enabled `fill-extrusion-ambient-occlusion-wall-radius` and `fill-extrusion-ambient-occlusion-ground-radius` are used instead.",
5530
+ "requires": [
5531
+ "fill-extrusion-edge-radius"
5532
+ ],
5533
+ "sdk-support": {
5534
+ "basic functionality": {
5535
+ "js": "2.10.0",
5536
+ "android": "10.7.0",
5537
+ "ios": "10.7.0"
5538
+ }
5539
+ }
5540
+ },
5541
+ "fill-extrusion-ambient-occlusion-wall-radius": {
5542
+ "property-type": "data-constant",
5543
+ "type": "number",
5544
+ "default": 3.0,
5545
+ "minimum": 0,
5546
+ "expression": {
5547
+ "interpolated": true,
5548
+ "parameters": [
5549
+ "zoom"
5550
+ ]
5551
+ },
5552
+ "transition": true,
5553
+ "doc": "Shades area near ground and concave angles between walls where the radius defines only vertical impact. Default value 3.0 corresponds to height of one floor and brings the most plausible results for buildings. This property works only with 3D light, i.e. when `lights` root property is defined.",
5554
+ "requires": [
5555
+ "fill-extrusion-edge-radius"
5556
+ ],
5557
+ "sdk-support": {
5558
+ "basic functionality": {
5559
+ "js": "3.0.0",
5560
+ "android": "11.0.0",
5561
+ "ios": "11.0.0"
5562
+ }
5563
+ }
5564
+ },
5565
+ "fill-extrusion-ambient-occlusion-ground-radius": {
5566
+ "property-type": "data-constant",
5567
+ "type": "number",
5568
+ "default": 3.0,
5569
+ "minimum": 0,
5570
+ "expression": {
5571
+ "interpolated": true,
5572
+ "parameters": [
5573
+ "zoom"
5574
+ ]
5575
+ },
5576
+ "transition": true,
5577
+ "doc": "The extent of the ambient occlusion effect on the ground beneath the extruded buildings in meters. This property works only with 3D light, i.e. when `lights` root property is defined.",
5578
+ "sdk-support": {
5579
+ "basic functionality": {
5580
+ "js": "3.0.0",
5581
+ "android": "11.0.0",
5582
+ "ios": "11.0.0"
5583
+ }
5584
+ }
5585
+ },
5586
+ "fill-extrusion-ambient-occlusion-ground-attenuation": {
5587
+ "property-type": "data-constant",
5588
+ "type": "number",
5589
+ "default": 0.69,
5590
+ "minimum": 0.0,
5591
+ "maximum": 1.0,
5592
+ "doc": "Provides a control to futher fine-tune the look of the ambient occlusion on the ground beneath the extruded buildings. Lower values give the effect a more solid look while higher values make it smoother. This property works only with 3D light, i.e. when `lights` root property is defined.",
5593
+ "transition": true,
5594
+ "expression": {
5595
+ "interpolated": true,
5596
+ "parameters": [
5597
+ "zoom"
5598
+ ]
5599
+ },
5600
+ "sdk-support": {
5601
+ "basic functionality": {
5602
+ "js": "3.0.0",
5603
+ "android": "11.0.0",
5604
+ "ios": "11.0.0"
5605
+ }
5606
+ }
5607
+ },
5608
+ "fill-extrusion-flood-light-color": {
5609
+ "property-type": "data-constant",
5610
+ "type": "color",
5611
+ "default": "#ffffff",
5612
+ "doc": "The color of the flood light effect on the walls of the extruded buildings. This property works only with 3D light, i.e. when `lights` root property is defined.",
5613
+ "transition": true,
5614
+ "expression": {
5615
+ "interpolated": true,
5616
+ "parameters": [
5617
+ "zoom",
5618
+ "measure-light"
5619
+ ]
5620
+ },
5621
+ "sdk-support": {
5622
+ "basic functionality": {
5623
+ "js": "3.0.0",
5624
+ "android": "11.0.0",
5625
+ "ios": "11.0.0"
5626
+ }
5627
+ }
5628
+ },
5629
+ "fill-extrusion-flood-light-intensity": {
5630
+ "property-type": "data-constant",
5631
+ "type": "number",
5632
+ "default": 0.0,
5633
+ "minimum": 0.0,
5634
+ "maximum": 1.0,
5635
+ "doc": "The intensity of the flood light color. This property works only with 3D light, i.e. when `lights` root property is defined.",
5636
+ "transition": true,
5637
+ "expression": {
5638
+ "interpolated": true,
5639
+ "parameters": [
5640
+ "zoom",
5641
+ "measure-light"
4630
5642
  ]
4631
5643
  },
4632
- "property-type": "data-driven"
5644
+ "sdk-support": {
5645
+ "basic functionality": {
5646
+ "js": "3.0.0",
5647
+ "android": "11.0.0",
5648
+ "ios": "11.0.0"
5649
+ }
5650
+ }
4633
5651
  },
4634
- "fill-extrusion-base": {
5652
+ "fill-extrusion-flood-light-wall-radius": {
5653
+ "property-type": "data-driven",
4635
5654
  "type": "number",
5655
+ "units": "meters",
4636
5656
  "default": 0,
4637
5657
  "minimum": 0,
4638
- "units": "meters",
4639
- "doc": "The height with which to extrude the base of this layer. Must be less than or equal to `fill-extrusion-height`.",
5658
+ "doc": "The extent of the flood light effect on the walls of the extruded buildings in meters. This property works only with 3D light, i.e. when `lights` root property is defined.",
4640
5659
  "transition": true,
4641
- "requires": [
4642
- "fill-extrusion-height"
4643
- ],
5660
+ "expression": {
5661
+ "interpolated": true,
5662
+ "parameters": [
5663
+ "feature",
5664
+ "feature-state"
5665
+ ]
5666
+ },
4644
5667
  "sdk-support": {
4645
5668
  "basic functionality": {
4646
- "js": "0.27.0",
4647
- "android": "5.1.0",
4648
- "ios": "3.6.0",
4649
- "macos": "0.5.0"
5669
+ "js": "3.0.0",
5670
+ "android": "11.0.0",
5671
+ "ios": "11.0.0"
4650
5672
  },
4651
5673
  "data-driven styling": {
4652
- "js": "0.27.0",
4653
- "android": "5.1.0",
4654
- "ios": "3.6.0",
4655
- "macos": "0.5.0"
5674
+ "js": "3.0.0",
5675
+ "android": "11.0.0",
5676
+ "ios": "11.0.0"
4656
5677
  }
4657
- },
5678
+ }
5679
+ },
5680
+ "fill-extrusion-flood-light-ground-radius": {
5681
+ "property-type": "data-driven",
5682
+ "type": "number",
5683
+ "units": "meters",
5684
+ "default": 0,
5685
+ "minimum": 0,
5686
+ "doc": "The extent of the flood light effect on the ground beneath the extruded buildings in meters. This property works only with 3D light, i.e. when `lights` root property is defined.",
5687
+ "transition": true,
4658
5688
  "expression": {
4659
5689
  "interpolated": true,
4660
5690
  "parameters": [
4661
- "zoom",
4662
5691
  "feature",
4663
5692
  "feature-state"
4664
5693
  ]
4665
5694
  },
4666
- "property-type": "data-driven"
4667
- },
4668
- "fill-extrusion-vertical-gradient": {
4669
- "type": "boolean",
4670
- "default": true,
4671
- "doc": "Whether to apply a vertical gradient to the sides of a fill-extrusion layer. If true, sides will be shaded slightly darker farther down.",
4672
- "transition": false,
4673
5695
  "sdk-support": {
4674
5696
  "basic functionality": {
4675
- "js": "0.50.0",
4676
- "android": "7.0.0",
4677
- "ios": "4.7.0",
4678
- "macos": "0.13.0"
5697
+ "js": "3.0.0",
5698
+ "android": "11.0.0",
5699
+ "ios": "11.0.0"
5700
+ },
5701
+ "data-driven styling": {
5702
+ "js": "3.0.0",
5703
+ "android": "11.0.0",
5704
+ "ios": "11.0.0"
4679
5705
  }
4680
- },
4681
- "expression": {
4682
- "interpolated": false,
4683
- "parameters": [
4684
- "zoom"
4685
- ]
4686
- },
4687
- "property-type": "data-constant"
5706
+ }
4688
5707
  },
4689
- "fill-extrusion-ambient-occlusion-intensity": {
5708
+ "fill-extrusion-flood-light-ground-attenuation": {
4690
5709
  "property-type": "data-constant",
4691
5710
  "type": "number",
4692
- "private": true,
4693
- "default": 0.0,
4694
- "minimum": 0,
4695
- "maximum": 1,
5711
+ "default": 0.69,
5712
+ "minimum": 0.0,
5713
+ "maximum": 1.0,
5714
+ "doc": "Provides a control to futher fine-tune the look of the flood light on the ground beneath the extruded buildings. Lower values give the effect a more solid look while higher values make it smoother. This property works only with 3D light, i.e. when `lights` root property is defined.",
5715
+ "transition": true,
4696
5716
  "expression": {
4697
5717
  "interpolated": true,
4698
5718
  "parameters": [
4699
5719
  "zoom"
4700
5720
  ]
4701
5721
  },
4702
- "transition": true,
4703
- "doc": "Controls the intensity of shading near ground and concave angles between walls. Default value 0.0 disables ambient occlusion and values around 0.3 provide the most plausible results for buildings.",
4704
5722
  "sdk-support": {
4705
5723
  "basic functionality": {
4706
- "js": "2.10.0",
4707
- "android": "10.7.0",
4708
- "ios": "10.7.0"
5724
+ "js": "3.0.0",
5725
+ "android": "11.0.0",
5726
+ "ios": "11.0.0"
4709
5727
  }
4710
5728
  }
4711
5729
  },
4712
- "fill-extrusion-ambient-occlusion-radius": {
5730
+ "fill-extrusion-vertical-scale": {
4713
5731
  "property-type": "data-constant",
4714
5732
  "type": "number",
4715
- "private": true,
4716
- "default": 3.0,
4717
- "minimum": 0,
5733
+ "default": 1.0,
5734
+ "minimum": 0.0,
5735
+ "doc": "A global multiplier that can be used to scale base, height, AO, and flood light of the fill extrusions.",
5736
+ "transition": true,
4718
5737
  "expression": {
4719
5738
  "interpolated": true,
4720
5739
  "parameters": [
4721
5740
  "zoom"
4722
5741
  ]
4723
5742
  },
4724
- "transition": true,
4725
- "doc": "Shades area near ground and concave angles between walls where the radius defines only vertical impact. Default value 3.0 corresponds to height of one floor and brings the most plausible results for buildings.",
5743
+ "sdk-support": {
5744
+ "basic functionality": {
5745
+ "js": "3.0.0",
5746
+ "android": "11.0.0",
5747
+ "ios": "11.0.0"
5748
+ }
5749
+ }
5750
+ },
5751
+ "fill-extrusion-rounded-roof": {
5752
+ "property-type": "data-constant",
5753
+ "type": "boolean",
5754
+ "default": true,
5755
+ "doc": "Indicates whether top edges should be rounded when fill-extrusion-edge-radius has a value greater than 0. If false, rounded edges are only applied to the sides. Default is true.",
4726
5756
  "requires": [
4727
5757
  "fill-extrusion-edge-radius"
4728
5758
  ],
5759
+ "transition": false,
4729
5760
  "sdk-support": {
4730
5761
  "basic functionality": {
4731
- "js": "2.10.0",
4732
- "android": "10.7.0",
4733
- "ios": "10.7.0"
5762
+ "js": "2.15.0",
5763
+ "android": "10.10.0",
5764
+ "ios": "10.10.0"
4734
5765
  }
5766
+ },
5767
+ "expression": {
5768
+ "interpolated": false,
5769
+ "parameters": [
5770
+ "zoom"
5771
+ ]
4735
5772
  }
4736
5773
  }
4737
5774
  },
@@ -4762,7 +5799,8 @@
4762
5799
  "parameters": [
4763
5800
  "zoom",
4764
5801
  "feature",
4765
- "feature-state"
5802
+ "feature-state",
5803
+ "measure-light"
4766
5804
  ]
4767
5805
  },
4768
5806
  "property-type": "data-driven"
@@ -4796,7 +5834,8 @@
4796
5834
  "parameters": [
4797
5835
  "zoom",
4798
5836
  "feature",
4799
- "feature-state"
5837
+ "feature-state",
5838
+ "measure-light"
4800
5839
  ]
4801
5840
  },
4802
5841
  "property-type": "data-driven"
@@ -4885,7 +5924,8 @@
4885
5924
  "parameters": [
4886
5925
  "zoom",
4887
5926
  "feature",
4888
- "feature-state"
5927
+ "feature-state",
5928
+ "measure-light"
4889
5929
  ]
4890
5930
  },
4891
5931
  "property-type": "data-driven"
@@ -4916,7 +5956,8 @@
4916
5956
  "parameters": [
4917
5957
  "zoom",
4918
5958
  "feature",
4919
- "feature-state"
5959
+ "feature-state",
5960
+ "measure-light"
4920
5961
  ]
4921
5962
  },
4922
5963
  "property-type": "data-driven"
@@ -4946,7 +5987,8 @@
4946
5987
  "parameters": [
4947
5988
  "zoom",
4948
5989
  "feature",
4949
- "feature-state"
5990
+ "feature-state",
5991
+ "measure-light"
4950
5992
  ]
4951
5993
  },
4952
5994
  "property-type": "data-driven"
@@ -4977,7 +6019,8 @@
4977
6019
  "parameters": [
4978
6020
  "zoom",
4979
6021
  "feature",
4980
- "feature-state"
6022
+ "feature-state",
6023
+ "measure-light"
4981
6024
  ]
4982
6025
  },
4983
6026
  "property-type": "data-driven"
@@ -5099,6 +6142,86 @@
5099
6142
  }
5100
6143
  },
5101
6144
  "property-type": "constant"
6145
+ },
6146
+ "line-emissive-strength": {
6147
+ "type": "number",
6148
+ "default": 0.0,
6149
+ "minimum": 0,
6150
+ "transition": true,
6151
+ "units": "intensity",
6152
+ "doc": "Emission strength",
6153
+ "sdk-support": {
6154
+ "basic functionality": {
6155
+ "js": "3.0.0",
6156
+ "android": "11.0.0",
6157
+ "ios": "11.0.0"
6158
+ }
6159
+ },
6160
+ "expression": {
6161
+ "interpolated": true,
6162
+ "parameters": [
6163
+ "zoom",
6164
+ "measure-light"
6165
+ ]
6166
+ },
6167
+ "property-type": "data-constant"
6168
+ },
6169
+ "line-border-width": {
6170
+ "type": "number",
6171
+ "private": true,
6172
+ "doc": "The width of the line border. A value of zero means no border.",
6173
+ "default": 0.0,
6174
+ "minimum": 0.0,
6175
+ "transition": true,
6176
+ "sdk-support": {
6177
+ "basic functionality": {
6178
+ "js": "3.0.0",
6179
+ "android": "10.9.0",
6180
+ "ios": "10.9.0"
6181
+ },
6182
+ "data-driven styling": {
6183
+ "js": "3.0.0",
6184
+ "android": "10.9.0",
6185
+ "ios": "10.9.0"
6186
+ }
6187
+ },
6188
+ "expression": {
6189
+ "interpolated": true,
6190
+ "parameters": [
6191
+ "zoom",
6192
+ "feature",
6193
+ "feature-state"
6194
+ ]
6195
+ },
6196
+ "property-type": "data-driven"
6197
+ },
6198
+ "line-border-color": {
6199
+ "type": "color",
6200
+ "private": true,
6201
+ "doc": "The color of the line border. If line-border-width is greater than zero and the alpha value of this color is 0 (default), the color for the border will be selected automatically based on the line color.",
6202
+ "default": "rgba(0, 0, 0, 0)",
6203
+ "transition": true,
6204
+ "sdk-support": {
6205
+ "basic functionality": {
6206
+ "js": "3.0.0",
6207
+ "android": "10.9.0",
6208
+ "ios": "10.9.0"
6209
+ },
6210
+ "data-driven styling": {
6211
+ "js": "3.0.0",
6212
+ "android": "10.9.0",
6213
+ "ios": "10.9.0"
6214
+ }
6215
+ },
6216
+ "expression": {
6217
+ "interpolated": true,
6218
+ "parameters": [
6219
+ "zoom",
6220
+ "feature",
6221
+ "feature-state"
6222
+ ]
6223
+ },
6224
+ "property-type": "data-driven"
5102
6225
  }
5103
6226
  },
5104
6227
  "paint_circle": {
@@ -5128,7 +6251,8 @@
5128
6251
  "parameters": [
5129
6252
  "zoom",
5130
6253
  "feature",
5131
- "feature-state"
6254
+ "feature-state",
6255
+ "measure-light"
5132
6256
  ]
5133
6257
  },
5134
6258
  "property-type": "data-driven"
@@ -5157,7 +6281,8 @@
5157
6281
  "parameters": [
5158
6282
  "zoom",
5159
6283
  "feature",
5160
- "feature-state"
6284
+ "feature-state",
6285
+ "measure-light"
5161
6286
  ]
5162
6287
  },
5163
6288
  "property-type": "data-driven"
@@ -5186,7 +6311,8 @@
5186
6311
  "parameters": [
5187
6312
  "zoom",
5188
6313
  "feature",
5189
- "feature-state"
6314
+ "feature-state",
6315
+ "measure-light"
5190
6316
  ]
5191
6317
  },
5192
6318
  "property-type": "data-driven"
@@ -5217,7 +6343,8 @@
5217
6343
  "parameters": [
5218
6344
  "zoom",
5219
6345
  "feature",
5220
- "feature-state"
6346
+ "feature-state",
6347
+ "measure-light"
5221
6348
  ]
5222
6349
  },
5223
6350
  "property-type": "data-driven"
@@ -5362,7 +6489,8 @@
5362
6489
  "parameters": [
5363
6490
  "zoom",
5364
6491
  "feature",
5365
- "feature-state"
6492
+ "feature-state",
6493
+ "measure-light"
5366
6494
  ]
5367
6495
  },
5368
6496
  "property-type": "data-driven"
@@ -5391,7 +6519,8 @@
5391
6519
  "parameters": [
5392
6520
  "zoom",
5393
6521
  "feature",
5394
- "feature-state"
6522
+ "feature-state",
6523
+ "measure-light"
5395
6524
  ]
5396
6525
  },
5397
6526
  "property-type": "data-driven"
@@ -5422,11 +6551,35 @@
5422
6551
  "parameters": [
5423
6552
  "zoom",
5424
6553
  "feature",
5425
- "feature-state"
6554
+ "feature-state",
6555
+ "measure-light"
5426
6556
  ]
5427
6557
  },
5428
6558
  "property-type": "data-driven"
5429
- }
6559
+ },
6560
+ "circle-emissive-strength": {
6561
+ "type": "number",
6562
+ "default": 0,
6563
+ "minimum": 0,
6564
+ "transition": true,
6565
+ "units": "intensity",
6566
+ "doc": "Emission strength",
6567
+ "sdk-support": {
6568
+ "basic functionality": {
6569
+ "js": "3.0.0",
6570
+ "android": "11.0.0",
6571
+ "ios": "11.0.0"
6572
+ }
6573
+ },
6574
+ "expression": {
6575
+ "interpolated": true,
6576
+ "parameters": [
6577
+ "zoom",
6578
+ "measure-light"
6579
+ ]
6580
+ },
6581
+ "property-type": "data-constant"
6582
+ }
5430
6583
  },
5431
6584
  "paint_heatmap": {
5432
6585
  "heatmap-radius": {
@@ -5455,7 +6608,8 @@
5455
6608
  "parameters": [
5456
6609
  "zoom",
5457
6610
  "feature",
5458
- "feature-state"
6611
+ "feature-state",
6612
+ "measure-light"
5459
6613
  ]
5460
6614
  },
5461
6615
  "property-type": "data-driven"
@@ -5485,7 +6639,8 @@
5485
6639
  "parameters": [
5486
6640
  "zoom",
5487
6641
  "feature",
5488
- "feature-state"
6642
+ "feature-state",
6643
+ "measure-light"
5489
6644
  ]
5490
6645
  },
5491
6646
  "property-type": "data-driven"
@@ -5608,7 +6763,64 @@
5608
6763
  "parameters": [
5609
6764
  "zoom",
5610
6765
  "feature",
5611
- "feature-state"
6766
+ "feature-state",
6767
+ "measure-light"
6768
+ ]
6769
+ },
6770
+ "property-type": "data-driven"
6771
+ },
6772
+ "icon-emissive-strength": {
6773
+ "type": "number",
6774
+ "default": 1,
6775
+ "minimum": 0,
6776
+ "transition": true,
6777
+ "units": "intensity",
6778
+ "doc": "Emission strength",
6779
+ "sdk-support": {
6780
+ "basic functionality": {
6781
+ "js": "3.0.0",
6782
+ "android": "11.0.0",
6783
+ "ios": "11.0.0"
6784
+ },
6785
+ "data-driven styling": {
6786
+ "js": "3.0.0",
6787
+ "android": "11.0.0",
6788
+ "ios": "11.0.0"
6789
+ }
6790
+ },
6791
+ "expression": {
6792
+ "interpolated": true,
6793
+ "parameters": [
6794
+ "zoom",
6795
+ "measure-light"
6796
+ ]
6797
+ },
6798
+ "property-type": "data-driven"
6799
+ },
6800
+ "text-emissive-strength": {
6801
+ "type": "number",
6802
+ "default": 1,
6803
+ "minimum": 0,
6804
+ "transition": true,
6805
+ "units": "intensity",
6806
+ "doc": "Emission strength",
6807
+ "sdk-support": {
6808
+ "basic functionality": {
6809
+ "js": "3.0.0",
6810
+ "android": "11.0.0",
6811
+ "ios": "11.0.0"
6812
+ },
6813
+ "data-driven styling": {
6814
+ "js": "3.0.0",
6815
+ "android": "11.0.0",
6816
+ "ios": "11.0.0"
6817
+ }
6818
+ },
6819
+ "expression": {
6820
+ "interpolated": true,
6821
+ "parameters": [
6822
+ "zoom",
6823
+ "measure-light"
5612
6824
  ]
5613
6825
  },
5614
6826
  "property-type": "data-driven"
@@ -5640,7 +6852,8 @@
5640
6852
  "parameters": [
5641
6853
  "zoom",
5642
6854
  "feature",
5643
- "feature-state"
6855
+ "feature-state",
6856
+ "measure-light"
5644
6857
  ]
5645
6858
  },
5646
6859
  "property-type": "data-driven"
@@ -5672,7 +6885,8 @@
5672
6885
  "parameters": [
5673
6886
  "zoom",
5674
6887
  "feature",
5675
- "feature-state"
6888
+ "feature-state",
6889
+ "measure-light"
5676
6890
  ]
5677
6891
  },
5678
6892
  "property-type": "data-driven"
@@ -5706,7 +6920,8 @@
5706
6920
  "parameters": [
5707
6921
  "zoom",
5708
6922
  "feature",
5709
- "feature-state"
6923
+ "feature-state",
6924
+ "measure-light"
5710
6925
  ]
5711
6926
  },
5712
6927
  "property-type": "data-driven"
@@ -5740,7 +6955,8 @@
5740
6955
  "parameters": [
5741
6956
  "zoom",
5742
6957
  "feature",
5743
- "feature-state"
6958
+ "feature-state",
6959
+ "measure-light"
5744
6960
  ]
5745
6961
  },
5746
6962
  "property-type": "data-driven"
@@ -5807,6 +7023,36 @@
5807
7023
  },
5808
7024
  "property-type": "data-constant"
5809
7025
  },
7026
+ "icon-image-cross-fade": {
7027
+ "type": "number",
7028
+ "property-type": "data-driven",
7029
+ "default": 0.0,
7030
+ "minimum": 0,
7031
+ "maximum": 1,
7032
+ "expression": {
7033
+ "interpolated": true,
7034
+ "parameters": [
7035
+ "zoom",
7036
+ "feature",
7037
+ "feature-state",
7038
+ "measure-light"
7039
+ ]
7040
+ },
7041
+ "sdk-support": {
7042
+ "basic functionality": {
7043
+ "js": "3.0.0",
7044
+ "android": "11.0.0",
7045
+ "ios": "11.0.0"
7046
+ },
7047
+ "data-driven styling": {
7048
+ "js": "3.0.0",
7049
+ "android": "11.0.0",
7050
+ "ios": "11.0.0"
7051
+ }
7052
+ },
7053
+ "doc": "Controls the transition progress between the image variants of icon-image. Zero means the first variant is used, one is the second, and in between they are blended together.",
7054
+ "transition": true
7055
+ },
5810
7056
  "text-opacity": {
5811
7057
  "type": "number",
5812
7058
  "doc": "The opacity at which the text will be drawn.",
@@ -5836,7 +7082,8 @@
5836
7082
  "parameters": [
5837
7083
  "zoom",
5838
7084
  "feature",
5839
- "feature-state"
7085
+ "feature-state",
7086
+ "measure-light"
5840
7087
  ]
5841
7088
  },
5842
7089
  "property-type": "data-driven"
@@ -5869,7 +7116,8 @@
5869
7116
  "parameters": [
5870
7117
  "zoom",
5871
7118
  "feature",
5872
- "feature-state"
7119
+ "feature-state",
7120
+ "measure-light"
5873
7121
  ]
5874
7122
  },
5875
7123
  "property-type": "data-driven"
@@ -5901,7 +7149,8 @@
5901
7149
  "parameters": [
5902
7150
  "zoom",
5903
7151
  "feature",
5904
- "feature-state"
7152
+ "feature-state",
7153
+ "measure-light"
5905
7154
  ]
5906
7155
  },
5907
7156
  "property-type": "data-driven"
@@ -5935,7 +7184,8 @@
5935
7184
  "parameters": [
5936
7185
  "zoom",
5937
7186
  "feature",
5938
- "feature-state"
7187
+ "feature-state",
7188
+ "measure-light"
5939
7189
  ]
5940
7190
  },
5941
7191
  "property-type": "data-driven"
@@ -5969,7 +7219,8 @@
5969
7219
  "parameters": [
5970
7220
  "zoom",
5971
7221
  "feature",
5972
- "feature-state"
7222
+ "feature-state",
7223
+ "measure-light"
5973
7224
  ]
5974
7225
  },
5975
7226
  "property-type": "data-driven"
@@ -6061,6 +7312,88 @@
6061
7312
  },
6062
7313
  "property-type": "data-constant"
6063
7314
  },
7315
+ "raster-color": {
7316
+ "type": "color",
7317
+ "doc": "Defines a color map by which to colorize a raster layer, parameterized by the `[\"raster-value\"]` expression and evaluated at 1024 uniformly spaced steps over the range specified by `raster-color-range`.",
7318
+ "transition": false,
7319
+ "sdk-support": {
7320
+ "basic functionality": {
7321
+ "js": "3.0.0",
7322
+ "android": "11.0.0",
7323
+ "ios": "11.0.0"
7324
+ },
7325
+ "data-driven styling": {}
7326
+ },
7327
+ "expression": {
7328
+ "interpolated": true,
7329
+ "parameters": [
7330
+ "raster-value"
7331
+ ]
7332
+ },
7333
+ "property-type": "color-ramp"
7334
+ },
7335
+ "raster-color-mix": {
7336
+ "type": "array",
7337
+ "default": [
7338
+ 0.2126,
7339
+ 0.7152,
7340
+ 0.0722,
7341
+ 0.0
7342
+ ],
7343
+ "length": 4,
7344
+ "value": "number",
7345
+ "property-type": "data-constant",
7346
+ "transition": true,
7347
+ "expression": {
7348
+ "interpolated": true,
7349
+ "parameters": [
7350
+ "zoom"
7351
+ ]
7352
+ },
7353
+ "doc": "When `raster-color` is active, specifies the combination of source RGB channels used to compute the raster value. Computed using the equation `mix.r * src.r + mix.g * src.g + mix.b * src.b + mix.a`. The first three components specify the mix of source red, green, and blue channels, respectively. The fourth component serves as a constant offset and is *not* multipled by source alpha. Source alpha is instead carried through and applied as opacity to the colorized result. Default value corresponds to RGB luminosity.",
7354
+ "example": [
7355
+ 0.2126,
7356
+ 0.7152,
7357
+ 0.0722,
7358
+ 0.0
7359
+ ],
7360
+ "sdk-support": {
7361
+ "basic functionality": {
7362
+ "js": "3.0.0",
7363
+ "android": "11.0.0",
7364
+ "ios": "11.0.0"
7365
+ }
7366
+ }
7367
+ },
7368
+ "raster-color-range": {
7369
+ "type": "array",
7370
+ "default": [
7371
+ 0,
7372
+ 1
7373
+ ],
7374
+ "length": 2,
7375
+ "value": "number",
7376
+ "property-type": "data-constant",
7377
+ "transition": true,
7378
+ "expression": {
7379
+ "interpolated": true,
7380
+ "parameters": [
7381
+ "zoom"
7382
+ ]
7383
+ },
7384
+ "doc": "When `raster-color` is active, specifies the range over which `raster-color` is tabulated. Units correspond to the computed raster value via `raster-color-mix`.",
7385
+ "example": [
7386
+ 0.5,
7387
+ 10
7388
+ ],
7389
+ "sdk-support": {
7390
+ "basic functionality": {
7391
+ "js": "3.0.0",
7392
+ "android": "11.0.0",
7393
+ "ios": "11.0.0"
7394
+ }
7395
+ }
7396
+ },
6064
7397
  "raster-hue-rotate": {
6065
7398
  "type": "number",
6066
7399
  "default": 0,
@@ -6436,6 +7769,29 @@
6436
7769
  ]
6437
7770
  },
6438
7771
  "property-type": "data-constant"
7772
+ },
7773
+ "background-emissive-strength": {
7774
+ "type": "number",
7775
+ "default": 0.0,
7776
+ "minimum": 0,
7777
+ "transition": true,
7778
+ "units": "intensity",
7779
+ "doc": "Emission strength",
7780
+ "sdk-support": {
7781
+ "basic functionality": {
7782
+ "js": "3.0.0",
7783
+ "android": "11.0.0",
7784
+ "ios": "11.0.0"
7785
+ }
7786
+ },
7787
+ "expression": {
7788
+ "interpolated": true,
7789
+ "parameters": [
7790
+ "zoom",
7791
+ "measure-light"
7792
+ ]
7793
+ },
7794
+ "property-type": "data-constant"
6439
7795
  }
6440
7796
  },
6441
7797
  "paint_sky": {
@@ -6675,6 +8031,310 @@
6675
8031
  "property-type": "data-constant"
6676
8032
  }
6677
8033
  },
8034
+ "paint_model" : {
8035
+ "model-opacity": {
8036
+ "type": "number",
8037
+ "default": 1,
8038
+ "minimum": 0,
8039
+ "maximum": 1,
8040
+ "doc": "The opacity of the model layer.",
8041
+ "transition": true,
8042
+ "expression": {
8043
+ "interpolated": true,
8044
+ "parameters": ["zoom"]
8045
+ },
8046
+ "sdk-support": {
8047
+ "basic functionality": {
8048
+ "js": "3.0.0",
8049
+ "android": "11.0.0",
8050
+ "ios": "11.0.0"
8051
+ }
8052
+ },
8053
+ "property-type": "data-constant"
8054
+ },
8055
+ "model-rotation": {
8056
+ "type": "array",
8057
+ "value": "number",
8058
+ "length": 3,
8059
+ "default": [0, 0, 0],
8060
+ "period": 360,
8061
+ "units": "degrees",
8062
+ "property-type": "data-driven",
8063
+ "expression": {
8064
+ "interpolated": true,
8065
+ "parameters": ["feature", "feature-state"]
8066
+ },
8067
+ "sdk-support": {
8068
+ "basic functionality": {
8069
+ "js": "3.0.0",
8070
+ "android": "11.0.0",
8071
+ "ios": "11.0.0"
8072
+ },
8073
+ "data-driven styling": {
8074
+ "js": "3.0.0",
8075
+ "android": "11.0.0",
8076
+ "ios": "11.0.0"
8077
+ }
8078
+ },
8079
+ "transition": true,
8080
+ "doc": "The rotation of the model in euler angles [lon, lat, z]."
8081
+ },
8082
+ "model-scale": {
8083
+ "type": "array",
8084
+ "value": "number",
8085
+ "length": 3,
8086
+ "default": [1, 1, 1],
8087
+ "doc": "The scale of the model. Expressions that are zoom-dependent are not supported if using GeoJSON or vector tile as the model layer source.",
8088
+ "property-type": "data-driven",
8089
+ "expression": {
8090
+ "interpolated": true,
8091
+ "parameters": ["feature", "feature-state", "zoom"]
8092
+ },
8093
+ "sdk-support": {
8094
+ "basic functionality": {
8095
+ "js": "3.0.0",
8096
+ "android": "11.0.0",
8097
+ "ios": "11.0.0"
8098
+ },
8099
+ "data-driven styling": {
8100
+ "js": "3.0.0",
8101
+ "android": "11.0.0",
8102
+ "ios": "11.0.0"
8103
+ }
8104
+ },
8105
+ "transition": true
8106
+ },
8107
+ "model-translation": {
8108
+ "type": "array",
8109
+ "value": "number",
8110
+ "length": 3,
8111
+ "default": [0, 0, 0],
8112
+ "property-type": "data-driven",
8113
+ "expression": {
8114
+ "interpolated": true,
8115
+ "parameters": ["feature", "feature-state"]
8116
+ },
8117
+ "sdk-support": {
8118
+ "basic functionality": {
8119
+ "js": "3.0.0",
8120
+ "android": "11.0.0",
8121
+ "ios": "11.0.0"
8122
+ },
8123
+ "data-driven styling": {
8124
+ "js": "3.0.0",
8125
+ "android": "11.0.0",
8126
+ "ios": "11.0.0"
8127
+ }
8128
+ },
8129
+ "transition": true,
8130
+ "doc": "The translation of the model in meters in form of [longitudal, latitudal, altitude] offsets."
8131
+ },
8132
+ "model-color": {
8133
+ "type": "color",
8134
+ "default": "#ffffff",
8135
+ "doc": "The tint color of the model layer. model-color-mix-intensity (defaults to 0) defines tint(mix) intensity - this means that, this color is not used unless model-color-mix-intensity gets value greater than 0. Expressions that depend on measure-light are not supported when using GeoJSON or vector tile as the model layer source.",
8136
+ "property-type": "data-driven",
8137
+ "expression": {
8138
+ "interpolated": true,
8139
+ "parameters": ["feature", "feature-state", "measure-light"]
8140
+ },
8141
+ "sdk-support": {
8142
+ "basic functionality": {
8143
+ "js": "3.0.0",
8144
+ "android": "11.0.0",
8145
+ "ios": "11.0.0"
8146
+ },
8147
+ "data-driven styling": {
8148
+ "js": "3.0.0",
8149
+ "android": "11.0.0",
8150
+ "ios": "11.0.0"
8151
+ }
8152
+ },
8153
+ "transition": true
8154
+ },
8155
+ "model-color-mix-intensity": {
8156
+ "type": "number",
8157
+ "property-type": "data-driven",
8158
+ "default": 0.0,
8159
+ "minimum": 0,
8160
+ "maximum": 1,
8161
+ "doc": "Intensity of model-color (on a scale from 0 to 1) in color mix with original 3D model's colors. Higher number will present a higher model-color contribution in mix. Expressions that depend on measure-light are not supported when using GeoJSON or vector tile as the model layer source.",
8162
+ "expression": {
8163
+ "interpolated": true,
8164
+ "parameters": ["feature", "feature-state", "measure-light"]
8165
+ },
8166
+ "sdk-support": {
8167
+ "basic functionality": {
8168
+ "js": "3.0.0",
8169
+ "android": "11.0.0",
8170
+ "ios": "11.0.0"
8171
+ },
8172
+ "data-driven styling": {
8173
+ "js": "3.0.0",
8174
+ "android": "11.0.0",
8175
+ "ios": "11.0.0"
8176
+ }
8177
+ },
8178
+ "transition": true
8179
+ },
8180
+ "model-type": {
8181
+ "type": "enum",
8182
+ "values": {
8183
+ "common-3d": {
8184
+ "doc": "Integrated to 3D scene, using depth testing, along with terrain, fill-extrusions and custom layer."
8185
+ },
8186
+ "location-indicator": {
8187
+ "doc": "Displayed over other 3D content, occluded by terrain."
8188
+ }
8189
+ },
8190
+ "sdk-support": {
8191
+ "basic functionality": {
8192
+ "js": "3.0.0",
8193
+ "android": "11.0.0",
8194
+ "ios": "11.0.0"
8195
+ }
8196
+ },
8197
+ "default": "common-3d",
8198
+ "doc": "Defines rendering behavior of model in respect to other 3D scene objects.",
8199
+ "property-type": "data-constant"
8200
+ },
8201
+ "model-cast-shadows": {
8202
+ "type": "boolean",
8203
+ "default": true,
8204
+ "doc": "Enable/Disable shadow casting for this layer",
8205
+ "transition": false,
8206
+ "expression": {
8207
+ "interpolated": false
8208
+ },
8209
+ "sdk-support": {
8210
+ "basic functionality": {
8211
+ "js": "3.0.0",
8212
+ "android": "11.0.0",
8213
+ "ios": "11.0.0"
8214
+ }
8215
+ },
8216
+ "property-type": "data-constant"
8217
+ },
8218
+ "model-receive-shadows": {
8219
+ "type": "boolean",
8220
+ "default": true,
8221
+ "doc": "Enable/Disable shadow receiving for this layer",
8222
+ "transition": false,
8223
+ "expression": {
8224
+ "interpolated": false
8225
+ },
8226
+ "sdk-support": {
8227
+ "basic functionality": {
8228
+ "js": "3.0.0",
8229
+ "android": "11.0.0",
8230
+ "ios": "11.0.0"
8231
+ }
8232
+ },
8233
+ "property-type": "data-constant"
8234
+ },
8235
+ "model-ambient-occlusion-intensity": {
8236
+ "type": "number",
8237
+ "default": 1.0,
8238
+ "minimum": 0,
8239
+ "maximum": 1,
8240
+ "doc": "Intensity of the ambient occlusion if present in the 3D model.",
8241
+ "expression": {
8242
+ "interpolated": true,
8243
+ "parameters": ["zoom"]
8244
+ },
8245
+ "sdk-support": {
8246
+ "basic functionality": {
8247
+ "js": "3.0.0",
8248
+ "android": "11.0.0",
8249
+ "ios": "11.0.0"
8250
+ }
8251
+ },
8252
+ "property-type": "data-constant",
8253
+ "transition": true
8254
+ },
8255
+ "model-emissive-strength": {
8256
+ "type": "number",
8257
+ "property-type": "data-driven",
8258
+ "default": 0.0,
8259
+ "minimum": 0,
8260
+ "maximum": 5,
8261
+ "units": "number",
8262
+ "doc": "Strength of the emission. There is no emission for value 0. For value 1.0, only emissive component (no shading) is displayed and values above 1.0 produce light contribution to surrounding area, for some of the parts (e.g. doors). Expressions that depend on measure-light are not supported when using GeoJSON or vector tile as the model layer source.",
8263
+ "expression": {
8264
+ "interpolated": true,
8265
+ "parameters": ["feature", "feature-state", "measure-light"]
8266
+ },
8267
+ "sdk-support": {
8268
+ "basic functionality": {
8269
+ "js": "3.0.0",
8270
+ "android": "11.0.0",
8271
+ "ios": "11.0.0"
8272
+ },
8273
+ "data-driven styling": {
8274
+ "js": "3.0.0",
8275
+ "android": "11.0.0",
8276
+ "ios": "11.0.0"
8277
+ }
8278
+ },
8279
+ "transition": true
8280
+ },
8281
+ "model-roughness": {
8282
+ "type": "number",
8283
+ "default": 1,
8284
+ "minimum": 0,
8285
+ "maximum": 1,
8286
+ "doc": "Material roughness. Material is fully smooth for value 0, and fully rough for value 1. Affects only layers using batched-model source.",
8287
+ "property-type": "data-driven",
8288
+ "expression": {
8289
+ "interpolated": true,
8290
+ "parameters": ["feature", "feature-state"]
8291
+ },
8292
+ "sdk-support": {
8293
+ "basic functionality": {
8294
+ "js": "3.0.0",
8295
+ "android": "11.0.0",
8296
+ "ios": "11.0.0"
8297
+ },
8298
+ "data-driven styling": {
8299
+ "js": "3.0.0",
8300
+ "android": "11.0.0",
8301
+ "ios": "11.0.0"
8302
+ }
8303
+ },
8304
+ "transition": true
8305
+ },
8306
+ "model-height-based-emissive-strength-multiplier": {
8307
+ "type": "array",
8308
+ "default": [
8309
+ 1,
8310
+ 1,
8311
+ 1,
8312
+ 1,
8313
+ 0
8314
+ ],
8315
+ "length": 5,
8316
+ "value": "number",
8317
+ "doc": "Emissive strength multiplier along model height (gradient begin, gradient end, value at begin, value at end, gradient curve power (logarithmic scale, curve power = pow(10, val)).",
8318
+ "property-type": "data-driven",
8319
+ "expression": {
8320
+ "interpolated": true,
8321
+ "parameters": ["feature", "feature-state", "measure-light"]
8322
+ },
8323
+ "sdk-support": {
8324
+ "basic functionality": {
8325
+ "js": "3.0.0",
8326
+ "android": "11.0.0",
8327
+ "ios": "11.0.0"
8328
+ },
8329
+ "data-driven styling": {
8330
+ "js": "3.0.0",
8331
+ "android": "11.0.0",
8332
+ "ios": "11.0.0"
8333
+ }
8334
+ },
8335
+ "transition": true
8336
+ }
8337
+ },
6678
8338
  "transition": {
6679
8339
  "duration": {
6680
8340
  "type": "number",