{
  "slug": "table-heatmap",
  "name": "gizza-ai/table-heatmap",
  "version": "0.1.0",
  "title": "Table Heatmap — color-scale conditional formatting for CSV — gizza.ai",
  "description": "Shade a CSV/table's numeric cells with a spreadsheet-style color scale and get a styled HTML table. Free, private, no upload.",
  "tags": [
    "table heatmap",
    "conditional formatting",
    "csv color scale",
    "heatmap table",
    "html table generator"
  ],
  "category": "data",
  "urls": {
    "page": "https://gizza.ai/tools/table-heatmap/",
    "markdown": "https://gizza.ai/tools/table-heatmap/index.md",
    "descriptor": "https://gizza.ai/tools/table-heatmap/tool.json",
    "deep_link_example": "https://gizza.ai/tools/table-heatmap/?data=region%2Cq1%2Cq2%0ANorth%2C120%2C90%0ASouth%2C60%2C150&scale=red-yellow-green&header=true&per_column=true&delimiter=%2C"
  },
  "cli": "gizza tool table-heatmap \"region,q1,q2\nNorth,120,90\nSouth,60,150\"",
  "tool": {
    "description": "Apply spreadsheet-style color-scale conditional formatting to a CSV/table and return a styled HTML <table> with shaded numeric cells. Each cell that parses as a number (tolerating commas, $/€/£, %, and (parentheses) negatives) is shaded by its value on the chosen color scale; non-numeric and header cells are left plain. scale is red-yellow-green (default), green-yellow-red, blue-white-red, green, or blue. header=true (default) keeps the first row as an unshaded header. per_column=true (default) scales each column independently; false uses one global min/max. delimiter is a single char or comma/tab/semicolon/pipe. Runs locally.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "data": {
          "description": "The CSV/table text (rows separated by newlines).",
          "type": "string"
        },
        "delimiter": {
          "default": ",",
          "description": "Field separator: a single char or 'comma'/'tab'/'semicolon'/'pipe'. Default ','.",
          "type": "string"
        },
        "header": {
          "default": true,
          "description": "Treat the first row as a header (not shaded). Default true.",
          "type": "boolean"
        },
        "max": {
          "description": "Optional fixed value for the high end of the scale (defaults to the data maximum).",
          "type": "number"
        },
        "midpoint": {
          "description": "Optional fixed midpoint value for diverging scales (red-yellow-green / green-yellow-red / blue-white-red), mapped to the neutral middle color. Defaults to halfway between min and max. Ignored for sequential scales (green/blue).",
          "type": "number"
        },
        "min": {
          "description": "Optional fixed value for the low end of the scale (defaults to the data minimum). When both min and max are set, per_column is ignored.",
          "type": "number"
        },
        "per_column": {
          "default": true,
          "description": "Scale each numeric column against its own min/max (default true); set false to use one global min/max across the whole table.",
          "type": "boolean"
        },
        "scale": {
          "default": "red-yellow-green",
          "description": "Color scale for numeric cells: red-yellow-green (low=red→high=green, default), green-yellow-red, blue-white-red (diverging), green (white→green), or blue (white→blue).",
          "enum": [
            "red-yellow-green",
            "green-yellow-red",
            "blue-white-red",
            "green",
            "blue"
          ],
          "type": "string"
        }
      },
      "required": [
        "data"
      ],
      "type": "object"
    }
  }
}