{
  "type": "donut-chart",
  "description": "Donut 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 'label' and 'value' columns."
      },
      "title": {
        "description": "Chart title displayed above",
        "type": "string"
      },
      "innerRadius": {
        "default": 56,
        "description": "Inner radius in pixels (donut hole size).",
        "type": "number"
      },
      "outerRadius": {
        "default": 88,
        "description": "Outer radius in pixels.",
        "type": "number"
      },
      "showLegend": {
        "default": true,
        "description": "Show category legend.",
        "type": "boolean"
      },
      "showLabels": {
        "default": false,
        "description": "Show percentage labels on slices.",
        "type": "boolean"
      },
      "showCenterTotal": {
        "default": true,
        "description": "Show total value text in donut center.",
        "type": "boolean"
      },
      "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 donut chart powered by DuckDB SQL. Query must return label and value columns."
  }
}
