{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "dataSources": {
      "items": {
        "$ref": "#/$defs/DataSourceType"
      },
      "type": "array"
    },
    "interface": {
      "additionalProperties": false,
      "properties": {
        "cards": {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/TitleCard"
              },
              {
                "$ref": "#/$defs/LegendCard"
              },
              {
                "$ref": "#/$defs/PolygonFilterCard"
              },
              {
                "$ref": "#/$defs/ChartCard"
              },
              {
                "$ref": "#/$defs/BigNumberCard"
              },
              {
                "$ref": "#/$defs/FilterCard"
              },
              {
                "$ref": "#/$defs/TimelineFilterCard"
              },
              {
                "$ref": "#/$defs/DateFilterCard"
              },
              {
                "$ref": "#/$defs/ParameterControlCard"
              }
            ]
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "mapLayers": {
      "items": {
        "$ref": "#/$defs/MapLayer"
      },
      "type": "array"
    },
    "schemaVersion": {
      "type": "string"
    },
    "settings": {
      "additionalProperties": false,
      "properties": {
        "basemap_style": {
          "enum": [
            "light",
            "dark",
            "white",
            "grayscale",
            "black"
          ],
          "type": "string"
        },
        "initialView": {
          "additionalProperties": false,
          "properties": {
            "bearing": {
              "type": "number"
            },
            "latitude": {
              "type": "number"
            },
            "longitude": {
              "type": "number"
            },
            "pitch": {
              "type": "number"
            },
            "zoom": {
              "type": "number"
            }
          },
          "type": "object"
        },
        "parameters": {
          "additionalProperties": {
            "$ref": "#/$defs/Parameter"
          },
          "type": "object"
        },
        "persistFiltersOnSave": {
          "type": "boolean"
        },
        "ui_theme": {
          "enum": [
            "light",
            "dark"
          ],
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "required": [
    "settings"
  ],
  "type": "object",
  "$defs": {
    "ColorPaletteName": {
      "enum": [
        "YlGn",
        "YlGnBu",
        "GnBu",
        "BuGn",
        "PuBuGn",
        "PuBu",
        "BuPu",
        "RdPu",
        "PuRd",
        "OrRd",
        "YlOrRd",
        "YlOrBr",
        "Purples",
        "Blues",
        "Greens",
        "Oranges",
        "Reds",
        "Greys",
        "PuOr",
        "BrBG",
        "PRGn",
        "PiYG",
        "RdBu",
        "RdGy",
        "RdYlBu",
        "Spectral",
        "RdYlGn",
        "Accent",
        "Dark2",
        "Paired",
        "Pastel1",
        "Pastel2",
        "Set1",
        "Set2",
        "Set3",
        "Glasbey",
        "GreenArmytage",
        "Kelly"
      ],
      "type": "string"
    },
    "AggregationType": {
      "enum": [
        "min",
        "max",
        "sum",
        "avg",
        "count",
        "count_distinct",
        "median"
      ],
      "type": "string"
    },
    "ArcLayer": {
      "additionalProperties": false,
      "properties": {
        "colorScheme": {
          "$ref": "#/$defs/ColorSchemeConfig"
        },
        "dataSourceId": {
          "type": "string"
        },
        "destinationLatitudeFieldId": {
          "type": "string"
        },
        "destinationLongitudeFieldId": {
          "type": "string"
        },
        "enableTooltips": {
          "type": "boolean"
        },
        "id": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "layerType": {
          "const": "ArcLayer",
          "type": "string"
        },
        "opacity": {
          "type": "number"
        },
        "originLatitudeFieldId": {
          "type": "string"
        },
        "originLongitudeFieldId": {
          "type": "string"
        },
        "size": {
          "$ref": "#/$defs/SizeConfig"
        },
        "tooltipFieldMetricFormatMap": {
          "additionalProperties": {
            "$ref": "#/$defs/MetricDisplayFormat"
          },
          "type": "object"
        },
        "tooltipFieldsIds": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "visible": {
          "type": "boolean"
        },
        "visibleZoomRange": {
          "items": {
            "type": "number"
          },
          "maxItems": 2,
          "minItems": 2,
          "type": "array"
        },
        "visibleZoomRangeEnabled": {
          "type": "boolean"
        }
      },
      "required": [
        "colorScheme",
        "dataSourceId",
        "destinationLatitudeFieldId",
        "destinationLongitudeFieldId",
        "enableTooltips",
        "id",
        "label",
        "layerType",
        "originLatitudeFieldId",
        "originLongitudeFieldId",
        "size"
      ],
      "type": "object"
    },
    "BigNumberCard": {
      "additionalProperties": false,
      "properties": {
        "aggregationType": {
          "$ref": "#/$defs/AggregationType"
        },
        "cardType": {
          "const": "BigNumberCard",
          "type": "string"
        },
        "dataSourceId": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "measureFieldId": {
          "type": "string"
        },
        "metricDisplayFormat": {
          "$ref": "#/$defs/MetricDisplayFormat"
        },
        "subtitle": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "cardType",
        "measureFieldId",
        "dataSourceId",
        "aggregationType",
        "interfacePosition"
      ],
      "type": "object"
    },
    "CategoricalColorConfig": {
      "additionalProperties": false,
      "properties": {
        "categorical": {
          "const": true,
          "type": "boolean"
        },
        "colorFieldId": {
          "type": "string"
        },
        "customColorMapping": {
          "$ref": "#/$defs/CustomColorMapping"
        },
        "isStatic": {
          "const": false,
          "type": "boolean"
        },
        "scheme": {
          "$ref": "#/$defs/ColorPaletteName"
        }
      },
      "required": [
        "isStatic",
        "categorical",
        "colorFieldId",
        "scheme",
        "customColorMapping"
      ],
      "type": "object"
    },
    "CategoricalMultiFilterCard": {
      "additionalProperties": false,
      "properties": {
        "allowMultipleSelections": {
          "const": true,
          "type": "boolean"
        },
        "applyToLayers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "cardType": {
          "const": "FilterCard",
          "type": "string"
        },
        "categorical": {
          "const": true,
          "type": "boolean"
        },
        "currentValue": {
          "$ref": "#/$defs/CategoricalMultiFilterValue"
        },
        "dataSourceId": {
          "type": "string"
        },
        "filterType": {
          "enum": [
            "dropdown",
            "radio",
            "toggle"
          ],
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "measureFieldId": {
          "type": "string"
        },
        "subtitle": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "allowMultipleSelections",
        "applyToLayers",
        "cardType",
        "categorical",
        "currentValue",
        "dataSourceId",
        "filterType",
        "id",
        "interfacePosition",
        "measureFieldId"
      ],
      "type": "object"
    },
    "CategoricalMultiFilterValue": {
      "anyOf": [
        {
          "items": {
            "type": [
              "string",
              "boolean"
            ]
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ]
    },
    "CategoricalSingleFilterCard": {
      "additionalProperties": false,
      "properties": {
        "allowMultipleSelections": {
          "const": false,
          "type": "boolean"
        },
        "applyToLayers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "cardType": {
          "const": "FilterCard",
          "type": "string"
        },
        "categorical": {
          "const": true,
          "type": "boolean"
        },
        "currentValue": {
          "$ref": "#/$defs/CategoricalSingleFilterValue"
        },
        "dataSourceId": {
          "type": "string"
        },
        "filterType": {
          "enum": [
            "dropdown",
            "radio",
            "toggle"
          ],
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "measureFieldId": {
          "type": "string"
        },
        "subtitle": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "allowMultipleSelections",
        "applyToLayers",
        "cardType",
        "categorical",
        "currentValue",
        "dataSourceId",
        "filterType",
        "id",
        "interfacePosition",
        "measureFieldId"
      ],
      "type": "object"
    },
    "CategoricalSingleFilterValue": {
      "type": [
        "string",
        "boolean",
        "null"
      ]
    },
    "ChartCard": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": false,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "horizontalBar",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/CategoricalSingleFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": true,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "horizontalBar",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/CategoricalMultiFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "horizontalBar",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": false,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "cardType",
            "chartType",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": false,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "verticalBar",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/CategoricalSingleFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": true,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "verticalBar",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/CategoricalMultiFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "verticalBar",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": false,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "cardType",
            "chartType",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": false,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "line",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/RangeSliderFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "seriesField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "xField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "yField": {
              "$ref": "#/$defs/QuantitativeField"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "title",
            "xField",
            "yField"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": false,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "line",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/CategoricalSingleFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "seriesField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "xField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "yField": {
              "$ref": "#/$defs/QuantitativeField"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "title",
            "xField",
            "yField"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": true,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "line",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/CategoricalMultiFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "seriesField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "xField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "yField": {
              "$ref": "#/$defs/QuantitativeField"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "title",
            "xField",
            "yField"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "line",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": false,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "seriesField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "xField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "yField": {
              "$ref": "#/$defs/QuantitativeField"
            }
          },
          "required": [
            "cardType",
            "chartType",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "title",
            "xField",
            "yField"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": false,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "pie",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/CategoricalSingleFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": true,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "pie",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/CategoricalMultiFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "pie",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": false,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "cardType",
            "chartType",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": false,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "treemap",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/CategoricalSingleFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": true,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "treemap",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/CategoricalMultiFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "treemap",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": false,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "qualitativeField": {
              "$ref": "#/$defs/QualitativeField"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "sort": {
              "$ref": "#/$defs/SortConfig"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "cardType",
            "chartType",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "qualitativeField",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowMultipleSelections": {
              "const": false,
              "type": "boolean"
            },
            "applyToLayers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "histogram",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "currentValue": {
              "$ref": "#/$defs/RangeSliderFilterValue"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": true,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "numberOfBins": {
              "type": "number"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "xAxisLabel": {
              "type": "string"
            },
            "xScaleRange": {
              "$ref": "#/$defs/ScaleRange"
            },
            "yAxisLabel": {
              "type": "string"
            },
            "yScaleRange": {
              "$ref": "#/$defs/ScaleRange"
            },
            "yScaleType": {
              "$ref": "#/$defs/YScaleType"
            }
          },
          "required": [
            "allowMultipleSelections",
            "applyToLayers",
            "cardType",
            "chartType",
            "currentValue",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "cardType": {
              "const": "ChartCard",
              "type": "string"
            },
            "chartType": {
              "const": "histogram",
              "type": "string"
            },
            "color": {
              "$ref": "#/$defs/ColorSchemeConfig"
            },
            "dataSourceId": {
              "type": "string"
            },
            "functionAsFilter": {
              "const": false,
              "type": "boolean"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "numberOfBins": {
              "type": "number"
            },
            "quantitativeField": {
              "$ref": "#/$defs/QuantitativeField"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "xAxisLabel": {
              "type": "string"
            },
            "xScaleRange": {
              "$ref": "#/$defs/ScaleRange"
            },
            "yAxisLabel": {
              "type": "string"
            },
            "yScaleRange": {
              "$ref": "#/$defs/ScaleRange"
            },
            "yScaleType": {
              "$ref": "#/$defs/YScaleType"
            }
          },
          "required": [
            "cardType",
            "chartType",
            "dataSourceId",
            "functionAsFilter",
            "id",
            "interfacePosition",
            "quantitativeField",
            "title"
          ],
          "type": "object"
        }
      ]
    },
    "ColorRange": {
      "additionalProperties": false,
      "description": "Represents a color range with start inclusive and end exclusive [start, end)",
      "properties": {
        "color": {
          "description": "Hex color code for this range (e.g., \"#FF0000\")",
          "type": "string"
        },
        "end": {
          "description": "End of the range (exclusive)",
          "type": "number"
        },
        "start": {
          "description": "Start of the range (inclusive)",
          "type": "number"
        }
      },
      "required": [
        "start",
        "end",
        "color"
      ],
      "type": "object"
    },
    "ColorSchemeConfig": {
      "anyOf": [
        {
          "$ref": "#/$defs/StaticColorConfig"
        },
        {
          "$ref": "#/$defs/DynamicColorConfig"
        }
      ]
    },
    "ContinuousColorConfig": {
      "additionalProperties": false,
      "properties": {
        "categorical": {
          "const": false,
          "type": "boolean"
        },
        "colorFieldId": {
          "type": "string"
        },
        "interpolationType": {
          "enum": [
            "value",
            "quantile"
          ],
          "type": "string"
        },
        "isStatic": {
          "const": false,
          "type": "boolean"
        },
        "metricDisplayFormat": {
          "$ref": "#/$defs/MetricDisplayFormat"
        },
        "reversed": {
          "type": "boolean"
        },
        "scheme": {
          "$ref": "#/$defs/ColorPaletteName"
        },
        "steps": {
          "type": "number"
        }
      },
      "required": [
        "categorical",
        "colorFieldId",
        "interpolationType",
        "isStatic",
        "reversed",
        "scheme",
        "steps"
      ],
      "type": "object"
    },
    "CustomColorMapping": {
      "additionalProperties": {
        "type": "string"
      },
      "type": "object"
    },
    "CustomDiscreteColorConfig": {
      "additionalProperties": false,
      "properties": {
        "categorical": {
          "const": false,
          "type": "boolean"
        },
        "colorFieldId": {
          "type": "string"
        },
        "customDiscreteColorScale": {
          "$ref": "#/$defs/DiscreteColorScale"
        },
        "interpolationType": {
          "const": "custom_discrete",
          "type": "string"
        },
        "isStatic": {
          "const": false,
          "type": "boolean"
        },
        "metricDisplayFormat": {
          "$ref": "#/$defs/MetricDisplayFormat"
        },
        "reversed": {
          "type": "boolean"
        },
        "scheme": {
          "$ref": "#/$defs/ColorPaletteName"
        }
      },
      "required": [
        "categorical",
        "colorFieldId",
        "customDiscreteColorScale",
        "interpolationType",
        "isStatic",
        "reversed",
        "scheme"
      ],
      "type": "object"
    },
    "DataSourceType": {
      "anyOf": [
        {
          "$ref": "#/$defs/LocalFileDataSource"
        },
        {
          "$ref": "#/$defs/SnowflakeNativeAppDataSource"
        },
        {
          "$ref": "#/$defs/HoneycombHostedDataSource"
        }
      ]
    },
    "DateFilterCard": {
      "additionalProperties": false,
      "properties": {
        "applyToLayers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "cardType": {
          "const": "DateFilterCard",
          "type": "string"
        },
        "dataSourceId": {
          "type": "string"
        },
        "dateFieldId": {
          "type": "string"
        },
        "endDate": {
          "type": ["string", "null"]
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "startDate": {
          "type": ["string", "null"]
        },
        "subtitle": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "dataSourceId",
        "dateFieldId",
        "interfacePosition",
        "cardType",
        "applyToLayers"
      ],
      "type": "object"
    },
    "DiscreteColorScale": {
      "additionalProperties": false,
      "description": "Configuration for a color scale with discrete ranges",
      "properties": {
        "defaultColor": {
          "description": "Color to use for values not covered by any range",
          "type": "string"
        },
        "ranges": {
          "description": "Array of color ranges [start, end)",
          "items": {
            "$ref": "#/$defs/ColorRange"
          },
          "type": "array"
        }
      },
      "required": [
        "ranges",
        "defaultColor"
      ],
      "type": "object"
    },
    "DuckDBFieldType": {
      "type": "string",
      "anyOf": [
        {
          "enum": [
            "TINYINT",
            "INT1",
            "SMALLINT",
            "INT2",
            "SHORT",
            "INTEGER",
            "INT4",
            "INT",
            "SIGNED",
            "BIGINT",
            "INT8",
            "LONG",
            "HUGEINT",
            "UTINYINT",
            "USMALLINT",
            "UINTEGER",
            "UBIGINT",
            "UHUGEINT",
            "FLOAT",
            "FLOAT4",
            "REAL",
            "DOUBLE",
            "FLOAT8",
            "DECIMAL",
            "NUMERIC",
            "VARCHAR",
            "CHAR",
            "BPCHAR",
            "TEXT",
            "STRING",
            "BLOB",
            "BYTEA",
            "BINARY",
            "VARBINARY",
            "BIT",
            "BITSTRING",
            "DATE",
            "TIME",
            "TIME WITHOUT TIME ZONE",
            "TIMETZ",
            "TIME WITH TIME ZONE",
            "TIME_NS",
            "TIMESTAMP",
            "DATETIME",
            "TIMESTAMP WITHOUT TIME ZONE",
            "TIMESTAMP_NS",
            "TIMESTAMP_MS",
            "TIMESTAMP_S",
            "TIMESTAMPTZ",
            "TIMESTAMP WITH TIME ZONE",
            "INTERVAL",
            "BOOLEAN",
            "BOOL",
            "LOGICAL",
            "UUID",
            "JSON",
            "BIGNUM",
            "GEOMETRY",
            "GEOGRAPHY"
          ]
        },
        {
          "description": "Parameterized DuckDB fixed-precision types, e.g. DECIMAL(38,0) or NUMERIC(10, 2). Handled at runtime by isNumericType in src/utils/misc.ts.",
          "pattern": "^(DECIMAL|NUMERIC)\\s*\\(\\s*\\d+\\s*,\\s*\\d+\\s*\\)$"
        },
        {
          "description": "Parameterized DuckDB text/binary types, e.g. VARCHAR(255) or CHAR(10).",
          "pattern": "^(VARCHAR|CHAR|BPCHAR|TEXT|STRING|BLOB|BYTEA|BINARY|VARBINARY|BIT|BITSTRING)\\s*\\(\\s*\\d+\\s*\\)$"
        },
        {
          "description": "Parameterized DuckDB temporal types with precision, e.g. TIMESTAMP(3) or TIME(6). Handled at runtime by isTimestampType in src/utils/misc.ts.",
          "pattern": "^(TIMESTAMP|TIME|TIMETZ|TIMESTAMPTZ)\\s*\\(\\s*\\d+\\s*\\)$"
        }
      ]
    },
    "DynamicColorConfig": {
      "anyOf": [
        {
          "$ref": "#/$defs/CategoricalColorConfig"
        },
        {
          "$ref": "#/$defs/QuantitativeColorConfig"
        }
      ]
    },
    "DynamicSizeConfig": {
      "anyOf": [
        {
          "$ref": "#/$defs/CategoricalSizeConfig"
        },
        {
          "$ref": "#/$defs/ContinuousSizeConfig"
        },
        {
          "$ref": "#/$defs/CustomDiscreteSizeConfig"
        }
      ]
    },
    "Field": {
      "additionalProperties": false,
      "properties": {
        "colname": {
          "type": "string"
        },
        "geographicType": {
          "enum": [
            "h3",
            "lat",
            "lon",
            "polygon",
            "none"
          ],
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "type": {
          "$ref": "#/$defs/DuckDBFieldType"
        }
      },
      "required": [
        "colname",
        "type",
        "label",
        "id"
      ],
      "type": "object"
    },
    "FileDataSourceStatus": {
      "additionalProperties": false,
      "properties": {
        "error": {
          "type": [
            "string",
            "null"
          ]
        },
        "loading_finished_at": {
          "type": [
            "string",
            "null"
          ]
        },
        "loading_started_at": {
          "type": [
            "string",
            "null"
          ]
        },
        "progress": {
          "type": "number"
        },
        "state": {
          "enum": [
            "not_loaded",
            "loading",
            "loaded",
            "error",
            "waiting",
            "remove",
            "not_loaded_saved_map"
          ],
          "type": "string"
        }
      },
      "required": [
        "state"
      ],
      "type": "object"
    },
    "FilterCard": {
      "anyOf": [
        {
          "$ref": "#/$defs/CategoricalSingleFilterCard"
        },
        {
          "$ref": "#/$defs/CategoricalMultiFilterCard"
        },
        {
          "$ref": "#/$defs/SingleSliderFilterCard"
        },
        {
          "$ref": "#/$defs/RangeSliderFilterCard"
        },
        {
          "$ref": "#/$defs/TextSingleFilterCard"
        },
        {
          "$ref": "#/$defs/TextMultiFilterCard"
        }
      ]
    },
    "GeoJSON.Feature": {
      "additionalProperties": false,
      "properties": {
        "geometry": {
          "$ref": "#/$defs/GeoJSON.Geometry"
        },
        "properties": {
          "anyOf": [
            {
              "additionalProperties": {},
              "type": "object"
            },
            {
              "type": "null"
            }
          ]
        },
        "type": {
          "const": "Feature",
          "type": "string"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    },
    "GeoJSON.FeatureCollection": {
      "additionalProperties": false,
      "properties": {
        "features": {
          "items": {
            "$ref": "#/$defs/GeoJSON.Feature"
          },
          "type": "array"
        },
        "type": {
          "const": "FeatureCollection",
          "type": "string"
        }
      },
      "required": [
        "type",
        "features"
      ],
      "type": "object"
    },
    "GeoJSON.Geometry": {
      "anyOf": [
        {
          "$ref": "#/$defs/GeoJSON.Point"
        },
        {
          "$ref": "#/$defs/GeoJSON.MultiPoint"
        },
        {
          "$ref": "#/$defs/GeoJSON.LineString"
        },
        {
          "$ref": "#/$defs/GeoJSON.MultiLineString"
        },
        {
          "$ref": "#/$defs/GeoJSON.Polygon"
        },
        {
          "$ref": "#/$defs/GeoJSON.MultiPolygon"
        },
        {
          "$ref": "#/$defs/GeoJSON.GeometryCollection"
        }
      ]
    },
    "GeoJSON.GeometryCollection": {
      "additionalProperties": false,
      "properties": {
        "geometries": {
          "items": {
            "$ref": "#/$defs/GeoJSON.Geometry"
          },
          "type": "array"
        },
        "type": {
          "const": "GeometryCollection",
          "type": "string"
        }
      },
      "required": [
        "type",
        "geometries"
      ],
      "type": "object"
    },
    "GeoJSON.LineString": {
      "additionalProperties": false,
      "properties": {
        "coordinates": {
          "items": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "maxItems": 2,
                "minItems": 2,
                "type": "array"
              },
              {
                "items": {
                  "type": "number"
                },
                "maxItems": 3,
                "minItems": 3,
                "type": "array"
              }
            ]
          },
          "type": "array"
        },
        "type": {
          "const": "LineString",
          "type": "string"
        }
      },
      "required": [
        "type",
        "coordinates"
      ],
      "type": "object"
    },
    "GeoJSON.MultiLineString": {
      "additionalProperties": false,
      "properties": {
        "coordinates": {
          "items": {
            "items": {
              "anyOf": [
                {
                  "items": {
                    "type": "number"
                  },
                  "maxItems": 2,
                  "minItems": 2,
                  "type": "array"
                },
                {
                  "items": {
                    "type": "number"
                  },
                  "maxItems": 3,
                  "minItems": 3,
                  "type": "array"
                }
              ]
            },
            "type": "array"
          },
          "type": "array"
        },
        "type": {
          "const": "MultiLineString",
          "type": "string"
        }
      },
      "required": [
        "type",
        "coordinates"
      ],
      "type": "object"
    },
    "GeoJSON.MultiPoint": {
      "additionalProperties": false,
      "properties": {
        "coordinates": {
          "items": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "maxItems": 2,
                "minItems": 2,
                "type": "array"
              },
              {
                "items": {
                  "type": "number"
                },
                "maxItems": 3,
                "minItems": 3,
                "type": "array"
              }
            ]
          },
          "type": "array"
        },
        "type": {
          "const": "MultiPoint",
          "type": "string"
        }
      },
      "required": [
        "type",
        "coordinates"
      ],
      "type": "object"
    },
    "GeoJSON.MultiPolygon": {
      "additionalProperties": false,
      "properties": {
        "coordinates": {
          "items": {
            "items": {
              "items": {
                "anyOf": [
                  {
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  {
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 3,
                    "minItems": 3,
                    "type": "array"
                  }
                ]
              },
              "type": "array"
            },
            "type": "array"
          },
          "type": "array"
        },
        "type": {
          "const": "MultiPolygon",
          "type": "string"
        }
      },
      "required": [
        "type",
        "coordinates"
      ],
      "type": "object"
    },
    "GeoJSON.Point": {
      "additionalProperties": false,
      "properties": {
        "coordinates": {
          "anyOf": [
            {
              "items": {
                "type": "number"
              },
              "maxItems": 2,
              "minItems": 2,
              "type": "array"
            },
            {
              "items": {
                "type": "number"
              },
              "maxItems": 3,
              "minItems": 3,
              "type": "array"
            }
          ]
        },
        "type": {
          "const": "Point",
          "type": "string"
        }
      },
      "required": [
        "type",
        "coordinates"
      ],
      "type": "object"
    },
    "GeoJSON.Polygon": {
      "additionalProperties": false,
      "properties": {
        "coordinates": {
          "items": {
            "items": {
              "anyOf": [
                {
                  "items": {
                    "type": "number"
                  },
                  "maxItems": 2,
                  "minItems": 2,
                  "type": "array"
                },
                {
                  "items": {
                    "type": "number"
                  },
                  "maxItems": 3,
                  "minItems": 3,
                  "type": "array"
                }
              ]
            },
            "type": "array"
          },
          "type": "array"
        },
        "type": {
          "const": "Polygon",
          "type": "string"
        }
      },
      "required": [
        "type",
        "coordinates"
      ],
      "type": "object"
    },
    "H3PredicateValue": {
      "additionalProperties": false,
      "properties": {
        "geometryType": {
          "const": "h3",
          "type": "string"
        },
        "h3FieldId": {
          "type": "string"
        },
        "maxH3Resolution": {
          "type": "number"
        }
      },
      "required": [
        "geometryType",
        "h3FieldId",
        "maxH3Resolution"
      ],
      "type": "object"
    },
    "HoneycombHostedDataSource": {
      "additionalProperties": false,
      "properties": {
        "fields": {
          "items": {
            "$ref": "#/$defs/Field"
          },
          "type": "array"
        },
        "hostedDataSourceId": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "locationType": {
          "const": "honeycomb_hosted",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "status": {
          "$ref": "#/$defs/FileDataSourceStatus"
        }
      },
      "required": [
        "fields",
        "hostedDataSourceId",
        "id",
        "locationType",
        "name"
      ],
      "type": "object"
    },
    "HoneycombLayer": {
      "additionalProperties": false,
      "properties": {
        "aggregationType": {
          "$ref": "#/$defs/AggregationType"
        },
        "colorScheme": {
          "$ref": "#/$defs/ColorSchemeConfig"
        },
        "dataSourceId": {
          "type": "string"
        },
        "enableTooltips": {
          "type": "boolean"
        },
        "h3Field": {
          "type": "string"
        },
        "h3FixedResolution": {
          "type": "number"
        },
        "h3ResolutionType": {
          "enum": [
            "auto",
            "native",
            "fixed"
          ],
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "layerType": {
          "const": "HoneycombLayer",
          "type": "string"
        },
        "maxH3Resolution": {
          "type": "number"
        },
        "measureField": {
          "type": "string"
        },
        "opacity": {
          "type": "number"
        },
        "tooltipFieldAggregationMap": {
          "additionalProperties": {
            "$ref": "#/$defs/AggregationType"
          },
          "type": "object"
        },
        "tooltipFieldMetricFormatMap": {
          "additionalProperties": {
            "$ref": "#/$defs/MetricDisplayFormat"
          },
          "type": "object"
        },
        "tooltipFieldsIds": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "visible": {
          "type": "boolean"
        },
        "visibleZoomRange": {
          "items": {
            "type": "number"
          },
          "maxItems": 2,
          "minItems": 2,
          "type": "array"
        },
        "visibleZoomRangeEnabled": {
          "type": "boolean"
        }
      },
      "required": [
        "aggregationType",
        "colorScheme",
        "dataSourceId",
        "enableTooltips",
        "h3Field",
        "h3ResolutionType",
        "id",
        "label",
        "layerType",
        "maxH3Resolution",
        "measureField"
      ],
      "type": "object"
    },
    "LatLonPredicateValue": {
      "additionalProperties": false,
      "properties": {
        "geometryType": {
          "const": "latlon",
          "type": "string"
        },
        "latitudeFieldId": {
          "type": "string"
        },
        "longitudeFieldId": {
          "type": "string"
        }
      },
      "required": [
        "geometryType",
        "latitudeFieldId",
        "longitudeFieldId"
      ],
      "type": "object"
    },
    "LegendCard": {
      "additionalProperties": false,
      "properties": {
        "cardType": {
          "const": "LegendCard",
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "isCollapsed": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "id",
        "cardType",
        "interfacePosition"
      ],
      "type": "object"
    },
    "LineLayer": {
      "additionalProperties": false,
      "properties": {
        "colorScheme": {
          "$ref": "#/$defs/ColorSchemeConfig"
        },
        "dataSourceId": {
          "type": "string"
        },
        "enableTooltips": {
          "type": "boolean"
        },
        "id": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "layerType": {
          "const": "LineLayer",
          "type": "string"
        },
        "lineField": {
          "type": "string"
        },
        "opacity": {
          "type": "number"
        },
        "size": {
          "$ref": "#/$defs/SizeConfig"
        },
        "tooltipFieldMetricFormatMap": {
          "additionalProperties": {
            "$ref": "#/$defs/MetricDisplayFormat"
          },
          "type": "object"
        },
        "tooltipFieldsIds": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "visible": {
          "type": "boolean"
        },
        "visibleZoomRange": {
          "items": {
            "type": "number"
          },
          "maxItems": 2,
          "minItems": 2,
          "type": "array"
        },
        "visibleZoomRangeEnabled": {
          "type": "boolean"
        }
      },
      "required": [
        "colorScheme",
        "dataSourceId",
        "enableTooltips",
        "id",
        "label",
        "layerType",
        "lineField",
        "size"
      ],
      "type": "object"
    },
    "LocalFileDataSource": {
      "additionalProperties": false,
      "properties": {
        "fields": {
          "items": {
            "$ref": "#/$defs/Field"
          },
          "type": "array"
        },
        "id": {
          "type": "string"
        },
        "location": {
          "type": [
            "string",
            "null"
          ]
        },
        "locationType": {
          "const": "local_file",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "status": {
          "$ref": "#/$defs/FileDataSourceStatus"
        },
        "type": {
          "enum": [
            "csv",
            "geojson",
            "parquet",
            "kml"
          ],
          "type": "string"
        }
      },
      "required": [
        "fields",
        "id",
        "location",
        "locationType",
        "name",
        "type"
      ],
      "type": "object"
    },
    "MapLayer": {
      "anyOf": [
        {
          "$ref": "#/$defs/PointLayer"
        },
        {
          "$ref": "#/$defs/PolygonLayer"
        },
        {
          "$ref": "#/$defs/HoneycombLayer"
        },
        {
          "$ref": "#/$defs/LineLayer"
        },
        {
          "$ref": "#/$defs/ArcLayer"
        }
      ]
    },
    "MetricDisplayFormat": {
      "additionalProperties": false,
      "properties": {
        "format": {
          "$ref": "#/$defs/MetricFormat"
        },
        "unit": {
          "$ref": "#/$defs/UnitFormat"
        }
      },
      "required": [
        "format"
      ],
      "type": "object"
    },
    "MetricFormat": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "type": {
              "const": "auto",
              "type": "string"
            }
          },
          "required": [
            "type"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "decimalPlaces": {
              "type": "number"
            },
            "showSign": {
              "enum": [
                "auto",
                "always",
                "parentheses"
              ],
              "type": "string"
            },
            "type": {
              "const": "number",
              "type": "string"
            },
            "useThousandsSeparator": {
              "type": "boolean"
            }
          },
          "required": [
            "type"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "decimalPlaces": {
              "type": "number"
            },
            "multiplyBy100": {
              "type": "boolean"
            },
            "type": {
              "const": "percent",
              "type": "string"
            }
          },
          "required": [
            "type"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "decimalPlaces": {
              "type": "number"
            },
            "negativeStyle": {
              "enum": [
                "minus",
                "parentheses"
              ],
              "type": "string"
            },
            "symbol": {
              "type": "string"
            },
            "symbolPosition": {
              "enum": [
                "prefix",
                "suffix"
              ],
              "type": "string"
            },
            "type": {
              "const": "currency",
              "type": "string"
            },
            "useThousandsSeparator": {
              "type": "boolean"
            }
          },
          "required": [
            "type"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "customFormat": {
              "type": "string"
            },
            "dateStyle": {
              "enum": [
                "short",
                "medium",
                "long",
                "full"
              ],
              "type": "string"
            },
            "timeStyle": {
              "enum": [
                "short",
                "medium",
                "long",
                "full",
                "none"
              ],
              "type": "string"
            },
            "type": {
              "const": "datetime",
              "type": "string"
            }
          },
          "required": [
            "type"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "base": {
              "enum": [
                1000,
                1000000,
                1000000000
              ],
              "type": "number"
            },
            "decimalPlaces": {
              "type": "number"
            },
            "showSuffix": {
              "type": "boolean"
            },
            "type": {
              "const": "compact",
              "type": "string"
            }
          },
          "required": [
            "type"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "pattern": {
              "type": "string"
            },
            "type": {
              "const": "custom",
              "type": "string"
            }
          },
          "required": [
            "type",
            "pattern"
          ],
          "type": "object"
        }
      ]
    },
    "Parameter": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "name",
            "type"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "type": {
              "const": "string"
            },
            "defaultValue": {
              "type": [
                "string",
                "null"
              ]
            },
            "currentValue": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "name",
            "type"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "type": {
              "const": "number"
            },
            "defaultValue": {
              "type": [
                "number",
                "null"
              ]
            },
            "currentValue": {
              "type": [
                "number",
                "null"
              ]
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "name",
            "type"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "type": {
              "const": "datetime"
            },
            "defaultValue": {
              "type": [
                "string",
                "null"
              ]
            },
            "currentValue": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        }
      ]
    },
    "ParameterControlCard": {
      "type": "object",
      "description": "Discriminated union: a context-only card (parameterName=null, uiType=null) renders just a Reload button using context.* params from the live map view; a bound card edits a single settings.parameters entry.",
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "cardType": {
              "const": "ParameterControlCard",
              "type": "string"
            },
            "id": {
              "type": "string"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "parameterName": {
              "type": "null"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "uiType": {
              "type": "null"
            }
          },
          "required": [
            "id",
            "cardType",
            "interfacePosition",
            "parameterName",
            "uiType"
          ]
        },
        {
          "additionalProperties": false,
          "properties": {
            "allowedValues": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "cardType": {
              "const": "ParameterControlCard",
              "type": "string"
            },
            "id": {
              "type": "string"
            },
            "integer": {
              "type": "boolean"
            },
            "interfacePosition": {
              "enum": [
                "left",
                "right"
              ],
              "type": "string"
            },
            "max": {
              "type": "number"
            },
            "min": {
              "type": "number"
            },
            "parameterName": {
              "type": "string"
            },
            "subtitle": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "uiType": {
              "enum": [
                "text",
                "dropdown",
                "radio",
                "input",
                "slider",
                "date"
              ],
              "type": "string"
            }
          },
          "required": [
            "id",
            "cardType",
            "interfacePosition",
            "parameterName",
            "uiType"
          ]
        }
      ]
    },
    "PointLayer": {
      "additionalProperties": false,
      "properties": {
        "colorScheme": {
          "$ref": "#/$defs/ColorSchemeConfig"
        },
        "dataSourceId": {
          "type": "string"
        },
        "enableTooltips": {
          "type": "boolean"
        },
        "id": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "latitudeFieldId": {
          "type": "string"
        },
        "layerType": {
          "const": "PointLayer",
          "type": "string"
        },
        "longitudeFieldId": {
          "type": "string"
        },
        "opacity": {
          "type": "number"
        },
        "outline": {
          "type": "boolean"
        },
        "outlineColorScheme": {
          "$ref": "#/$defs/StaticColorConfig"
        },
        "outlineColorSeparate": {
          "type": "boolean"
        },
        "outlineOpacity": {
          "type": "number"
        },
        "outlineSize": {
          "$ref": "#/$defs/StaticSizeConfig"
        },
        "size": {
          "$ref": "#/$defs/SizeConfig"
        },
        "tooltipFieldMetricFormatMap": {
          "additionalProperties": {
            "$ref": "#/$defs/MetricDisplayFormat"
          },
          "type": "object"
        },
        "tooltipFieldsIds": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "visible": {
          "type": "boolean"
        },
        "visibleZoomRange": {
          "items": {
            "type": "number"
          },
          "maxItems": 2,
          "minItems": 2,
          "type": "array"
        },
        "visibleZoomRangeEnabled": {
          "type": "boolean"
        }
      },
      "required": [
        "colorScheme",
        "dataSourceId",
        "enableTooltips",
        "id",
        "label",
        "latitudeFieldId",
        "layerType",
        "longitudeFieldId",
        "size"
      ],
      "type": "object"
    },
    "PolygonFilterCard": {
      "additionalProperties": false,
      "properties": {
        "active": {
          "type": "boolean"
        },
        "applyToLayers": {
          "additionalProperties": {
            "$ref": "#/$defs/PolygonFilterPredicateValue"
          },
          "type": "object"
        },
        "cardType": {
          "const": "PolygonFilterCard",
          "type": "string"
        },
        "currentGeometry": {
          "$ref": "#/$defs/GeoJSON.FeatureCollection"
        },
        "filterPolygonDatasetId": {
          "type": "string"
        },
        "filterPolygonGeometryField": {
          "type": "string"
        },
        "filterPolygonLabelField": {
          "type": "string"
        },
        "filterPolygonUniqueIdField": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "polygonMethods": {
          "additionalProperties": false,
          "properties": {
            "drawing": {
              "type": "boolean"
            },
            "selectFromData": {
              "type": "boolean"
            },
            "uploadGeoJSON": {
              "type": "boolean"
            }
          },
          "type": "object"
        },
        "stage": {
          "enum": [
            "none",
            "draw",
            "edit",
            "view"
          ],
          "type": "string"
        },
        "subtitle": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "cardType",
        "interfacePosition",
        "currentGeometry",
        "active",
        "stage",
        "applyToLayers"
      ],
      "type": "object"
    },
    "PolygonFilterPredicateValue": {
      "anyOf": [
        {
          "$ref": "#/$defs/LatLonPredicateValue"
        },
        {
          "$ref": "#/$defs/H3PredicateValue"
        },
        {
          "$ref": "#/$defs/PolygonPredicateValue"
        }
      ]
    },
    "PolygonLayer": {
      "additionalProperties": false,
      "properties": {
        "colorScheme": {
          "$ref": "#/$defs/ColorSchemeConfig"
        },
        "dataSourceId": {
          "type": "string"
        },
        "enableTooltips": {
          "type": "boolean"
        },
        "fill": {
          "type": "boolean"
        },
        "fillOpacity": {
          "type": "number"
        },
        "id": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "layerType": {
          "const": "PolygonLayer",
          "type": "string"
        },
        "outline": {
          "type": "boolean"
        },
        "outlineColorScheme": {
          "$ref": "#/$defs/StaticColorConfig"
        },
        "outlineColorSeparate": {
          "type": "boolean"
        },
        "outlineMeters": {
          "type": "number"
        },
        "outlineMinPixels": {
          "type": "number"
        },
        "outlineOpacity": {
          "type": "number"
        },
        "polygonField": {
          "type": "string"
        },
        "tooltipFieldMetricFormatMap": {
          "additionalProperties": {
            "$ref": "#/$defs/MetricDisplayFormat"
          },
          "type": "object"
        },
        "tooltipFieldsIds": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "visible": {
          "type": "boolean"
        },
        "visibleZoomRange": {
          "items": {
            "type": "number"
          },
          "maxItems": 2,
          "minItems": 2,
          "type": "array"
        },
        "visibleZoomRangeEnabled": {
          "type": "boolean"
        }
      },
      "required": [
        "colorScheme",
        "dataSourceId",
        "enableTooltips",
        "id",
        "label",
        "layerType",
        "polygonField"
      ],
      "type": "object"
    },
    "PolygonPredicateValue": {
      "additionalProperties": false,
      "properties": {
        "geometryFieldId": {
          "type": "string"
        },
        "geometryType": {
          "const": "polygon",
          "type": "string"
        }
      },
      "required": [
        "geometryType",
        "geometryFieldId"
      ],
      "type": "object"
    },
    "QualitativeField": {
      "additionalProperties": false,
      "description": "Configuration for charts",
      "properties": {
        "fieldName": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "maxCategories": {
          "type": "number"
        }
      },
      "required": [
        "fieldName"
      ],
      "type": "object"
    },
    "QuantitativeColorConfig": {
      "anyOf": [
        {
          "$ref": "#/$defs/ContinuousColorConfig"
        },
        {
          "$ref": "#/$defs/CustomDiscreteColorConfig"
        }
      ]
    },
    "QuantitativeField": {
      "additionalProperties": false,
      "properties": {
        "aggregation": {
          "$ref": "#/$defs/AggregationType"
        },
        "fieldName": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "metricDisplayFormat": {
          "$ref": "#/$defs/MetricDisplayFormat"
        }
      },
      "required": [
        "fieldName",
        "aggregation"
      ],
      "type": "object"
    },
    "QueryableDataSourceStatus": {
      "additionalProperties": false,
      "properties": {
        "error": {
          "type": [
            "string",
            "null"
          ]
        },
        "loading_finished_at": {
          "type": [
            "string",
            "null"
          ]
        },
        "loading_started_at": {
          "type": [
            "string",
            "null"
          ]
        },
        "parameterValues": {
          "additionalProperties": {
            "type": [
              "string",
              "number",
              "null"
            ]
          },
          "type": "object"
        },
        "progress": {
          "type": "number"
        },
        "result_id": {
          "type": "string"
        },
        "state": {
          "enum": [
            "not_loaded",
            "loading",
            "loaded",
            "error",
            "waiting",
            "remove",
            "not_loaded_saved_map"
          ],
          "type": "string"
        }
      },
      "required": [
        "state"
      ],
      "type": "object"
    },
    "RangeSliderFilterCard": {
      "additionalProperties": false,
      "properties": {
        "applyToLayers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "cardType": {
          "const": "FilterCard",
          "type": "string"
        },
        "categorical": {
          "const": false,
          "type": "boolean"
        },
        "currentValue": {
          "$ref": "#/$defs/RangeSliderFilterValue"
        },
        "dataSourceId": {
          "type": "string"
        },
        "filterType": {
          "const": "slider",
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "measureFieldId": {
          "type": "string"
        },
        "sliderType": {
          "const": "range",
          "type": "string"
        },
        "subtitle": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "applyToLayers",
        "cardType",
        "categorical",
        "currentValue",
        "dataSourceId",
        "filterType",
        "id",
        "interfacePosition",
        "measureFieldId",
        "sliderType"
      ],
      "type": "object"
    },
    "RangeSliderFilterValue": {
      "anyOf": [
        {
          "items": {
            "type": "number"
          },
          "maxItems": 2,
          "minItems": 2,
          "type": "array"
        },
        {
          "type": "null"
        }
      ]
    },
    "ScaleRange": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "mode": {
              "const": "auto",
              "type": "string"
            }
          },
          "required": [
            "mode"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "max": {
              "type": "number"
            },
            "min": {
              "type": "number"
            },
            "mode": {
              "const": "fixed",
              "type": "string"
            }
          },
          "required": [
            "mode",
            "min",
            "max"
          ],
          "type": "object"
        }
      ]
    },
    "SingleSliderFilterCard": {
      "additionalProperties": false,
      "properties": {
        "applyToLayers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "cardType": {
          "const": "FilterCard",
          "type": "string"
        },
        "categorical": {
          "const": false,
          "type": "boolean"
        },
        "currentValue": {
          "$ref": "#/$defs/SingleSliderFilterValue"
        },
        "dataSourceId": {
          "type": "string"
        },
        "filterType": {
          "const": "slider",
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "measureFieldId": {
          "type": "string"
        },
        "sliderType": {
          "const": "single",
          "type": "string"
        },
        "subtitle": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "applyToLayers",
        "cardType",
        "categorical",
        "currentValue",
        "dataSourceId",
        "filterType",
        "id",
        "interfacePosition",
        "measureFieldId",
        "sliderType"
      ],
      "type": "object"
    },
    "SingleSliderFilterValue": {
      "type": [
        "number",
        "null"
      ]
    },
    "SizeConfig": {
      "anyOf": [
        {
          "$ref": "#/$defs/StaticSizeConfig"
        },
        {
          "$ref": "#/$defs/DynamicSizeConfig"
        }
      ]
    },
    "SnowflakeNativeAppDataSource": {
      "additionalProperties": false,
      "properties": {
        "fields": {
          "items": {
            "$ref": "#/$defs/Field"
          },
          "type": "array"
        },
        "id": {
          "type": "string"
        },
        "locationType": {
          "const": "snowflake_native_app",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "query": {
          "type": "string"
        },
        "status": {
          "$ref": "#/$defs/QueryableDataSourceStatus"
        }
      },
      "required": [
        "fields",
        "id",
        "locationType",
        "name",
        "query"
      ],
      "type": "object"
    },
    "SortConfig": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "basis": {
              "const": "value",
              "type": "string"
            },
            "direction": {
              "$ref": "#/$defs/SortDirection"
            }
          },
          "required": [
            "basis",
            "direction"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "basis": {
              "const": "label",
              "type": "string"
            },
            "direction": {
              "$ref": "#/$defs/SortDirection"
            }
          },
          "required": [
            "basis",
            "direction"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "basis": {
              "const": "natural",
              "type": "string"
            }
          },
          "required": [
            "basis"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "basis": {
              "const": "explicit",
              "type": "string"
            },
            "order": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          "required": [
            "basis",
            "order"
          ],
          "type": "object"
        }
      ]
    },
    "SortDirection": {
      "enum": [
        "asc",
        "desc"
      ],
      "type": "string"
    },
    "StaticColorConfig": {
      "additionalProperties": false,
      "properties": {
        "isStatic": {
          "const": true,
          "type": "boolean"
        },
        "staticColor": {
          "type": "string"
        }
      },
      "required": [
        "isStatic",
        "staticColor"
      ],
      "type": "object"
    },
    "StaticSizeConfig": {
      "additionalProperties": false,
      "properties": {
        "isStatic": {
          "const": true,
          "type": "boolean"
        },
        "size": {
          "type": "number"
        },
        "units": {
          "enum": [
            "meters",
            "pixels"
          ],
          "type": "string"
        },
        "minPixels": {
          "type": "number"
        },
        "maxPixels": {
          "type": "number"
        }
      },
      "required": [
        "isStatic",
        "size",
        "units"
      ],
      "type": "object"
    },
    "TextMultiFilterCard": {
      "additionalProperties": false,
      "properties": {
        "allowMultipleSelections": {
          "const": true,
          "type": "boolean"
        },
        "applyToLayers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "cardType": {
          "const": "FilterCard",
          "type": "string"
        },
        "categorical": {
          "type": "boolean"
        },
        "currentValue": {
          "$ref": "#/$defs/TextMultiFilterValue"
        },
        "dataSourceId": {
          "type": "string"
        },
        "filterType": {
          "const": "text",
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "measureFieldId": {
          "type": "string"
        },
        "subtitle": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "allowMultipleSelections",
        "applyToLayers",
        "cardType",
        "categorical",
        "currentValue",
        "dataSourceId",
        "filterType",
        "id",
        "interfacePosition",
        "measureFieldId"
      ],
      "type": "object"
    },
    "TextMultiFilterValue": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ]
    },
    "TextSingleFilterCard": {
      "additionalProperties": false,
      "properties": {
        "allowMultipleSelections": {
          "const": false,
          "type": "boolean"
        },
        "applyToLayers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "cardType": {
          "const": "FilterCard",
          "type": "string"
        },
        "categorical": {
          "type": "boolean"
        },
        "currentValue": {
          "$ref": "#/$defs/TextSingleFilterValue"
        },
        "dataSourceId": {
          "type": "string"
        },
        "filterType": {
          "const": "text",
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "measureFieldId": {
          "type": "string"
        },
        "subtitle": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "allowMultipleSelections",
        "applyToLayers",
        "cardType",
        "categorical",
        "currentValue",
        "dataSourceId",
        "filterType",
        "id",
        "interfacePosition",
        "measureFieldId"
      ],
      "type": "object"
    },
    "TextSingleFilterValue": {
      "type": [
        "string",
        "null"
      ]
    },
    "TimelineFilterCard": {
      "additionalProperties": false,
      "properties": {
        "applyToLayers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "cardType": {
          "const": "TimelineFilterCard",
          "type": "string"
        },
        "dataSourceId": {
          "type": "string"
        },
        "histogramAggregationType": {
          "$ref": "#/$defs/AggregationType"
        },
        "histogramMeasureId": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "const": "bottom",
          "type": "string"
        },
        "playbackMode": {
          "enum": [
            "sliding",
            "step",
            "cumulative"
          ],
          "type": "string"
        },
        "playbackSpeed": {
          "type": "number"
        },
        "selectedExtentEnd": {
          "type": [
            "number",
            "null"
          ]
        },
        "selectedExtentStart": {
          "type": [
            "number",
            "null"
          ]
        },
        "subtitle": {
          "type": "string"
        },
        "timestampFieldId": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "dataSourceId",
        "timestampFieldId",
        "interfacePosition",
        "cardType",
        "applyToLayers"
      ],
      "type": "object"
    },
    "TitleCard": {
      "additionalProperties": false,
      "properties": {
        "cardType": {
          "const": "TitleCard",
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "interfacePosition": {
          "enum": [
            "left",
            "right"
          ],
          "type": "string"
        },
        "subtitle": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "interfacePosition",
        "cardType"
      ],
      "type": "object"
    },
    "UnitFormat": {
      "additionalProperties": false,
      "properties": {
        "position": {
          "enum": [
            "prefix",
            "suffix"
          ],
          "type": "string"
        },
        "text": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "YScaleType": {
      "enum": [
        "linear",
        "log"
      ],
      "type": "string"
    },
    "CategoricalSizeConfig": {
      "additionalProperties": false,
      "properties": {
        "isStatic": {
          "const": false,
          "type": "boolean"
        },
        "categorical": {
          "const": true,
          "type": "boolean"
        },
        "sizeFieldId": {
          "type": "string"
        },
        "customSizeMapping": {
          "$ref": "#/$defs/CustomSizeMapping"
        },
        "units": {
          "enum": [
            "meters",
            "pixels"
          ],
          "type": "string"
        },
        "minPixels": {
          "type": "number"
        },
        "maxPixels": {
          "type": "number"
        }
      },
      "required": [
        "isStatic",
        "categorical",
        "sizeFieldId",
        "customSizeMapping",
        "units"
      ],
      "type": "object"
    },
    "ContinuousSizeConfig": {
      "additionalProperties": false,
      "properties": {
        "isStatic": {
          "const": false,
          "type": "boolean"
        },
        "categorical": {
          "const": false,
          "type": "boolean"
        },
        "sizeFieldId": {
          "type": "string"
        },
        "minSize": {
          "type": "number"
        },
        "maxSize": {
          "type": "number"
        },
        "reversed": {
          "type": "boolean"
        },
        "interpolationType": {
          "enum": [
            "linear",
            "sqrt",
            "log"
          ],
          "type": "string"
        },
        "units": {
          "enum": [
            "meters",
            "pixels"
          ],
          "type": "string"
        },
        "minPixels": {
          "type": "number"
        },
        "maxPixels": {
          "type": "number"
        },
        "metricDisplayFormat": {
          "$ref": "#/$defs/MetricDisplayFormat"
        }
      },
      "required": [
        "isStatic",
        "categorical",
        "sizeFieldId",
        "minSize",
        "maxSize",
        "reversed",
        "interpolationType",
        "units"
      ],
      "type": "object"
    },
    "CustomDiscreteSizeConfig": {
      "additionalProperties": false,
      "properties": {
        "isStatic": {
          "const": false,
          "type": "boolean"
        },
        "categorical": {
          "const": false,
          "type": "boolean"
        },
        "sizeFieldId": {
          "type": "string"
        },
        "minSize": {
          "type": "number"
        },
        "maxSize": {
          "type": "number"
        },
        "reversed": {
          "type": "boolean"
        },
        "interpolationType": {
          "const": "custom_discrete",
          "type": "string"
        },
        "customDiscreteSizeScale": {
          "$ref": "#/$defs/DiscreteSizeScale"
        },
        "units": {
          "enum": [
            "meters",
            "pixels"
          ],
          "type": "string"
        },
        "minPixels": {
          "type": "number"
        },
        "maxPixels": {
          "type": "number"
        },
        "metricDisplayFormat": {
          "$ref": "#/$defs/MetricDisplayFormat"
        }
      },
      "required": [
        "isStatic",
        "categorical",
        "sizeFieldId",
        "minSize",
        "maxSize",
        "reversed",
        "interpolationType",
        "customDiscreteSizeScale",
        "units"
      ],
      "type": "object"
    },
    "CustomSizeMapping": {
      "additionalProperties": false,
      "properties": {
        "sizes": {
          "additionalProperties": {
            "type": "number"
          },
          "type": "object"
        },
        "defaultSize": {
          "type": "number"
        }
      },
      "required": [
        "sizes",
        "defaultSize"
      ],
      "type": "object"
    },
    "DiscreteSizeScale": {
      "additionalProperties": false,
      "properties": {
        "ranges": {
          "items": {
            "$ref": "#/$defs/SizeRange"
          },
          "type": "array"
        },
        "defaultSize": {
          "type": "number"
        }
      },
      "required": [
        "ranges",
        "defaultSize"
      ],
      "type": "object"
    },
    "SizeRange": {
      "additionalProperties": false,
      "properties": {
        "start": {
          "type": "number"
        },
        "end": {
          "type": "number"
        },
        "size": {
          "type": "number"
        }
      },
      "required": [
        "start",
        "end",
        "size"
      ],
      "type": "object"
    }
  }
}
