@jupytergis/schema 0.15.0 → 0.16.0-alpha.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 (77) hide show
  1. package/lib/_interface/forms.json +7816 -555
  2. package/lib/_interface/processing/clipRasterByExtent.d.ts +39 -0
  3. package/lib/_interface/processing/clipRasterByVector.d.ts +32 -0
  4. package/lib/_interface/processing/clipVectorByMaskLayer.d.ts +28 -0
  5. package/lib/_interface/processing/rasterize.d.ts +42 -0
  6. package/lib/_interface/project/jgis.d.ts +20 -5
  7. package/lib/_interface/project/layers/geoTiffLayer.d.ts +351 -0
  8. package/lib/_interface/project/layers/{heatmapLayer.d.ts → openeoTileLayer.d.ts} +2 -19
  9. package/lib/_interface/project/layers/storySegmentLayer.d.ts +6 -0
  10. package/lib/_interface/project/layers/vectorLayer.d.ts +599 -5
  11. package/lib/_interface/project/layers/vectorTileLayer.d.ts +566 -2
  12. package/lib/_interface/project/sources/geoJsonSource.d.ts +8 -0
  13. package/lib/_interface/project/sources/geoPackageRasterSource.d.ts +36 -0
  14. package/lib/_interface/project/sources/geoPackageVectorSource.d.ts +28 -0
  15. package/lib/_interface/project/sources/geoParquetSource.d.ts +8 -0
  16. package/lib/_interface/project/sources/geoTiffSource.d.ts +8 -0
  17. package/lib/_interface/project/sources/imageSource.d.ts +8 -0
  18. package/lib/_interface/project/sources/openeoTileSource.d.ts +26 -0
  19. package/lib/_interface/project/sources/rasterDemSource.d.ts +8 -0
  20. package/lib/_interface/project/sources/rasterSource.d.ts +8 -0
  21. package/lib/_interface/project/sources/shapefileSource.d.ts +8 -0
  22. package/lib/_interface/project/sources/vectorTileSource.d.ts +8 -0
  23. package/lib/_interface/project/sources/videoSource.d.ts +8 -0
  24. package/lib/_interface/project/sources/wmsTileSource.d.ts +8 -0
  25. package/lib/_interface/project/symbology.d.ts +305 -0
  26. package/lib/_interface/version.d.ts +1 -1
  27. package/lib/_interface/version.js +1 -1
  28. package/lib/doc.d.ts +9 -3
  29. package/lib/doc.js +47 -4
  30. package/lib/grammar/grammarConversions.d.ts +50 -0
  31. package/lib/grammar/grammarConversions.js +137 -0
  32. package/lib/index.d.ts +4 -0
  33. package/lib/index.js +2 -0
  34. package/lib/interfaces.d.ts +88 -20
  35. package/lib/interfaces.js +10 -1
  36. package/lib/migrations/index.d.ts +16 -0
  37. package/lib/migrations/index.js +52 -0
  38. package/lib/migrations/v0_5_to_v0_6.d.ts +11 -0
  39. package/lib/migrations/v0_5_to_v0_6.js +154 -0
  40. package/lib/model.d.ts +49 -13
  41. package/lib/model.js +212 -21
  42. package/lib/processing/ProcessingMerge.d.ts +4 -0
  43. package/lib/processing/ProcessingMerge.js +4 -0
  44. package/lib/processing/_generated/exportProcessingSchema.d.ts +8 -4
  45. package/lib/processing/_generated/exportProcessingSchema.js +8 -4
  46. package/lib/processing/_generated/processingType.d.ts +1 -1
  47. package/lib/processing/_generated/processingType.js +8 -4
  48. package/lib/processing/_generated/processing_merge.json +84 -29
  49. package/lib/schema/processing/clipRasterByExtent.json +39 -0
  50. package/lib/schema/processing/clipRasterByVector.json +33 -0
  51. package/lib/schema/processing/clipVectorByMaskLayer.json +27 -0
  52. package/lib/schema/processing/rasterize.json +45 -0
  53. package/lib/schema/project/jgis.json +34 -6
  54. package/lib/schema/project/layers/{webGlLayer.json → geoTiffLayer.json} +9 -3
  55. package/lib/schema/project/layers/openeoTileLayer.json +21 -0
  56. package/lib/schema/project/layers/storySegmentLayer.json +14 -3
  57. package/lib/schema/project/layers/vectorLayer.json +73 -14
  58. package/lib/schema/project/layers/vectorTileLayer.json +14 -10
  59. package/lib/schema/project/sources/geoJsonSource.json +13 -0
  60. package/lib/schema/project/sources/geoPackageRasterSource.json +45 -0
  61. package/lib/schema/project/sources/geoPackageVectorSource.json +29 -0
  62. package/lib/schema/project/sources/geoParquetSource.json +13 -0
  63. package/lib/schema/project/sources/geoTiffSource.json +13 -0
  64. package/lib/schema/project/sources/imageSource.json +13 -0
  65. package/lib/schema/project/sources/openeoTileSource.json +23 -0
  66. package/lib/schema/project/sources/rasterDemSource.json +13 -0
  67. package/lib/schema/project/sources/rasterSource.json +13 -0
  68. package/lib/schema/project/sources/shapefileSource.json +13 -0
  69. package/lib/schema/project/sources/vectorTileSource.json +13 -0
  70. package/lib/schema/project/sources/videoSource.json +13 -0
  71. package/lib/schema/project/sources/wmsTileSource.json +13 -0
  72. package/lib/schema/project/symbology.json +418 -0
  73. package/lib/types.d.ts +15 -2
  74. package/lib/types.js +7 -2
  75. package/package.json +2 -1
  76. package/lib/_interface/project/layers/webGlLayer.d.ts +0 -39
  77. package/lib/schema/project/layers/heatmapLayer.json +0 -54
@@ -14,7 +14,7 @@ export interface IVectorLayer {
14
14
  */
15
15
  source: string;
16
16
  /**
17
- * The color of the the object
17
+ * DEPRECATED. Legacy OpenLayers FlatStyle cache. New files should not set this; symbologyState is the source of truth. Retained only so that legacy .jGIS files can be migrated on load.
18
18
  */
19
19
  color?: {
20
20
  [k: string]: any;
@@ -24,15 +24,13 @@ export interface IVectorLayer {
24
24
  */
25
25
  opacity?: number;
26
26
  /**
27
- * The state of the symbology panel options
27
+ * The symbology configuration. This is the single source of truth for how the layer is rendered; the OpenLayers style is derived from it on the fly.
28
28
  */
29
29
  symbologyState?: {
30
- renderType: "Single Symbol" | "Graduated" | "Categorized" | "Canonical";
31
- value?: string;
32
30
  method?: "color" | "radius";
33
31
  colorRamp?: string;
34
32
  nClasses?: number;
35
- reverse?: boolean;
33
+ reverseRamp?: boolean;
36
34
  mode?: "quantile" | "equal interval" | "jenks" | "pretty" | "logarithmic";
37
35
  /**
38
36
  * Minimum value for color mapping
@@ -50,5 +48,601 @@ export interface IVectorLayer {
50
48
  * Whether the stroke color follows the fill color expression
51
49
  */
52
50
  strokeFollowsFill?: boolean;
51
+ /**
52
+ * Manual RGBA fill color. Used for Single Symbol, and as the base fill for Categorized when no stops are defined.
53
+ */
54
+ fillColor?: [number, number, number, number];
55
+ /**
56
+ * Manual RGBA stroke color
57
+ */
58
+ strokeColor?: [number, number, number, number];
59
+ /**
60
+ * Stroke width in pixels
61
+ */
62
+ strokeWidth?: number;
63
+ /**
64
+ * Circle radius in pixels for point geometries (Single Symbol, and the base for Graduated radius)
65
+ */
66
+ radius?: number;
67
+ joinStyle?: "bevel" | "round" | "miter";
68
+ capStyle?: "butt" | "round" | "square";
69
+ /**
70
+ * The type of geometry.
71
+ */
72
+ geometryType?: "fill" | "circle" | "line";
73
+ /**
74
+ * User-customized color stops that override the computed classification. Saved only when the user manually edits stop colors in the dialog.
75
+ */
76
+ stopsOverride?: {
77
+ value?: any;
78
+ color?: [number, number, number, number];
79
+ [k: string]: any;
80
+ }[];
81
+ /**
82
+ * Legacy top-level encoding rules (backward compatibility). New files should use layers.
83
+ */
84
+ rules?: {
85
+ /**
86
+ * Stable UUID.
87
+ */
88
+ id: string;
89
+ /**
90
+ * Input field name(s). Absent for constant rules.
91
+ */
92
+ fields?: string[];
93
+ /**
94
+ * (scale, channels) pairs sharing these input fields.
95
+ */
96
+ mappings: [
97
+ {
98
+ scale:
99
+ | {
100
+ scheme: "colorRamp";
101
+ params: {
102
+ name: string;
103
+ domain?: [number, number];
104
+ nShades: number;
105
+ mode: "equal interval" | "quantile" | "jenks" | "pretty" | "logarithmic";
106
+ reverse: boolean;
107
+ /**
108
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
109
+ */
110
+ fallback: [number, number, number, number];
111
+ colorStops?: {
112
+ stop: number;
113
+ /**
114
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
115
+ */
116
+ color: [number, number, number, number];
117
+ }[];
118
+ };
119
+ }
120
+ | {
121
+ scheme: "categorical";
122
+ params: {
123
+ colorRamp: string;
124
+ nShades?: number;
125
+ reverse?: boolean;
126
+ /**
127
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
128
+ */
129
+ fallback: [number, number, number, number];
130
+ colorStops?: {
131
+ stop: string | number;
132
+ /**
133
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
134
+ */
135
+ color: [number, number, number, number];
136
+ }[];
137
+ };
138
+ }
139
+ | {
140
+ scheme: "scalar";
141
+ params: {
142
+ domain: [number, number];
143
+ range: [number, number];
144
+ mode: "equal interval" | "quantile" | "jenks" | "pretty" | "logarithmic";
145
+ nStops: number;
146
+ fallback: number;
147
+ scalarStops?: {
148
+ stop: number;
149
+ output: number;
150
+ }[];
151
+ };
152
+ }
153
+ | {
154
+ scheme: "constant_rgba";
155
+ params: {
156
+ /**
157
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
158
+ */
159
+ value: [number, number, number, number];
160
+ };
161
+ }
162
+ | {
163
+ scheme: "constant_num";
164
+ params: {
165
+ value: number;
166
+ };
167
+ }
168
+ | {
169
+ scheme: "identity";
170
+ }
171
+ | {
172
+ scheme: "expression";
173
+ params: {
174
+ expr: string;
175
+ fallback: number | [number, number, number, number];
176
+ };
177
+ };
178
+ /**
179
+ * Target output channel names.
180
+ */
181
+ channels: [
182
+ (
183
+ | ("fill-color" | "stroke-color" | "circle-fill-color" | "circle-stroke-color" | "pixel-color")
184
+ | ("fill-red" | "fill-green" | "fill-blue" | "pixel-red" | "pixel-green" | "pixel-blue")
185
+ | ("fill-alpha" | "pixel-alpha")
186
+ | "pixel-rgb"
187
+ | ("stroke-width" | "circle-radius" | "circle-stroke-width")
188
+ ),
189
+ ...(
190
+ | ("fill-color" | "stroke-color" | "circle-fill-color" | "circle-stroke-color" | "pixel-color")
191
+ | ("fill-red" | "fill-green" | "fill-blue" | "pixel-red" | "pixel-green" | "pixel-blue")
192
+ | ("fill-alpha" | "pixel-alpha")
193
+ | "pixel-rgb"
194
+ | ("stroke-width" | "circle-radius" | "circle-stroke-width")
195
+ )[]
196
+ ];
197
+ },
198
+ ...{
199
+ scale:
200
+ | {
201
+ scheme: "colorRamp";
202
+ params: {
203
+ name: string;
204
+ domain?: [number, number];
205
+ nShades: number;
206
+ mode: "equal interval" | "quantile" | "jenks" | "pretty" | "logarithmic";
207
+ reverse: boolean;
208
+ /**
209
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
210
+ */
211
+ fallback: [number, number, number, number];
212
+ colorStops?: {
213
+ stop: number;
214
+ /**
215
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
216
+ */
217
+ color: [number, number, number, number];
218
+ }[];
219
+ };
220
+ }
221
+ | {
222
+ scheme: "categorical";
223
+ params: {
224
+ colorRamp: string;
225
+ nShades?: number;
226
+ reverse?: boolean;
227
+ /**
228
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
229
+ */
230
+ fallback: [number, number, number, number];
231
+ colorStops?: {
232
+ stop: string | number;
233
+ /**
234
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
235
+ */
236
+ color: [number, number, number, number];
237
+ }[];
238
+ };
239
+ }
240
+ | {
241
+ scheme: "scalar";
242
+ params: {
243
+ domain: [number, number];
244
+ range: [number, number];
245
+ mode: "equal interval" | "quantile" | "jenks" | "pretty" | "logarithmic";
246
+ nStops: number;
247
+ fallback: number;
248
+ scalarStops?: {
249
+ stop: number;
250
+ output: number;
251
+ }[];
252
+ };
253
+ }
254
+ | {
255
+ scheme: "constant_rgba";
256
+ params: {
257
+ /**
258
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
259
+ */
260
+ value: [number, number, number, number];
261
+ };
262
+ }
263
+ | {
264
+ scheme: "constant_num";
265
+ params: {
266
+ value: number;
267
+ };
268
+ }
269
+ | {
270
+ scheme: "identity";
271
+ }
272
+ | {
273
+ scheme: "expression";
274
+ params: {
275
+ expr: string;
276
+ fallback: number | [number, number, number, number];
277
+ };
278
+ };
279
+ /**
280
+ * Target output channel names.
281
+ */
282
+ channels: [
283
+ (
284
+ | ("fill-color" | "stroke-color" | "circle-fill-color" | "circle-stroke-color" | "pixel-color")
285
+ | ("fill-red" | "fill-green" | "fill-blue" | "pixel-red" | "pixel-green" | "pixel-blue")
286
+ | ("fill-alpha" | "pixel-alpha")
287
+ | "pixel-rgb"
288
+ | ("stroke-width" | "circle-radius" | "circle-stroke-width")
289
+ ),
290
+ ...(
291
+ | ("fill-color" | "stroke-color" | "circle-fill-color" | "circle-stroke-color" | "pixel-color")
292
+ | ("fill-red" | "fill-green" | "fill-blue" | "pixel-red" | "pixel-green" | "pixel-blue")
293
+ | ("fill-alpha" | "pixel-alpha")
294
+ | "pixel-rgb"
295
+ | ("stroke-width" | "circle-radius" | "circle-stroke-width")
296
+ )[]
297
+ ];
298
+ }[]
299
+ ];
300
+ /**
301
+ * Guard predicates for this rule.
302
+ */
303
+ when?: (
304
+ | {
305
+ type: "geometryType";
306
+ value: "Point" | "LineString" | "Polygon";
307
+ }
308
+ | {
309
+ type: "hasField";
310
+ field: string;
311
+ }
312
+ | {
313
+ type: "fieldEquals";
314
+ field: string;
315
+ value: string | number;
316
+ }
317
+ | {
318
+ type: "fieldCompare";
319
+ field: string;
320
+ op: ">" | "<" | ">=" | "<=" | "!=";
321
+ value: number;
322
+ }
323
+ | {
324
+ type: "between";
325
+ field: string;
326
+ min: number;
327
+ max: number;
328
+ }
329
+ )[];
330
+ /**
331
+ * Logical combinator for when predicates. Defaults to 'all'.
332
+ */
333
+ whenOp?: "all" | "any";
334
+ }[];
335
+ /**
336
+ * Grammar rendering layers. Each layer is an independent rendering pipeline with optional preprocess transforms and encoding rules.
337
+ */
338
+ layers?: {
339
+ /**
340
+ * Stable UUID.
341
+ */
342
+ id: string;
343
+ /**
344
+ * Render-side transforms (KDE, cluster) applied before encoding rules.
345
+ */
346
+ preprocess?: (
347
+ | {
348
+ type: "kde";
349
+ radius: number;
350
+ blur: number;
351
+ weightField?: string;
352
+ }
353
+ | {
354
+ type: "cluster";
355
+ radius: number;
356
+ }
357
+ )[];
358
+ /**
359
+ * Encoding rules compiled into a flat-style expression for this layer.
360
+ */
361
+ rules: {
362
+ /**
363
+ * Stable UUID.
364
+ */
365
+ id: string;
366
+ /**
367
+ * Input field name(s). Absent for constant rules.
368
+ */
369
+ fields?: string[];
370
+ /**
371
+ * (scale, channels) pairs sharing these input fields.
372
+ */
373
+ mappings: [
374
+ {
375
+ scale:
376
+ | {
377
+ scheme: "colorRamp";
378
+ params: {
379
+ name: string;
380
+ domain?: [number, number];
381
+ nShades: number;
382
+ mode: "equal interval" | "quantile" | "jenks" | "pretty" | "logarithmic";
383
+ reverse: boolean;
384
+ /**
385
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
386
+ */
387
+ fallback: [number, number, number, number];
388
+ colorStops?: {
389
+ stop: number;
390
+ /**
391
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
392
+ */
393
+ color: [number, number, number, number];
394
+ }[];
395
+ };
396
+ }
397
+ | {
398
+ scheme: "categorical";
399
+ params: {
400
+ colorRamp: string;
401
+ nShades?: number;
402
+ reverse?: boolean;
403
+ /**
404
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
405
+ */
406
+ fallback: [number, number, number, number];
407
+ colorStops?: {
408
+ stop: string | number;
409
+ /**
410
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
411
+ */
412
+ color: [number, number, number, number];
413
+ }[];
414
+ };
415
+ }
416
+ | {
417
+ scheme: "scalar";
418
+ params: {
419
+ domain: [number, number];
420
+ range: [number, number];
421
+ mode: "equal interval" | "quantile" | "jenks" | "pretty" | "logarithmic";
422
+ nStops: number;
423
+ fallback: number;
424
+ scalarStops?: {
425
+ stop: number;
426
+ output: number;
427
+ }[];
428
+ };
429
+ }
430
+ | {
431
+ scheme: "constant_rgba";
432
+ params: {
433
+ /**
434
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
435
+ */
436
+ value: [number, number, number, number];
437
+ };
438
+ }
439
+ | {
440
+ scheme: "constant_num";
441
+ params: {
442
+ value: number;
443
+ };
444
+ }
445
+ | {
446
+ scheme: "identity";
447
+ }
448
+ | {
449
+ scheme: "expression";
450
+ params: {
451
+ expr: string;
452
+ fallback: number | [number, number, number, number];
453
+ };
454
+ };
455
+ /**
456
+ * Target output channel names.
457
+ */
458
+ channels: [
459
+ (
460
+ | ("fill-color" | "stroke-color" | "circle-fill-color" | "circle-stroke-color" | "pixel-color")
461
+ | ("fill-red" | "fill-green" | "fill-blue" | "pixel-red" | "pixel-green" | "pixel-blue")
462
+ | ("fill-alpha" | "pixel-alpha")
463
+ | "pixel-rgb"
464
+ | ("stroke-width" | "circle-radius" | "circle-stroke-width")
465
+ ),
466
+ ...(
467
+ | ("fill-color" | "stroke-color" | "circle-fill-color" | "circle-stroke-color" | "pixel-color")
468
+ | ("fill-red" | "fill-green" | "fill-blue" | "pixel-red" | "pixel-green" | "pixel-blue")
469
+ | ("fill-alpha" | "pixel-alpha")
470
+ | "pixel-rgb"
471
+ | ("stroke-width" | "circle-radius" | "circle-stroke-width")
472
+ )[]
473
+ ];
474
+ },
475
+ ...{
476
+ scale:
477
+ | {
478
+ scheme: "colorRamp";
479
+ params: {
480
+ name: string;
481
+ domain?: [number, number];
482
+ nShades: number;
483
+ mode: "equal interval" | "quantile" | "jenks" | "pretty" | "logarithmic";
484
+ reverse: boolean;
485
+ /**
486
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
487
+ */
488
+ fallback: [number, number, number, number];
489
+ colorStops?: {
490
+ stop: number;
491
+ /**
492
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
493
+ */
494
+ color: [number, number, number, number];
495
+ }[];
496
+ };
497
+ }
498
+ | {
499
+ scheme: "categorical";
500
+ params: {
501
+ colorRamp: string;
502
+ nShades?: number;
503
+ reverse?: boolean;
504
+ /**
505
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
506
+ */
507
+ fallback: [number, number, number, number];
508
+ colorStops?: {
509
+ stop: string | number;
510
+ /**
511
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
512
+ */
513
+ color: [number, number, number, number];
514
+ }[];
515
+ };
516
+ }
517
+ | {
518
+ scheme: "scalar";
519
+ params: {
520
+ domain: [number, number];
521
+ range: [number, number];
522
+ mode: "equal interval" | "quantile" | "jenks" | "pretty" | "logarithmic";
523
+ nStops: number;
524
+ fallback: number;
525
+ scalarStops?: {
526
+ stop: number;
527
+ output: number;
528
+ }[];
529
+ };
530
+ }
531
+ | {
532
+ scheme: "constant_rgba";
533
+ params: {
534
+ /**
535
+ * [R 0-255, G 0-255, B 0-255, A 0-1]
536
+ */
537
+ value: [number, number, number, number];
538
+ };
539
+ }
540
+ | {
541
+ scheme: "constant_num";
542
+ params: {
543
+ value: number;
544
+ };
545
+ }
546
+ | {
547
+ scheme: "identity";
548
+ }
549
+ | {
550
+ scheme: "expression";
551
+ params: {
552
+ expr: string;
553
+ fallback: number | [number, number, number, number];
554
+ };
555
+ };
556
+ /**
557
+ * Target output channel names.
558
+ */
559
+ channels: [
560
+ (
561
+ | ("fill-color" | "stroke-color" | "circle-fill-color" | "circle-stroke-color" | "pixel-color")
562
+ | ("fill-red" | "fill-green" | "fill-blue" | "pixel-red" | "pixel-green" | "pixel-blue")
563
+ | ("fill-alpha" | "pixel-alpha")
564
+ | "pixel-rgb"
565
+ | ("stroke-width" | "circle-radius" | "circle-stroke-width")
566
+ ),
567
+ ...(
568
+ | ("fill-color" | "stroke-color" | "circle-fill-color" | "circle-stroke-color" | "pixel-color")
569
+ | ("fill-red" | "fill-green" | "fill-blue" | "pixel-red" | "pixel-green" | "pixel-blue")
570
+ | ("fill-alpha" | "pixel-alpha")
571
+ | "pixel-rgb"
572
+ | ("stroke-width" | "circle-radius" | "circle-stroke-width")
573
+ )[]
574
+ ];
575
+ }[]
576
+ ];
577
+ /**
578
+ * Guard predicates for this rule.
579
+ */
580
+ when?: (
581
+ | {
582
+ type: "geometryType";
583
+ value: "Point" | "LineString" | "Polygon";
584
+ }
585
+ | {
586
+ type: "hasField";
587
+ field: string;
588
+ }
589
+ | {
590
+ type: "fieldEquals";
591
+ field: string;
592
+ value: string | number;
593
+ }
594
+ | {
595
+ type: "fieldCompare";
596
+ field: string;
597
+ op: ">" | "<" | ">=" | "<=" | "!=";
598
+ value: number;
599
+ }
600
+ | {
601
+ type: "between";
602
+ field: string;
603
+ min: number;
604
+ max: number;
605
+ }
606
+ )[];
607
+ /**
608
+ * Logical combinator for when predicates. Defaults to 'all'.
609
+ */
610
+ whenOp?: "all" | "any";
611
+ }[];
612
+ /**
613
+ * Guard predicates applied to every rule in this layer.
614
+ */
615
+ when?: (
616
+ | {
617
+ type: "geometryType";
618
+ value: "Point" | "LineString" | "Polygon";
619
+ }
620
+ | {
621
+ type: "hasField";
622
+ field: string;
623
+ }
624
+ | {
625
+ type: "fieldEquals";
626
+ field: string;
627
+ value: string | number;
628
+ }
629
+ | {
630
+ type: "fieldCompare";
631
+ field: string;
632
+ op: ">" | "<" | ">=" | "<=" | "!=";
633
+ value: number;
634
+ }
635
+ | {
636
+ type: "between";
637
+ field: string;
638
+ min: number;
639
+ max: number;
640
+ }
641
+ )[];
642
+ /**
643
+ * Logical combinator for when predicates. Defaults to 'all'.
644
+ */
645
+ whenOp?: "all" | "any";
646
+ }[];
53
647
  };
54
648
  }