{
  "type": "scatter-chart",
  "description": "Scatter chart driven by DuckDB SQL query.",
  "hasChildren": false,
  "propsSchema": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
      "sql": {
        "type": "string",
        "description": "DuckDB SQL query with {{udf_name}} and $param_name placeholders. Must return 'x' and 'y'. Optional: 'series', 'size', 'label'."
      },
      "title": {
        "description": "Chart title displayed above",
        "type": "string"
      },
      "pointColor": {
        "default": "#E8FF59",
        "description": "Point color for single-series charts.",
        "type": "string"
      },
      "pointOpacity": {
        "default": 0.85,
        "description": "Point opacity from 0 to 1.",
        "type": "number"
      },
      "defaultPointSize": {
        "default": 70,
        "description": "Default point size when SQL does not return a size column.",
        "type": "number"
      },
      "pointStrokeWidth": {
        "default": 0.5,
        "description": "Outline width of points in pixels.",
        "type": "number"
      },
      "pointStrokeColor": {
        "default": "#111827",
        "description": "Outline color for points.",
        "type": "string"
      },
      "minBubbleSize": {
        "default": 10,
        "description": "Minimum rendered bubble size when using a size column.",
        "type": "number"
      },
      "maxBubbleSize": {
        "default": 160,
        "description": "Maximum rendered bubble size when using a size column.",
        "type": "number"
      },
      "showGrid": {
        "default": true,
        "description": "Show subtle grid lines behind points.",
        "type": "boolean"
      },
      "showLegend": {
        "default": true,
        "description": "Show legend when multiple series are present.",
        "type": "boolean"
      },
      "xAxisFontSize": {
        "default": 11,
        "description": "X-axis label font size in pixels.",
        "type": "number"
      },
      "yAxisFontSize": {
        "default": 11,
        "description": "Y-axis label font size in pixels.",
        "type": "number"
      },
      "xMin": {
        "description": "Fixed minimum value for x-axis.",
        "type": "number"
      },
      "xMax": {
        "description": "Fixed maximum value for x-axis.",
        "type": "number"
      },
      "yMin": {
        "description": "Fixed minimum value for y-axis.",
        "type": "number"
      },
      "yMax": {
        "description": "Fixed maximum value for y-axis.",
        "type": "number"
      },
      "animationMs": {
        "default": 300,
        "description": "Animation duration in milliseconds. 0 disables animation. Animation only plays on data changes, not on zoom/resize.",
        "type": "number"
      },
      "style": {
        "description": "Inline CSS styles as a plain CSS string.",
        "type": "string"
      }
    },
    "required": [
      "sql"
    ],
    "description": "A scatter chart powered by DuckDB SQL. Query must return x and y numeric columns."
  }
}
