@mapbox/mapbox-gl-style-spec 14.8.0 → 14.9.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/types.ts CHANGED
@@ -88,8 +88,20 @@ export type StyleSpecification = {
88
88
  "lights"?: Array<LightsSpecification>,
89
89
  "terrain"?: TerrainSpecification | null | undefined,
90
90
  "fog"?: FogSpecification,
91
+ /**
92
+ * @experimental This property is experimental and subject to change in future versions.
93
+ */
94
+ "snow"?: SnowSpecification,
95
+ /**
96
+ * @experimental This property is experimental and subject to change in future versions.
97
+ */
98
+ "rain"?: RainSpecification,
91
99
  "camera"?: CameraSpecification,
92
100
  "color-theme"?: ColorThemeSpecification,
101
+ /**
102
+ * @experimental This property is experimental and subject to change in future versions.
103
+ */
104
+ "indoor"?: IndoorSpecification,
93
105
  "imports"?: Array<ImportSpecification>,
94
106
  "schema"?: SchemaSpecification,
95
107
  "sources": SourcesSpecification,
@@ -119,6 +131,7 @@ export type LightSpecification = {
119
131
  "position-transition"?: TransitionSpecification,
120
132
  "color"?: PropertyValueSpecification<ColorSpecification>,
121
133
  "color-transition"?: TransitionSpecification,
134
+ "color-use-theme"?: PropertyValueSpecification<string>,
122
135
  "intensity"?: PropertyValueSpecification<number>,
123
136
  "intensity-transition"?: TransitionSpecification
124
137
  }
@@ -134,10 +147,13 @@ export type FogSpecification = {
134
147
  "range-transition"?: TransitionSpecification,
135
148
  "color"?: PropertyValueSpecification<ColorSpecification>,
136
149
  "color-transition"?: TransitionSpecification,
150
+ "color-use-theme"?: PropertyValueSpecification<string>,
137
151
  "high-color"?: PropertyValueSpecification<ColorSpecification>,
138
152
  "high-color-transition"?: TransitionSpecification,
153
+ "high-color-use-theme"?: PropertyValueSpecification<string>,
139
154
  "space-color"?: PropertyValueSpecification<ColorSpecification>,
140
155
  "space-color-transition"?: TransitionSpecification,
156
+ "space-color-use-theme"?: PropertyValueSpecification<string>,
141
157
  "horizon-blend"?: PropertyValueSpecification<number>,
142
158
  "horizon-blend-transition"?: TransitionSpecification,
143
159
  "star-intensity"?: PropertyValueSpecification<number>,
@@ -146,6 +162,54 @@ export type FogSpecification = {
146
162
  "vertical-range-transition"?: TransitionSpecification
147
163
  }
148
164
 
165
+ export type SnowSpecification = {
166
+ "density"?: PropertyValueSpecification<number>,
167
+ "density-transition"?: TransitionSpecification,
168
+ "intensity"?: PropertyValueSpecification<number>,
169
+ "intensity-transition"?: TransitionSpecification,
170
+ "color"?: PropertyValueSpecification<ColorSpecification>,
171
+ "color-transition"?: TransitionSpecification,
172
+ "color-use-theme"?: PropertyValueSpecification<string>,
173
+ "opacity"?: PropertyValueSpecification<number>,
174
+ "opacity-transition"?: TransitionSpecification,
175
+ "vignette"?: PropertyValueSpecification<number>,
176
+ "vignette-transition"?: TransitionSpecification,
177
+ "vignette-color"?: PropertyValueSpecification<ColorSpecification>,
178
+ "vignette-color-transition"?: TransitionSpecification,
179
+ "vignette-color-use-theme"?: PropertyValueSpecification<string>,
180
+ "center-thinning"?: PropertyValueSpecification<number>,
181
+ "center-thinning-transition"?: TransitionSpecification,
182
+ "direction"?: PropertyValueSpecification<[number, number]>,
183
+ "direction-transition"?: TransitionSpecification,
184
+ "flake-size"?: PropertyValueSpecification<number>,
185
+ "flake-size-transition"?: TransitionSpecification
186
+ }
187
+
188
+ export type RainSpecification = {
189
+ "density"?: PropertyValueSpecification<number>,
190
+ "density-transition"?: TransitionSpecification,
191
+ "intensity"?: PropertyValueSpecification<number>,
192
+ "intensity-transition"?: TransitionSpecification,
193
+ "color"?: PropertyValueSpecification<ColorSpecification>,
194
+ "color-transition"?: TransitionSpecification,
195
+ "color-use-theme"?: PropertyValueSpecification<string>,
196
+ "opacity"?: PropertyValueSpecification<number>,
197
+ "opacity-transition"?: TransitionSpecification,
198
+ "vignette"?: PropertyValueSpecification<number>,
199
+ "vignette-transition"?: TransitionSpecification,
200
+ "vignette-color"?: PropertyValueSpecification<ColorSpecification>,
201
+ "vignette-color-transition"?: TransitionSpecification,
202
+ "vignette-color-use-theme"?: PropertyValueSpecification<string>,
203
+ "center-thinning"?: PropertyValueSpecification<number>,
204
+ "center-thinning-transition"?: TransitionSpecification,
205
+ "direction"?: PropertyValueSpecification<[number, number]>,
206
+ "direction-transition"?: TransitionSpecification,
207
+ "droplet-size"?: PropertyValueSpecification<[number, number]>,
208
+ "droplet-size-transition"?: TransitionSpecification,
209
+ "distortion-strength"?: PropertyValueSpecification<number>,
210
+ "distortion-strength-transition"?: TransitionSpecification
211
+ }
212
+
149
213
  export type CameraSpecification = {
150
214
  "camera-projection"?: PropertyValueSpecification<"perspective" | "orthographic">,
151
215
  "camera-projection-transition"?: TransitionSpecification
@@ -165,7 +229,19 @@ export type ImportSpecification = {
165
229
  "id": string,
166
230
  "url": string,
167
231
  "config"?: ConfigSpecification,
168
- "data"?: StyleSpecification
232
+ "data"?: StyleSpecification,
233
+ "color-theme"?: ColorThemeSpecification | null | undefined
234
+ }
235
+
236
+ export type IndoorSpecification = {
237
+ /**
238
+ * @experimental This property is experimental and subject to change in future versions.
239
+ */
240
+ "floorplanFeaturesetId"?: ExpressionSpecification,
241
+ /**
242
+ * @experimental This property is experimental and subject to change in future versions.
243
+ */
244
+ "buildingFeaturesetId"?: ExpressionSpecification
169
245
  }
170
246
 
171
247
  export type ConfigSpecification = {
@@ -333,6 +409,7 @@ export type AmbientLightSpecification = {
333
409
  "properties"?: {
334
410
  "color"?: PropertyValueSpecification<ColorSpecification>,
335
411
  "color-transition"?: TransitionSpecification,
412
+ "color-use-theme"?: PropertyValueSpecification<string>,
336
413
  "intensity"?: PropertyValueSpecification<number>,
337
414
  "intensity-transition"?: TransitionSpecification
338
415
  },
@@ -346,9 +423,14 @@ export type DirectionalLightSpecification = {
346
423
  "direction-transition"?: TransitionSpecification,
347
424
  "color"?: PropertyValueSpecification<ColorSpecification>,
348
425
  "color-transition"?: TransitionSpecification,
426
+ "color-use-theme"?: PropertyValueSpecification<string>,
349
427
  "intensity"?: PropertyValueSpecification<number>,
350
428
  "intensity-transition"?: TransitionSpecification,
351
429
  "cast-shadows"?: boolean,
430
+ /**
431
+ * @experimental This property is experimental and subject to change in future versions.
432
+ */
433
+ "shadow-quality"?: PropertyValueSpecification<number>,
352
434
  "shadow-intensity"?: PropertyValueSpecification<number>,
353
435
  "shadow-intensity-transition"?: TransitionSpecification
354
436
  },
@@ -363,6 +445,7 @@ export type FlatLightSpecification = {
363
445
  "position-transition"?: TransitionSpecification,
364
446
  "color"?: PropertyValueSpecification<ColorSpecification>,
365
447
  "color-transition"?: TransitionSpecification,
448
+ "color-use-theme"?: PropertyValueSpecification<string>,
366
449
  "intensity"?: PropertyValueSpecification<number>,
367
450
  "intensity-transition"?: TransitionSpecification
368
451
  },
@@ -398,8 +481,10 @@ export type FillLayerSpecification = {
398
481
  "fill-opacity-transition"?: TransitionSpecification,
399
482
  "fill-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
400
483
  "fill-color-transition"?: TransitionSpecification,
484
+ "fill-color-use-theme"?: PropertyValueSpecification<string>,
401
485
  "fill-outline-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
402
486
  "fill-outline-color-transition"?: TransitionSpecification,
487
+ "fill-outline-color-use-theme"?: PropertyValueSpecification<string>,
403
488
  "fill-translate"?: PropertyValueSpecification<[number, number]>,
404
489
  "fill-translate-transition"?: TransitionSpecification,
405
490
  "fill-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">,
@@ -449,13 +534,18 @@ export type LineLayerSpecification = {
449
534
  * @experimental This property is experimental and subject to change in future versions.
450
535
  */
451
536
  "line-cross-slope"?: ExpressionSpecification,
452
- "visibility"?: "visible" | "none" | ExpressionSpecification
537
+ "visibility"?: "visible" | "none" | ExpressionSpecification,
538
+ /**
539
+ * @experimental This property is experimental and subject to change in future versions.
540
+ */
541
+ "line-width-unit"?: PropertyValueSpecification<"pixels" | "meters">
453
542
  },
454
543
  "paint"?: {
455
544
  "line-opacity"?: DataDrivenPropertyValueSpecification<number>,
456
545
  "line-opacity-transition"?: TransitionSpecification,
457
546
  "line-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
458
547
  "line-color-transition"?: TransitionSpecification,
548
+ "line-color-use-theme"?: PropertyValueSpecification<string>,
459
549
  "line-translate"?: PropertyValueSpecification<[number, number]>,
460
550
  "line-translate-transition"?: TransitionSpecification,
461
551
  "line-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">,
@@ -470,6 +560,7 @@ export type LineLayerSpecification = {
470
560
  "line-dasharray"?: DataDrivenPropertyValueSpecification<Array<number>>,
471
561
  "line-pattern"?: DataDrivenPropertyValueSpecification<ResolvedImageSpecification>,
472
562
  "line-gradient"?: ExpressionSpecification,
563
+ "line-gradient-use-theme"?: PropertyValueSpecification<string>,
473
564
  "line-trim-offset"?: [number, number],
474
565
  /**
475
566
  * @experimental This property is experimental and subject to change in future versions.
@@ -477,12 +568,14 @@ export type LineLayerSpecification = {
477
568
  "line-trim-fade-range"?: PropertyValueSpecification<[number, number]>,
478
569
  "line-trim-color"?: PropertyValueSpecification<ColorSpecification>,
479
570
  "line-trim-color-transition"?: TransitionSpecification,
571
+ "line-trim-color-use-theme"?: PropertyValueSpecification<string>,
480
572
  "line-emissive-strength"?: PropertyValueSpecification<number>,
481
573
  "line-emissive-strength-transition"?: TransitionSpecification,
482
574
  "line-border-width"?: DataDrivenPropertyValueSpecification<number>,
483
575
  "line-border-width-transition"?: TransitionSpecification,
484
576
  "line-border-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
485
577
  "line-border-color-transition"?: TransitionSpecification,
578
+ "line-border-color-use-theme"?: PropertyValueSpecification<string>,
486
579
  "line-occlusion-opacity"?: PropertyValueSpecification<number>,
487
580
  "line-occlusion-opacity-transition"?: TransitionSpecification
488
581
  }
@@ -576,8 +669,10 @@ export type SymbolLayerSpecification = {
576
669
  "text-emissive-strength-transition"?: TransitionSpecification,
577
670
  "icon-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
578
671
  "icon-color-transition"?: TransitionSpecification,
672
+ "icon-color-use-theme"?: PropertyValueSpecification<string>,
579
673
  "icon-halo-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
580
674
  "icon-halo-color-transition"?: TransitionSpecification,
675
+ "icon-halo-color-use-theme"?: PropertyValueSpecification<string>,
581
676
  "icon-halo-width"?: DataDrivenPropertyValueSpecification<number>,
582
677
  "icon-halo-width-transition"?: TransitionSpecification,
583
678
  "icon-halo-blur"?: DataDrivenPropertyValueSpecification<number>,
@@ -593,8 +688,10 @@ export type SymbolLayerSpecification = {
593
688
  "text-occlusion-opacity-transition"?: TransitionSpecification,
594
689
  "text-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
595
690
  "text-color-transition"?: TransitionSpecification,
691
+ "text-color-use-theme"?: PropertyValueSpecification<string>,
596
692
  "text-halo-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
597
693
  "text-halo-color-transition"?: TransitionSpecification,
694
+ "text-halo-color-use-theme"?: PropertyValueSpecification<string>,
598
695
  "text-halo-width"?: DataDrivenPropertyValueSpecification<number>,
599
696
  "text-halo-width-transition"?: TransitionSpecification,
600
697
  "text-halo-blur"?: DataDrivenPropertyValueSpecification<number>,
@@ -640,6 +737,7 @@ export type CircleLayerSpecification = {
640
737
  "circle-radius-transition"?: TransitionSpecification,
641
738
  "circle-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
642
739
  "circle-color-transition"?: TransitionSpecification,
740
+ "circle-color-use-theme"?: PropertyValueSpecification<string>,
643
741
  "circle-blur"?: DataDrivenPropertyValueSpecification<number>,
644
742
  "circle-blur-transition"?: TransitionSpecification,
645
743
  "circle-opacity"?: DataDrivenPropertyValueSpecification<number>,
@@ -653,6 +751,7 @@ export type CircleLayerSpecification = {
653
751
  "circle-stroke-width-transition"?: TransitionSpecification,
654
752
  "circle-stroke-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
655
753
  "circle-stroke-color-transition"?: TransitionSpecification,
754
+ "circle-stroke-color-use-theme"?: PropertyValueSpecification<string>,
656
755
  "circle-stroke-opacity"?: DataDrivenPropertyValueSpecification<number>,
657
756
  "circle-stroke-opacity-transition"?: TransitionSpecification,
658
757
  "circle-emissive-strength"?: PropertyValueSpecification<number>,
@@ -690,6 +789,7 @@ export type HeatmapLayerSpecification = {
690
789
  "heatmap-intensity"?: PropertyValueSpecification<number>,
691
790
  "heatmap-intensity-transition"?: TransitionSpecification,
692
791
  "heatmap-color"?: ExpressionSpecification,
792
+ "heatmap-color-use-theme"?: PropertyValueSpecification<string>,
693
793
  "heatmap-opacity"?: PropertyValueSpecification<number>,
694
794
  "heatmap-opacity-transition"?: TransitionSpecification
695
795
  }
@@ -727,6 +827,7 @@ export type FillExtrusionLayerSpecification = {
727
827
  "fill-extrusion-opacity-transition"?: TransitionSpecification,
728
828
  "fill-extrusion-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
729
829
  "fill-extrusion-color-transition"?: TransitionSpecification,
830
+ "fill-extrusion-color-use-theme"?: PropertyValueSpecification<string>,
730
831
  "fill-extrusion-translate"?: PropertyValueSpecification<[number, number]>,
731
832
  "fill-extrusion-translate-transition"?: TransitionSpecification,
732
833
  "fill-extrusion-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">,
@@ -756,6 +857,7 @@ export type FillExtrusionLayerSpecification = {
756
857
  "fill-extrusion-ambient-occlusion-ground-attenuation-transition"?: TransitionSpecification,
757
858
  "fill-extrusion-flood-light-color"?: PropertyValueSpecification<ColorSpecification>,
758
859
  "fill-extrusion-flood-light-color-transition"?: TransitionSpecification,
860
+ "fill-extrusion-flood-light-color-use-theme"?: PropertyValueSpecification<string>,
759
861
  "fill-extrusion-flood-light-intensity"?: PropertyValueSpecification<number>,
760
862
  "fill-extrusion-flood-light-intensity-transition"?: TransitionSpecification,
761
863
  "fill-extrusion-flood-light-wall-radius"?: DataDrivenPropertyValueSpecification<number>,
@@ -806,6 +908,7 @@ export type RasterLayerSpecification = {
806
908
  "raster-opacity"?: PropertyValueSpecification<number>,
807
909
  "raster-opacity-transition"?: TransitionSpecification,
808
910
  "raster-color"?: ExpressionSpecification,
911
+ "raster-color-use-theme"?: PropertyValueSpecification<string>,
809
912
  "raster-color-mix"?: PropertyValueSpecification<[number, number, number, number]>,
810
913
  "raster-color-mix-transition"?: TransitionSpecification,
811
914
  "raster-color-range"?: PropertyValueSpecification<[number, number]>,
@@ -860,6 +963,7 @@ export type RasterParticleLayerSpecification = {
860
963
  "raster-particle-array-band"?: string,
861
964
  "raster-particle-count"?: number,
862
965
  "raster-particle-color"?: ExpressionSpecification,
966
+ "raster-particle-color-use-theme"?: PropertyValueSpecification<string>,
863
967
  "raster-particle-max-speed"?: number,
864
968
  "raster-particle-speed-factor"?: PropertyValueSpecification<number>,
865
969
  "raster-particle-speed-factor-transition"?: TransitionSpecification,
@@ -901,10 +1005,13 @@ export type HillshadeLayerSpecification = {
901
1005
  "hillshade-exaggeration-transition"?: TransitionSpecification,
902
1006
  "hillshade-shadow-color"?: PropertyValueSpecification<ColorSpecification>,
903
1007
  "hillshade-shadow-color-transition"?: TransitionSpecification,
1008
+ "hillshade-shadow-color-use-theme"?: PropertyValueSpecification<string>,
904
1009
  "hillshade-highlight-color"?: PropertyValueSpecification<ColorSpecification>,
905
1010
  "hillshade-highlight-color-transition"?: TransitionSpecification,
1011
+ "hillshade-highlight-color-use-theme"?: PropertyValueSpecification<string>,
906
1012
  "hillshade-accent-color"?: PropertyValueSpecification<ColorSpecification>,
907
1013
  "hillshade-accent-color-transition"?: TransitionSpecification,
1014
+ "hillshade-accent-color-use-theme"?: PropertyValueSpecification<string>,
908
1015
  "hillshade-emissive-strength"?: PropertyValueSpecification<number>,
909
1016
  "hillshade-emissive-strength-transition"?: TransitionSpecification
910
1017
  }
@@ -935,7 +1042,7 @@ export type ModelLayerSpecification = {
935
1042
  "model-id"?: DataDrivenPropertyValueSpecification<string>
936
1043
  },
937
1044
  "paint"?: {
938
- "model-opacity"?: PropertyValueSpecification<number>,
1045
+ "model-opacity"?: DataDrivenPropertyValueSpecification<number>,
939
1046
  "model-opacity-transition"?: TransitionSpecification,
940
1047
  "model-rotation"?: DataDrivenPropertyValueSpecification<[number, number, number]>,
941
1048
  "model-rotation-transition"?: TransitionSpecification,
@@ -945,6 +1052,7 @@ export type ModelLayerSpecification = {
945
1052
  "model-translation-transition"?: TransitionSpecification,
946
1053
  "model-color"?: DataDrivenPropertyValueSpecification<ColorSpecification>,
947
1054
  "model-color-transition"?: TransitionSpecification,
1055
+ "model-color-use-theme"?: PropertyValueSpecification<string>,
948
1056
  "model-color-mix-intensity"?: DataDrivenPropertyValueSpecification<number>,
949
1057
  "model-color-mix-intensity-transition"?: TransitionSpecification,
950
1058
  "model-type"?: "common-3d" | "location-indicator",
@@ -987,9 +1095,13 @@ export type BackgroundLayerSpecification = {
987
1095
  "visibility"?: "visible" | "none" | ExpressionSpecification
988
1096
  },
989
1097
  "paint"?: {
1098
+ /**
1099
+ * @experimental This property is experimental and subject to change in future versions.
1100
+ */
990
1101
  "background-pitch-alignment"?: "map" | "viewport" | ExpressionSpecification,
991
1102
  "background-color"?: PropertyValueSpecification<ColorSpecification>,
992
1103
  "background-color-transition"?: TransitionSpecification,
1104
+ "background-color-use-theme"?: PropertyValueSpecification<string>,
993
1105
  "background-pattern"?: PropertyValueSpecification<ResolvedImageSpecification>,
994
1106
  "background-opacity"?: PropertyValueSpecification<number>,
995
1107
  "background-opacity-transition"?: TransitionSpecification,
@@ -1028,8 +1140,11 @@ export type SkyLayerSpecification = {
1028
1140
  "sky-gradient-center"?: PropertyValueSpecification<[number, number]>,
1029
1141
  "sky-gradient-radius"?: PropertyValueSpecification<number>,
1030
1142
  "sky-gradient"?: ExpressionSpecification,
1143
+ "sky-gradient-use-theme"?: PropertyValueSpecification<string>,
1031
1144
  "sky-atmosphere-halo-color"?: ColorSpecification,
1145
+ "sky-atmosphere-halo-color-use-theme"?: PropertyValueSpecification<string>,
1032
1146
  "sky-atmosphere-color"?: ColorSpecification,
1147
+ "sky-atmosphere-color-use-theme"?: PropertyValueSpecification<string>,
1033
1148
  "sky-opacity"?: PropertyValueSpecification<number>,
1034
1149
  "sky-opacity-transition"?: TransitionSpecification
1035
1150
  }
@@ -1070,13 +1185,7 @@ export type ClipLayerSpecification = {
1070
1185
  "maxzoom"?: number,
1071
1186
  "filter"?: FilterSpecification,
1072
1187
  "layout"?: {
1073
- /**
1074
- * @experimental This property is experimental and subject to change in future versions.
1075
- */
1076
1188
  "clip-layer-types"?: ExpressionSpecification,
1077
- /**
1078
- * @experimental This property is experimental and subject to change in future versions.
1079
- */
1080
1189
  "clip-layer-scope"?: ExpressionSpecification
1081
1190
  },
1082
1191
  "paint"?: never
package/util/color.ts CHANGED
@@ -73,7 +73,7 @@ class Color {
73
73
  * var translucentGreen = new Color.parse('rgba(26, 207, 26, .73)');
74
74
  * translucentGreen.toString(); // = "rgba(26,207,26,0.73)"
75
75
  */
76
- toString(): string {
76
+ toStringPremultipliedAlpha(): string {
77
77
  const [r, g, b, a] = this.a === 0 ? [0, 0, 0, 0] : [
78
78
  this.r * 255 / this.a,
79
79
  this.g * 255 / this.a,
@@ -83,10 +83,24 @@ class Color {
83
83
  return `rgba(${Math.round(r)},${Math.round(g)},${Math.round(b)},${a})`;
84
84
  }
85
85
 
86
+ toString(): string {
87
+ const [r, g, b, a] = [
88
+ this.r,
89
+ this.g,
90
+ this.b,
91
+ this.a
92
+ ];
93
+ return `rgba(${Math.round(r * 255)},${Math.round(g * 255)},${Math.round(b * 255)},${a})`;
94
+ }
95
+
86
96
  toRenderColor(lut: LUT | null): RenderColor {
87
97
  const {r, g, b, a} = this;
88
98
  return new RenderColor(lut, r, g, b, a);
89
99
  }
100
+
101
+ clone(): Color {
102
+ return new Color(this.r, this.g, this.b, this.a);
103
+ }
90
104
  }
91
105
 
92
106
  /**
@@ -179,6 +193,53 @@ export class RenderColor {
179
193
  ];
180
194
  }
181
195
 
196
+ /**
197
+ * Returns an HSLA array of values representing the color, unpremultiplied by A.
198
+ *
199
+ * @returns An array of HSLA color values.
200
+ */
201
+ toHslaArray(): [number, number, number, number] {
202
+ if (this.a === 0) {
203
+ return [0, 0, 0, 0];
204
+ }
205
+ const {r, g, b, a} = this;
206
+
207
+ const red = Math.min(Math.max(r / a, 0.0), 1.0);
208
+ const green = Math.min(Math.max(g / a, 0.0), 1.0);
209
+ const blue = Math.min(Math.max(b / a, 0.0), 1.0);
210
+
211
+ const min = Math.min(red, green, blue);
212
+ const max = Math.max(red, green, blue);
213
+
214
+ const l = (min + max) / 2;
215
+
216
+ if (min === max) {
217
+ return [0, 0, l * 100, a];
218
+ }
219
+
220
+ const delta = max - min;
221
+
222
+ const s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);
223
+
224
+ let h = 0;
225
+ if (max === red) {
226
+ h = (green - blue) / delta + (green < blue ? 6 : 0);
227
+ } else if (max === green) {
228
+ h = (blue - red) / delta + 2;
229
+ } else if (max === blue) {
230
+ h = (red - green) / delta + 4;
231
+ }
232
+
233
+ h *= 60;
234
+
235
+ return [
236
+ Math.min(Math.max(h, 0), 360),
237
+ Math.min(Math.max(s * 100, 0), 100),
238
+ Math.min(Math.max(l * 100, 0), 100),
239
+ a
240
+ ];
241
+ }
242
+
182
243
  /**
183
244
  * Returns a RGBA array of float values representing the color, unpremultiplied by A.
184
245
  *
@@ -21,8 +21,17 @@ export default function validateFog(options: ValidationOptions): Array<Validatio
21
21
 
22
22
  for (const key in fog) {
23
23
  const transitionMatch = key.match(/^(.*)-transition$/);
24
+ const useThemeMatch = key.match(/^(.*)-use-theme$/);
24
25
 
25
- if (transitionMatch && fogSpec[transitionMatch[1]] && fogSpec[transitionMatch[1]].transition) {
26
+ if (useThemeMatch && fogSpec[useThemeMatch[1]]) {
27
+ errors = errors.concat(validate({
28
+ key,
29
+ value: fog[key],
30
+ valueSpec: {type:'string'},
31
+ style,
32
+ styleSpec
33
+ }));
34
+ } else if (transitionMatch && fogSpec[transitionMatch[1]] && fogSpec[transitionMatch[1]].transition) {
26
35
  errors = errors.concat(validate({
27
36
  key,
28
37
  value: fog[key],
@@ -184,7 +184,7 @@ export default function validateFunction(options: ValidationOptions): any {
184
184
  }
185
185
 
186
186
  if (functionType === 'categorical' && type === 'number' && (typeof value !== 'number' || !isFinite(value) || Math.floor(value) !== value)) {
187
- return [new ValidationError(options.key, reportValue, `integer expected, found ${String(value)}`)];
187
+ return [new ValidationError(options.key, reportValue, `integer expected, found ${String(value as number)}`)];
188
188
  }
189
189
 
190
190
  if (functionType !== 'categorical' && type === 'number' && typeof value === 'number' && typeof previousStopDomainValue === 'number' && previousStopDomainValue !== undefined && value < previousStopDomainValue) {
@@ -22,8 +22,17 @@ export default function validateLight(options: ValidationOptions): Array<Validat
22
22
 
23
23
  for (const key in light) {
24
24
  const transitionMatch = key.match(/^(.*)-transition$/);
25
+ const useThemeMatch = key.match(/^(.*)-use-theme$/);
25
26
 
26
- if (transitionMatch && lightSpec[transitionMatch[1]] && lightSpec[transitionMatch[1]].transition) {
27
+ if (useThemeMatch && lightSpec[useThemeMatch[1]]) {
28
+ errors = errors.concat(validate({
29
+ key,
30
+ value: light[key],
31
+ valueSpec: {type:'string'},
32
+ style,
33
+ styleSpec
34
+ }));
35
+ } else if (transitionMatch && lightSpec[transitionMatch[1]] && lightSpec[transitionMatch[1]].transition) {
27
36
  errors = errors.concat(validate({
28
37
  key,
29
38
  value: light[key],
@@ -78,7 +78,17 @@ export default function validateLights(options: Options): Array<ValidationError>
78
78
  }
79
79
  } else {
80
80
  const transitionMatch = key.match(/^(.*)-transition$/);
81
- if (transitionMatch && lightSpec[transitionMatch[1]] && lightSpec[transitionMatch[1]].transition) {
81
+ const useThemeMatch = key.match(/^(.*)-use-theme$/);
82
+
83
+ if (useThemeMatch && lightSpec[useThemeMatch[1]]) {
84
+ errors = errors.concat(validate({
85
+ key,
86
+ value: light[key],
87
+ valueSpec: {type:'string'},
88
+ style,
89
+ styleSpec
90
+ }));
91
+ } else if (transitionMatch && lightSpec[transitionMatch[1]] && lightSpec[transitionMatch[1]].transition) {
82
92
  errors = errors.concat(validate({
83
93
  key,
84
94
  value: light[key],
@@ -26,6 +26,17 @@ export default function validateProperty(options: PropertyValidationOptions, pro
26
26
 
27
27
  if (!layerSpec) return [];
28
28
 
29
+ const useThemeMatch = propertyKey.match(/^(.*)-use-theme$/);
30
+ if (propertyType === 'paint' && useThemeMatch && layerSpec[useThemeMatch[1]]) {
31
+ return validate({
32
+ key,
33
+ value,
34
+ valueSpec: {type:'string'},
35
+ style,
36
+ styleSpec
37
+ });
38
+ }
39
+
29
40
  const transitionMatch = propertyKey.match(/^(.*)-transition$/);
30
41
  if (propertyType === 'paint' && transitionMatch && layerSpec[transitionMatch[1]] && layerSpec[transitionMatch[1]].transition) {
31
42
  return validate({
@@ -0,0 +1,47 @@
1
+ import {default as ValidationError, ValidationWarning} from '../error/validation_error';
2
+ import validate from './validate';
3
+ import getType from '../util/get_type';
4
+
5
+ import type {ValidationOptions} from './validate';
6
+
7
+ export default function validateRain(options: ValidationOptions): Array<ValidationError> {
8
+ const rain = options.value;
9
+ const style = options.style;
10
+ const styleSpec = options.styleSpec;
11
+ const rainSpec = styleSpec.rain;
12
+ let errors = [];
13
+
14
+ const rootType = getType(rain);
15
+ if (rain === undefined) {
16
+ return errors;
17
+ } else if (rootType !== 'object') {
18
+ errors = errors.concat([new ValidationError('rain', rain, `object expected, ${rootType} found`)]);
19
+ return errors;
20
+ }
21
+
22
+ for (const key in rain) {
23
+ const transitionMatch = key.match(/^(.*)-transition$/);
24
+
25
+ if (transitionMatch && rainSpec[transitionMatch[1]] && rainSpec[transitionMatch[1]].transition) {
26
+ errors = errors.concat(validate({
27
+ key,
28
+ value: rain[key],
29
+ valueSpec: styleSpec.transition,
30
+ style,
31
+ styleSpec
32
+ }));
33
+ } else if (rainSpec[key]) {
34
+ errors = errors.concat(validate({
35
+ key,
36
+ value: rain[key],
37
+ valueSpec: rainSpec[key],
38
+ style,
39
+ styleSpec
40
+ }));
41
+ } else {
42
+ errors = errors.concat([new ValidationWarning(key, rain[key], `unknown property "${key}"`)]);
43
+ }
44
+ }
45
+
46
+ return errors;
47
+ }
@@ -0,0 +1,47 @@
1
+ import {default as ValidationError, ValidationWarning} from '../error/validation_error';
2
+ import validate from './validate';
3
+ import getType from '../util/get_type';
4
+
5
+ import type {ValidationOptions} from './validate';
6
+
7
+ export default function validateSnow(options: ValidationOptions): Array<ValidationError> {
8
+ const snow = options.value;
9
+ const style = options.style;
10
+ const styleSpec = options.styleSpec;
11
+ const snowSpec = styleSpec.snow;
12
+ let errors = [];
13
+
14
+ const rootType = getType(snow);
15
+ if (snow === undefined) {
16
+ return errors;
17
+ } else if (rootType !== 'object') {
18
+ errors = errors.concat([new ValidationError('snow', snow, `object expected, ${rootType} found`)]);
19
+ return errors;
20
+ }
21
+
22
+ for (const key in snow) {
23
+ const transitionMatch = key.match(/^(.*)-transition$/);
24
+
25
+ if (transitionMatch && snowSpec[transitionMatch[1]] && snowSpec[transitionMatch[1]].transition) {
26
+ errors = errors.concat(validate({
27
+ key,
28
+ value: snow[key],
29
+ valueSpec: styleSpec.transition,
30
+ style,
31
+ styleSpec
32
+ }));
33
+ } else if (snowSpec[key]) {
34
+ errors = errors.concat(validate({
35
+ key,
36
+ value: snow[key],
37
+ valueSpec: snowSpec[key],
38
+ style,
39
+ styleSpec
40
+ }));
41
+ } else {
42
+ errors = errors.concat([new ValidationWarning(key, snow[key], `unknown property "${key}"`)]);
43
+ }
44
+ }
45
+
46
+ return errors;
47
+ }
@@ -25,8 +25,17 @@ export default function validateTerrain(options: ValidationOptions): Array<Valid
25
25
 
26
26
  for (const key in terrain) {
27
27
  const transitionMatch = key.match(/^(.*)-transition$/);
28
+ const useThemeMatch = key.match(/^(.*)-use-theme$/);
28
29
 
29
- if (transitionMatch && terrainSpec[transitionMatch[1]] && terrainSpec[transitionMatch[1]].transition) {
30
+ if (useThemeMatch && terrainSpec[useThemeMatch[1]]) {
31
+ errors = errors.concat(validate({
32
+ key,
33
+ value: terrain[key],
34
+ valueSpec: {type:'string'},
35
+ style,
36
+ styleSpec
37
+ }));
38
+ } else if (transitionMatch && terrainSpec[transitionMatch[1]] && terrainSpec[transitionMatch[1]].transition) {
30
39
  errors = errors.concat(validate({
31
40
  key,
32
41
  value: terrain[key],
@@ -51,7 +60,7 @@ export default function validateTerrain(options: ValidationOptions): Array<Valid
51
60
  errors.push(new ValidationError(key, terrain, `terrain is missing required property "source"`));
52
61
  } else {
53
62
  const source = style.sources && style.sources[terrain.source];
54
- const sourceType = source && unbundle(source.type);
63
+ const sourceType = source && unbundle(source.type) as string;
55
64
  if (!source) {
56
65
  errors.push(new ValidationError(key, terrain.source, `source "${terrain.source}" not found`));
57
66
  } else if (sourceType !== 'raster-dem') {