chromium/third_party/blink/renderer/core/html/aria_properties.json5

{
  metadata: {
    namespace: "HTML",
    namespacePrefix: "xhtml",
    namespaceURI: "http://www.w3.org/1999/xhtml",
    attrsNullNamespace: true,
    export: "CORE_EXPORT",
  },
  attributes: [
    {name: "aria-activedescendant", type: "IDREF"},
    {name: "aria-atomic", default: "false", type: "boolean"},
    {
      name: "aria-autocomplete",
      default: "none",
      enum: ["inline", "list", "both", "none"],
      type: "token"
    },
    {name: "aria-braillelabel", type: "string"},
    {name: "aria-brailleroledescription", type: "string"},
    {name: "aria-busy", default: "false", type: "boolean"},
    {
      name: "aria-checked",
      default: "undefined",
      enum: ["true", "false", "mixed", "undefined"],
      type: "token"
    },
    {name: "aria-colcount", type: "integer"},
    {name: "aria-colindex", type: "integer"},
    {name: "aria-colindextext", type: "string"},
    {name: "aria-colspan", type: "integer"},
    {name: "aria-controls", type: "IDREF_list"},
    {
      name: "aria-current",
      default: "false",
      enum: ["page", "step", "location", "date", "time", "true", "false"],
      type: "token"
    },
    {name: "aria-describedby", type: "IDREF_list"},
    {name: "aria-description", type: "string"},
    {name: "aria-details", type: "IDREF"},
    {name: "aria-disabled", default: "false", type: "boolean"},
    {name: "aria-errormessage", type: "IDREF"},
    {
      name: "aria-expanded",
      default: "undefined",
      enum: ["true", "false", "undefined"],
      type: "token"
    },
    {name: "aria-flowto", type: "IDREF_list"},
    {
      name: "aria-haspopup",
      default: "false",
      enum: ["false", "true", "menu", "listbox", "tree", "grid", "dialog"],
      type: "token"
    },
    {
      name: "aria-hidden",
      default: "undefined",
      enum: ["true", "false", "undefined"],
      type: "token"
    },
    {
      name: "aria-invalid",
      default: "false",
      enum: ["grammar", "false", "spelling", "true"],
      type: "token"
    },
    {name: "aria-keyshortcuts", type: "string"},
    {name: "aria-label", type: "string"},
    {name: "aria-labelledby", type: "IDREF_list"},
    {name: "aria-labeledby", type: "IDREF_list"},  // alias for labelledby
    {name: "aria-level", type: "integer"},
    {
      name: "aria-live",
      default: "off",
      enum: ["off", "polite", "assertive"],
      type: "token"
    },
    {name: "aria-modal", default: "false", type: "boolean"},
    {name: "aria-multiline", default: "false", type: "boolean"},
    {name: "aria-multiselectable", default: "false", type: "boolean"},
    {
      name: "aria-orientation",
      default: "undefined",
      enum: ["horizontal", "undefined", "vertical"],
      type: "token"
    },
    {name: "aria-owns", type: "IDREF_list"},
    {name: "aria-placeholder", type: "string"},
    {name: "aria-posinset", type: "integer"},
    {
      name: "aria-pressed",
      default: "undefined",
      enum: ["true", "false", "mixed", "undefined"],
      type: "token"
    },
    {name: "aria-readonly", default: "false", type: "boolean"},
    {
      name: "aria-relevant",
      default: "additions text",
      enum: ["additions", "removals", "text", "all"],
      type: "token_list"
    },
    {name: "aria-required", default: "false", type: "boolean"},
    {name: "aria-roledescription", type: "string"},
    {name: "aria-rowcount", type: "integer"},
    {name: "aria-rowindex", type: "integer"},
    {name: "aria-rowindextext", type: "string"},
    {name: "aria-rowspan", type: "integer"},
    {
      name: "aria-selected",
      default: "undefined",
      enum: ["true", "false", "undefined"],
      type: "token"
    },
    {name: "aria-setsize", type: "integer"},
    {
      name: "aria-sort",
      default: "none",
      enum: ["ascending", "descending", "none", "other"],
      type: "token"
    },
    {name: "aria-valuemax", type: "decimal"},
    {name: "aria-valuemin", type: "decimal"},
    {name: "aria-valuenow", type: "decimal"},
    {name: "aria-valuetext", type: "string"},
    {name: "aria-virtualcontent", type: "string"},
  ],
  roles: [
    {
      name: "alert",
      nameFrom: ["author"],
      superclasses: ["section"],
      "implicitValues": {
        "aria-live": "assertive",
        "aria-atomic": "true"
      }
    },
    {
      name: "alertdialog",
      nameFrom: ["author"],
      superclasses: ["alert", "dialog"],
      nameRequired: true
    },
    {
      name: "application",
      nameFrom: ["author"],
      superclasses: ["structure"],
      nameRequired: true
    },
    {
      name: "article",
      nameFrom: ["author"],
      superclasses: ["document"],
      supportedAttributes: ["aria-posinset", "aria-setsize"]
    },
    {name: "banner", nameFrom: ["author"], superclasses: ["landmark"]},
    {
      name: "button",
      nameFrom: ["contents", "author"],
      superclasses: ["command"],
      supportedAttributes: ["aria-expanded", "aria-pressed"],
      nameRequired: true,
      childrenPresentational: true
    },
    {
      name: "cell",
      namefrom: ["contents", "author"],
      scope: "row",
      superclasses: ["section"],
      supportedAttributes: [
        "aria-colindex", "aria-colspan", "aria-rowindex", "aria-rowspan"
      ]
    },
    {
      name: "checkbox",
      nameFrom: ["contents", "author"],
      requiredAttributes: ["aria-checked"],
      superclasses: ["input"],
      supportedAttributes: ["aria-readonly"],
      nameRequired: true,
      implicitValues: {"aria-checked": false}
    },
    {
      name: "columnheader",
      nameFrom: ["contents", "author"],
      scope: ["row"],
      superclasses: ["gridcell", "sectionhead", "widget"],
      supportedAttributes: ["aria-sort"],
      nameRequired: true
    },
    {
      name: "combobox",
      // TODO(aboxhall): Follow up with Nektarios and Aaron regarding role
      // on textbox
      mustContain: ["textbox"],
      nameFrom: ["author"],
      requiredAttributes: ["aria-controls", "aria-expanded"],
      superclasses: ["select"],
      supportedAttributes:
          ["aria-autocomplete", "aria-readonly", "aria-required"],
      nameRequired: true,
      implicitValues: {
        "aria-expanded": "false",
        "aria-haspopup": "listbox"
      }
    },
    {
      name: "command",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["widget"]
    },
    {name: "complementary", nameFrom: ["author"], superclasses: ["landmark"]},
    {
      name: "composite",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["widget"],
      supportedAttributes: ["aria-activedescendant"],
    },
    {name: "contentinfo", nameFrom: ["author"], superclasses: ["landmark"]},
    {name: "definition", nameFrom: ["author"], superclasses: ["section"]},
    {
      name: "dialog",
      nameFrom: ["author"],
      superclasses: ["window"],
      nameRequired: true
    },
    {name: "directory", nameFrom: ["author"], superclasses: ["list"]},
    {
      name: "document",
      nameFrom: ["author"],
      superclasses: ["structure"],
      supportedAttributes: ["aria-expanded"],
      nameRequired: false
    },
    {
      name: "feed",
      nameFrom: ["author"],
      superclasses: ["list"],
      mustContain: ["article"],
      nameRequired: false
    },
    {
      name: "figure",
      namefrom: ["author"],
      superclasses: ["section"],
      nameRequired: false
    },
    {name: "form", nameFrom: ["author"], superclasses: ["landmark"]},
    {
      name: "grid",
      nameFrom: ["author"],
      superclasses: ["composite", "table"],
      // TODO(aboxhall): Figure out how to express "rowgroup --> row" here.
      mustContain: ["row"],
      supportedAttributes:
          ["aria-level", "aria-multiselectable", "aria-readonly"],
      nameRequired: true
    },
    {
      name: "gridcell",
      nameFrom: ["contents", "author"],
      scope: ["row"],
      superclasses: ["cell", "widget"],
      supportedAttributes:
          ["aria-readonly", "aria-required", "aria-selected"],
      nameRequired: true
    },
    {
      name: "group",
      nameFrom: ["author"],
      superclasses: ["section"],
      supportedAttributes: ["aria-activedescendant"]
    },
    {
      name: "heading",
      namefrom: ["contents", "author"],
      superclasses: ["sectionhead"],
      supportedAttributes: ["aria-level"],
      nameRequired: true,
      implicitValues: {"aria-level": "2"}
    },
    {
      name: "img",
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: true,
      childrenPresentational: true
    },
    {
      name: "input",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["widget"]
    },
    {
      name: "landmark",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: false
    },
    {
      name: "link",
      nameFrom: ["contents", "author"],
      superclasses: ["command"],
      supportedAttributes: ["aria-expanded"],
      nameRequired: true
    },
    {
      name: "list",
      // TODO(aboxhall): Figure out how to express "group --> listitem"
      mustContain: ["listitem"],
      nameFrom: ["author"],
      superclasses: ["section"],
      implicitValues: {"aria-orientation": "vertical"}
    },
    {
      name: "listbox",
      nameFrom: ["author"],
      superclasses: ["select"],
      mustContain: ["option"],
      supportedAttributes:
          ["aria-multiselectable", "aria-readonly", "aria-required"],
      nameRequired: true,
      implicitValues: {"aria-orientation": "vertical"}
    },
    {
      name: "listitem",
      nameFrom: ["author"],
      superclasses: ["section"],
      scope: ["group", "list"],
      supportedAttributes: ["aria-level", "aria-posinset", "aria-setsize"]
    },
    {
      name: "log",
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: true,
      implicitValues: {"aria-live": "polite"}
    },
    {name: "main", nameFrom: ["author"], superclasses: ["landmark"]},
    {
      name: "marquee",
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: true
    },
    {
      name: "math",
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: true,
      // TODO(aboxhall/aleventhal): this is what the spec says, but seems
      // wrong.
      childrenPresentational: true
    },
    {
      name: "menu",
      mustContain: [
        "group", "menuitemradio", "menuitem", "menuitemcheckbox",
        "menuitemradio"
      ],
      nameFrom: ["author"],
      superclasses: ["select"],
      implicitValues: {"aria-orientation": "vertical"}
    },
    {
      name: "menubar",
      nameFrom: ["author"],
      superclasses: ["menu"],
      // TODO(aboxhall): figure out how to express "group --> {menuitem,
      // menuitemradio, menuitemcheckbox}"
      mustContain: ["menuitem", "menuitemradio", "menuitemcheckbox"],
      implicitValues: {"aria-orientation": "horizontal"}
    },
    {
      name: "menuitem",
      nameFrom: ["contents", "author"],
      scope: ["group", "menu", "menubar"],
      superclasses: ["command"],
      nameRequired: true
    },
    {
      name: "menuitemcheckbox",
      nameFrom: ["contents", "author"],
      scope: ["menu", "menubar"],
      superclasses: ["checkbox", "menuitem"],
      nameRequired: true,
      childrenPresentational: true,
      implicitValues: {"aria-checked": false}
    },
    {
      name: "menuitemradio",
      nameFrom: ["contents", "author"],
      scope: ["menu", "menubar", "group"],
      superclasses: ["menuitemcheckbox", "radio"],
      nameRequired: true,
      childrenPresentational: true,
      implicitValues: {"aria-checked": false}
    },
    {name: "navigation", nameFrom: ["author"], superclasses: ["landmark"]},
    {name: "none", superclasses: ["structure"]},
    {name: "note", nameFrom: ["author"], superclasses: ["section"]},
    {
      name: "option",
      nameFrom: ["contents", "author"],
      scope: ["listbox"],
      superclasses: ["input"],
      requiredAttributes: ["aria-selected"],
      supportedAttributes:
          ["aria-checked", "aria-posinset", "aria-setsize"],
      nameRequired: true,
      childrenPresentational: true,
      implicitValues: {"aria-selected": "false"}
    },
    {name: "presentation", superclasses: ["structure"]},
    {
      name: "progressbar",
      nameFrom: ["author"],
      superclasses: ["range"],
      nameRequired: true,
      childrenPresentational: true
    },
    {
      name: "radio",
      nameFrom: ["contents", "author"],
      superclasses: ["input"],
      requiredAttributes: ["aria-checked"],
      supportedAttributes: ["aria-posinset", "aria-setsize"],
      nameRequired: true,
      childrenPresentational: true,
      implicitValues: {"aria-checked": "false"}
    },
    {
      name: "radiogroup",
      nameFrom: ["author"],
      superclasses: ["select"],
      mustContain: ["radio"],
      supportedAttributes: ["aria-readonly", "aria-required"],
      nameRequired: true
    },
    {
      name: "range",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["widget"],
      supportedAttributes: [
        "aria-valuemax", "aria-valuemin", "aria-valuenow", "aria-valuetext"
      ]
    },
    {
      name: "region",
      nameFrom: ["author"],
      superclasses: ["landmark"],
      nameRequired: true
    },
    {
      name: "roletype",
      abstract: true,
      supportedAttributes: [
        "aria-atomic",   "aria-busy",        "aria-controls",
        "aria-current",  "aria-describedby", "aria-details",
        "aria-disabled", "aria-dropeffect",  "aria-errormessage",
        "aria-flowto",   "aria-grabbed",     "aria-haspopup",
        "aria-hidden",   "aria-invalid",     "aria-keyshortcuts",
        "aria-label",    "aria-labelledby",  "aria-live",
        "aria-owns",     "aria-relevant",    "aria-roledescription"
      ]
    },
    {
      name: "row",
      nameFrom: ["contents", "author"],
      superclasses: ["group", "widget"],
      mustContain: ["cell", "columnheader", "gridcell", "rowheader"],
      scope: ["grid", "rowgroup", "table", "treegrid"],
      // TODO(aboxhall/aleventhal): This is not in the spec yet, but
      // setsize and posinset are included here for treegrid
      // purposes. Issue already filed on spec. Remove this comment
      // when spec updated.
      supportedAttributes: [
        "aria-colindex", "aria-level", "aria-rowindex", "aria-selected",
        "aria-setsize", "aria-posinset"
      ]
    },
    {
      name: "rowgroup",
      nameFrom: ["contents", "author"],
      superclasses: ["structure"],
      mustContain: ["row"],
      scope: ["grid", "table", "treegrid"],
    },
    {
      name: "rowheader",
      nameFrom: ["contents", "author"],
      scope: ["row"],
      superclasses: ["cell", "gridcell", "sectionhead"],
      supportedAttributes: ["aria-sort"],
      nameRequired: true
    },
    {
      name: "scrollbar",
      nameFrom: ["author"],
      requiredAttributes: [
        "aria-controls", "aria-orientation", "aria-valuemax",
        "aria-valuemin", "aria-valuenow"
      ],
      superclasses: ["range"],
      nameRequired: false,
      childrenPresentational: true,
      implicitValues: {
        "aria-orientation": "vertical",
        "aria-valuemin": "0", "aria-valuemax": "100"
      }
    },
    {name: "search", nameFrom: ["author"], superclasses: ["landmark"]},
    {
      name: "searchbox",
      nameFrom: ["author"],
      superclasses: ["textbox"],
      nameRequired: true
    },
    {
      name: "section",
      abstract: true,
      superclasses: ["structure"],
      supportedAttributes: ["aria-expanded"]
    },
    {
      name: "sectionhead",
      abstract: true,
      nameFrom: ["contents", "author"],
      superclasses: ["structure"],
      supportedAttributes: ["aria-expanded"]
    },
    {
      name: "select",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["composite", "group"]
    },
    {
      name: "separator",
      nameFrom: ["author"],
      // TODO(aboxhall): superclass depends on focusability, but
      // doesn"t affect required/supported attributes
      superclasses: ["structure"],
      // TODO(aboxhall): required attributes depend on focusability
      supportedAttributes: [
        "aria-orientation", "aria-valuemin", "aria-valuemax",
        "aria-valuenow", "aria-valuetext"
      ]
    },
    {
      name: "slider",
      nameFrom: ["author"],
      requiredAttributes:
          ["aria-valuemax", "aria-valuemin", "aria-valuenow"],
      superclasses: ["input", "range"],
      supportedAttributes: ["aria-orientation"],
      nameRequired: true,
      childrenPresentational: true,
      // TODO(aboxhall): aria-valuenow default is halfway between
      // aria-valuemin and aria-valuemax
      implicitValues: {
         "aria-orientation": "horizontal",
         "aria-valuemin": "0", "aria-valuemax": "100"
      }
    },
    {
      name: "spinbutton",
      nameFrom: ["author"],
      requiredAttributes:
          ["aria-valuemax", "aria-valuemin", "aria-valuenow"],
      superclasses: ["composite", "input", "range"],
      supportedAttributes: ["aria-required", "aria-readonly"],
      nameRequired: true,
      implicitValues: {"aria-valuenow": "0" }
    },
    {
      name: "status",
      nameFrom: ["author"],
      superclasses: ["section"],
      implicitValues: {"aria-live": "polite", "aria-atomic": "true" }
    },
    {name: "structure", abstract: true, superclasses: ["roletype"]},
    {
      name: "switch", nameFrom: ["contents", "author"],
      superclasses: ["checkbox"], requiredAttributes: ["aria-checked"],
      nameRequired: true, childrenPresentational: true,
      implicitValues: {"aria-checked": "false"}
    },
    {
      name: "tab",
      nameFrom: ["contents", "author"],
      scope: ["tablist"],
      superclasses: ["sectionhead", "widget"],
      supportedAttributes: ["aria-selected"],
      childrenPresentational: true,
      implicitValues: {"aria-selected": "false"}
    },
    {
      name: "table",
      nameFrom: ["author"],
      superclasses: ["section"],
      // TODO(aboxhall): Figure out how to express "rowgroup --> row"
      mustContain: ["row"],
      supportedAttributes: ["aria-colcount", "aria-rowcount"],
      nameRequired: true
    },
    {
      name: "tablist",
      nameFrom: ["author"],
      superclasses: ["composite"],
      mustContain: ["tab"],
      supportedAttributes:
          ["aria-level", "aria-multiselectable", "aria-orientation"],
      implicitValues: {"aria-orientation": "horizontal"}
    },
    {
      name: "tabpanel",
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: true
    },
    {name: "term", nameFrom: ["author"], superclasses: ["section"]},
    {
      name: "textbox",
      nameFrom: ["author"],
      superclasses: ["input"],
      supportedAttributes: [
        "aria-activedescendant", "aria-autocomplete", "aria-multiline",
        "aria-placeholder", "aria-readonly", "aria-required"
      ],
      nameRequired: true
    },
    {name: "timer", nameFrom: ["author"], superclasses: ["status"]},
    {
      name: "toolbar",
      nameFrom: ["author"],
      superclasses: ["group"],
      supportedAttributes: ["aria-orientation"],
      implicitValues: {"aria-orientation": "horizontal"
      }
    },
    {
      name: "tooltip",
      nameFrom: ["contents", "author"],
      superclasses: ["section"],
      nameRequired: true
    },
    {
      name: "tree",
      nameFrom: ["author"],
      mustContain: ["group", "treeitem"],
      superclasses: ["select"],
      supportedAttributes: ["aria-multiselectable", "aria-required"],
      nameRequired: true,
      implicitValues: {"aria-orientation": "vertical"
      }
    },
    {
      name: "treegrid",
      // TODO(aboxhall): Figure out how to express "rowgroup --> row"
      mustContain: ["row"],
      nameFrom: ["author"],
      superclasses: ["grid", "tree"],
      nameRequired: true
    },
    {
      name: "treeitem",
      nameFrom: ["contents", "author"],
      scope: ["group", "tree"],
      superclasses: ["listitem", "option"],
      nameRequired: true
    },
    {name: "widget", abstract: true, superclasses: ["roletype"]},
    {
      name: "window",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["roletype"],
      supportedAttributes: ["aria-expanded", "aria-modal"]
    }
  ]
}