ionic-team / ionic-team/ionic-framework

bug: ion-select (interface="modal") renders invalid ARIA structure: ion-list role conflicts with ion-radio-group

Open
#31,074 0 comments 0 reactions 0 assignees View on GitHub
type: bug
Dominant language
TypeScript
Stars
52.7k
Forks
13.3k
Avg merge
1d 15h
Merged PRs (30d)
51

Description

### Prerequisites

- [x] I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#creating-an-issue).
- [x] I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct).
- [x] I have searched for [existing issues](https://github.com/ionic-team/ionic-framework/issues) that already report this problem, without success.

### Ionic Framework Version

v8.x

### Current Behavior

In ion-select-modal, the DOM structure includes:
- ion-content
- ion-list with role="list" automatically applied by Ionic
- Inside it, ion-radio-group with role="radiogroup"
- A list of ion-items representing the options each containing an with group "radio"

This produces an invalid semantic hierarchy because enforces a list container semantics, it must contain elements with role "listitem"

### Expected Behavior

## Option A (preferred)

Remove the ion-list wrapper entirely when rendering ion-radio-group, allowing the following hyerarchy inside
- ion-radio-group (role="radiogroup")
- ion-radio (role="radio")
## Option B

If ion-list is required for styling/layout purposes, it must not impose role="list" semantics, or:
Each radio should be wrapped in a container element with role="listitem"
Ensuring valid nesting:
role="list"
- role="listitem"
- role="radiogroup"
- role="radio"

### Steps to Reproduce

- Create an ion-select with interface="modal"
- Provide multiple ion-select-option values
- Open the select modal
- Inspect DOM structure inside ion-select-modal, or analyze with accessibility tools

Observe:
ion-list wrapping the ion-radio-group
role="list" applied to the container

### Code Reproduction URL

https://ionicframework.com/docs/api/select#modal

### Ionic Info

Ionic:

Ionic CLI : 7.2.0
Ionic Framework : @ionic/angular 8.8.2
@angular-devkit/build-angular : 18.2.14
@angular-devkit/schematics : 18.2.14
@angular/cli : 18.2.14
@ionic/angular-toolkit : 11.0.1

Capacitor:

Capacitor CLI : 7.4.3
@capacitor/android : 7.4.3
@capacitor/core : 7.4.3
@capacitor/ios : 7.4.3

Utility:

cordova-res : not installed globally
native-run : 2.0.1

System:

NodeJS : v22.15.0 (C:\NVMNodeLink\nodejs\node.exe)
npm : 11.7.0
OS : Windows 10

### Additional Information

Accessibility issue was highlighted by the use of axe DevTools

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.