{
  "name": "image.chart",
  "description": "Renders a bar, stacked, or grouped chart from the supplied series data as a PNG image",
  "signature": {
    "input": {
      "kind": "chart-type",
      "description": "Chart type to create, such as bars, stacked, or grouped",
      "required": true,
      "mode": "ValueOrExpression"
    },
    "children": {
      "width": {
        "type": "int",
        "description": "Chart width in pixels",
        "required": true,
        "mode": "ValueOrExpression",
        "cardinality": "ExactlyOne",
        "role": "Option",
        "projection": "Value"
      },
      "height": {
        "type": "int",
        "description": "Chart height in pixels",
        "required": true,
        "mode": "ValueOrExpression",
        "cardinality": "ExactlyOne",
        "role": "Option",
        "projection": "Value"
      },
      "filename": {
        "type": "string",
        "kind": "image-file",
        "description": "Optional destination filename",
        "required": false,
        "mode": "ValueOrExpression",
        "cardinality": "ZeroOrOne",
        "role": "Option",
        "projection": "Value"
      },
      "bars": {
        "type": "lambda",
        "description": "Chart values keyed by label; grouped and stacked charts use nested numeric values",
        "required": true,
        "mode": "ValueOrExpression",
        "cardinality": "ExactlyOne",
        "role": "StructuredObject",
        "projection": "StructuredTree",
        "children": {
          "*": {
            "type": "double|lambda",
            "description": "Bar value or grouped/stacked bar value collection",
            "required": true,
            "mode": "ValueOrExpression",
            "cardinality": "OneOrMore",
            "role": "DynamicMap",
            "projection": "StructuredTree"
          }
        }
      },
      "legend": {
        "type": "lambda",
        "description": "Legend labels required by grouped and stacked charts",
        "required": false,
        "mode": "ValueOrExpression",
        "cardinality": "ZeroOrOne",
        "role": "StructuredObject",
        "projection": "Children",
        "children": [
          {
            "type": "string",
            "kind": "chart-legend-label",
            "description": "Legend label",
            "required": false,
            "mode": "ValueOrExpression",
            "cardinality": "ZeroOrMore",
            "role": "Option",
            "projection": "Value"
          }
        ]
      }
    },
    "output": {
      "mode": "Value",
      "kind": "image,binary-content",
      "description": "Resolves to the generated chart image bytes"
    }
  }
}
