@lightdash/common 0.2399.1 → 0.2399.3

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.
@@ -93,116 +93,7 @@
93
93
  "description": "Empty dimensions filter array (no filters applied)",
94
94
  "maxItems": 0
95
95
  },
96
- {
97
- "type": "object",
98
- "description": "Dimension filter group",
99
- "additionalProperties": false,
100
- "properties": {
101
- "id": {
102
- "type": "string",
103
- "description": "Optional unique identifier for the filter group"
104
- },
105
- "and": {
106
- "type": "array",
107
- "description": "Array of filters combined with AND logic",
108
- "items": {
109
- "type": "object",
110
- "additionalProperties": false,
111
- "required": [
112
- "target",
113
- "operator"
114
- ],
115
- "properties": {
116
- "id": {
117
- "type": "string",
118
- "description": "Optional unique identifier for the filter"
119
- },
120
- "target": {
121
- "type": "object",
122
- "additionalProperties": false,
123
- "required": ["fieldId"],
124
- "properties": {
125
- "fieldId": {
126
- "type": "string",
127
- "description": "Field ID to filter on"
128
- },
129
- "fieldFilterType": {
130
- "type": "string",
131
- "description": "Filter type hint (e.g., 'date' for date fields)"
132
- }
133
- }
134
- },
135
- "operator": {
136
- "type": "string",
137
- "description": "Filter operator",
138
- "enum": [
139
- "equals",
140
- "notEquals",
141
- "isNull",
142
- "notNull",
143
- "startsWith",
144
- "endsWith",
145
- "include",
146
- "doesNotInclude",
147
- "lessThan",
148
- "lessThanOrEqual",
149
- "greaterThan",
150
- "greaterThanOrEqual",
151
- "inThePast",
152
- "notInThePast",
153
- "inTheNext",
154
- "inTheCurrent",
155
- "notInTheCurrent",
156
- "inBetween",
157
- "notInBetween"
158
- ]
159
- },
160
- "values": {
161
- "type": "array",
162
- "description": "Values to filter by"
163
- },
164
- "required": {
165
- "type": "boolean",
166
- "description": "Whether this filter is required"
167
- },
168
- "settings": {
169
- "type": "object",
170
- "description": "Additional settings for date/time filters",
171
- "additionalProperties": false,
172
- "properties": {
173
- "unitOfTime": {
174
- "type": "string",
175
- "enum": [
176
- "milliseconds",
177
- "seconds",
178
- "minutes",
179
- "hours",
180
- "days",
181
- "weeks",
182
- "months",
183
- "quarters",
184
- "years"
185
- ],
186
- "description": "Time unit for relative date filters"
187
- },
188
- "completed": {
189
- "type": "boolean",
190
- "description": "For date filters, whether to include completed periods"
191
- }
192
- }
193
- }
194
- }
195
- }
196
- },
197
- "or": {
198
- "type": "array",
199
- "description": "Array of filters combined with OR logic",
200
- "items": {
201
- "$ref": "#/properties/metricQuery/properties/filters/properties/dimensions/oneOf/1/properties/and/items"
202
- }
203
- }
204
- }
205
- }
96
+ { "$ref": "#/$defs/filterGroup" }
206
97
  ]
207
98
  },
208
99
  "metrics": {
@@ -212,23 +103,7 @@
212
103
  "description": "Empty metrics filter array (no filters applied)",
213
104
  "maxItems": 0
214
105
  },
215
- {
216
- "type": "object",
217
- "description": "Metric filter group",
218
- "additionalProperties": false,
219
- "properties": {
220
- "id": {
221
- "type": "string",
222
- "description": "Optional unique identifier for the filter group"
223
- },
224
- "and": {
225
- "$ref": "#/properties/metricQuery/properties/filters/properties/dimensions/oneOf/1/properties/and"
226
- },
227
- "or": {
228
- "$ref": "#/properties/metricQuery/properties/filters/properties/dimensions/oneOf/1/properties/or"
229
- }
230
- }
231
- }
106
+ { "$ref": "#/$defs/filterGroup" }
232
107
  ]
233
108
  },
234
109
  "tableCalculations": {
@@ -238,23 +113,7 @@
238
113
  "description": "Empty table calculations filter array (no filters applied)",
239
114
  "maxItems": 0
240
115
  },
241
- {
242
- "type": "object",
243
- "description": "Table calculation filter group",
244
- "additionalProperties": false,
245
- "properties": {
246
- "id": {
247
- "type": "string",
248
- "description": "Optional unique identifier for the filter group"
249
- },
250
- "and": {
251
- "$ref": "#/properties/metricQuery/properties/filters/properties/dimensions/oneOf/1/properties/and"
252
- },
253
- "or": {
254
- "$ref": "#/properties/metricQuery/properties/filters/properties/dimensions/oneOf/1/properties/or"
255
- }
256
- }
257
- }
116
+ { "$ref": "#/$defs/filterGroup" }
258
117
  ]
259
118
  }
260
119
  }
@@ -274,6 +133,10 @@
274
133
  "descending": {
275
134
  "type": "boolean",
276
135
  "description": "Sort in descending order"
136
+ },
137
+ "nullsFirst": {
138
+ "type": "boolean",
139
+ "description": "Sort null values first"
277
140
  }
278
141
  }
279
142
  }
@@ -615,7 +478,17 @@
615
478
  "sum",
616
479
  "average",
617
480
  "min",
618
- "max"
481
+ "max",
482
+ "percentile",
483
+ "median",
484
+ "number",
485
+ "string",
486
+ "date",
487
+ "timestamp",
488
+ "boolean",
489
+ "percent_of_previous",
490
+ "percent_of_total",
491
+ "running_total"
619
492
  ],
620
493
  "description": "Aggregation type"
621
494
  },
@@ -639,6 +512,34 @@
639
512
  "type": "number",
640
513
  "description": "Display order index"
641
514
  },
515
+ "round": {
516
+ "type": "number",
517
+ "description": "Number of decimal places"
518
+ },
519
+ "format": {
520
+ "type": "string",
521
+ "description": "Format string (legacy format specification)"
522
+ },
523
+ "generationType": {
524
+ "type": "string",
525
+ "description": "Type of generated metric (e.g., 'periodOverPeriod' for time comparison metrics)"
526
+ },
527
+ "baseMetricId": {
528
+ "type": "string",
529
+ "description": "ID of the base metric for generated metrics"
530
+ },
531
+ "timeDimensionId": {
532
+ "type": "string",
533
+ "description": "ID of the time dimension for period-over-period metrics"
534
+ },
535
+ "granularity": {
536
+ "type": "string",
537
+ "description": "Time granularity (e.g., 'MONTH', 'WEEK', 'DAY')"
538
+ },
539
+ "periodOffset": {
540
+ "type": "number",
541
+ "description": "Number of periods to offset for comparison"
542
+ },
642
543
  "filters": {
643
544
  "type": "array",
644
545
  "description": "Filters to apply to this metric",
@@ -791,6 +692,96 @@
791
692
  "items": {
792
693
  "type": "object"
793
694
  }
695
+ },
696
+ "dimensionOverrides": {
697
+ "type": "object",
698
+ "description": "Override formatting and display options for existing dimensions",
699
+ "additionalProperties": {
700
+ "type": "object",
701
+ "additionalProperties": false,
702
+ "properties": {
703
+ "formatOptions": {
704
+ "type": "object",
705
+ "description": "Formatting configuration for the dimension",
706
+ "additionalProperties": false,
707
+ "properties": {
708
+ "type": {
709
+ "type": "string",
710
+ "enum": [
711
+ "default",
712
+ "currency",
713
+ "number",
714
+ "percent"
715
+ ],
716
+ "description": "Format type"
717
+ },
718
+ "round": {
719
+ "type": "number",
720
+ "description": "Number of decimal places"
721
+ },
722
+ "currency": {
723
+ "type": "string",
724
+ "description": "Currency code (e.g., USD, GBP, EUR)"
725
+ },
726
+ "separator": {
727
+ "type": "string",
728
+ "enum": [
729
+ "default",
730
+ "commaPeriod",
731
+ "spacePeriod",
732
+ "periodComma",
733
+ "spaceComma"
734
+ ],
735
+ "description": "Thousands separator style"
736
+ },
737
+ "suffix": {
738
+ "type": "string",
739
+ "description": "Suffix to append to formatted values"
740
+ },
741
+ "prefix": {
742
+ "type": "string",
743
+ "description": "Prefix to prepend to formatted values"
744
+ },
745
+ "compact": {
746
+ "type": "string",
747
+ "enum": [
748
+ "thousands",
749
+ "millions",
750
+ "billions",
751
+ "trillions",
752
+ "kilobytes",
753
+ "megabytes",
754
+ "gigabytes",
755
+ "terabytes",
756
+ "petabytes",
757
+ "kibibytes",
758
+ "mebibytes",
759
+ "gibibytes",
760
+ "tebibytes",
761
+ "pebibytes"
762
+ ],
763
+ "description": "Compact format for large numbers (K, M, B, T) or byte units"
764
+ }
765
+ }
766
+ },
767
+ "label": {
768
+ "type": "string",
769
+ "description": "Custom label for the dimension"
770
+ },
771
+ "description": {
772
+ "type": "string",
773
+ "description": "Custom description for the dimension"
774
+ },
775
+ "uuid": {
776
+ "type": "string",
777
+ "description": "UUID of the dimension override"
778
+ }
779
+ }
780
+ }
781
+ },
782
+ "timezone": {
783
+ "type": "string",
784
+ "description": "Timezone for date/time values (e.g., 'America/Los_Angeles', 'UTC')"
794
785
  }
795
786
  }
796
787
  },
@@ -810,12 +801,14 @@
810
801
  "big_number",
811
802
  "funnel",
812
803
  "treemap",
804
+ "gauge",
805
+ "map",
813
806
  "custom"
814
807
  ]
815
808
  },
816
809
  "config": {
817
810
  "type": ["object", "null"],
818
- "description": "Chart-specific configuration (varies by chart type)"
811
+ "description": "Chart-specific configuration (varies by chart type). See $defs/cartesianChart for cartesian chart structure."
819
812
  }
820
813
  }
821
814
  },
@@ -847,5 +840,1260 @@
847
840
  }
848
841
  }
849
842
  }
843
+ },
844
+ "$defs": {
845
+ "filterGroup": {
846
+ "type": "object",
847
+ "description": "Filter group containing filters combined with AND/OR logic",
848
+ "additionalProperties": false,
849
+ "properties": {
850
+ "id": {
851
+ "type": "string",
852
+ "description": "Optional unique identifier for the filter group"
853
+ },
854
+ "and": {
855
+ "type": "array",
856
+ "description": "Array of filters or nested groups combined with AND logic",
857
+ "items": { "$ref": "#/$defs/filterItem" }
858
+ },
859
+ "or": {
860
+ "type": "array",
861
+ "description": "Array of filters or nested groups combined with OR logic",
862
+ "items": { "$ref": "#/$defs/filterItem" }
863
+ }
864
+ }
865
+ },
866
+ "filterItem": {
867
+ "description": "Either a filter rule or a nested filter group",
868
+ "oneOf": [
869
+ { "$ref": "#/$defs/filterRule" },
870
+ { "$ref": "#/$defs/filterGroup" }
871
+ ]
872
+ },
873
+ "filterRule": {
874
+ "type": "object",
875
+ "description": "A single filter rule",
876
+ "additionalProperties": false,
877
+ "required": ["target", "operator"],
878
+ "properties": {
879
+ "id": {
880
+ "type": "string",
881
+ "description": "Optional unique identifier for the filter"
882
+ },
883
+ "target": {
884
+ "type": "object",
885
+ "additionalProperties": false,
886
+ "required": ["fieldId"],
887
+ "properties": {
888
+ "fieldId": {
889
+ "type": "string",
890
+ "description": "Field ID to filter on"
891
+ },
892
+ "tableName": {
893
+ "type": "string",
894
+ "description": "Table name the field belongs to"
895
+ },
896
+ "type": {
897
+ "type": "string",
898
+ "description": "Field type (e.g., 'string', 'number', 'date')"
899
+ },
900
+ "fieldFilterType": {
901
+ "type": "string",
902
+ "description": "Filter type hint (e.g., 'date' for date fields)"
903
+ }
904
+ }
905
+ },
906
+ "operator": {
907
+ "type": "string",
908
+ "description": "Filter operator",
909
+ "enum": [
910
+ "equals",
911
+ "notEquals",
912
+ "isNull",
913
+ "notNull",
914
+ "startsWith",
915
+ "endsWith",
916
+ "include",
917
+ "doesNotInclude",
918
+ "lessThan",
919
+ "lessThanOrEqual",
920
+ "greaterThan",
921
+ "greaterThanOrEqual",
922
+ "inThePast",
923
+ "notInThePast",
924
+ "inTheNext",
925
+ "inTheCurrent",
926
+ "notInTheCurrent",
927
+ "inBetween",
928
+ "notInBetween"
929
+ ]
930
+ },
931
+ "values": {
932
+ "type": "array",
933
+ "description": "Values to filter by"
934
+ },
935
+ "required": {
936
+ "type": "boolean",
937
+ "description": "Whether this filter is required"
938
+ },
939
+ "settings": {
940
+ "type": "object",
941
+ "description": "Additional settings for date/time filters",
942
+ "additionalProperties": false,
943
+ "properties": {
944
+ "unitOfTime": {
945
+ "type": "string",
946
+ "enum": [
947
+ "milliseconds",
948
+ "seconds",
949
+ "minutes",
950
+ "hours",
951
+ "days",
952
+ "weeks",
953
+ "months",
954
+ "quarters",
955
+ "years"
956
+ ],
957
+ "description": "Time unit for relative date filters"
958
+ },
959
+ "completed": {
960
+ "type": "boolean",
961
+ "description": "For date filters, whether to include completed periods"
962
+ }
963
+ }
964
+ },
965
+ "disabled": {
966
+ "type": "boolean",
967
+ "description": "Whether this filter is disabled"
968
+ },
969
+ "tileTargets": {
970
+ "type": "object",
971
+ "description": "Dashboard tile-specific filter targets (maps tile UUIDs to field IDs)"
972
+ }
973
+ }
974
+ },
975
+ "cartesianChart": {
976
+ "type": ["object", "null"],
977
+ "description": "Configuration for cartesian (line, bar, area, scatter) charts",
978
+ "additionalProperties": false,
979
+ "properties": {
980
+ "layout": {
981
+ "type": "object",
982
+ "description": "Layout configuration for the chart axes and orientation",
983
+ "additionalProperties": false,
984
+ "properties": {
985
+ "xField": {
986
+ "type": "string",
987
+ "description": "Field ID to use for the X axis"
988
+ },
989
+ "yField": {
990
+ "type": "array",
991
+ "description": "Field IDs to use for the Y axis",
992
+ "items": { "type": "string" }
993
+ },
994
+ "flipAxes": {
995
+ "type": "boolean",
996
+ "description": "Swap X and Y axes (creates horizontal bar charts)"
997
+ },
998
+ "showGridX": {
999
+ "type": "boolean",
1000
+ "description": "Show vertical grid lines"
1001
+ },
1002
+ "showGridY": {
1003
+ "type": "boolean",
1004
+ "description": "Show horizontal grid lines"
1005
+ },
1006
+ "showXAxis": {
1007
+ "type": "boolean",
1008
+ "description": "Show the X axis"
1009
+ },
1010
+ "showYAxis": {
1011
+ "type": "boolean",
1012
+ "description": "Show the Y axis"
1013
+ },
1014
+ "stack": {
1015
+ "type": ["boolean", "string"],
1016
+ "description": "Stack series together (true for default stacking, or string for stack group name)"
1017
+ }
1018
+ }
1019
+ },
1020
+ "eChartsConfig": {
1021
+ "type": "object",
1022
+ "description": "ECharts-specific configuration",
1023
+ "additionalProperties": false,
1024
+ "properties": {
1025
+ "legend": { "$ref": "#/$defs/echartsLegend" },
1026
+ "grid": { "$ref": "#/$defs/echartsGrid" },
1027
+ "series": {
1028
+ "type": "array",
1029
+ "description": "Chart series configuration",
1030
+ "items": { "$ref": "#/$defs/series" }
1031
+ },
1032
+ "xAxis": {
1033
+ "type": ["array", "null"],
1034
+ "description": "X axis configuration",
1035
+ "items": { "$ref": "#/$defs/xAxis" }
1036
+ },
1037
+ "yAxis": {
1038
+ "type": ["array", "null"],
1039
+ "description": "Y axis configuration",
1040
+ "items": { "$ref": "#/$defs/axis" }
1041
+ },
1042
+ "tooltip": {
1043
+ "type": "string",
1044
+ "description": "Tooltip formatter template"
1045
+ },
1046
+ "tooltipSort": {
1047
+ "type": "string",
1048
+ "description": "How to sort tooltip items",
1049
+ "enum": [
1050
+ "default",
1051
+ "alphabetical",
1052
+ "value_ascending",
1053
+ "value_descending"
1054
+ ]
1055
+ },
1056
+ "showAxisTicks": {
1057
+ "type": "boolean",
1058
+ "description": "Show tick marks on axes"
1059
+ },
1060
+ "axisLabelFontSize": {
1061
+ "type": "number",
1062
+ "description": "Font size for axis labels"
1063
+ },
1064
+ "axisTitleFontSize": {
1065
+ "type": "number",
1066
+ "description": "Font size for axis titles"
1067
+ }
1068
+ }
1069
+ },
1070
+ "metadata": {
1071
+ "type": "object",
1072
+ "description": "Metadata for series (colors, etc.)",
1073
+ "additionalProperties": {
1074
+ "type": "object",
1075
+ "properties": {
1076
+ "color": { "type": "string" }
1077
+ }
1078
+ }
1079
+ }
1080
+ }
1081
+ },
1082
+ "echartsLegend": {
1083
+ "type": "object",
1084
+ "description": "Legend configuration",
1085
+ "additionalProperties": false,
1086
+ "properties": {
1087
+ "show": {
1088
+ "type": "boolean",
1089
+ "description": "Show the legend"
1090
+ },
1091
+ "type": {
1092
+ "type": "string",
1093
+ "enum": ["plain", "scroll"],
1094
+ "description": "Legend type (plain or scrollable)"
1095
+ },
1096
+ "orient": {
1097
+ "type": "string",
1098
+ "enum": ["horizontal", "vertical"],
1099
+ "description": "Legend orientation"
1100
+ },
1101
+ "top": { "type": "string", "description": "Top position" },
1102
+ "right": { "type": "string", "description": "Right position" },
1103
+ "bottom": {
1104
+ "type": "string",
1105
+ "description": "Bottom position"
1106
+ },
1107
+ "left": { "type": "string", "description": "Left position" },
1108
+ "width": { "type": "string", "description": "Legend width" },
1109
+ "height": { "type": "string", "description": "Legend height" },
1110
+ "align": {
1111
+ "type": "string",
1112
+ "enum": ["auto", "left", "right"],
1113
+ "description": "Legend alignment"
1114
+ },
1115
+ "icon": {
1116
+ "type": "string",
1117
+ "enum": [
1118
+ "circle",
1119
+ "rect",
1120
+ "roundRect",
1121
+ "triangle",
1122
+ "diamond",
1123
+ "pin",
1124
+ "arrow",
1125
+ "none"
1126
+ ],
1127
+ "description": "Legend icon shape"
1128
+ }
1129
+ }
1130
+ },
1131
+ "echartsGrid": {
1132
+ "type": "object",
1133
+ "description": "Grid (chart area) configuration",
1134
+ "additionalProperties": false,
1135
+ "properties": {
1136
+ "containLabel": {
1137
+ "type": "boolean",
1138
+ "description": "Whether the grid area contains axis labels"
1139
+ },
1140
+ "top": { "type": "string", "description": "Top padding" },
1141
+ "right": { "type": "string", "description": "Right padding" },
1142
+ "bottom": { "type": "string", "description": "Bottom padding" },
1143
+ "left": { "type": "string", "description": "Left padding" },
1144
+ "width": { "type": "string", "description": "Grid width" },
1145
+ "height": { "type": "string", "description": "Grid height" }
1146
+ }
1147
+ },
1148
+ "axis": {
1149
+ "type": "object",
1150
+ "description": "Axis configuration",
1151
+ "additionalProperties": false,
1152
+ "properties": {
1153
+ "name": {
1154
+ "type": "string",
1155
+ "description": "Axis title"
1156
+ },
1157
+ "min": {
1158
+ "type": "string",
1159
+ "description": "Minimum value (or 'dataMin' for auto)"
1160
+ },
1161
+ "max": {
1162
+ "type": "string",
1163
+ "description": "Maximum value (or 'dataMax' for auto)"
1164
+ },
1165
+ "minOffset": {
1166
+ "type": "string",
1167
+ "description": "Offset from minimum value"
1168
+ },
1169
+ "maxOffset": {
1170
+ "type": "string",
1171
+ "description": "Offset from maximum value"
1172
+ },
1173
+ "inverse": {
1174
+ "type": "boolean",
1175
+ "description": "Reverse the axis direction"
1176
+ },
1177
+ "rotate": {
1178
+ "type": "number",
1179
+ "description": "Rotation angle for axis labels"
1180
+ }
1181
+ }
1182
+ },
1183
+ "xAxis": {
1184
+ "type": "object",
1185
+ "description": "X axis configuration (extends axis)",
1186
+ "additionalProperties": false,
1187
+ "properties": {
1188
+ "name": { "type": "string", "description": "Axis title" },
1189
+ "min": { "type": "string", "description": "Minimum value" },
1190
+ "max": { "type": "string", "description": "Maximum value" },
1191
+ "minOffset": {
1192
+ "type": "string",
1193
+ "description": "Offset from minimum"
1194
+ },
1195
+ "maxOffset": {
1196
+ "type": "string",
1197
+ "description": "Offset from maximum"
1198
+ },
1199
+ "inverse": {
1200
+ "type": "boolean",
1201
+ "description": "Reverse axis direction"
1202
+ },
1203
+ "rotate": {
1204
+ "type": "number",
1205
+ "description": "Label rotation angle"
1206
+ },
1207
+ "sortType": {
1208
+ "type": "string",
1209
+ "description": "How to sort the X axis",
1210
+ "enum": ["default", "category", "bar_totals"]
1211
+ },
1212
+ "enableDataZoom": {
1213
+ "type": "boolean",
1214
+ "description": "Enable data zoom slider for this axis"
1215
+ }
1216
+ }
1217
+ },
1218
+ "series": {
1219
+ "type": "object",
1220
+ "description": "Chart series configuration",
1221
+ "additionalProperties": false,
1222
+ "required": ["encode", "type"],
1223
+ "properties": {
1224
+ "encode": {
1225
+ "type": "object",
1226
+ "description": "Field references for this series",
1227
+ "additionalProperties": false,
1228
+ "required": ["xRef", "yRef"],
1229
+ "properties": {
1230
+ "xRef": { "$ref": "#/$defs/pivotReference" },
1231
+ "yRef": { "$ref": "#/$defs/pivotReference" },
1232
+ "x": {
1233
+ "type": "string",
1234
+ "description": "Hash of xRef (computed)"
1235
+ },
1236
+ "y": {
1237
+ "type": "string",
1238
+ "description": "Hash of yRef (computed)"
1239
+ }
1240
+ }
1241
+ },
1242
+ "type": {
1243
+ "type": "string",
1244
+ "description": "Series visualization type",
1245
+ "enum": ["line", "bar", "scatter", "area"]
1246
+ },
1247
+ "stack": {
1248
+ "type": "string",
1249
+ "description": "Stack group name (series with same stack name are stacked)"
1250
+ },
1251
+ "stackLabel": {
1252
+ "type": "object",
1253
+ "description": "Stack total label configuration",
1254
+ "additionalProperties": false,
1255
+ "properties": {
1256
+ "show": {
1257
+ "type": "boolean",
1258
+ "description": "Show stack total labels"
1259
+ }
1260
+ }
1261
+ },
1262
+ "name": {
1263
+ "type": "string",
1264
+ "description": "Display name for the series"
1265
+ },
1266
+ "color": {
1267
+ "type": "string",
1268
+ "description": "Color for the series (hex code)"
1269
+ },
1270
+ "yAxisIndex": {
1271
+ "type": "number",
1272
+ "description": "Index of Y axis to use (for dual Y axis charts)"
1273
+ },
1274
+ "label": {
1275
+ "type": "object",
1276
+ "description": "Data label configuration",
1277
+ "additionalProperties": false,
1278
+ "properties": {
1279
+ "show": {
1280
+ "type": "boolean",
1281
+ "description": "Show data labels on points"
1282
+ },
1283
+ "position": {
1284
+ "type": "string",
1285
+ "enum": [
1286
+ "left",
1287
+ "top",
1288
+ "right",
1289
+ "bottom",
1290
+ "inside"
1291
+ ],
1292
+ "description": "Position of data labels"
1293
+ },
1294
+ "showOverlappingLabels": {
1295
+ "type": "boolean",
1296
+ "description": "Show labels even when they overlap"
1297
+ }
1298
+ }
1299
+ },
1300
+ "hidden": {
1301
+ "type": "boolean",
1302
+ "description": "Hide this series from the chart"
1303
+ },
1304
+ "areaStyle": {
1305
+ "type": "object",
1306
+ "description": "Area fill style (presence indicates area chart)"
1307
+ },
1308
+ "showSymbol": {
1309
+ "type": "boolean",
1310
+ "description": "Show symbols/markers on data points"
1311
+ },
1312
+ "smooth": {
1313
+ "type": "boolean",
1314
+ "description": "Use smooth curves for line/area charts"
1315
+ },
1316
+ "markLine": { "$ref": "#/$defs/markLine" },
1317
+ "isFilteredOut": {
1318
+ "type": "boolean",
1319
+ "description": "Whether this series is currently filtered out"
1320
+ }
1321
+ }
1322
+ },
1323
+ "pivotReference": {
1324
+ "type": "object",
1325
+ "description": "Reference to a field, optionally with pivot values",
1326
+ "additionalProperties": false,
1327
+ "required": ["field"],
1328
+ "properties": {
1329
+ "field": {
1330
+ "type": "string",
1331
+ "description": "Field ID being referenced"
1332
+ },
1333
+ "pivotValues": {
1334
+ "type": "array",
1335
+ "description": "Pivot values for this reference (for pivoted data)",
1336
+ "items": {
1337
+ "type": "object",
1338
+ "additionalProperties": false,
1339
+ "required": ["field", "value"],
1340
+ "properties": {
1341
+ "field": {
1342
+ "type": "string",
1343
+ "description": "Pivot field ID"
1344
+ },
1345
+ "value": {
1346
+ "description": "Pivot value"
1347
+ }
1348
+ }
1349
+ }
1350
+ }
1351
+ }
1352
+ },
1353
+ "markLine": {
1354
+ "type": "object",
1355
+ "description": "Reference line configuration",
1356
+ "additionalProperties": false,
1357
+ "properties": {
1358
+ "data": {
1359
+ "type": "array",
1360
+ "description": "Reference line data points",
1361
+ "items": {
1362
+ "type": "object",
1363
+ "additionalProperties": false,
1364
+ "required": ["uuid"],
1365
+ "properties": {
1366
+ "yAxis": {
1367
+ "type": "string",
1368
+ "description": "Y axis value for horizontal line"
1369
+ },
1370
+ "xAxis": {
1371
+ "type": "string",
1372
+ "description": "X axis value for vertical line"
1373
+ },
1374
+ "name": {
1375
+ "type": "string",
1376
+ "description": "Name of the reference line"
1377
+ },
1378
+ "value": {
1379
+ "type": "string",
1380
+ "description": "Value to display"
1381
+ },
1382
+ "type": {
1383
+ "type": "string",
1384
+ "description": "Point type (e.g., 'average')"
1385
+ },
1386
+ "uuid": {
1387
+ "type": "string",
1388
+ "description": "Unique identifier for this mark line"
1389
+ },
1390
+ "lineStyle": {
1391
+ "type": "object",
1392
+ "additionalProperties": false,
1393
+ "properties": {
1394
+ "color": { "type": "string" }
1395
+ }
1396
+ },
1397
+ "label": {
1398
+ "type": "object",
1399
+ "additionalProperties": false,
1400
+ "properties": {
1401
+ "formatter": { "type": "string" },
1402
+ "position": {
1403
+ "type": "string",
1404
+ "enum": ["start", "middle", "end"]
1405
+ }
1406
+ }
1407
+ },
1408
+ "dynamicValue": {
1409
+ "type": "string",
1410
+ "enum": ["average"],
1411
+ "description": "Dynamic value type"
1412
+ }
1413
+ }
1414
+ }
1415
+ },
1416
+ "symbol": {
1417
+ "type": "string",
1418
+ "description": "Symbol at line endpoints"
1419
+ },
1420
+ "lineStyle": {
1421
+ "type": "object",
1422
+ "additionalProperties": false,
1423
+ "properties": {
1424
+ "color": { "type": "string" },
1425
+ "width": { "type": "number" },
1426
+ "type": { "type": "string" }
1427
+ }
1428
+ },
1429
+ "label": {
1430
+ "type": "object",
1431
+ "additionalProperties": false,
1432
+ "properties": {
1433
+ "formatter": { "type": "string" }
1434
+ }
1435
+ }
1436
+ }
1437
+ },
1438
+ "pieChart": {
1439
+ "type": ["object", "null"],
1440
+ "description": "Configuration for pie and donut charts",
1441
+ "additionalProperties": false,
1442
+ "properties": {
1443
+ "groupFieldIds": {
1444
+ "type": "array",
1445
+ "description": "Field IDs used for grouping/slicing the pie",
1446
+ "items": { "type": "string" }
1447
+ },
1448
+ "metricId": {
1449
+ "type": "string",
1450
+ "description": "Field ID of the metric to display"
1451
+ },
1452
+ "isDonut": {
1453
+ "type": "boolean",
1454
+ "description": "Display as donut chart with hole in center"
1455
+ },
1456
+ "valueLabel": {
1457
+ "type": "string",
1458
+ "enum": ["hidden", "inside", "outside"],
1459
+ "description": "Position of value labels on slices"
1460
+ },
1461
+ "showValue": {
1462
+ "type": "boolean",
1463
+ "description": "Show the actual value on slices"
1464
+ },
1465
+ "showPercentage": {
1466
+ "type": "boolean",
1467
+ "description": "Show percentage on slices"
1468
+ },
1469
+ "groupLabelOverrides": {
1470
+ "type": "object",
1471
+ "description": "Custom labels for each group/slice",
1472
+ "additionalProperties": { "type": "string" }
1473
+ },
1474
+ "groupColorOverrides": {
1475
+ "type": "object",
1476
+ "description": "Custom colors for each group/slice",
1477
+ "additionalProperties": { "type": "string" }
1478
+ },
1479
+ "groupValueOptionOverrides": {
1480
+ "type": "object",
1481
+ "description": "Per-slice value display options",
1482
+ "additionalProperties": {
1483
+ "type": "object",
1484
+ "additionalProperties": false,
1485
+ "properties": {
1486
+ "valueLabel": {
1487
+ "type": "string",
1488
+ "enum": ["hidden", "inside", "outside"]
1489
+ },
1490
+ "showValue": { "type": "boolean" },
1491
+ "showPercentage": { "type": "boolean" }
1492
+ }
1493
+ }
1494
+ },
1495
+ "groupSortOverrides": {
1496
+ "type": "array",
1497
+ "description": "Custom sort order for groups/slices",
1498
+ "items": { "type": "string" }
1499
+ },
1500
+ "showLegend": {
1501
+ "type": "boolean",
1502
+ "description": "Show the chart legend"
1503
+ },
1504
+ "legendPosition": {
1505
+ "type": "string",
1506
+ "enum": ["horizontal", "vertical"],
1507
+ "description": "Legend orientation"
1508
+ },
1509
+ "legendMaxItemLength": {
1510
+ "type": "number",
1511
+ "description": "Maximum character length for legend items"
1512
+ },
1513
+ "metadata": {
1514
+ "type": "object",
1515
+ "description": "Metadata for series (colors, etc.)",
1516
+ "additionalProperties": {
1517
+ "type": "object",
1518
+ "properties": {
1519
+ "color": { "type": "string" }
1520
+ }
1521
+ }
1522
+ }
1523
+ }
1524
+ },
1525
+ "funnelChart": {
1526
+ "type": ["object", "null"],
1527
+ "description": "Configuration for funnel charts",
1528
+ "additionalProperties": false,
1529
+ "properties": {
1530
+ "dataInput": {
1531
+ "type": "string",
1532
+ "enum": ["row", "column"],
1533
+ "description": "How data is structured (row-based or column-based)"
1534
+ },
1535
+ "fieldId": {
1536
+ "type": "string",
1537
+ "description": "Field ID to display in funnel"
1538
+ },
1539
+ "metadata": {
1540
+ "type": "object",
1541
+ "description": "Metadata for series (colors, etc.)",
1542
+ "additionalProperties": {
1543
+ "type": "object",
1544
+ "properties": {
1545
+ "color": { "type": "string" }
1546
+ }
1547
+ }
1548
+ },
1549
+ "labelOverrides": {
1550
+ "type": "object",
1551
+ "description": "Custom labels for funnel stages",
1552
+ "additionalProperties": { "type": "string" }
1553
+ },
1554
+ "colorOverrides": {
1555
+ "type": "object",
1556
+ "description": "Custom colors for funnel stages",
1557
+ "additionalProperties": { "type": "string" }
1558
+ },
1559
+ "labels": {
1560
+ "type": "object",
1561
+ "description": "Label display configuration",
1562
+ "additionalProperties": false,
1563
+ "properties": {
1564
+ "position": {
1565
+ "type": "string",
1566
+ "enum": ["inside", "left", "right", "hidden"],
1567
+ "description": "Position of labels"
1568
+ },
1569
+ "showValue": {
1570
+ "type": "boolean",
1571
+ "description": "Show the actual value"
1572
+ },
1573
+ "showPercentage": {
1574
+ "type": "boolean",
1575
+ "description": "Show percentage"
1576
+ }
1577
+ }
1578
+ },
1579
+ "showLegend": {
1580
+ "type": "boolean",
1581
+ "description": "Show the chart legend"
1582
+ },
1583
+ "legendPosition": {
1584
+ "type": "string",
1585
+ "enum": ["horizontal", "vertical"],
1586
+ "description": "Legend orientation"
1587
+ }
1588
+ }
1589
+ },
1590
+ "bigNumber": {
1591
+ "type": ["object", "null"],
1592
+ "description": "Configuration for big number (single value) displays",
1593
+ "additionalProperties": false,
1594
+ "properties": {
1595
+ "label": {
1596
+ "type": "string",
1597
+ "description": "Custom label for the big number"
1598
+ },
1599
+ "selectedField": {
1600
+ "type": "string",
1601
+ "description": "Field ID to display as the big number"
1602
+ },
1603
+ "style": {
1604
+ "type": "string",
1605
+ "enum": [
1606
+ "thousands",
1607
+ "millions",
1608
+ "billions",
1609
+ "trillions",
1610
+ "K",
1611
+ "M",
1612
+ "B",
1613
+ "T"
1614
+ ],
1615
+ "description": "Number formatting style (compact notation)"
1616
+ },
1617
+ "showBigNumberLabel": {
1618
+ "type": "boolean",
1619
+ "description": "Show the label above the number"
1620
+ },
1621
+ "showTableNamesInLabel": {
1622
+ "type": "boolean",
1623
+ "description": "Include table name in the label"
1624
+ },
1625
+ "showComparison": {
1626
+ "type": "boolean",
1627
+ "description": "Show comparison with previous value"
1628
+ },
1629
+ "comparisonFormat": {
1630
+ "type": "string",
1631
+ "enum": ["raw", "percentage"],
1632
+ "description": "Format for comparison value"
1633
+ },
1634
+ "flipColors": {
1635
+ "type": "boolean",
1636
+ "description": "Flip positive/negative colors (red for increase, green for decrease)"
1637
+ },
1638
+ "comparisonLabel": {
1639
+ "type": "string",
1640
+ "description": "Custom label for the comparison value"
1641
+ }
1642
+ }
1643
+ },
1644
+ "gaugeChart": {
1645
+ "type": ["object", "null"],
1646
+ "description": "Configuration for gauge charts",
1647
+ "additionalProperties": false,
1648
+ "properties": {
1649
+ "selectedField": {
1650
+ "type": "string",
1651
+ "description": "Field ID for the gauge value"
1652
+ },
1653
+ "min": {
1654
+ "type": "number",
1655
+ "description": "Minimum value for the gauge"
1656
+ },
1657
+ "max": {
1658
+ "type": "number",
1659
+ "description": "Maximum value for the gauge"
1660
+ },
1661
+ "maxFieldId": {
1662
+ "type": "string",
1663
+ "description": "Field ID to use as the max value"
1664
+ },
1665
+ "showAxisLabels": {
1666
+ "type": "boolean",
1667
+ "description": "Show min/max labels on the gauge"
1668
+ },
1669
+ "sections": {
1670
+ "type": "array",
1671
+ "description": "Color sections/ranges for the gauge",
1672
+ "items": { "$ref": "#/$defs/gaugeSection" }
1673
+ },
1674
+ "customLabel": {
1675
+ "type": "string",
1676
+ "description": "Custom label for the gauge value"
1677
+ },
1678
+ "showPercentage": {
1679
+ "type": "boolean",
1680
+ "description": "Show value as percentage"
1681
+ },
1682
+ "customPercentageLabel": {
1683
+ "type": "string",
1684
+ "description": "Custom label for the percentage display"
1685
+ }
1686
+ }
1687
+ },
1688
+ "gaugeSection": {
1689
+ "type": "object",
1690
+ "description": "A colored section/range in a gauge chart",
1691
+ "additionalProperties": false,
1692
+ "required": ["min", "max", "color"],
1693
+ "properties": {
1694
+ "min": {
1695
+ "type": "number",
1696
+ "description": "Start value for this section"
1697
+ },
1698
+ "max": {
1699
+ "type": "number",
1700
+ "description": "End value for this section"
1701
+ },
1702
+ "minFieldId": {
1703
+ "type": "string",
1704
+ "description": "Field ID to use as min value"
1705
+ },
1706
+ "maxFieldId": {
1707
+ "type": "string",
1708
+ "description": "Field ID to use as max value"
1709
+ },
1710
+ "color": {
1711
+ "type": "string",
1712
+ "description": "Color for this section (hex code)"
1713
+ }
1714
+ }
1715
+ },
1716
+ "treemapChart": {
1717
+ "type": ["object", "null"],
1718
+ "description": "Configuration for treemap charts",
1719
+ "additionalProperties": false,
1720
+ "properties": {
1721
+ "visibleMin": {
1722
+ "type": "number",
1723
+ "description": "Minimum size for visible nodes"
1724
+ },
1725
+ "leafDepth": {
1726
+ "type": "number",
1727
+ "description": "Depth of leaf nodes to display"
1728
+ },
1729
+ "groupFieldIds": {
1730
+ "type": "array",
1731
+ "description": "Field IDs for hierarchical grouping",
1732
+ "items": { "type": "string" }
1733
+ },
1734
+ "sizeMetricId": {
1735
+ "type": "string",
1736
+ "description": "Field ID for node size"
1737
+ },
1738
+ "colorMetricId": {
1739
+ "type": "string",
1740
+ "description": "Field ID for node color value"
1741
+ },
1742
+ "startColor": {
1743
+ "type": "string",
1744
+ "description": "Start color for color gradient (hex code)"
1745
+ },
1746
+ "endColor": {
1747
+ "type": "string",
1748
+ "description": "End color for color gradient (hex code)"
1749
+ },
1750
+ "useDynamicColors": {
1751
+ "type": "boolean",
1752
+ "description": "Use dynamic color scaling based on values"
1753
+ },
1754
+ "startColorThreshold": {
1755
+ "type": "number",
1756
+ "description": "Value threshold for start color"
1757
+ },
1758
+ "endColorThreshold": {
1759
+ "type": "number",
1760
+ "description": "Value threshold for end color"
1761
+ }
1762
+ }
1763
+ },
1764
+ "customVis": {
1765
+ "type": ["object", "null"],
1766
+ "description": "Configuration for custom visualizations",
1767
+ "additionalProperties": false,
1768
+ "properties": {
1769
+ "spec": {
1770
+ "type": "object",
1771
+ "description": "Custom visualization specification (Vega-Lite or other)"
1772
+ }
1773
+ }
1774
+ },
1775
+ "tableChart": {
1776
+ "type": ["object", "null"],
1777
+ "description": "Configuration for table visualizations",
1778
+ "additionalProperties": false,
1779
+ "properties": {
1780
+ "showColumnCalculation": {
1781
+ "type": "boolean",
1782
+ "description": "Show column totals/calculations"
1783
+ },
1784
+ "showRowCalculation": {
1785
+ "type": "boolean",
1786
+ "description": "Show row totals/calculations"
1787
+ },
1788
+ "showTableNames": {
1789
+ "type": "boolean",
1790
+ "description": "Show table names in column headers"
1791
+ },
1792
+ "hideRowNumbers": {
1793
+ "type": "boolean",
1794
+ "description": "Hide row number column"
1795
+ },
1796
+ "showResultsTotal": {
1797
+ "type": "boolean",
1798
+ "description": "Show total results count"
1799
+ },
1800
+ "showSubtotals": {
1801
+ "type": "boolean",
1802
+ "description": "Show subtotal rows"
1803
+ },
1804
+ "metricsAsRows": {
1805
+ "type": "boolean",
1806
+ "description": "Display metrics as rows instead of columns"
1807
+ },
1808
+ "columns": {
1809
+ "type": "object",
1810
+ "description": "Column-specific configuration",
1811
+ "additionalProperties": {
1812
+ "$ref": "#/$defs/columnProperties"
1813
+ }
1814
+ },
1815
+ "conditionalFormattings": {
1816
+ "type": "array",
1817
+ "description": "Conditional formatting rules",
1818
+ "items": { "$ref": "#/$defs/conditionalFormattingConfig" }
1819
+ }
1820
+ }
1821
+ },
1822
+ "columnProperties": {
1823
+ "type": "object",
1824
+ "description": "Configuration for a table column",
1825
+ "additionalProperties": false,
1826
+ "properties": {
1827
+ "visible": {
1828
+ "type": "boolean",
1829
+ "description": "Whether the column is visible"
1830
+ },
1831
+ "name": {
1832
+ "type": "string",
1833
+ "description": "Custom display name for the column"
1834
+ },
1835
+ "frozen": {
1836
+ "type": "boolean",
1837
+ "description": "Freeze the column (stick to left side)"
1838
+ },
1839
+ "displayStyle": {
1840
+ "type": "string",
1841
+ "enum": ["text", "bar"],
1842
+ "description": "How to display the cell value"
1843
+ },
1844
+ "color": {
1845
+ "type": "string",
1846
+ "description": "Color for bar display style (hex code)"
1847
+ }
1848
+ }
1849
+ },
1850
+ "conditionalFormattingConfig": {
1851
+ "type": "object",
1852
+ "description": "Conditional formatting rule configuration",
1853
+ "additionalProperties": false,
1854
+ "properties": {
1855
+ "target": {
1856
+ "type": ["object", "null"],
1857
+ "description": "Target field for the formatting rule",
1858
+ "additionalProperties": false,
1859
+ "properties": {
1860
+ "fieldId": {
1861
+ "type": "string",
1862
+ "description": "Field ID to apply formatting to"
1863
+ }
1864
+ }
1865
+ },
1866
+ "color": {
1867
+ "description": "Color for formatting (string for single color, object for range)",
1868
+ "oneOf": [
1869
+ { "type": "string" },
1870
+ {
1871
+ "type": "object",
1872
+ "additionalProperties": false,
1873
+ "properties": {
1874
+ "start": {
1875
+ "type": "string",
1876
+ "description": "Start color for gradient"
1877
+ },
1878
+ "end": {
1879
+ "type": "string",
1880
+ "description": "End color for gradient"
1881
+ }
1882
+ }
1883
+ }
1884
+ ]
1885
+ },
1886
+ "rules": {
1887
+ "type": "array",
1888
+ "description": "Rules for single-color conditional formatting",
1889
+ "items": { "$ref": "#/$defs/conditionalFormattingRule" }
1890
+ },
1891
+ "rule": {
1892
+ "type": "object",
1893
+ "description": "Rule for color range formatting",
1894
+ "additionalProperties": false,
1895
+ "properties": {
1896
+ "min": {
1897
+ "description": "Minimum value (number or 'auto')"
1898
+ },
1899
+ "max": {
1900
+ "description": "Maximum value (number or 'auto')"
1901
+ }
1902
+ }
1903
+ },
1904
+ "applyTo": {
1905
+ "type": "string",
1906
+ "enum": ["cell", "text"],
1907
+ "description": "Apply formatting to cell background or text"
1908
+ }
1909
+ }
1910
+ },
1911
+ "conditionalFormattingRule": {
1912
+ "type": "object",
1913
+ "description": "A single conditional formatting rule",
1914
+ "additionalProperties": false,
1915
+ "properties": {
1916
+ "id": {
1917
+ "type": "string",
1918
+ "description": "Unique identifier for the rule"
1919
+ },
1920
+ "operator": {
1921
+ "type": "string",
1922
+ "description": "Comparison operator",
1923
+ "enum": [
1924
+ "isNull",
1925
+ "notNull",
1926
+ "equals",
1927
+ "notEquals",
1928
+ "startsWith",
1929
+ "endsWith",
1930
+ "include",
1931
+ "doesNotInclude",
1932
+ "lessThan",
1933
+ "lessThanOrEqual",
1934
+ "greaterThan",
1935
+ "greaterThanOrEqual",
1936
+ "inThePast",
1937
+ "notInThePast",
1938
+ "inTheNext",
1939
+ "inTheCurrent",
1940
+ "notInTheCurrent",
1941
+ "inBetween",
1942
+ "notInBetween"
1943
+ ]
1944
+ },
1945
+ "values": {
1946
+ "type": "array",
1947
+ "description": "Values to compare against"
1948
+ },
1949
+ "compareTarget": {
1950
+ "type": ["object", "null"],
1951
+ "description": "Target field to compare against",
1952
+ "additionalProperties": false,
1953
+ "properties": {
1954
+ "fieldId": {
1955
+ "type": "string",
1956
+ "description": "Field ID to compare against"
1957
+ }
1958
+ }
1959
+ }
1960
+ }
1961
+ },
1962
+ "mapChart": {
1963
+ "type": ["object", "null"],
1964
+ "description": "Configuration for map visualizations",
1965
+ "additionalProperties": false,
1966
+ "properties": {
1967
+ "mapType": {
1968
+ "type": "string",
1969
+ "enum": ["USA", "world", "europe", "custom"],
1970
+ "description": "Type of map to display"
1971
+ },
1972
+ "locationType": {
1973
+ "type": "string",
1974
+ "enum": ["scatter", "area", "heatmap"],
1975
+ "description": "How to display location data"
1976
+ },
1977
+ "tileBackground": {
1978
+ "type": "string",
1979
+ "enum": [
1980
+ "none",
1981
+ "openstreetmap",
1982
+ "light",
1983
+ "dark",
1984
+ "satellite"
1985
+ ],
1986
+ "description": "Map tile background style"
1987
+ },
1988
+ "customGeoJsonUrl": {
1989
+ "type": "string",
1990
+ "description": "URL to custom GeoJSON file"
1991
+ },
1992
+ "geoJsonPropertyKey": {
1993
+ "type": "string",
1994
+ "description": "Property key in GeoJSON to match against data"
1995
+ },
1996
+ "backgroundColor": {
1997
+ "type": "string",
1998
+ "description": "Background color for the map (hex code)"
1999
+ },
2000
+ "noDataColor": {
2001
+ "type": "string",
2002
+ "description": "Color for regions with no data (hex code)"
2003
+ },
2004
+ "latitudeFieldId": {
2005
+ "type": "string",
2006
+ "description": "Field ID for latitude values"
2007
+ },
2008
+ "longitudeFieldId": {
2009
+ "type": "string",
2010
+ "description": "Field ID for longitude values"
2011
+ },
2012
+ "locationFieldId": {
2013
+ "type": "string",
2014
+ "description": "Field ID for location/region names (area maps)"
2015
+ },
2016
+ "valueFieldId": {
2017
+ "type": "string",
2018
+ "description": "Field ID for the value to display"
2019
+ },
2020
+ "sizeFieldId": {
2021
+ "type": "string",
2022
+ "description": "Field ID for bubble size (scatter maps)"
2023
+ },
2024
+ "showLegend": {
2025
+ "type": "boolean",
2026
+ "description": "Show the map legend"
2027
+ },
2028
+ "saveMapExtent": {
2029
+ "type": "boolean",
2030
+ "description": "Save the current map zoom/position"
2031
+ },
2032
+ "colorRange": {
2033
+ "type": "array",
2034
+ "description": "Array of colors for the value gradient",
2035
+ "items": { "type": "string" }
2036
+ },
2037
+ "defaultZoom": {
2038
+ "type": "number",
2039
+ "description": "Default zoom level"
2040
+ },
2041
+ "defaultCenterLat": {
2042
+ "type": "number",
2043
+ "description": "Default center latitude"
2044
+ },
2045
+ "defaultCenterLon": {
2046
+ "type": "number",
2047
+ "description": "Default center longitude"
2048
+ },
2049
+ "minBubbleSize": {
2050
+ "type": "number",
2051
+ "description": "Minimum bubble size for scatter maps"
2052
+ },
2053
+ "maxBubbleSize": {
2054
+ "type": "number",
2055
+ "description": "Maximum bubble size for scatter maps"
2056
+ },
2057
+ "heatmapConfig": {
2058
+ "type": "object",
2059
+ "description": "Configuration for heatmap visualization",
2060
+ "additionalProperties": false,
2061
+ "properties": {
2062
+ "radius": {
2063
+ "type": "number",
2064
+ "description": "Radius of heat points"
2065
+ },
2066
+ "blur": {
2067
+ "type": "number",
2068
+ "description": "Blur amount for heat points"
2069
+ },
2070
+ "opacity": {
2071
+ "type": "number",
2072
+ "description": "Opacity of the heatmap layer"
2073
+ }
2074
+ }
2075
+ },
2076
+ "fieldConfig": {
2077
+ "type": "object",
2078
+ "description": "Field-specific configuration for tooltips",
2079
+ "additionalProperties": { "$ref": "#/$defs/mapFieldConfig" }
2080
+ }
2081
+ }
2082
+ },
2083
+ "mapFieldConfig": {
2084
+ "type": "object",
2085
+ "description": "Configuration for a field in map tooltips",
2086
+ "additionalProperties": false,
2087
+ "properties": {
2088
+ "visible": {
2089
+ "type": "boolean",
2090
+ "description": "Whether to show this field in tooltips"
2091
+ },
2092
+ "label": {
2093
+ "type": "string",
2094
+ "description": "Custom label for the field"
2095
+ }
2096
+ }
2097
+ }
850
2098
  }
851
2099
  }