Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
4b80053
[73f2c2] Autocomplete invalid - Accessibility note clarifies HTML spe…
giacomo-petri Jun 10, 2024
dff94b2
Bump ws from 7.5.9 to 7.5.10 (#2197)
dependabot[bot] Jun 20, 2024
a77f604
Update Form field has non-empty accessible name [e086e5]: Added secon…
giacomo-petri Aug 1, 2024
f8afb8f
Update non-empty title HTML reference (#2203)
giacomo-petri Aug 1, 2024
d9a44b4
Links with identical accessible names and same context serve equivale…
giacomo-petri Aug 1, 2024
7e71738
New rule: Summary element has non-empty accessible name (#2202)
WilcoFiers Aug 26, 2024
b4663d2
Added text-shadow failure - Text has minimum contrast [afw4f7] (#2184)
giacomo-petri Aug 30, 2024
b379b0c
Removed ambiguity for "Passed Example 2" of "HTML page has non-empty …
giacomo-petri Aug 30, 2024
70e6e12
fix-broken-summary-link (#2213)
WilcoFiers Sep 3, 2024
d77d6fc
HTML page has non-empty title [2779a5]: Shadow root example - Include…
giacomo-petri Sep 30, 2024
6be0845
Tweaks to autocomplete-valid-value-73f2c2.md (#2221)
WilcoFiers Oct 31, 2024
e17ea0c
Updated "Scrollable content can be reached with sequential focus navi…
giacomo-petri Nov 21, 2024
c5cb1ad
Bump braces and jest-extended (#2196)
dependabot[bot] Nov 21, 2024
f9eace3
Tweak definition of focusable (#2210)
tombrunet Nov 21, 2024
5ba46d9
Update to rules format 1.1 (#2220)
WilcoFiers Nov 21, 2024
8204303
Tweak image-description rule (#2225)
WilcoFiers Nov 25, 2024
d1b7a2a
upgrade act-tools to latest (#2227)
WilcoFiers Dec 2, 2024
041fe61
Fixes for a1b64e, ebe86a due to surveys (#2209)
tombrunet Dec 5, 2024
333bea2
Correct descriptions of failed examples in valid language tag rule (#…
sabernhardt Dec 20, 2024
2917db6
Editorial tweaks to object name rule (#2218)
WilcoFiers Jan 16, 2025
4a54d89
Update issue templates
daniel-montalvo Feb 6, 2025
1567039
accessibility support issue template (#2270)
WilcoFiers Feb 6, 2025
f7117b5
acc support template fix (#2271)
WilcoFiers Feb 6, 2025
0c8564e
Add 1.1.1 secondary requirement to marked-as-decorative rule (#2224)
WilcoFiers Feb 7, 2025
20212dd
meta-refresh fix quote markup (#2234)
WilcoFiers Feb 7, 2025
8d979ef
Updated ARIA state or property is permitted [5c01ea]: clarified globa…
giacomo-petri Feb 7, 2025
7c50fae
Direct Netlify setup for PR preview deploys (#2307)
daniel-montalvo Feb 13, 2025
d1cdb8b
Bump undici from 5.28.4 to 5.28.5 (#2308)
dependabot[bot] Feb 17, 2025
4a3a75d
[23a2a8] Image has non-empty accessible name - Removes Inapplicable E…
giacomo-petri Mar 17, 2025
1aa446e
chore: always use act-tools#main (#2317)
WilcoFiers Mar 28, 2025
ebaa22b
valid role, remove fallback role support note (#2297)
WilcoFiers Mar 31, 2025
30b5343
summary name, fix markdown error (#2304)
WilcoFiers Apr 10, 2025
6c575ee
Updated required owned elms rule description (#2305)
WilcoFiers Apr 10, 2025
fbf3d49
[Editorial] - [5c01ea] ARIA state or property is permitted - Inapplic…
giacomo-petri Apr 10, 2025
589ed44
Added aria-label to the role="dialog" element (#2240)
giacomo-petri Apr 22, 2025
022c766
Removed assumption about browsers handling images with empty alt in d…
giacomo-petri Apr 22, 2025
dd20b58
[a25f45] Headers attribute specified on a cell refers to cells in the…
giacomo-petri Apr 22, 2025
abee410
Update role-required-states-and-properties-4e8ab6.md (#2313)
giacomo-petri Apr 22, 2025
1b03f27
Update table-header-cell-has-assigned-cells-d0f69e.md (#2267)
giacomo-petri May 1, 2025
8cf9deb
Update role-required-states-and-properties-4e8ab6.md (#2265)
giacomo-petri May 1, 2025
f9ee5d5
Update role-required-states-and-properties-4e8ab6.md (#2263)
giacomo-petri May 1, 2025
5d67661
Update aria-state-or-property-permitted-5c01ea.md (#2255)
giacomo-petri May 1, 2025
6e391bd
Update role-attribute-valid-value-674b10.md (#2253)
giacomo-petri May 1, 2025
c8fe9e8
[Editorial] - [bc4a75] ARIA required owned elements - Inapplicable Ex…
giacomo-petri May 1, 2025
66404b7
Update aria-required-owned-element-bc4a75.md (#2249)
giacomo-petri May 1, 2025
fe5970f
Added aria-label to the role="listbox" element (#2246)
giacomo-petri May 1, 2025
3017727
[Editorial] - [a25f45] Headers attribute specified on a cell refers t…
giacomo-petri May 1, 2025
cdbb540
Add 2.1.3 to iframe focusable rule (#2229)
WilcoFiers May 1, 2025
a8be8b7
Text is clipped: "link to a full version" (#2200)
dan-tripp-siteimprove May 1, 2025
743b0c6
Unnecessary autocomplete support item (#2284)
WilcoFiers May 2, 2025
199a49f
block-collapsible assumption under wrong heading (#2285)
WilcoFiers May 2, 2025
6503b0b
Update netlify preview command (#2325)
daniel-montalvo May 5, 2025
e10a2ae
Fix sc144 link (#2326)
daniel-montalvo May 5, 2025
b0d82c7
button name move assumption to the correct section (#2286)
WilcoFiers May 8, 2025
b4e371c
summary name, element position clarified (#2323)
zlayaAvocado May 8, 2025
be01a9a
Updates process (#2316)
daniel-montalvo May 13, 2025
bc308f0
[4e8ab6] Fix aria mapping on the "Element with role attribute has req…
zlayaAvocado May 15, 2025
8a5f97a
Bump undici from 5.28.5 to 5.29.0 (#2330)
dependabot[bot] May 29, 2025
27ed9f8
[e88epe] Image not in the accessibility tree is decorative - Updated …
giacomo-petri May 29, 2025
994ccc0
Update heading-non-empty-accessible-name-ffd0e9.md (#2331)
WilcoFiers May 29, 2025
32fe6af
"Element with presentational children has no focusable content" (rule…
dan-tripp-siteimprove Jun 12, 2025
d549cb2
Add test for validating aria properties for `accessibility_requiremen…
zlayaAvocado Jun 26, 2025
794ed26
Update the aria-required-owned rule [bc4a75] to include the elements …
shunguoy Jun 26, 2025
1bbef71
Minor typos correction and fixing broken links on the WAI website (#2…
daniel-montalvo Jul 8, 2025
1098dca
Update aria-hidden-no-focusable-content-6cfa84.md (#2332)
WilcoFiers Jul 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions .github/ISSUE_TEMPLATE/ACCESSIBILITY_SUPPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
---
name: Accessibility support template
about: Issue for tracking accessibility support on ACT Rules
title: ''
labels: ['accessibility support']
assignees: ''
---

## Accessibility support

(( Put the accessibility support item here ))

## ACT Rules

- ... List the rules here, link to its acc support section

## Test cases

### Test case 1 ...

(( Add test case here ))

```html
code snippet here
```

[Open this test case]()

(( Add a link to a code pen or other hosted test case. Keep in mind this test case needs to be accessible and persistent. ))

#### Preconditions

Before running the test, check your settings. In many cases default settings aren't strictly required and will not impact the results. Use common sense here. If non-default settings are necessary for you, record the settings used in the reported results.

- Ensure browsers are in the default settings, turn off unnecessary extensions
- Ensure ATs are in the default settings
- Ensure operating system are in default settings
- Ensure software uses the correct version (usually the latest version)

#### Test instructions

(( Provide instructions on how to test the test case, this should include: ))

- Which technologies to use
- Any setting changes necessary to run the test
- Any variation in how to operate the different assistive technologies
- Step by step instructions on how to check the test case
- What the expected results are

### External links

(( List any external links to bugs in browsers & AT, WPT, or spec issues. Be sure to open issues in the appropriate repositories. ))

<!--
Links to external resources to look for / raise issues
- Web platform tests: https://github.com/web-platform-tests/wpt
- JAWS issues: https://github.com/FreedomScientific/VFO-standards-support/issues
- NVDA issues: https://github.com/nvaccess/nvda/issues
- Firefox issues: https://bugzilla.mozilla.org/
- Chromium issues: https://issues.chromium.org/issues?q=componentid:1363614+
- Safari issues: https://github.com/WebKit/webkit/issues
- ARIA: https://github.com/w3c/aria/issues
- HTML: https://github.com/whatwg/html/issues
- CSS: https://github.com/w3c/csswg-drafts/issues
- AccName: https://github.com/w3c/accname/issues
- HTML AAM: https://github.com/w3c/html-aam/issues
- ARIA in HTML: https://github.com/w3c/html-aria/issues
- PowerMapper tests: https://www.powermapper.com/tests/
- Accessibility support: https://www.a11ysupport.io/
-->

## Test results

Please report test results in a comment below. Please use the following format:

```md
## Test case X

- Date: ...
- Operating system: ..., version ...
- Browser: ..., version ...
- Assistive technology: ..., version ...
- Test result: Passed / Failed (if failed, how was it different from expected?)
```
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
---
name: Rules issue template
about: issues related with ACT Rules
title: ''
labels: ''
assignees: ''

---

Please describe the issue with references and relevant examples where necessary.

--- or ---
Expand Down
28 changes: 28 additions & 0 deletions .github/scripts/pr-preview.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env zx
import 'zx/globals';
import { config, cloneWcagActRules, commitAndPush } from './commons.mjs'

await cloneWcagActRules(config);
await generateProposedRulePages(config);
await generateTestCases(config);
// const commitMessage = (await $`git log -1 --pretty=%B`).stdout;
// await commitAndPush(config, commitMessage);

async function generateProposedRulePages({ tmpDir, rulesDir, glossaryDir, testAssetsDir }) {
await $`node ./node_modules/act-tools/dist/cli/rule-transform.js \
--rulesDir "${rulesDir}" \
--glossaryDir "${glossaryDir}" \
--testAssetsDir "${testAssetsDir}" \
--outDir "${tmpDir}" \
--proposed
`;
}

async function generateTestCases({ tmpDir, rulesDir, testAssetsDir }) {
await $`node ./node_modules/act-tools/dist/cli/build-examples.js \
--rulesDir "${rulesDir}" \
--testAssetsDir "${testAssetsDir}" \
--outDir "${tmpDir}" \
--proposed
`;
}
3 changes: 3 additions & 0 deletions .github/workflows/wai-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ jobs:
- run: git config --global url."https://github.com/".insteadOf ssh://git@github.com/
- name: Install dependencies
run: npm ci
# Since we control this we can safely just always use the latest
- name: Install act-tools latest
run: npm install github:act-rules/act-tools#main
- name: Configure git
run: |
git config --global url."https://${{ secrets.WAI_GIT_NAME }}:${{ secrets.WAI_GIT_ACCESS_TOKEN }}@github.com".insteadOf "https://github.com"
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,6 @@ yarn.lock

# Tmp build directory
wcag-act-rules-tmp/

# Local Netlify folder
.netlify
18 changes: 11 additions & 7 deletions __tests__/frontmatter.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,18 +93,22 @@ function validateRuleFrontmatter({ frontmatter }, metaData) {
/**
* The below check the `values` for every `key - value` pair of accessibility requirements
*/
const accRequirementValues = Object.values(accessibility_requirements)
test.each(accRequirementValues)('has expected keys for accessibility requirement: `%p`', accReq => {
expect(accReq).not.toBeNull()
expect(typeof accReq).toBe('object')
const keys = Object.keys(accReq).sort()
const accessibilityReqs = Object.entries(accessibility_requirements).map(([key, value]) => ({ key, value }))
test.each(accessibilityReqs)('has expected keys for accessibility requirement: `%p`', ({ key, value }) => {
expect(value).not.toBeNull()
expect(typeof value).toBe('object')
const keys = Object.keys(value).sort()

if (keys.includes('secondary')) {
expect(keys.length).toBe(1)
expect(typeof accReq.secondary).toBe('string')
expect(typeof value.secondary).toBe('string')
} else {
const requiredProps = ['failed', 'forConformance', 'inapplicable', 'passed']
if (!/wcag-technique:.*/.test(key) && !/wcag2\d:.*/.test(key)) {
requiredProps.push('title')
}
expect(keys.length).toBeGreaterThanOrEqual(4)
expect(keys).toIncludeAllMembers(['failed', 'forConformance', 'inapplicable', 'passed'])
expect(keys).toIncludeAllMembers(requiredProps)
}
})
}
Expand Down
5 changes: 5 additions & 0 deletions __tests__/spelling-ignore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,8 @@
- unitless
- luminance
- disambiguated
- superclass
- grey

# Parts of Unicode
- 000A
Expand Down Expand Up @@ -293,3 +295,6 @@
- A-lum-min
- B-lum-max
- B-lum-min

#Browsers Internal Roles
- SvgRoot
6 changes: 3 additions & 3 deletions _rules/__tests__/headings.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ describeRule('headings', ruleData => {
/**
* Check for `required` `h2` headings
*/
const requiredH2 = [`Applicability`, `Assumptions`, `Accessibility Support`, `Background`, `Test Cases`]
const requiredH2 = [`Applicability`, `Background`, `Test Cases`]
const h2Headings = getHeadingOfDepth(headings, 2)
test.each(requiredH2)('has required `h2` - `%s`', heading => {
expect(h2Headings).toContain(heading)
Expand All @@ -67,9 +67,9 @@ describeRule('headings', ruleData => {
/**
* Check for `required` `h3` headings
*/
const requiredH3 = [`Passed`, `Failed`, `Inapplicable`]
const requiredH3 = [`Assumptions`, `Accessibility Support`, `Passed`, `Failed`, `Inapplicable`]
const h3Headings = getHeadingOfDepth(headings, 3)
test.each(requiredH3)('has required `h2` - `%s`', heading => {
test.each(requiredH3)('has required `h3` - `%s`', heading => {
expect(h3Headings).toContain(heading)
})

Expand Down
15 changes: 8 additions & 7 deletions _rules/aria-attr-defined-5f99a7.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
id: 5f99a7
name: ARIA attribute is defined in WAI-ARIA
rules_format: 1.1
rule_type: atomic
description: |
This rule checks that each `aria-` attribute specified is defined in ARIA 1.2.
Expand All @@ -26,17 +27,17 @@ This rule applies to any attribute that starts with `aria-`.

Each target attribute is defined in [WAI-ARIA Specifications][].

## Assumptions
## Background

There are no assumptions.
The presence of unknown ARIA attributes is often the result of a typo or other developer error. These attributes are ignored by browsers and other assistive technologies. This often means that a state or property which should exist is missing.

## Accessibility Support
### Assumptions

There are no accessibility support issues known.
There are no assumptions.

## Background
### Accessibility Support

The presence of unknown ARIA attributes is often the result of a typo or other developer error. These attributes are ignored by browsers and other assistive technologies. This often means that a state or property which should exist is missing.
There are no accessibility support issues known.

### Bibliography

Expand Down Expand Up @@ -64,7 +65,7 @@ This `article` element has an `aria-atomic` attribute which is defined in [WAI-A
This `div` element with a role of `dialog` has an `aria-modal` attribute which is defined in [WAI-ARIA Specifications][].

```html
<div role="dialog" aria-modal="true">Contains modal content...</div>
<div role="dialog" aria-modal="true" aria-label="Modal title">Contains modal content...</div>
```

#### Passed Example 3
Expand Down
19 changes: 10 additions & 9 deletions _rules/aria-hidden-no-focusable-content-6cfa84.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
id: 6cfa84
name: Element with aria-hidden has no content in sequential focus navigation
rules_format: 1.1
rule_type: atomic
description: |
This rule checks that elements with an `aria-hidden` attribute do not contain elements that are part of the sequential focus navigation and focusable.
Expand All @@ -11,7 +12,7 @@ accessibility_requirements:
passed: further testing needed
inapplicable: further testing needed
using-aria:fourth:
title: Fourth rule of ARIA use
title: Using ARIA, 2.4 Fourth Rule of ARIA Use
forConformance: false
failed: not satisfied
passed: further testing needed
Expand All @@ -34,14 +35,6 @@ This rule applies to any element with an `aria-hidden` [attribute value][] of `t

None of the target elements has an [inclusive descendant][] in the [flat tree][] that are [focusable][] and part of the [sequential focus navigation][].

## Assumptions

Interacting with the page does not result in changing the `aria-hidden` [attribute value][] of target elements. An example of such a situation would be when closing a modal dialog makes previously hidden elements that were not [focusable][] or part of the [sequential focus navigation][] become [focusable][] and part of the [sequential focus navigation][].

## Accessibility Support

Some user agents treat the value of `aria-hidden` attribute as case-sensitive.

## Background

Using `aria-hidden="false"` on a descendant of an element with `aria-hidden="true"` [**does not** expose that element](https://www.w3.org/TR/wai-aria-1.2/#aria-hidden). `aria-hidden="true"` hides itself and all its content from assistive technologies.
Expand All @@ -52,6 +45,14 @@ An element with an `aria-hidden` attribute set to `true` that is also part of th

The 1 second time span introduced in the exception of the definition of [focusable][] is an arbitrary limit which is not included in WCAG. Given that scripts can manage the focus state of elements, testing the focused state of an element consistently would be impractical without a time limit.

### Assumptions

Interacting with the page does not result in changing the `aria-hidden` [attribute value][] of target elements. An example of such a situation would be when closing a modal dialog makes previously hidden elements that were not [focusable][] or part of the [sequential focus navigation][] become [focusable][] and part of the [sequential focus navigation][].

### Accessibility Support

Some user agents treat the value of `aria-hidden` attribute as case-sensitive.

### Related rules

- [Element with presentational children has no focusable content](https://www.w3.org/WAI/standards-guidelines/act/rules/307n5z/)
Expand Down
21 changes: 11 additions & 10 deletions _rules/aria-required-context-role-ff89c9.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
id: ff89c9
name: ARIA required context role
rules_format: 1.1
rule_type: atomic
description: |
This rule checks that an element with an explicit semantic role exists inside its required context.
Expand Down Expand Up @@ -33,16 +34,6 @@ This rule applies to any [HTML or SVG element][] that is [included in the access

Each test target is the child in the [accessibility tree][] of an element that has a [semantic role][] that is one of the [required context roles][] of the target element.

## Assumptions

The rule assumes that the [explicit role][] of the applicable elements is appropriate for their element. I.e. A heading incorrectly marked up with `role="cell"` does not fail [success criterion 1.3.1 Info and Relationships][sc131] for not being in the context of a `row`. Having an inappropriate role is itself an issue under 1.3.1 Info and Relationships, so in either scenario a failure of this rule means this success criterion is not satisfied.

## Accessibility Support

- User agents do not all have the same accessibility tree. This can lead to different results for this rule, depending on which accessibility tree is used as input.
- `aria-owns` has limited support in some user agents.
- There exist some combination of popular browsers and assistive technologies who do not announce correctly relationships based on a mix of [implicit][implicit role] and [explicit][explicit role] roles.

## Background

The applicability of this rule is limited to the [WAI-ARIA 1.2 Recommendation][aria 1.2] roles. The [WAI-ARIA Graphics Module][] does not include any [required context roles][]. The [Digital Publishing WAI-ARIA Module (DPUB ARIA) 1.0][dpub 1.0] only has two roles with [required context roles][] (`doc-biblioentry` and `doc-endnote`); both of them have issues with their use of role inheritance, and both of them are deprecated in the [Digital Publishing WAI-ARIA Module (DPUB ARIA) 1.1][dpub 1.1] editor's draft.
Expand All @@ -57,6 +48,16 @@ This rule is restricted to direct parent-child relation in the [accessibility tr

Some user agents try to correct missing [required context roles][] or incorrect [content model][]. This often results, for example, in an isolated list item being presented as part of a one-item list containing only itself. Therefore, most test cases contain several targets to try and circumvent these corrections in order to better demonstrate the issue.

### Assumptions

The rule assumes that the [explicit role][] of the applicable elements is appropriate for their element. I.e. A heading incorrectly marked up with `role="cell"` does not fail [success criterion 1.3.1 Info and Relationships][sc131] for not being in the context of a `row`. Having an inappropriate role is itself an issue under 1.3.1 Info and Relationships, so in either scenario a failure of this rule means this success criterion is not satisfied.

### Accessibility Support

- User agents do not all have the same accessibility tree. This can lead to different results for this rule, depending on which accessibility tree is used as input.
- `aria-owns` has limited support in some user agents.
- There exist some combination of popular browsers and assistive technologies who do not announce correctly relationships based on a mix of [implicit][implicit role] and [explicit][explicit role] roles.

### Bibliography

- [Understanding Success Criterion 1.3.1: Info and Relationships](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html)
Expand Down
17 changes: 9 additions & 8 deletions _rules/aria-required-id-references-in6db8.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
id: in6db8
name: ARIA required ID references exist
rules_format: 1.1
rule_type: atomic
description: |
This rule checks that every ID reference required by WAI-ARIA exists
Expand Down Expand Up @@ -34,17 +35,17 @@ This rule applies to any `aria-controls` attribute defined on an [HTML element][

Each test target's [attribute value][] is a space-separated list of one or more IDs. At least one of those IDs must match an `id` [attribute value][] in the same [shadow tree][] or, if not within a [shadow tree][], within the same [document][document tree].

## Assumptions
## Background

There are no assumptions.
This rule is written specifically for `aria-controls`, because it is the only [ID Reference List][] property that is [required by WAI-ARIA][]. The `aria-controls` property is only required by the `scrollbar` role and by an expanded `combobox`. There are no [ID Reference][] properties that are required by WAI-ARIA for any role.

## Accessibility Support
### Assumptions

Some user agents treat the value of `aria-*` attribute as case-sensitive (even when these are not IDs) while some treat them as case-insensitive.
There are no assumptions.

## Background
### Accessibility Support

This rule is written specifically for `aria-controls`, because it is the only [ID Reference List][] property that is [required by WAI-ARIA][]. The `aria-controls` property is only required by the `scrollbar` role and by an expanded `combobox`. There are no [ID Reference][] properties that are required by WAI-ARIA for any role.
Some user agents treat the value of `aria-*` attribute as case-sensitive (even when these are not IDs) while some treat them as case-insensitive.

### Bibliography

Expand Down Expand Up @@ -77,7 +78,7 @@ The `aria-controls` [attribute value][] of this `scrollbar` matches the `id` of
The `aria-controls` [attribute value][] of this expanded `combobox` matches the `id` of the `ul` element in the same document.

```html
<label for="tag_combo">Tag</label>
<label for="tag_combo" id="tag_label">Tag</label>
<input
type="text"
id="tag_combo"
Expand All @@ -86,7 +87,7 @@ The `aria-controls` [attribute value][] of this expanded `combobox` matches the
aria-controls="popup_listbox"
aria-activedescendant="selected_option"
/>
<ul role="listbox" id="popup_listbox">
<ul role="listbox" id="popup_listbox" aria-labelledby="tag_label">
<li role="option">Zebra</li>
<li role="option" id="selected_option">Zoom</li>
</ul>
Expand Down
Loading