@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
@@ -1,15 +1,4 @@
1
1
  [
2
- {
3
- "description": "BoundingBoxes",
4
- "name": "boundingBoxes",
5
- "operationParams": [],
6
- "label": "Bounding Boxes",
7
- "operations": {
8
- "sql": "SELECT ST_Envelope(geometry) AS geometry, * FROM \"{layerName}\"",
9
- "gdalFunction": "ogr2ogr"
10
- },
11
- "type": "vector"
12
- },
13
2
  {
14
3
  "description": "ConcaveHull",
15
4
  "name": "concaveHull",
@@ -25,28 +14,37 @@
25
14
  "type": "vector"
26
15
  },
27
16
  {
28
- "description": "Dissolve",
29
- "name": "dissolve",
30
- "operationParams": [
31
- "dissolveField"
32
- ],
33
- "label": "Dissolve",
17
+ "description": "Centroids",
18
+ "name": "centroids",
19
+ "operationParams": [],
20
+ "label": "Centroids",
34
21
  "operations": {
35
22
  "gdalFunction": "ogr2ogr",
36
- "sql": "SELECT ST_Union(geometry) AS geometry, {dissolveField} FROM \"{layerName}\" GROUP BY {dissolveField}"
23
+ "sql": "SELECT ST_Centroid(geometry) AS geometry, * FROM \"{layerName}\""
37
24
  },
38
25
  "type": "vector"
39
26
  },
40
27
  {
41
- "description": "Buffer",
42
- "name": "buffer",
43
- "label": "Buffer",
28
+ "description": "ClipRasterByVector",
29
+ "name": "clipRasterByVector",
30
+ "label": "Clip Raster by Vector",
44
31
  "operationParams": [
45
- "bufferDistance"
32
+ "clipLayer",
33
+ "cropToCutline"
46
34
  ],
47
35
  "operations": {
48
- "gdalFunction": "ogr2ogr",
49
- "sql": "SELECT ST_Union(ST_Buffer(geometry, {bufferDistance})) AS geometry, * FROM \"{layerName}\""
36
+ "gdalFunction": "gdalwarp"
37
+ },
38
+ "type": "rasterClipVector"
39
+ },
40
+ {
41
+ "description": "BoundingBoxes",
42
+ "name": "boundingBoxes",
43
+ "operationParams": [],
44
+ "label": "Bounding Boxes",
45
+ "operations": {
46
+ "sql": "SELECT ST_Envelope(geometry) AS geometry, * FROM \"{layerName}\"",
47
+ "gdalFunction": "ogr2ogr"
50
48
  },
51
49
  "type": "vector"
52
50
  },
@@ -62,13 +60,70 @@
62
60
  "type": "vector"
63
61
  },
64
62
  {
65
- "description": "Centroids",
66
- "name": "centroids",
67
- "operationParams": [],
68
- "label": "Centroids",
63
+ "description": "ClipVectorByMaskLayer",
64
+ "name": "clipVectorByMaskLayer",
65
+ "label": "Mask Layer",
66
+ "operationParams": [
67
+ "clipLayer"
68
+ ],
69
+ "operations": {
70
+ "gdalFunction": "ogr2ogr"
71
+ },
72
+ "type": "clip"
73
+ },
74
+ {
75
+ "description": "ClipRasterByExtent",
76
+ "name": "clipRasterByExtent",
77
+ "label": "Clip Raster by Extent",
78
+ "operationParams": [
79
+ "xMin",
80
+ "yMin",
81
+ "xMax",
82
+ "yMax"
83
+ ],
84
+ "operations": {
85
+ "gdalFunction": "gdal_translate"
86
+ },
87
+ "type": "rasterClip"
88
+ },
89
+ {
90
+ "description": "Rasterize",
91
+ "name": "rasterize",
92
+ "label": "Rasterize",
93
+ "operationParams": [
94
+ "pixelSize",
95
+ "attributeField",
96
+ "burnValue",
97
+ "noDataValue"
98
+ ],
99
+ "operations": {
100
+ "gdalFunction": "gdal_rasterize"
101
+ },
102
+ "type": "raster"
103
+ },
104
+ {
105
+ "description": "Buffer",
106
+ "name": "buffer",
107
+ "label": "Buffer",
108
+ "operationParams": [
109
+ "bufferDistance"
110
+ ],
69
111
  "operations": {
70
112
  "gdalFunction": "ogr2ogr",
71
- "sql": "SELECT ST_Centroid(geometry) AS geometry, * FROM \"{layerName}\""
113
+ "sql": "SELECT ST_Union(ST_Buffer(geometry, {bufferDistance})) AS geometry, * FROM \"{layerName}\""
114
+ },
115
+ "type": "vector"
116
+ },
117
+ {
118
+ "description": "Dissolve",
119
+ "name": "dissolve",
120
+ "operationParams": [
121
+ "dissolveField"
122
+ ],
123
+ "label": "Dissolve",
124
+ "operations": {
125
+ "gdalFunction": "ogr2ogr",
126
+ "sql": "SELECT ST_Union(geometry) AS geometry, {dissolveField} FROM \"{layerName}\" GROUP BY {dissolveField}"
72
127
  },
73
128
  "type": "vector"
74
129
  }
@@ -0,0 +1,39 @@
1
+ {
2
+ "type": "object",
3
+ "description": "ClipRasterByExtent",
4
+ "title": "IClipRasterByExtent",
5
+ "required": ["inputLayer", "xMin", "yMin", "xMax", "yMax"],
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "inputLayer": {
9
+ "type": "string",
10
+ "description": "The raster layer to clip."
11
+ },
12
+ "xMin": {
13
+ "type": "number",
14
+ "description": "Minimum X coordinate (left edge) of the clipping extent."
15
+ },
16
+ "yMin": {
17
+ "type": "number",
18
+ "description": "Minimum Y coordinate (bottom edge) of the clipping extent."
19
+ },
20
+ "xMax": {
21
+ "type": "number",
22
+ "description": "Maximum X coordinate (right edge) of the clipping extent."
23
+ },
24
+ "yMax": {
25
+ "type": "number",
26
+ "description": "Maximum Y coordinate (top edge) of the clipping extent."
27
+ },
28
+ "outputFileName": {
29
+ "type": "string",
30
+ "description": "Output file name for the clipped raster.",
31
+ "default": "clipped.tif"
32
+ },
33
+ "embedOutputLayer": {
34
+ "type": "boolean",
35
+ "title": "Embed output clipped raster in file",
36
+ "default": false
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "type": "object",
3
+ "description": "ClipRasterByVector",
4
+ "title": "IClipRasterByVector",
5
+ "required": ["inputLayer", "clipLayer"],
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "inputLayer": {
9
+ "type": "string",
10
+ "description": "The raster layer to clip."
11
+ },
12
+ "clipLayer": {
13
+ "type": "string",
14
+ "description": "The vector layer to use as the cutline boundary."
15
+ },
16
+ "cropToCutline": {
17
+ "type": "boolean",
18
+ "title": "Crop to cutline extent",
19
+ "description": "Shrink the output extent to the cutline's bounding box. When off, the original raster extent is preserved and pixels outside the cutline are set to nodata.",
20
+ "default": true
21
+ },
22
+ "outputFileName": {
23
+ "type": "string",
24
+ "description": "Output file name for the clipped raster.",
25
+ "default": "clipped.tif"
26
+ },
27
+ "embedOutputLayer": {
28
+ "type": "boolean",
29
+ "title": "Embed output clipped raster in jGIS file",
30
+ "default": false
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "type": "object",
3
+ "description": "ClipVectorByMaskLayer",
4
+ "title": "IClipVectorByMaskLayer",
5
+ "required": ["inputLayer", "clipLayer"],
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "inputLayer": {
9
+ "type": "string",
10
+ "description": "The input layer to clip."
11
+ },
12
+ "clipLayer": {
13
+ "type": "string",
14
+ "description": "The layer to use as the clip boundary."
15
+ },
16
+ "outputLayerName": {
17
+ "type": "string",
18
+ "title": "Output Layer Name",
19
+ "description": "Name for the resulting clipped layer."
20
+ },
21
+ "embedOutputLayer": {
22
+ "type": "boolean",
23
+ "title": "Embed output clipped layer in file",
24
+ "default": true
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "type": "object",
3
+ "description": "Rasterize",
4
+ "title": "IRasterize",
5
+ "required": ["inputLayer", "pixelSize", "outputFileName"],
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "inputLayer": {
9
+ "type": "string",
10
+ "description": "The input vector layer to rasterize."
11
+ },
12
+ "pixelSize": {
13
+ "type": "number",
14
+ "default": 0.1,
15
+ "exclusiveMinimum": 0,
16
+ "description": "Output raster pixel size (in projection units). Must be greater than 0."
17
+ },
18
+ "attributeField": {
19
+ "type": "string",
20
+ "default": "",
21
+ "description": "Optional feature attribute used to burn values. Leave empty to use a fixed burn value."
22
+ },
23
+ "burnValue": {
24
+ "type": "number",
25
+ "default": 1,
26
+ "description": "Fixed value burned into raster cells when no attribute field is provided."
27
+ },
28
+ "noDataValue": {
29
+ "type": "number",
30
+ "default": 0,
31
+ "description": "Value assigned to cells not covered by any feature."
32
+ },
33
+ "outputFileName": {
34
+ "type": "string",
35
+ "default": "rasterized.tif",
36
+ "description": "Output GeoTIFF filename, saved next to the project file."
37
+ },
38
+ "embedOutputLayer": {
39
+ "type": "boolean",
40
+ "title": "Embed output GeoTIFF in file",
41
+ "default": false,
42
+ "description": "When enabled, the GeoTIFF is base64-embedded inside the .jGIS document instead of being written to disk."
43
+ }
44
+ }
45
+ }
@@ -6,7 +6,7 @@
6
6
  "properties": {
7
7
  "schemaVersion": {
8
8
  "type": "string",
9
- "default": "0.5.0"
9
+ "default": "0.6.0"
10
10
  },
11
11
  "layers": {
12
12
  "$ref": "#/definitions/jGISLayers"
@@ -23,6 +23,9 @@
23
23
  "stories": {
24
24
  "$ref": "#/definitions/jGISStoryMap"
25
25
  },
26
+ "viewState": {
27
+ "$ref": "#/definitions/jGISViewState"
28
+ },
26
29
  "metadata": {
27
30
  "type": "object",
28
31
  "patternProperties": {
@@ -41,11 +44,11 @@
41
44
  "VectorLayer",
42
45
  "VectorTileLayer",
43
46
  "HillshadeLayer",
44
- "WebGlLayer",
47
+ "GeoTiffLayer",
45
48
  "ImageLayer",
46
- "HeatmapLayer",
47
49
  "StacLayer",
48
- "StorySegmentLayer"
50
+ "StorySegmentLayer",
51
+ "OpenEOTileLayer"
49
52
  ]
50
53
  },
51
54
  "sourceType": {
@@ -60,8 +63,11 @@
60
63
  "ImageSource",
61
64
  "ShapefileSource",
62
65
  "GeoTiffSource",
66
+ "GeoPackageVectorSource",
67
+ "GeoPackageRasterSource",
63
68
  "GeoParquetSource",
64
- "MarkerSource"
69
+ "MarkerSource",
70
+ "OpenEOTileSource"
65
71
  ]
66
72
  },
67
73
  "jGISLayer": {
@@ -154,7 +160,7 @@
154
160
  "storyType": {
155
161
  "type": "string",
156
162
  "title": "Story Type",
157
- "enum": ["guided", "unguided"],
163
+ "enum": ["guided", "unguided", "Vertical Scroll"],
158
164
  "description": "The type of story map"
159
165
  },
160
166
  "storySegments": {
@@ -207,6 +213,28 @@
207
213
  "$ref": "#/definitions/jGISLayerItem"
208
214
  }
209
215
  },
216
+ "jGISViewState": {
217
+ "title": "IJGISViewState",
218
+ "type": "object",
219
+ "default": {},
220
+ "additionalProperties": {
221
+ "type": "object",
222
+ "additionalProperties": false,
223
+ "properties": {
224
+ "extent": {
225
+ "type": "array",
226
+ "items": { "type": "number" }
227
+ },
228
+ "zoom": {
229
+ "type": "number"
230
+ },
231
+ "projection": {
232
+ "type": "string"
233
+ }
234
+ },
235
+ "required": ["extent"]
236
+ }
237
+ },
210
238
  "jGISOptions": {
211
239
  "title": "IJGISOptions",
212
240
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "object",
3
- "description": "WebGlLayer",
4
- "title": "IWebGlLayer",
3
+ "description": "GeoTiffLayer",
4
+ "title": "IGeoTiffLayer",
5
5
  "required": ["source"],
6
6
  "additionalProperties": false,
7
7
  "properties": {
@@ -51,8 +51,14 @@
51
51
  "symbologyState": {
52
52
  "type": "object",
53
53
  "description": "The state of the symbology panel options",
54
- "required": ["renderType"],
55
54
  "properties": {
55
+ "layers": {
56
+ "type": "array",
57
+ "description": "Grammar rendering layers.",
58
+ "items": {
59
+ "$ref": "project/symbology.json#/definitions/IGrammarLayer"
60
+ }
61
+ },
56
62
  "renderType": {
57
63
  "type": "string",
58
64
  "default": "Singleband Pseudocolor"
@@ -0,0 +1,21 @@
1
+ {
2
+ "type": "object",
3
+ "description": "OpenEOTileLayer",
4
+ "title": "IOpenEOTileLayer",
5
+ "required": ["source"],
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "source": {
9
+ "type": "string",
10
+ "description": "The id of the source"
11
+ },
12
+ "opacity": {
13
+ "type": "number",
14
+ "description": "The opacity of the source",
15
+ "default": 1,
16
+ "multipleOf": 0.1,
17
+ "minimum": 0,
18
+ "maximum": 1
19
+ }
20
+ }
21
+ }
@@ -16,10 +16,16 @@
16
16
  }
17
17
  },
18
18
  "content": {
19
- "type": "object",
20
19
  "title": "Segment Content",
21
- "additionalProperties": false,
20
+ "type": "object",
22
21
  "properties": {
22
+ "contentMode": {
23
+ "type": "string",
24
+ "title": "Content Mode",
25
+ "description": "Display map or markdown content while this segment is active",
26
+ "enum": ["map", "markdown"],
27
+ "default": "map"
28
+ },
23
29
  "title": {
24
30
  "title": "Segment Title",
25
31
  "type": "string",
@@ -36,7 +42,12 @@
36
42
  "default": ""
37
43
  }
38
44
  },
39
- "default": {}
45
+ "required": ["contentMode"],
46
+ "default": {
47
+ "contentMode": "map",
48
+ "title": "",
49
+ "image": ""
50
+ }
40
51
  },
41
52
  "transition": {
42
53
  "type": "object",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "color": {
13
13
  "type": "object",
14
- "description": "The color of the the object",
14
+ "description": "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.",
15
15
  "default": {}
16
16
  },
17
17
  "opacity": {
@@ -24,17 +24,8 @@
24
24
  },
25
25
  "symbologyState": {
26
26
  "type": "object",
27
- "description": "The state of the symbology panel options",
28
- "required": ["renderType"],
27
+ "description": "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.",
29
28
  "properties": {
30
- "renderType": {
31
- "type": "string",
32
- "enum": ["Single Symbol", "Graduated", "Categorized", "Canonical"],
33
- "default": "Single Symbol"
34
- },
35
- "value": {
36
- "type": "string"
37
- },
38
29
  "method": {
39
30
  "type": "string",
40
31
  "enum": ["color", "radius"],
@@ -48,7 +39,7 @@
48
39
  "type": "number",
49
40
  "default": 9.0
50
41
  },
51
- "reverse": {
42
+ "reverseRamp": {
52
43
  "type": "boolean",
53
44
  "default": false
54
45
  },
@@ -82,14 +73,82 @@
82
73
  "type": "boolean",
83
74
  "description": "Whether the stroke color follows the fill color expression",
84
75
  "default": false
76
+ },
77
+ "fillColor": {
78
+ "type": "array",
79
+ "description": "Manual RGBA fill color. Used for Single Symbol, and as the base fill for Categorized when no stops are defined.",
80
+ "items": { "type": "number" },
81
+ "minItems": 4,
82
+ "maxItems": 4
83
+ },
84
+ "strokeColor": {
85
+ "type": "array",
86
+ "description": "Manual RGBA stroke color",
87
+ "items": { "type": "number" },
88
+ "minItems": 4,
89
+ "maxItems": 4
90
+ },
91
+ "strokeWidth": {
92
+ "type": "number",
93
+ "description": "Stroke width in pixels",
94
+ "default": 1.25
95
+ },
96
+ "radius": {
97
+ "type": "number",
98
+ "description": "Circle radius in pixels for point geometries (Single Symbol, and the base for Graduated radius)",
99
+ "default": 5
100
+ },
101
+ "joinStyle": {
102
+ "type": "string",
103
+ "enum": ["bevel", "round", "miter"],
104
+ "default": "round"
105
+ },
106
+ "capStyle": {
107
+ "type": "string",
108
+ "enum": ["butt", "round", "square"],
109
+ "default": "round"
110
+ },
111
+ "geometryType": {
112
+ "type": "string",
113
+ "enum": ["fill", "circle", "line"],
114
+ "description": "The type of geometry."
115
+ },
116
+ "stopsOverride": {
117
+ "type": "array",
118
+ "description": "User-customized color stops that override the computed classification. Saved only when the user manually edits stop colors in the dialog.",
119
+ "items": {
120
+ "type": "object",
121
+ "properties": {
122
+ "value": {},
123
+ "color": {
124
+ "type": "array",
125
+ "items": { "type": "number" },
126
+ "minItems": 4,
127
+ "maxItems": 4
128
+ }
129
+ }
130
+ }
131
+ },
132
+ "rules": {
133
+ "type": "array",
134
+ "description": "Legacy top-level encoding rules (backward compatibility). New files should use layers.",
135
+ "items": {
136
+ "$ref": "project/symbology.json#/definitions/IEncodingRule"
137
+ }
138
+ },
139
+ "layers": {
140
+ "type": "array",
141
+ "description": "Grammar rendering layers. Each layer is an independent rendering pipeline with optional preprocess transforms and encoding rules.",
142
+ "items": {
143
+ "$ref": "project/symbology.json#/definitions/IGrammarLayer"
144
+ }
85
145
  }
86
146
  },
87
147
  "additionalProperties": false,
88
148
  "default": {
89
- "renderType": "Single Symbol",
90
149
  "method": "color",
91
150
  "colorRamp": "viridis",
92
- "nClasses": "9",
151
+ "nClasses": 9,
93
152
  "mode": "equal interval"
94
153
  }
95
154
  }
@@ -25,17 +25,7 @@
25
25
  "symbologyState": {
26
26
  "type": "object",
27
27
  "description": "The state of the symbology panel options",
28
- "required": ["renderType"],
29
28
  "properties": {
30
- "renderType": {
31
- "type": "string",
32
- "enum": ["Single Symbol", "Graduated", "Categorized", "Canonical"],
33
- "default": "Single Symbol"
34
- },
35
- "value": {
36
- "type": "string",
37
- "default": ""
38
- },
39
29
  "method": {
40
30
  "type": "string",
41
31
  "enum": ["color", "radius"],
@@ -79,6 +69,20 @@
79
69
  "type": "boolean",
80
70
  "description": "Whether the stroke color follows the fill color expression",
81
71
  "default": false
72
+ },
73
+ "rules": {
74
+ "type": "array",
75
+ "description": "Legacy top-level encoding rules (backward compatibility). New files should use layers.",
76
+ "items": {
77
+ "$ref": "project/symbology.json#/definitions/IEncodingRule"
78
+ }
79
+ },
80
+ "layers": {
81
+ "type": "array",
82
+ "description": "Grammar rendering layers. Each layer is an independent rendering pipeline with optional preprocess transforms and encoding rules.",
83
+ "items": {
84
+ "$ref": "project/symbology.json#/definitions/IGrammarLayer"
85
+ }
82
86
  }
83
87
  },
84
88
  "additionalProperties": false,
@@ -13,6 +13,19 @@
13
13
  "type": "object",
14
14
  "description": "The GeoJSON data",
15
15
  "$ref": "./geojson.json"
16
+ },
17
+ "useProxy": {
18
+ "type": "boolean",
19
+ "description": "Route requests through the Jupyter server proxy to avoid CORS issues.",
20
+ "default": false
21
+ },
22
+ "httpHeaders": {
23
+ "type": "string",
24
+ "description": "HTTP headers forwarded to the upstream server when useProxy is true.",
25
+ "default": "",
26
+ "additionalProperties": {
27
+ "type": "string"
28
+ }
16
29
  }
17
30
  }
18
31
  }