@tomtom-org/maps-sdk-plugin-landmarks-3d 0.2.1 → 0.3.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.
@@ -0,0 +1,1201 @@
1
+ import { KnobEntry, KnobKind, KnobRange, KnobValueOf, MapColorName } from "@tomtom-org/maps-sdk/map";
2
+ //#region src/paletteOptions.d.ts
3
+ /**
4
+ * How a building or a landmark takes its colour from a palette:
5
+ *
6
+ * - `pick`: one of the palette's colours.
7
+ * - `blend`: a mix of two neighbouring colours, anywhere along the palette, so a palette of a few
8
+ * shades gives a gradient of them.
9
+ *
10
+ * @group Buildings 3D
11
+ */
12
+ declare const paletteModes: readonly ["pick", "blend"];
13
+ /**
14
+ * One of {@link paletteModes}.
15
+ *
16
+ * @group Buildings 3D
17
+ */
18
+ type PaletteMode = (typeof paletteModes)[number];
19
+ /**
20
+ * The map colours a palette can name in place of a CSS colour, by their knob id: `colors.artificial`,
21
+ * `colors.accent`. They follow the map colours as a theme or `setMapColors` changes them.
22
+ *
23
+ * @group Buildings 3D
24
+ */
25
+ declare const paletteMapColors: readonly `colors.${MapColorName}`[];
26
+ //#endregion
27
+ //#region src/buildings/buildingsKnobCatalogue.d.ts
28
+ /**
29
+ * How the windows of a facade are laid out. `mixed` picks one per building, by its height: punched
30
+ * windows on low ones, office bands from about five storeys, and glass curtain walls on towers and on
31
+ * some of the buildings between.
32
+ *
33
+ * @group Buildings 3D
34
+ */
35
+ declare const facadePatterns: readonly ["mixed", "residential", "office", "glass", "plain"];
36
+ /**
37
+ * One of {@link facadePatterns}.
38
+ *
39
+ * @group Buildings 3D
40
+ */
41
+ type FacadePattern = (typeof facadePatterns)[number];
42
+ /**
43
+ * The looks the unset knobs take: one per standard style, or `auto`, which follows the map's style.
44
+ *
45
+ * @group Buildings 3D
46
+ */
47
+ declare const buildingsPresets: readonly ["auto", "streetLight", "streetDark", "streetLightDriving", "streetDarkDriving", "monoLight", "monoDark", "streetSatellite"];
48
+ /**
49
+ * One of {@link buildingsPresets}.
50
+ *
51
+ * @group Buildings 3D
52
+ */
53
+ type BuildingsPreset = (typeof buildingsPresets)[number];
54
+ declare const buildingsKnobDefinitions: {
55
+ readonly visible: {
56
+ readonly kind: "toggle";
57
+ readonly description: "The 3D buildings.";
58
+ readonly default: true;
59
+ };
60
+ readonly preset: {
61
+ readonly kind: "enum";
62
+ readonly description: "Look every unset knob takes: a standard style's, or auto, which follows the map's standard style.";
63
+ readonly options: readonly ["auto", "streetLight", "streetDark", "streetLightDriving", "streetDarkDriving", "monoLight", "monoDark", "streetSatellite"];
64
+ readonly default: "auto";
65
+ };
66
+ readonly opacity: {
67
+ readonly kind: "number";
68
+ readonly description: "Opacity of the buildings, and of the landmarks left unset among them, 0 to 1.";
69
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
70
+ };
71
+ readonly minZoom: {
72
+ readonly kind: "number";
73
+ readonly description: "Lowest zoom the buildings are drawn at, and the landmarks left unset among them.";
74
+ readonly range: {
75
+ readonly min: 13;
76
+ readonly max: 22;
77
+ readonly step: 1;
78
+ readonly bounds: "hard";
79
+ };
80
+ };
81
+ readonly 'facade.pattern': {
82
+ readonly kind: "enum";
83
+ readonly description: "How windows are laid out: mixed (by building height), residential, office, glass (curtain walls) or plain (no windows).";
84
+ readonly options: readonly ["mixed", "residential", "office", "glass", "plain"];
85
+ };
86
+ readonly 'facade.intensity': {
87
+ readonly kind: "number";
88
+ readonly description: "How strongly the windows show on the walls, and the landmarks' own texture among the buildings while their texture is detail, 0 (plain walls) to 1.";
89
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
90
+ };
91
+ readonly 'facade.floorHeightMeters': {
92
+ readonly kind: "number";
93
+ readonly description: "Height of one storey, which spaces the rows of windows. The ground floor is a third taller.";
94
+ readonly range: {
95
+ readonly min: 2.5;
96
+ readonly max: 6;
97
+ readonly step: 0.1;
98
+ readonly bounds: "hard-min";
99
+ };
100
+ };
101
+ readonly 'walls.color': {
102
+ readonly kind: "color";
103
+ readonly description: "Colour of the walls. Unset: the map style's 3D building colour of each kind of building, following the map colours that restyle them, and the colour of the buildings of no named kind is the one reported. Landmarks left unset among the buildings take it too.";
104
+ };
105
+ readonly 'walls.palette': {
106
+ readonly kind: "colors";
107
+ readonly description: "Colours the walls take, one per building: CSS colours, or map colours by knob id (colors.accent), which follow the map. Empty: none. Unset landmarks among the buildings take it too.";
108
+ readonly options: readonly ("colors.water" | "colors.land" | "colors.vegetation" | "colors.park" | "colors.artificial" | "colors.roadMajor" | "colors.road" | "colors.roadOutline" | "colors.label" | "colors.labelHalo" | "colors.accent")[];
109
+ };
110
+ readonly 'walls.paletteMode': {
111
+ readonly kind: "enum";
112
+ readonly description: "pick: each building takes one palette colour; blend: a mix of two neighbouring ones, a gradient along the palette.";
113
+ readonly options: readonly ["pick", "blend"];
114
+ };
115
+ readonly 'walls.paletteIntensity': {
116
+ readonly kind: "number";
117
+ readonly description: "How far the walls move from their colour to their palette colour, 0 to 1. Lower it for a hint of the palette.";
118
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
119
+ };
120
+ readonly 'walls.variation': {
121
+ readonly kind: "number";
122
+ readonly description: "How much each building differs from the next in shade and warmth, 0 (all alike) to 1.";
123
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
124
+ };
125
+ readonly 'hover.color': {
126
+ readonly kind: "color";
127
+ readonly description: "Colour the hovered building turns towards, while a handler listens to the buildings' events. Unset: the map's accent, else blue.";
128
+ };
129
+ readonly 'hover.intensity': {
130
+ readonly kind: "number";
131
+ readonly description: "How far the hovered building turns towards its hover colour, 0 to 1.";
132
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
133
+ };
134
+ readonly 'click.color': {
135
+ readonly kind: "color";
136
+ readonly description: "Colour the clicked building turns towards, until the next click lands elsewhere. Unset: the map's accent, else blue.";
137
+ };
138
+ readonly 'click.intensity': {
139
+ readonly kind: "number";
140
+ readonly description: "How far the clicked building turns towards its click colour, 0 to 1.";
141
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
142
+ };
143
+ readonly 'roofs.color': {
144
+ readonly kind: "color";
145
+ readonly description: "Colour of the roofs. Unset: a shade darker than each building's walls, reported as the walls' colour; `streetSatellite` sets its own.";
146
+ };
147
+ readonly 'roofs.palette': {
148
+ readonly kind: "colors";
149
+ readonly description: "Colours the roofs take, one per building, as walls.palette does. Empty: none, and with roofs.color unset too, the roofs follow the walls, their palette included.";
150
+ readonly options: readonly ("colors.water" | "colors.land" | "colors.vegetation" | "colors.park" | "colors.artificial" | "colors.roadMajor" | "colors.road" | "colors.roadOutline" | "colors.label" | "colors.labelHalo" | "colors.accent")[];
151
+ };
152
+ readonly 'roofs.paletteMode': {
153
+ readonly kind: "enum";
154
+ readonly description: "pick: each roof takes one palette colour; blend: a mix of two neighbouring ones.";
155
+ readonly options: readonly ["pick", "blend"];
156
+ };
157
+ readonly 'roofs.paletteIntensity': {
158
+ readonly kind: "number";
159
+ readonly description: "How far the roofs move from their colour to their palette colour, 0 to 1.";
160
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
161
+ };
162
+ readonly 'windows.color': {
163
+ readonly kind: "color";
164
+ readonly description: "Colour of the window glass.";
165
+ };
166
+ readonly 'reflections.intensity': {
167
+ readonly kind: "number";
168
+ readonly description: "How much the window glass mirrors the street, the facades across it and the sky, and catches the sun, 0 (matte) to 1. Glass curtain walls reflect the most, landmarks a little; the sky's colour is the ambient light's.";
169
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
170
+ };
171
+ readonly 'litWindows.color': {
172
+ readonly kind: "color";
173
+ readonly description: "Colour of the windows lit from inside.";
174
+ };
175
+ readonly 'litWindows.fraction': {
176
+ readonly kind: "number";
177
+ readonly description: "Share of the windows lit from inside, 0 to 1. The dark presets light some.";
178
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
179
+ };
180
+ readonly 'litWindows.intensity': {
181
+ readonly kind: "number";
182
+ readonly description: "Brightness of the lit windows, 0 to 1. Pair it with the map effects bloom for a night glow.";
183
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
184
+ };
185
+ readonly 'light.direction': {
186
+ readonly kind: "number";
187
+ readonly description: "Direction the light comes from, in degrees clockwise from north. Shadows fall the opposite way. Unset: the map's light where one is placed, as the styling module's `view.light` knobs do, else the preset's.";
188
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
189
+ };
190
+ readonly 'light.altitude': {
191
+ readonly kind: "number";
192
+ readonly description: "Height of the light above the horizon, in degrees (90 = overhead); lower casts longer shadows. Unset: the map's light, as for `light.direction`.";
193
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
194
+ };
195
+ readonly 'light.color': {
196
+ readonly kind: "color";
197
+ readonly description: "Colour of the light: the sun on light presets, the moon on dark ones.";
198
+ };
199
+ readonly 'light.intensity': {
200
+ readonly kind: "number";
201
+ readonly description: "Strength of the light, 0 to 1.";
202
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
203
+ };
204
+ readonly 'ambientLight.color': {
205
+ readonly kind: "color";
206
+ readonly description: "Colour of the light from the sky, which also tints the reflections in the glass.";
207
+ };
208
+ readonly 'ambientLight.intensity': {
209
+ readonly kind: "number";
210
+ readonly description: "Strength of the light from the sky, 0 to 1, which lights the walls in shade.";
211
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
212
+ };
213
+ readonly 'shadows.visible': {
214
+ readonly kind: "toggle";
215
+ readonly description: "Shadows the buildings and the landmarks among them cast, on each other and on the ground.";
216
+ };
217
+ readonly 'shadows.intensity': {
218
+ readonly kind: "number";
219
+ readonly description: "Darkness of the shadows, 0 to 1.";
220
+ readonly range: import("@tomtom-org/maps-sdk/map").KnobRange;
221
+ };
222
+ readonly 'roadLabels.occluded': {
223
+ readonly kind: "toggle";
224
+ readonly description: "Road names draw under the buildings: hidden wherever a building covers them, they give way to the labels above them.";
225
+ };
226
+ readonly 'pois.occluded': {
227
+ readonly kind: "toggle";
228
+ readonly description: "The style's POIs draw under the buildings: hidden wherever a building covers them, still keeping other labels off, they give way to the labels above them.";
229
+ };
230
+ };
231
+ /**
232
+ * The id of a buildings knob, as accepted by the SDK's `setKnob` and as a path into {@link Buildings3DConfig}.
233
+ *
234
+ * @group Buildings 3D
235
+ */
236
+ type Buildings3DKnobId = keyof typeof buildingsKnobDefinitions;
237
+ type KindOf$1<ID extends Buildings3DKnobId> = (typeof buildingsKnobDefinitions)[ID]['kind'];
238
+ /**
239
+ * The value type a buildings knob takes.
240
+ *
241
+ * @group Buildings 3D
242
+ */
243
+ type Buildings3DKnobValueOf<ID extends Buildings3DKnobId> = ID extends 'preset' ? BuildingsPreset : ID extends 'facade.pattern' ? FacadePattern : ID extends 'walls.paletteMode' | 'roofs.paletteMode' ? PaletteMode : KnobValueOf<KindOf$1<ID>>;
244
+ /**
245
+ * One entry of {@link buildings3DKnobCatalogue}, with what a UI or a coding agent needs to offer the
246
+ * knob and validate a value for it. The SDK's `getKnob` reads the value in force.
247
+ *
248
+ * @group Buildings 3D
249
+ */
250
+ type Buildings3DKnob = KnobEntry<Buildings3DKnobId>;
251
+ /**
252
+ * Every buildings knob with its kind, description, range or options and, for `visible` and `preset`,
253
+ * its default. It's static data, readable without a map.
254
+ *
255
+ * @remarks
256
+ * A knob is a plain value in {@link Buildings3DConfig}, at its id's path. Every knob but `visible` and
257
+ * `preset` takes the preset's value while unset, which the SDK's `getKnob` reports. The exceptions:
258
+ * - `hover.color` and `click.color` take the map's accent, else blue.
259
+ * - `light.direction` and `light.altitude` follow the map's light once one is placed, and `getKnob`
260
+ * reports that light, its direction rounded to whole degrees.
261
+ *
262
+ * @group Buildings 3D
263
+ */
264
+ declare const buildings3DKnobCatalogue: readonly Buildings3DKnob[];
265
+ /**
266
+ * Every buildings knob id, in catalogue order.
267
+ *
268
+ * @group Buildings 3D
269
+ */
270
+ declare const buildings3DKnobIds: readonly Buildings3DKnobId[];
271
+ //#endregion
272
+ //#region src/knobCatalogue.d.ts
273
+ /**
274
+ * What a landmark's own texture gives its look, besides carving its silhouette:
275
+ *
276
+ * - `mask`: nothing more; the landmark is shaded in its `color`.
277
+ * - `detail`: its light and shade, over the `color`, as facade detail.
278
+ * - `color`: its colours, in place of the `color`.
279
+ *
280
+ * Whatever the use, the map's light shades the landmark.
281
+ *
282
+ * @group Landmarks 3D
283
+ */
284
+ declare const landmarkTextureUses: readonly ["mask", "detail", "color"];
285
+ /**
286
+ * One of {@link landmarkTextureUses}.
287
+ *
288
+ * @group Landmarks 3D
289
+ */
290
+ type LandmarkTextureUse = (typeof landmarkTextureUses)[number];
291
+ declare const landmarks3DKnobDefinitions: {
292
+ readonly visible: {
293
+ readonly kind: "toggle";
294
+ readonly description: "The landmark models.";
295
+ readonly default: true;
296
+ };
297
+ readonly color: {
298
+ readonly kind: "color";
299
+ readonly description: "Colour the landmarks are shaded in. Unset: the base map's 3D buildings' colour, following the map colours that restyle them.";
300
+ };
301
+ readonly palette: {
302
+ readonly kind: "colors";
303
+ readonly description: "Colours the landmarks take, one per landmark: CSS colours, or map colours by knob id (colors.accent), which follow the map. Unset: none, or the walls' palette under a Buildings3D while color is unset.";
304
+ readonly options: readonly ("colors.water" | "colors.land" | "colors.vegetation" | "colors.park" | "colors.artificial" | "colors.roadMajor" | "colors.road" | "colors.roadOutline" | "colors.label" | "colors.labelHalo" | "colors.accent")[];
305
+ };
306
+ readonly paletteMode: {
307
+ readonly kind: "enum";
308
+ readonly description: "pick: each landmark takes one palette colour; blend: a mix of two neighbouring ones. Unset: pick, or the walls' one under a Buildings3D.";
309
+ readonly options: readonly ["pick", "blend"];
310
+ };
311
+ readonly paletteIntensity: {
312
+ readonly kind: "number";
313
+ readonly description: "How far a landmark moves from its color to its palette colour, 0 to 1. Unset: 1, or the walls' one under a Buildings3D.";
314
+ readonly range: KnobRange;
315
+ };
316
+ readonly variation: {
317
+ readonly kind: "number";
318
+ readonly description: "How much each landmark differs from the next in shade and warmth, 0 to 1. Unset: 0, or the walls' one under a Buildings3D.";
319
+ readonly range: KnobRange;
320
+ };
321
+ readonly 'hover.color': {
322
+ readonly kind: "color";
323
+ readonly description: "Colour the hovered landmark turns towards, while a handler listens to the landmarks' events. Unset: the map's accent, else blue, or the buildings' one under a Buildings3D.";
324
+ };
325
+ readonly 'hover.intensity': {
326
+ readonly kind: "number";
327
+ readonly description: "How far the hovered landmark turns towards its hover colour, 0 to 1. Unset: 0.35, or the buildings' one under a Buildings3D.";
328
+ readonly range: KnobRange;
329
+ };
330
+ readonly 'click.color': {
331
+ readonly kind: "color";
332
+ readonly description: "Colour the clicked landmark turns towards, until the next click lands elsewhere. Unset: the map's accent, else blue, or the buildings' one under a Buildings3D.";
333
+ };
334
+ readonly 'click.intensity': {
335
+ readonly kind: "number";
336
+ readonly description: "How far the clicked landmark turns towards its click colour, 0 to 1. Unset: 0.7, or the buildings' one under a Buildings3D.";
337
+ readonly range: KnobRange;
338
+ };
339
+ readonly texture: {
340
+ readonly kind: "enum";
341
+ readonly description: "What the landmarks' textures add to their silhouette: mask (nothing), detail (their shading over the color) or color (their own colours instead). Unset: mask; detail under a Buildings3D; color on streetSatellite.";
342
+ readonly options: readonly ["mask", "detail", "color"];
343
+ };
344
+ readonly opacity: {
345
+ readonly kind: "number";
346
+ readonly description: "Opacity of the landmarks, 0 to 1. Unset: the base map's 3D buildings' opacity.";
347
+ readonly range: KnobRange;
348
+ };
349
+ readonly verticalGradient: {
350
+ readonly kind: "toggle";
351
+ readonly description: "Whether the landmarks' walls darken towards the ground. Unset: as the base map's 3D buildings do. No effect while a Buildings3D draws, whose walls have no gradient.";
352
+ };
353
+ readonly minZoom: {
354
+ readonly kind: "number";
355
+ readonly description: "Lowest zoom the landmarks are drawn at, 15 at the earliest, where their tiles start. Unset: the base map's 3D buildings' one.";
356
+ readonly range: KnobRange;
357
+ };
358
+ readonly maxZoom: {
359
+ readonly kind: "number";
360
+ readonly description: "Highest whole zoom level the landmarks are drawn at, up to the next one. Unset: the base map's 3D buildings' one, or 22 while a Buildings3D draws.";
361
+ readonly range: KnobRange;
362
+ };
363
+ };
364
+ /**
365
+ * The id of a landmarks knob, as accepted by the SDK's `setKnob` and as a key of {@link Landmarks3DConfig}.
366
+ *
367
+ * @group Landmarks 3D
368
+ */
369
+ type Landmarks3DKnobId = keyof typeof landmarks3DKnobDefinitions;
370
+ /**
371
+ * The value type a landmarks knob takes.
372
+ *
373
+ * @group Landmarks 3D
374
+ */
375
+ type Landmarks3DKnobValueOf<ID extends Landmarks3DKnobId> = ID extends 'texture' ? LandmarkTextureUse : ID extends 'paletteMode' ? PaletteMode : KnobValueOf<(typeof landmarks3DKnobDefinitions)[ID]['kind']>;
376
+ /**
377
+ * One entry of {@link landmarks3DKnobCatalogue}, with what a UI or a coding agent needs to offer the knob
378
+ * and validate a value for it. The SDK's `getKnob` reads the value in force.
379
+ *
380
+ * @group Landmarks 3D
381
+ */
382
+ type Landmarks3DKnob = KnobEntry<Landmarks3DKnobId>;
383
+ /**
384
+ * Every landmarks knob with its kind, description, range or options and, for `visible`, its default.
385
+ * It's static data, readable without a map.
386
+ *
387
+ * @remarks
388
+ * A knob is a plain value in {@link Landmarks3DConfig}, at its id's path. While unset, the colour,
389
+ * opacity, gradient and zoom range follow the base map's 3D buildings, and the hover and click colours
390
+ * the map's accent, which the SDK's `getKnob` reports.
391
+ *
392
+ * @group Landmarks 3D
393
+ */
394
+ declare const landmarks3DKnobCatalogue: readonly Landmarks3DKnob[];
395
+ /**
396
+ * Every landmarks knob id, in catalogue order.
397
+ *
398
+ * @group Landmarks 3D
399
+ */
400
+ declare const landmarks3DKnobIds: readonly Landmarks3DKnobId[];
401
+ //#endregion
402
+ //#region src/surfaces/surfaceSeasons.d.ts
403
+ /**
404
+ * The seasons the surfaces and the trees can be coloured for, each from the style's own colours: a
405
+ * season tints them, and mixes some towards colours of its own, such as snow.
406
+ *
407
+ * @group GL Surfaces
408
+ */
409
+ declare const surfaceSeasons: readonly ["spring", "summer", "autumn", "winter", "snow"];
410
+ /**
411
+ * One of {@link surfaceSeasons}.
412
+ *
413
+ * @group GL Surfaces
414
+ */
415
+ type SurfaceSeason = (typeof surfaceSeasons)[number];
416
+ //#endregion
417
+ //#region src/surfaces/surfacesKnobCatalogue.d.ts
418
+ declare const surfacesKnobDefinitions: {
419
+ readonly visible: {
420
+ readonly kind: "toggle";
421
+ readonly description: "The textured surfaces.";
422
+ readonly default: true;
423
+ };
424
+ readonly season: {
425
+ readonly kind: "enum";
426
+ readonly description: "The season every surface and the trees are coloured for, each from the style's own colours, which a map's colour knobs set. A part's own `season` takes over from it.";
427
+ readonly default: "spring" | "summer" | "autumn" | "winter" | "snow";
428
+ readonly options: readonly ["spring", "summer", "autumn", "winter", "snow"];
429
+ };
430
+ readonly 'surfaces.water.intensity': {
431
+ description: string;
432
+ } & {
433
+ kind: Extract<KnobKind, "number" | "factor">;
434
+ default?: number;
435
+ range: KnobRange;
436
+ } & {
437
+ kind: "number";
438
+ };
439
+ readonly 'surfaces.water.season': {
440
+ description: string;
441
+ } & {
442
+ kind: Extract<KnobKind, "enum">;
443
+ options: readonly string[];
444
+ default?: string;
445
+ } & {
446
+ kind: "enum";
447
+ };
448
+ readonly 'surfaces.water.colors.shallow': {
449
+ description: string;
450
+ } & {
451
+ kind: Extract<KnobKind, "color">;
452
+ } & {
453
+ kind: "color";
454
+ };
455
+ readonly 'surfaces.water.colors.foam': {
456
+ description: string;
457
+ } & {
458
+ kind: Extract<KnobKind, "color">;
459
+ } & {
460
+ kind: "color";
461
+ };
462
+ readonly 'surfaces.water.waves.heightFactor': {
463
+ readonly kind: "factor";
464
+ readonly description: "How steep the wind waves on open water stand, times their usual, 0 leaving the water a mirror. Seen from afar, they smooth into a glitter of the sun.";
465
+ readonly default: 1;
466
+ readonly range: {
467
+ readonly min: 0;
468
+ readonly max: 3;
469
+ readonly step: 0.05;
470
+ readonly bounds: "hard-min";
471
+ };
472
+ };
473
+ readonly 'surfaces.water.enclosed.waves.heightFactor': {
474
+ readonly kind: "factor";
475
+ readonly description: "How steep the ripples on enclosed water stand, such as canals, ponds and harbours, times the open water's waves.";
476
+ readonly default: 0.3;
477
+ readonly range: KnobRange;
478
+ };
479
+ readonly 'surfaces.water.shore.intensity': {
480
+ readonly kind: "number";
481
+ readonly description: "How strongly an open shore shows: its shallows, the waves rolling in onto it, the breakers and their foam, 0 (none) to 1.";
482
+ readonly default: 1;
483
+ readonly range: KnobRange;
484
+ };
485
+ readonly 'surfaces.water.shore.reachMeters': {
486
+ readonly kind: "number";
487
+ readonly description: "How far out from an open shore, such as a lake or the sea, the waves turn to roll in onto it, in metres.";
488
+ readonly default: 160;
489
+ readonly range: {
490
+ readonly min: 0;
491
+ readonly max: 400;
492
+ readonly step: 10;
493
+ readonly bounds: "hard";
494
+ };
495
+ };
496
+ readonly 'surfaces.water.reflection.intensity': {
497
+ readonly kind: "number";
498
+ readonly description: "How much the water mirrors the sky, which grows towards the horizon as on real water, 0 (none) to 1.";
499
+ readonly default: 1;
500
+ readonly range: KnobRange;
501
+ };
502
+ readonly 'surfaces.water.glint.intensity': {
503
+ readonly kind: "number";
504
+ readonly description: "How brightly the waves catch the sun, or the moon on dark styles, 0 (none) to 1.";
505
+ readonly default: 1;
506
+ readonly range: KnobRange;
507
+ };
508
+ readonly 'surfaces.water.glint.color': {
509
+ readonly kind: "color";
510
+ readonly description: "Colour of the water's glint. Unset: sunlight on light styles and streetSatellite, a dimmer moonlight on dark ones.";
511
+ };
512
+ readonly 'surfaces.ice.intensity': {
513
+ description: string;
514
+ } & {
515
+ kind: Extract<KnobKind, "number" | "factor">;
516
+ default?: number;
517
+ range: KnobRange;
518
+ } & {
519
+ kind: "number";
520
+ };
521
+ readonly 'surfaces.ice.season': {
522
+ description: string;
523
+ } & {
524
+ kind: Extract<KnobKind, "enum">;
525
+ options: readonly string[];
526
+ default?: string;
527
+ } & {
528
+ kind: "enum";
529
+ };
530
+ readonly 'surfaces.ice.colors.crevasses': {
531
+ description: string;
532
+ } & {
533
+ kind: Extract<KnobKind, "color">;
534
+ } & {
535
+ kind: "color";
536
+ };
537
+ readonly 'surfaces.ice.crevasses.intensity': {
538
+ description: string;
539
+ } & {
540
+ kind: Extract<KnobKind, "number" | "factor">;
541
+ default?: number;
542
+ range: KnobRange;
543
+ } & {
544
+ kind: "number";
545
+ };
546
+ readonly 'surfaces.forest.intensity': {
547
+ description: string;
548
+ } & {
549
+ kind: Extract<KnobKind, "number" | "factor">;
550
+ default?: number;
551
+ range: KnobRange;
552
+ } & {
553
+ kind: "number";
554
+ };
555
+ readonly 'surfaces.forest.season': {
556
+ description: string;
557
+ } & {
558
+ kind: Extract<KnobKind, "enum">;
559
+ options: readonly string[];
560
+ default?: string;
561
+ } & {
562
+ kind: "enum";
563
+ };
564
+ readonly 'surfaces.forest.colors.broadleaf': {
565
+ description: string;
566
+ } & {
567
+ kind: Extract<KnobKind, "color">;
568
+ } & {
569
+ kind: "color";
570
+ };
571
+ readonly 'surfaces.forest.colors.conifer': {
572
+ description: string;
573
+ } & {
574
+ kind: Extract<KnobKind, "color">;
575
+ } & {
576
+ kind: "color";
577
+ };
578
+ readonly 'surfaces.forest.crowns.sizeFactor': {
579
+ readonly kind: "factor";
580
+ readonly description: "How wide the crowns of the forest stand, times their usual 8 m or so.";
581
+ readonly default: 1;
582
+ readonly range: KnobRange;
583
+ };
584
+ readonly 'surfaces.forest.conifer.fraction': {
585
+ readonly kind: "number";
586
+ readonly description: "The share of the forest's crowns that are conifers, 0 to 1.";
587
+ readonly default: 0.38;
588
+ readonly range: KnobRange;
589
+ };
590
+ readonly 'surfaces.grass.intensity': {
591
+ description: string;
592
+ } & {
593
+ kind: Extract<KnobKind, "number" | "factor">;
594
+ default?: number;
595
+ range: KnobRange;
596
+ } & {
597
+ kind: "number";
598
+ };
599
+ readonly 'surfaces.grass.season': {
600
+ description: string;
601
+ } & {
602
+ kind: Extract<KnobKind, "enum">;
603
+ options: readonly string[];
604
+ default?: string;
605
+ } & {
606
+ kind: "enum";
607
+ };
608
+ readonly 'surfaces.grass.colors.lush': {
609
+ description: string;
610
+ } & {
611
+ kind: Extract<KnobKind, "color">;
612
+ } & {
613
+ kind: "color";
614
+ };
615
+ readonly 'surfaces.grass.colors.dry': {
616
+ description: string;
617
+ } & {
618
+ kind: Extract<KnobKind, "color">;
619
+ } & {
620
+ kind: "color";
621
+ };
622
+ readonly 'surfaces.grass.colors.flowers': {
623
+ description: string;
624
+ } & {
625
+ kind: Extract<KnobKind, "color">;
626
+ } & {
627
+ kind: "color";
628
+ };
629
+ readonly 'surfaces.grass.mown.fraction': {
630
+ readonly kind: "number";
631
+ readonly description: "The share of lawns that are mown, in stripes, rather than left long with flowers, 0 to 1.";
632
+ readonly default: 0.5;
633
+ readonly range: KnobRange;
634
+ };
635
+ readonly 'surfaces.grass.stripes.intensity': {
636
+ description: string;
637
+ } & {
638
+ kind: Extract<KnobKind, "number" | "factor">;
639
+ default?: number;
640
+ range: KnobRange;
641
+ } & {
642
+ kind: "number";
643
+ };
644
+ readonly 'surfaces.grass.flowers.fraction': {
645
+ readonly kind: "number";
646
+ readonly description: "How many flowers dot the unmown grass: the share of its half-metre squares holding one, 0 to 0.2.";
647
+ readonly default: 0.02;
648
+ readonly range: {
649
+ readonly min: 0;
650
+ readonly max: 0.2;
651
+ readonly step: 0.005;
652
+ readonly bounds: "hard";
653
+ };
654
+ };
655
+ readonly 'surfaces.scrub.intensity': {
656
+ description: string;
657
+ } & {
658
+ kind: Extract<KnobKind, "number" | "factor">;
659
+ default?: number;
660
+ range: KnobRange;
661
+ } & {
662
+ kind: "number";
663
+ };
664
+ readonly 'surfaces.scrub.season': {
665
+ description: string;
666
+ } & {
667
+ kind: Extract<KnobKind, "enum">;
668
+ options: readonly string[];
669
+ default?: string;
670
+ } & {
671
+ kind: "enum";
672
+ };
673
+ readonly 'surfaces.scrub.colors.bushes': {
674
+ description: string;
675
+ } & {
676
+ kind: Extract<KnobKind, "color">;
677
+ } & {
678
+ kind: "color";
679
+ };
680
+ readonly 'surfaces.scrub.bushes.intensity': {
681
+ description: string;
682
+ } & {
683
+ kind: Extract<KnobKind, "number" | "factor">;
684
+ default?: number;
685
+ range: KnobRange;
686
+ } & {
687
+ kind: "number";
688
+ };
689
+ readonly 'surfaces.farmland.intensity': {
690
+ description: string;
691
+ } & {
692
+ kind: Extract<KnobKind, "number" | "factor">;
693
+ default?: number;
694
+ range: KnobRange;
695
+ } & {
696
+ kind: "number";
697
+ };
698
+ readonly 'surfaces.farmland.season': {
699
+ description: string;
700
+ } & {
701
+ kind: Extract<KnobKind, "enum">;
702
+ options: readonly string[];
703
+ default?: string;
704
+ } & {
705
+ kind: "enum";
706
+ };
707
+ readonly 'surfaces.farmland.colors.young': {
708
+ description: string;
709
+ } & {
710
+ kind: Extract<KnobKind, "color">;
711
+ } & {
712
+ kind: "color";
713
+ };
714
+ readonly 'surfaces.farmland.colors.cereal': {
715
+ description: string;
716
+ } & {
717
+ kind: Extract<KnobKind, "color">;
718
+ } & {
719
+ kind: "color";
720
+ };
721
+ readonly 'surfaces.farmland.colors.soil': {
722
+ description: string;
723
+ } & {
724
+ kind: Extract<KnobKind, "color">;
725
+ } & {
726
+ kind: "color";
727
+ };
728
+ readonly 'surfaces.farmland.colors.pasture': {
729
+ description: string;
730
+ } & {
731
+ kind: Extract<KnobKind, "color">;
732
+ } & {
733
+ kind: "color";
734
+ };
735
+ readonly 'surfaces.farmland.colors.rapeseed': {
736
+ description: string;
737
+ } & {
738
+ kind: Extract<KnobKind, "color">;
739
+ } & {
740
+ kind: "color";
741
+ };
742
+ readonly 'surfaces.farmland.colors.stubble': {
743
+ description: string;
744
+ } & {
745
+ kind: Extract<KnobKind, "color">;
746
+ } & {
747
+ kind: "color";
748
+ };
749
+ readonly 'surfaces.farmland.colors.hedges': {
750
+ description: string;
751
+ } & {
752
+ kind: Extract<KnobKind, "color">;
753
+ } & {
754
+ kind: "color";
755
+ };
756
+ readonly 'surfaces.farmland.parcels.sizeFactor': {
757
+ readonly kind: "factor";
758
+ readonly description: "How large the field parcels are, times their usual 35 to 125 m across.";
759
+ readonly default: 1;
760
+ readonly range: {
761
+ readonly min: 0.5;
762
+ readonly max: 3;
763
+ readonly step: 0.05;
764
+ readonly bounds: "hard";
765
+ };
766
+ };
767
+ readonly 'surfaces.farmland.rows.intensity': {
768
+ description: string;
769
+ } & {
770
+ kind: Extract<KnobKind, "number" | "factor">;
771
+ default?: number;
772
+ range: KnobRange;
773
+ } & {
774
+ kind: "number";
775
+ };
776
+ readonly 'surfaces.farmland.hedges.intensity': {
777
+ description: string;
778
+ } & {
779
+ kind: Extract<KnobKind, "number" | "factor">;
780
+ default?: number;
781
+ range: KnobRange;
782
+ } & {
783
+ kind: "number";
784
+ };
785
+ readonly 'surfaces.sand.intensity': {
786
+ description: string;
787
+ } & {
788
+ kind: Extract<KnobKind, "number" | "factor">;
789
+ default?: number;
790
+ range: KnobRange;
791
+ } & {
792
+ kind: "number";
793
+ };
794
+ readonly 'surfaces.sand.season': {
795
+ description: string;
796
+ } & {
797
+ kind: Extract<KnobKind, "enum">;
798
+ options: readonly string[];
799
+ default?: string;
800
+ } & {
801
+ kind: "enum";
802
+ };
803
+ readonly 'surfaces.sand.colors.wet': {
804
+ description: string;
805
+ } & {
806
+ kind: Extract<KnobKind, "color">;
807
+ } & {
808
+ kind: "color";
809
+ };
810
+ readonly 'surfaces.sand.dunes.intensity': {
811
+ description: string;
812
+ } & {
813
+ kind: Extract<KnobKind, "number" | "factor">;
814
+ default?: number;
815
+ range: KnobRange;
816
+ } & {
817
+ kind: "number";
818
+ };
819
+ readonly 'surfaces.sand.ripples.intensity': {
820
+ description: string;
821
+ } & {
822
+ kind: Extract<KnobKind, "number" | "factor">;
823
+ default?: number;
824
+ range: KnobRange;
825
+ } & {
826
+ kind: "number";
827
+ };
828
+ readonly 'surfaces.sand.wet.widthMeters': {
829
+ readonly kind: "number";
830
+ readonly description: "How far up from the water the sand is wet, in metres, about as far as the waves run.";
831
+ readonly default: 4;
832
+ readonly range: {
833
+ readonly min: 0;
834
+ readonly max: 12;
835
+ readonly step: 0.5;
836
+ readonly bounds: "hard";
837
+ };
838
+ };
839
+ readonly 'surfaces.mud.intensity': {
840
+ description: string;
841
+ } & {
842
+ kind: Extract<KnobKind, "number" | "factor">;
843
+ default?: number;
844
+ range: KnobRange;
845
+ } & {
846
+ kind: "number";
847
+ };
848
+ readonly 'surfaces.mud.season': {
849
+ description: string;
850
+ } & {
851
+ kind: Extract<KnobKind, "enum">;
852
+ options: readonly string[];
853
+ default?: string;
854
+ } & {
855
+ kind: "enum";
856
+ };
857
+ readonly 'surfaces.mud.colors.wet': {
858
+ description: string;
859
+ } & {
860
+ kind: Extract<KnobKind, "color">;
861
+ } & {
862
+ kind: "color";
863
+ };
864
+ readonly 'surfaces.mud.puddles.intensity': {
865
+ description: string;
866
+ } & {
867
+ kind: Extract<KnobKind, "number" | "factor">;
868
+ default?: number;
869
+ range: KnobRange;
870
+ } & {
871
+ kind: "number";
872
+ };
873
+ readonly 'surfaces.gravel.intensity': {
874
+ description: string;
875
+ } & {
876
+ kind: Extract<KnobKind, "number" | "factor">;
877
+ default?: number;
878
+ range: KnobRange;
879
+ } & {
880
+ kind: "number";
881
+ };
882
+ readonly 'surfaces.gravel.season': {
883
+ description: string;
884
+ } & {
885
+ kind: Extract<KnobKind, "enum">;
886
+ options: readonly string[];
887
+ default?: string;
888
+ } & {
889
+ kind: "enum";
890
+ };
891
+ readonly 'surfaces.gravel.stones.intensity': {
892
+ description: string;
893
+ } & {
894
+ kind: Extract<KnobKind, "number" | "factor">;
895
+ default?: number;
896
+ range: KnobRange;
897
+ } & {
898
+ kind: "number";
899
+ };
900
+ readonly 'surfaces.rock.intensity': {
901
+ description: string;
902
+ } & {
903
+ kind: Extract<KnobKind, "number" | "factor">;
904
+ default?: number;
905
+ range: KnobRange;
906
+ } & {
907
+ kind: "number";
908
+ };
909
+ readonly 'surfaces.rock.season': {
910
+ description: string;
911
+ } & {
912
+ kind: Extract<KnobKind, "enum">;
913
+ options: readonly string[];
914
+ default?: string;
915
+ } & {
916
+ kind: "enum";
917
+ };
918
+ readonly 'surfaces.rock.ridges.intensity': {
919
+ description: string;
920
+ } & {
921
+ kind: Extract<KnobKind, "number" | "factor">;
922
+ default?: number;
923
+ range: KnobRange;
924
+ } & {
925
+ kind: "number";
926
+ };
927
+ readonly 'surfaces.paving.intensity': {
928
+ description: string;
929
+ } & {
930
+ kind: Extract<KnobKind, "number" | "factor">;
931
+ default?: number;
932
+ range: KnobRange;
933
+ } & {
934
+ kind: "number";
935
+ };
936
+ readonly 'surfaces.paving.season': {
937
+ description: string;
938
+ } & {
939
+ kind: Extract<KnobKind, "enum">;
940
+ options: readonly string[];
941
+ default?: string;
942
+ } & {
943
+ kind: "enum";
944
+ };
945
+ readonly 'surfaces.paving.colors.joints': {
946
+ description: string;
947
+ } & {
948
+ kind: Extract<KnobKind, "color">;
949
+ } & {
950
+ kind: "color";
951
+ };
952
+ readonly 'surfaces.paving.joints.intensity': {
953
+ description: string;
954
+ } & {
955
+ kind: Extract<KnobKind, "number" | "factor">;
956
+ default?: number;
957
+ range: KnobRange;
958
+ } & {
959
+ kind: "number";
960
+ };
961
+ readonly 'surfaces.urban.intensity': {
962
+ description: string;
963
+ } & {
964
+ kind: Extract<KnobKind, "number" | "factor">;
965
+ default?: number;
966
+ range: KnobRange;
967
+ } & {
968
+ kind: "number";
969
+ };
970
+ readonly 'surfaces.urban.season': {
971
+ description: string;
972
+ } & {
973
+ kind: Extract<KnobKind, "enum">;
974
+ options: readonly string[];
975
+ default?: string;
976
+ } & {
977
+ kind: "enum";
978
+ };
979
+ readonly 'surfaces.urban.wear.intensity': {
980
+ description: string;
981
+ } & {
982
+ kind: Extract<KnobKind, "number" | "factor">;
983
+ default?: number;
984
+ range: KnobRange;
985
+ } & {
986
+ kind: "number";
987
+ };
988
+ readonly 'surfaces.roads.intensity': {
989
+ description: string;
990
+ } & {
991
+ kind: Extract<KnobKind, "number" | "factor">;
992
+ default?: number;
993
+ range: KnobRange;
994
+ } & {
995
+ kind: "number";
996
+ };
997
+ readonly 'surfaces.roads.season': {
998
+ description: string;
999
+ } & {
1000
+ kind: Extract<KnobKind, "enum">;
1001
+ options: readonly string[];
1002
+ default?: string;
1003
+ } & {
1004
+ kind: "enum";
1005
+ };
1006
+ readonly 'surfaces.roads.wear.intensity': {
1007
+ description: string;
1008
+ } & {
1009
+ kind: Extract<KnobKind, "number" | "factor">;
1010
+ default?: number;
1011
+ range: KnobRange;
1012
+ } & {
1013
+ kind: "number";
1014
+ };
1015
+ readonly 'trees.visible': {
1016
+ readonly kind: "toggle";
1017
+ readonly description: "The 3D trees standing on woods, parks, gardens, meadows, scrub, heaths, orchards, cemeteries and playgrounds, each as densely as its kind of ground grows them.";
1018
+ readonly default: true;
1019
+ };
1020
+ readonly 'trees.densityFactor': {
1021
+ readonly kind: "factor";
1022
+ readonly description: "How many trees stand on each kind of ground, times its own density: wild woods stay the densest, parks and meadows open.";
1023
+ readonly default: 1;
1024
+ readonly range: KnobRange;
1025
+ };
1026
+ readonly 'trees.sizeFactor': {
1027
+ readonly kind: "factor";
1028
+ readonly description: "How tall the trees and bushes stand, times their usual height.";
1029
+ readonly default: 1;
1030
+ readonly range: KnobRange;
1031
+ };
1032
+ readonly 'trees.species.broadleaf.shareFactor': {
1033
+ description: string;
1034
+ } & {
1035
+ kind: Extract<KnobKind, "number" | "factor">;
1036
+ default?: number;
1037
+ range: KnobRange;
1038
+ } & {
1039
+ kind: "factor";
1040
+ };
1041
+ readonly 'trees.species.conifer.shareFactor': {
1042
+ description: string;
1043
+ } & {
1044
+ kind: Extract<KnobKind, "number" | "factor">;
1045
+ default?: number;
1046
+ range: KnobRange;
1047
+ } & {
1048
+ kind: "factor";
1049
+ };
1050
+ readonly 'trees.species.columnar.shareFactor': {
1051
+ description: string;
1052
+ } & {
1053
+ kind: Extract<KnobKind, "number" | "factor">;
1054
+ default?: number;
1055
+ range: KnobRange;
1056
+ } & {
1057
+ kind: "factor";
1058
+ };
1059
+ readonly 'trees.species.umbrella.shareFactor': {
1060
+ description: string;
1061
+ } & {
1062
+ kind: Extract<KnobKind, "number" | "factor">;
1063
+ default?: number;
1064
+ range: KnobRange;
1065
+ } & {
1066
+ kind: "factor";
1067
+ };
1068
+ readonly 'trees.species.bush.shareFactor': {
1069
+ description: string;
1070
+ } & {
1071
+ kind: Extract<KnobKind, "number" | "factor">;
1072
+ default?: number;
1073
+ range: KnobRange;
1074
+ } & {
1075
+ kind: "factor";
1076
+ };
1077
+ readonly 'trees.tracks.intensity': {
1078
+ readonly kind: "number";
1079
+ readonly description: "How strongly the roads, paths, railways and streams through a wood show over the crowns standing in front of them, 0 (hidden behind them) to 1.";
1080
+ readonly default: 0.6;
1081
+ readonly range: KnobRange;
1082
+ };
1083
+ readonly 'trees.minZoom': {
1084
+ readonly kind: "number";
1085
+ readonly description: "The zoom from which the trees grow in, reaching their full height three quarters of a zoom later.";
1086
+ readonly default: 15;
1087
+ readonly range: {
1088
+ readonly min: 13;
1089
+ readonly max: 19;
1090
+ readonly step: 0.25;
1091
+ readonly bounds: "hard";
1092
+ };
1093
+ };
1094
+ readonly 'trees.season': {
1095
+ description: string;
1096
+ } & {
1097
+ kind: Extract<KnobKind, "enum">;
1098
+ options: readonly string[];
1099
+ default?: string;
1100
+ } & {
1101
+ kind: "enum";
1102
+ };
1103
+ readonly 'trees.colors.broadleaf': {
1104
+ description: string;
1105
+ } & {
1106
+ kind: Extract<KnobKind, "color">;
1107
+ } & {
1108
+ kind: "color";
1109
+ };
1110
+ readonly 'trees.colors.conifer': {
1111
+ description: string;
1112
+ } & {
1113
+ kind: Extract<KnobKind, "color">;
1114
+ } & {
1115
+ kind: "color";
1116
+ };
1117
+ readonly 'trees.shadows.intensity': {
1118
+ readonly kind: "number";
1119
+ readonly description: "How dark the shadows the trees cast on the ground are, away from the sun, 0 (none) to 1.";
1120
+ readonly default: 0.55;
1121
+ readonly range: KnobRange;
1122
+ };
1123
+ readonly 'light.direction': {
1124
+ readonly kind: "number";
1125
+ readonly description: "Direction the sun comes from, in degrees clockwise from north. It lights the trees and dunes, casts the trees' shadows, and sets where the water glints. Unset: the map's light where one is placed, as the styling module's `view.light` knobs do, else a day sun on light styles and satellite imagery, and a night one on dark styles.";
1126
+ readonly range: KnobRange;
1127
+ };
1128
+ readonly 'light.altitude': {
1129
+ readonly kind: "number";
1130
+ readonly description: "Height of the sun above the horizon, in degrees (90 = overhead). Unset: the map's light, as for `light.direction`.";
1131
+ readonly range: KnobRange;
1132
+ };
1133
+ readonly 'sky.color': {
1134
+ readonly kind: "color";
1135
+ readonly description: "Colour of the sky overhead, which the water mirrors where it faces up. Unset: the map's sky colour where the style sets one, else a day sky on light styles and satellite imagery, and a night sky on dark styles.";
1136
+ };
1137
+ readonly 'sky.horizonColor': {
1138
+ readonly kind: "color";
1139
+ readonly description: "Colour of the sky at the horizon, which the far water mirrors. Unset: the map's horizon colour where the style sets one, else a day or a night horizon, as for `sky.color`.";
1140
+ };
1141
+ readonly 'wind.direction': {
1142
+ readonly kind: "number";
1143
+ readonly description: "Direction the wind blows from, in degrees clockwise from north. The waves and the sand ripples lie across it.";
1144
+ readonly default: 225;
1145
+ readonly range: KnobRange;
1146
+ };
1147
+ readonly 'wind.speedFactor': {
1148
+ readonly kind: "factor";
1149
+ readonly description: "How fast the waves, the grass and the trees move, 0 holding them still. While nothing moves, the map draws no frames for them.";
1150
+ readonly default: 1;
1151
+ readonly range: {
1152
+ readonly min: 0;
1153
+ readonly max: 4;
1154
+ readonly step: 0.1;
1155
+ readonly bounds: "hard-min";
1156
+ };
1157
+ };
1158
+ };
1159
+ /**
1160
+ * The id of a surfaces knob, as accepted by the SDK's `setKnob` and as a path into {@link GLSurfacesConfig}.
1161
+ *
1162
+ * @group GL Surfaces
1163
+ */
1164
+ type GLSurfacesKnobId = keyof typeof surfacesKnobDefinitions;
1165
+ type KindOf<ID extends GLSurfacesKnobId> = (typeof surfacesKnobDefinitions)[ID]['kind'];
1166
+ /**
1167
+ * The value type a surfaces knob takes.
1168
+ *
1169
+ * @group GL Surfaces
1170
+ */
1171
+ type GLSurfacesKnobValueOf<ID extends GLSurfacesKnobId> = ID extends 'season' | `${string}.season` ? SurfaceSeason : KnobValueOf<KindOf<ID>>;
1172
+ /**
1173
+ * One entry of {@link glSurfacesKnobCatalogue}, with what a UI or a coding agent needs to offer the
1174
+ * knob and validate a value for it. The SDK's `getKnob` reads the value in force.
1175
+ *
1176
+ * @group GL Surfaces
1177
+ */
1178
+ type GLSurfacesKnob = KnobEntry<GLSurfacesKnobId>;
1179
+ /**
1180
+ * Every surfaces knob id, in catalogue order.
1181
+ *
1182
+ * @group GL Surfaces
1183
+ */
1184
+ declare const glSurfacesKnobIds: GLSurfacesKnobId[];
1185
+ /**
1186
+ * Every surfaces knob with its kind, description, range and default. It's static data, readable
1187
+ * without a map.
1188
+ *
1189
+ * @remarks
1190
+ * A knob is a plain value in {@link GLSurfacesConfig}, at its id's path. Some knobs have no default,
1191
+ * and take a value of their own while unset, which the SDK's `getKnob` reports:
1192
+ * - A part's season, such as `surfaces.water.season`, takes `season`.
1193
+ * - A role colour, such as `surfaces.farmland.colors.cereal`, takes the style's colour as the season
1194
+ * shades it.
1195
+ * - The light, sky and glint knobs take the map's light and sky, or the style's light or dark theme.
1196
+ *
1197
+ * @group GL Surfaces
1198
+ */
1199
+ declare const glSurfacesKnobCatalogue: readonly GLSurfacesKnob[];
1200
+ //#endregion
1201
+ export { facadePatterns as C, paletteModes as E, buildingsPresets as S, paletteMapColors as T, Buildings3DKnobValueOf as _, glSurfacesKnobIds as a, buildings3DKnobCatalogue as b, LandmarkTextureUse as c, Landmarks3DKnobValueOf as d, landmarkTextureUses as f, Buildings3DKnobId as g, Buildings3DKnob as h, glSurfacesKnobCatalogue as i, Landmarks3DKnob as l, landmarks3DKnobIds as m, GLSurfacesKnobId as n, SurfaceSeason as o, landmarks3DKnobCatalogue as p, GLSurfacesKnobValueOf as r, surfaceSeasons as s, GLSurfacesKnob as t, Landmarks3DKnobId as u, BuildingsPreset as v, PaletteMode as w, buildings3DKnobIds as x, FacadePattern as y };