{
  "$schema": "../_schema.json",
  "format": "xlsx",
  "element": "autofilter",
  "parent": "sheet",
  "operations": {
    "add": true,
    "set": true,
    "get": true,
    "query": true,
    "remove": true
  },
  "paths": {
    "positional": ["/SheetName/autofilter"]
  },
  "note": "A sheet has at most one AutoFilter. Per-column criteria via 'criteriaN.OP=VAL' props where N is the 0-based column offset from the filter range and OP ∈ {equals, notEquals, contains, doesNotContain, beginsWith, endsWith, gt, gte, lt, lte, between, notBetween, top, topPercent, bottom, bottomPercent, blanks, nonBlanks, values, dynamic}. Canonical key matches sheet.autoFilter alias.",
  "properties": {
    "range": {
      "type": "string",
      "description": "cell range the filter applies to. Required.",
      "aliases": ["ref"],
      "add": true, "set": true, "get": true,
      "examples": ["--prop range=A1:F100"],
      "readback": "range reference",
      "enforcement": "report"
    },
    "criteria0": {
      "type": "string",
      "description": "column 0 filter criterion. Use dotted key: --prop criteria0.OP=VAL. OP ∈ equals/notEquals/contains/doesNotContain/beginsWith/endsWith/gt/gte/lt/lte/between/notBetween/top/topPercent/bottom/bottomPercent/blanks/nonBlanks/values/dynamic. Use criteria1, criteria2, … for additional columns. Add-time only — Set on /sheet/autofilter currently accepts only `range`, and Get does not surface stored criteria back today.",
      "add": true, "set": false, "get": false,
      "examples": ["--prop criteria0.equals=Red", "--prop criteria2.gt=100"],
      "readback": "criterion spec",
      "enforcement": "report"
    }
  }
}
