diff --git a/.github/ISSUE_TEMPLATE/rules-issue-template.md b/.github/ISSUE_TEMPLATE/rules-issue-template.md
index 54d7c5fd88..d3cab5eed1 100644
--- a/.github/ISSUE_TEMPLATE/rules-issue-template.md
+++ b/.github/ISSUE_TEMPLATE/rules-issue-template.md
@@ -4,10 +4,7 @@ about: issues related with ACT Rules
title: ''
labels: ''
assignees: ''
-
----
-
-Please describe the issue with references and relevant examples where necessary.
+---Please describe the issue with references and relevant examples where necessary.
--- or ---
diff --git a/__tests__/spelling.js b/__tests__/spelling.js
index 1d0a166ff9..f4d1cf2865 100755
--- a/__tests__/spelling.js
+++ b/__tests__/spelling.js
@@ -109,7 +109,9 @@ function getCuratedMarkdownBody(body, options = {}) {
* @returns {String[]}
*/
function getSpellIgnored() {
- const ignoreConfigured = yaml.safeLoad(fs.readFileSync('./__tests__/spelling-ignore.yml', 'utf8'), {schema: yaml.FAILSAFE_SCHEMA}) //added schema due to entries starting with a non-zero digit
+ const ignoreConfigured = yaml.safeLoad(fs.readFileSync('./__tests__/spelling-ignore.yml', 'utf8'), {
+ schema: yaml.FAILSAFE_SCHEMA,
+ }) //added schema due to entries starting with a non-zero digit
/*
Building spelling exception in the shape FOOxxx where xxx is a number.
diff --git a/_rules/aria-state-or-property-permitted-5c01ea.md b/_rules/aria-state-or-property-permitted-5c01ea.md
index e9e49899c4..4b42b489fb 100755
--- a/_rules/aria-state-or-property-permitted-5c01ea.md
+++ b/_rules/aria-state-or-property-permitted-5c01ea.md
@@ -37,7 +37,7 @@ acknowledgments:
## Applicability
-This rule applies to any [WAI-ARIA state or property][] that is specified on an [HTML or SVG element][namespaced element] that is [included in the accessibility tree][].
+This rule applies to any [WAI-ARIA state or property][] that is [explicitly set][aria set explicit] on an [HTML or SVG element][namespaced element] that is [included in the accessibility tree][].
## Expectation 1
@@ -57,6 +57,8 @@ The presence of prohibited ARIA attributes is often the result of a developer us
In HTML, there are language features that do not have corresponding implicit WAI-ARIA semantics. As per [ARIA in HTML](https://www.w3.org/TR/html-aria/), those elements can have [global states or properties][global]. Some of those elements can also have [inherited][], [supported][], or [required][] [states][state] or [properties][property] that correspond to a [WAI-ARIA role](https://www.w3.org/TR/wai-aria-1.2/#introroles). For example, the `audio` element has no corresponding ARIA semantics but it can have [inherited][], [supported][], or [required][] [states][state] or [properties][property] of the [`application` role](https://www.w3.org/TR/wai-aria-1.2/#application).
+This rule only applies to [explicitly set][aria set explicit] attributes since these have been provided by authors and using the wrong one is therefore an author issue. If an [implicitly set][aria set implicit] attribute is incorrect, this is not necessarily an author error, e.g., it can be the result of re-purposing an existing element.
+
Assessing the value of the attribute is out of scope for this rule.
### Assumptions
@@ -218,7 +220,18 @@ This `div` element is not [included in the accessibility tree][], hence its [WAI
```
+#### Inapplicable Example 3
+
+This `button` does not have any [explicitly set][aria set explicit] ARIA attribute. It has an [implicitly set][aria set implicit] `aria-checked` state, due to the [absence of a `checked` attribute][checked absent] on the `input` element with a `type` [attribute value][] of `checkbox`.
+
+```html
+
+```
+
+[aria set explicit]: #aria-attribute-set:explicit 'Definition of ARIA Attribute Set Explicitly'
+[aria set implicit]: #aria-attribute-set:implicit 'Definition of ARIA Attribute Set Implicitly'
[attribute value]: #attribute-value 'Definition of attribute value'
+[checked absent]: https://www.w3.org/TR/html-aam-1.0/#att-checked-absent 'HTML Accessibility API Mappings, Attribute Checked absent'
[explicit role]: #explicit-role 'Definition of Explicit Role'
[focusable]: #focusable 'Definition of focusable'
[global]: https://www.w3.org/TR/wai-aria-1.2/#global_states 'Definition of Global ARIA States and Properties'
diff --git a/_rules/focusable-no-keyboard-trap-standard-nav-a1b64e.md b/_rules/focusable-no-keyboard-trap-standard-nav-a1b64e.md
index 9eee0be6ca..94fd7098c7 100755
--- a/_rules/focusable-no-keyboard-trap-standard-nav-a1b64e.md
+++ b/_rules/focusable-no-keyboard-trap-standard-nav-a1b64e.md
@@ -88,43 +88,43 @@ use [standard keyboard navigation](#standard-keyboard-navigation) using the Esca
```html
```
diff --git a/_rules/role-attribute-valid-value-674b10.md b/_rules/role-attribute-valid-value-674b10.md
index 4e0faad1c3..c0bf13c470 100755
--- a/_rules/role-attribute-valid-value-674b10.md
+++ b/_rules/role-attribute-valid-value-674b10.md
@@ -49,6 +49,8 @@ The `role` attribute is a set of [space separated tokens][]. Having a [whitespac
Not every role can be used on every element. Which ARIA roles may be used on which HTML elements is defined in [ARIA in HTML](https://www.w3.org/TR/html-aria/). Testing this is not part of this rule.
+This rule considers the [value of the attribute as set in the HTML code][html attribute value], which differs from the [attribute value][attribute value] obtained after parsing it and discarding invalid tokens.
+
### Assumptions
There are no assumptions.
@@ -179,7 +181,9 @@ This `role` attribute is specified on an element which is [programmatically hidd
```
[ascii whitespace]: https://infra.spec.whatwg.org/#ascii-whitespace 'Definition of ASCII whitespace'
+[attribute value]: #attribute-value:role 'Definition of Attribute Value of the Role Attribute'
[html or svg element]: #namespaced-element
+[html attribute value]: https://html.spec.whatwg.org/multipage/dom.html#attributes 'HTML Specification of Attribute Value'
[implicit role]: #implicit-role 'Definition of Implicit Role'
[programmatically hidden]: #programmatically-hidden 'Definition of Programmatically Hidden'
[role attribute]: https://www.w3.org/TR/role-attribute/ 'Specification of the Role attribute'
diff --git a/_rules/role-required-states-and-properties-4e8ab6.md b/_rules/role-required-states-and-properties-4e8ab6.md
index 8d4336e1c8..2730f72870 100755
--- a/_rules/role-required-states-and-properties-4e8ab6.md
+++ b/_rules/role-required-states-and-properties-4e8ab6.md
@@ -32,17 +32,19 @@ acknowledgments:
## Applicability
-This rule applies to any [HTML or SVG element][] that is [included in the accessibility tree][] and has an [explicit semantic role][], except if the element has an [implicit semantic role][] that is identical to the [explicit semantic role][].
+This rule applies to any [HTML or SVG element][] that is [included in the accessibility tree][].
## Expectation
-For each test target, the [WAI-ARIA required states and properties][] for the role are set and not empty (`""`), unless the state or property has a default value listed under [WAI-ARIA implicit value for role][].
+For each test target, the [WAI-ARIA required states and properties][] for the role are [set][aria set] and not empty (`""`).
+
+The attributes may be [explicitly set][aria set explicit], [implicitly set][aria set implicit], or [set by default][aria set default].
## Background
Omitting [WAI-ARIA required states and properties][] is often the result of a developer error. When required properties are missing and a default value is not specified by [WAI-ARIA Specifications][], the behavior is not defined. For [WAI-ARIA 1.2][], the only [explicit semantic roles][explicit semantic role] with a required property with a default value are the `option` and `tabs roles` for the `aria-selected` property.
-This rule is testing author built components that specify [explicit semantic roles][explicit semantic role] and not components that keep their [implicit semantic role][]. For components that keep their [implicit semantic role][], all native HTML and SVG elements have native attributes that are mapped to all of the [WAI-ARIA required states and properties](https://www.w3.org/TR/wai-aria/#requiredState). Most of these mappings are defined in the [HTML Accessibility API Mappings, Attribute State and Property Mappings][html aam].
+The way the attribute is [set][aria set] doesn't matter for this rule. As long as authors can rely on User Agents or Assistive Technologies to set the attribute, this won't create problems for users. As per the [First Rule of ARIA use][], authors should rely on [implicitly set][aria set implicit] attributes when possible.
### Assumptions
@@ -66,7 +68,7 @@ This rule relies on browsers and assistive technologies to support leaving out [
#### Passed Example 1
-This `heading` has the required `aria-level` property.
+This `heading` has the required `aria-level` property [explicitly set][aria set explicit].
```html
@@ -76,7 +78,7 @@ This `heading` has the required `aria-level` property.
#### Passed Example 2
-This `checkbox` has the required `aria-checked` property.
+This `checkbox` has the required `aria-checked` property [explicitly set][aria set explicit].
```html
@@ -85,7 +87,7 @@ This `checkbox` has the required `aria-checked` property.
#### Passed Example 3
-This `scrollbar` has the required properties `aria-controls` and `aria-valuenow`. `aria-valuemin` has a default value of 0 and `aria-valuemax` of 100.
+This `scrollbar` has the required properties `aria-controls` and `aria-valuenow` [explicitly set][aria set explicit]. `aria-valuemin` has a default value of 0 and `aria-valuemax` of 100 and are thus [set by default][aria set default].
```html
@@ -94,7 +96,7 @@ This `scrollbar` has the required properties `aria-controls` and `aria-valuenow`
#### Passed Example 4
-These `option` nodes do not need the required `aria-selected` property because it has a default value of `false`.
+These `option` nodes have the required `aria-selected` property [set by default][aria set default].
```html
Tags
@@ -106,7 +108,7 @@ These `option` nodes do not need the required `aria-selected` property because i
#### Passed Example 5
-This `separator` is not a `widget` because it is not [focusable][]. The `separator` role only requires the `aria-valuenow` property when the element is focusable.
+This `separator` is not a `widget` because it is not [focusable][]. The `separator` role does not have any required property when the element is not focusable.
```html
My first HTML
@@ -116,7 +118,7 @@ This `separator` is not a `widget` because it is not [focusable][]. The `separat
#### Passed Example 6
-This `combobox` has the required properties `aria-controls` and `aria-expanded`.
+This `combobox` has the required properties `aria-controls` and `aria-expanded` [explicitly set][aria set explicit].
```html
@@ -127,11 +129,41 @@ This `combobox` has the required properties `aria-controls` and `aria-expanded`.
```
+#### Passed Example 7
+
+This `checkbox` has its required `aria-checked` property [implicitly set][aria set implicit].
+
+```html
+
+```
+
+#### Passed Example 8
+
+This `menuitemcheckbox` has its required `aria-checked` property [implicitly set][aria set implicit].
+
+```html
+
+```
+
+#### Passed Example 9
+
+This `iframe` element is [included in the accessibility tree][], even without a role, and therefore has no [WAI-ARIA required states and properties][].
+
+```html
+
+```
+
### Failed
#### Failed Example 1
-This `heading` does not have the required `aria-level` property. Prior to [WAI-ARIA 1.2][] the `heading` role had an implicit default `aria-level` value of `2`. As of WAI-ARIA 1.2 this property must be explicitly set.
+This `heading` does not have the required `aria-level` property. Prior to [WAI-ARIA 1.2][] the `heading` role had a default `aria-level` value of `2`. As of WAI-ARIA 1.2 this property must be [explicitly set][aria set explicit].
```html
@@ -141,7 +173,7 @@ This `heading` does not have the required `aria-level` property. Prior to [WAI-A
#### Failed Example 2
-This `switch` does not have the required `aria-checked` property. Prior to [WAI-ARIA 1.2][] the `switch` role had an implicit default `aria-checked` value of `false`. As of WAI-ARIA 1.2 this property must be explicitly set.
+This `switch` does not have the required `aria-checked` property. Prior to [WAI-ARIA 1.2][] the `switch` role had a default `aria-checked` value of `false`. As of WAI-ARIA 1.2 this property must be [explicitly set][aria set explicit].
```html
@@ -151,7 +183,7 @@ This `switch` does not have the required `aria-checked` property. Prior to [WAI-
#### Failed Example 3
-This `checkbox` does not have the required property `aria-checked`. Prior to [WAI-ARIA 1.2][] the `checkbox` had an implicit default `aria-checked` value of `false`. As of WAI-ARIA 1.2 this property must be explicitly set.
+This `checkbox` does not have the required property `aria-checked`. Prior to [WAI-ARIA 1.2][] the `checkbox` role had a default `aria-checked` value of `false`. As of WAI-ARIA 1.2 this property must be [explicitly set][aria set explicit].
```html
@@ -170,7 +202,7 @@ This `separator` does not have the required `aria-valuenow` property. This is re
#### Failed Example 5
-This `combobox` does not have the required `aria-expanded` property. Prior to [WAI-ARIA 1.2][] the `combobox` had an implicit default `aria-expanded` value of `false`. As of WAI-ARIA 1.2 this property must be explicitly set.
+This `combobox` does not have the required `aria-expanded` property. Prior to [WAI-ARIA 1.2][] the `combobox` had a default `aria-expanded` value of `false`. As of WAI-ARIA 1.2 this property must be [explicitly set][aria set explicit].
```html
@@ -198,7 +230,7 @@ This `combobox` uses `aria-owns` instead of using the required `aria-controls` p
#### Inapplicable Example 1
-This `div` does not have a [semantic role](#semantic-role).
+This `div` is not [included in the accessibility tree][] due to its role of `generic`.
```html
Some Content
@@ -206,23 +238,18 @@ This `div` does not have a [semantic role](#semantic-role).
#### Inapplicable Example 2
-This `checkbox` has an [implicit semantic role](#implicit-role) that is identical to the [explicit semantic role](#explicit-role). This allows native HTML `checked` attribute to apply.
-
-```html
-
-```
-
-#### Inapplicable Example 3
-
This `combobox` is not [included in the accessibility tree][] due to its styling, hiding it from everybody.
```html
```
+[aria set]: #aria-attribute-set 'Definition of ARIA Attribute Set'
+[aria set default]: #aria-attribute-set:default 'Definition of ARIA Attribute Set by Default'
+[aria set explicit]: #aria-attribute-set:explicit 'Definition of ARIA Attribute Set Explicitly'
+[aria set implicit]: #aria-attribute-set:implicit 'Definition of ARIA Attribute Set Implicitly'
[explicit semantic role]: #explicit-role 'Definition of explicit semantic role'
-[html aam]: https://www.w3.org/TR/html-aam-1.0/#html-attribute-state-and-property-mappings 'Specification of HTML attributes value mapping to ARIA states and properties'
-[implicit semantic role]: #implicit-role 'Definition of implicit semantic role'
+[first rule of aria use]: https://www.w3.org/TR/using-aria/#rule1 'First Rule of ARIA Use'
[included in the accessibility tree]: #included-in-the-accessibility-tree 'Definition of Included in The Accessibility Tree'
[wai-aria required states and properties]: https://www.w3.org/TR/wai-aria-1.2/#requiredState
[wai-aria specifications]: #wai-aria-specifications 'Definition of WAI-ARIA Specifications'
diff --git a/_rules/scrollable-element-keyboard-accessible-0ssw9k.md b/_rules/scrollable-element-keyboard-accessible-0ssw9k.md
index 87b9e0c65a..a92154aa24 100755
--- a/_rules/scrollable-element-keyboard-accessible-0ssw9k.md
+++ b/_rules/scrollable-element-keyboard-accessible-0ssw9k.md
@@ -40,8 +40,9 @@ This rule applies to any [HTML element][] that has [visible][] [children][] in t
## Expectation
-For each target element, at least one of the following is true:
-- the element is included in [sequential focus navigation][]; or
+For each target element, at least one of the following is true:
+
+- the element is included in [sequential focus navigation][]; or
- the element has a [descendant][] in the [flat tree][] that is included in [sequential focus navigation][]; or
- the element is [inert][].
@@ -119,7 +120,7 @@ This [scrollable][] `section` element is [inert][] because of the modal dialog,
```html
@@ -144,11 +145,11 @@ This [scrollable][] `section` element is [inert][] because of the modal dialog,
```
diff --git a/pages/glossary/aria-attribute-set.md b/pages/glossary/aria-attribute-set.md
new file mode 100644
index 0000000000..2fa80f993a
--- /dev/null
+++ b/pages/glossary/aria-attribute-set.md
@@ -0,0 +1,40 @@
+---
+title: ARIA state or property is set
+key: aria-attribute-set
+unambiguous: true
+objective: true
+input_aspects:
+ - Accessibility tree
+ - CSS styling
+ - DOM tree
+---
+
+An ARIA [state][aria state] or [property][aria property] is set on an [HTML element][namespaced element] when it has a value. This may happen in three ways:
+
+- It is explicitly set if there is a corresponding `aria-*` HTML attribute on the element. If the [value][html attribute value] written in the HTML code is not valid for this ARIA [state][aria state] or [property][aria property] then the attribute is set but does not have an [attribute value][].
+
+ For example, `aria-label` is explicitly set on ``; and `aria-checked` is explicitly set on ``, even though it does not have an [attribute value][].
+
+- It is implicitly set if there is no corresponding `aria-*` HTML attribute on the element, but the element or one of its HTML attributes has an [ARIA attribute mapping][aria attribute mapping] setting this ARIA attribute.
+
+ For example, `aria-checked` is implicitly set both on `` (through the [presence of the HTML attribute `checked`][checked present]) and `` (through its [absence][checked absent]). It is not set on `` given that the mapping for `checked` doesn't apply when the `input` element is not of type `checkbox` or `radio`.
+
+- It is set by default if there is no corresponding `aria-*` HTML attribute on the element, and either the element has a [semantic role][] that has a default value for this ARIA [state][aria state] or [property][aria property] or the attribute itself has a default value.
+
+ For example, `aria-haspopup` is set by default on `` through the role of `combobox`.
+
+#### Background for ARIA attribute set
+
+For explicitly set attributes, this definition only looks at the value written in the HTML code, without considering its validity. Attributes that are explicitly set with an invalid value are author errors that are detected by the rule [Role attribute has valid value](https://www.w3.org/WAI/standards-guidelines/act/rules/674b10/), and authors should not rely on invalid value to have forbidden attributes discarded from roles not allowing it.
+
+For attributes set by default, this definition doesn't consider whether the attribute is allowed on the element (or role). Thus, `aria-expanded` (whose default value is `false`) is considered as set by default on `` even though it is not allowed on the `textbox` role. While authors can (and should) rely on attributes to be set by default, they also have no direct control on them and therefore whether they are allowed on an element never causes an author error.
+
+[aria attribute mapping]: https://www.w3.org/TR/html-aam-1.0/#html-attribute-state-and-property-mappings 'HTML Attribute State and Property Mappings'
+[aria property]: https://www.w3.org/TR/wai-aria-1.2/#dfn-property 'Definition of ARIA Property'
+[aria state]: https://www.w3.org/TR/wai-aria-1.2/#dfn-state 'Definition of ARIA State'
+[attribute value]: #attribute-value 'Definition of Attribute Value'
+[checked absent]: https://www.w3.org/TR/html-aam-1.0/#att-checked-absent 'HTML Accessibility API Mappings, Attribute Checked absent'
+[checked present]: https://www.w3.org/TR/html-aam-1.0/#att-checked 'HTML Accessibility API Mappings, Attribute Checked present'
+[html attribute value]: https://html.spec.whatwg.org/multipage/dom.html#attributes 'HTML Specification of Attribute Value'
+[namespaced element]: #namespaced-element 'Definition of Namespaced Element'
+[semantic role]: #semantic-role 'Definition of Semantic Role'
diff --git a/pages/glossary/attribute-value.md b/pages/glossary/attribute-value.md
index 49066d5ac5..fcee6a9aff 100755
--- a/pages/glossary/attribute-value.md
+++ b/pages/glossary/attribute-value.md
@@ -17,16 +17,24 @@ Some notable case of attribute value, among others:
- For attributes that accept [numbers][], the attribute value is the result of parsing the value written in the HTML code according to the rules for parsing this kind of number.
- For attributes that accept sets of tokens, whether [space separated][] or [comma separated][], the attribute value is the set of tokens obtained after parsing the set and, depending on the case, converting its items to lowercase (if the set is used in a case-insensitive context).
- For `aria-*` attributes, the attribute value is computed as indicated in the [WAI-ARIA specification][] and the [HTML Accessibility API Mappings][html aam].
+- For the `role` attribute, its attribute value is the first valid token of the value as written in the HTML code.
This list is not exhaustive, and only serves as an illustration for some of the most common cases.
The attribute value of an [IDL attribute][] is the value returned on getting it. Note that when an [IDL attribute][] [reflects][reflect] a content attribute, they have the same attribute value.
+#### Background
+
+Note that this definition of _attribute value_ differs from the "value of an attribute" as defined in the [DOM][dom attribute value] or [HTML][html attribute value] specifications. The latter is the value as written in the HTML code, while the former is the value after parsing and computing it according to specifications.
+
[boolean attributes]: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes 'HTML Specification of Boolean Attribute'
[comma separated]: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#comma-separated-tokens 'HTML Specification of Comma Separated Tokens'
+
+[dom attribute value]][dom-attribute-value]: https://dom.spec.whatwg.org/#concept-attribute-value 'DOM Specification of Attribute Value'
[enumerated attributes]: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#enumerated-attribute 'HTML Specification of Enumerated Attribute'
[idl attribute]: https://heycam.github.io/webidl/#idl-attributes "Definition of Web IDL Attribute (Editor's Draft)"
[html aam]: https://www.w3.org/TR/html-aam-1.0/#html-attribute-state-and-property-mappings 'Specification of HTML attributes value mapping to ARIA states and properties'
+[html attribute value]: https://html.spec.whatwg.org/multipage/dom.html#attributes 'HTML Specification of Attribute Value'
[numbers]: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#numbers 'HTML Specification of Number Parsing'
[reflect]: https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#reflecting-content-attributes-in-idl-attributes 'HTML specification of Reflecting Content Attributes in IDL Attributes'
[space separated]: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#space-separated-tokens 'HTML Specification of Space Separated Tokens'
diff --git a/pages/glossary/large-scale-text.md b/pages/glossary/large-scale-text.md
index 7efd8dd96d..91f5660cc5 100755
--- a/pages/glossary/large-scale-text.md
+++ b/pages/glossary/large-scale-text.md
@@ -13,17 +13,17 @@ A text node is large scale text if at least one of the following is true:
- the text node [computed][] [font-size][] is at least 18 [points][], or
- the text node [computed][] [font-size][] is at least 14 [points][] and has a [computed][] [font weight][] of 700 or higher.
-
#### Background
+
In the domain of languages such as Chinese, Japanese, and Korean (CJK languages), encompassing the Unicode character range from 4E00 to 9FFF ([CJK Unified Ideographs](https://unicode.org/charts/PDF/U4E00.pdf)), it becomes crucial to acknowledge the intricate nuances in their typographic requirements. Despite sharing a common Unicode spectrum, each CJK language and its corresponding country may exhibit distinct typographic preferences and standards.
Particularly noteworthy is the lack of uniformity in defining text sizes as either large or small within the following ranges:
+
- from 18 [points][] to 22 [points][]
- from 14 [points][] to 18 [points][] with a [computed][] [font weight][] of 700 or higher.
Whether CJK characters in these ranges should be considered as "large scale" depends on the language of the text, as well as the country for which the text is designed and whose requirements must be followed. Given that these pieces of information are not readily available, the ACT rules adhere to the large text definition outlined above. This definition is applicable across all languages under the rationale of "no false positives."
-
[computed]: https://www.w3.org/TR/css-cascade-3/#computed-value
[font-size]: https://www.w3.org/TR/css-fonts-3/#propdef-font-size
[points]: https://www.w3.org/TR/css-values/#pt