Skip to content

feat(commons/text): support ARIA element internals properties - #5169

Merged
chutchins25 merged 3 commits into
developfrom
internals-commons-text
Jun 18, 2026
Merged

feat(commons/text): support ARIA element internals properties#5169
chutchins25 merged 3 commits into
developfrom
internals-commons-text

Conversation

@straker

@straker straker commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Updates the commons/text directory to use the new getAriaValue and hasAriaValue functions where it makes sense.

Here's a report of the full directory:

  • commons/text/form-control-value - aria-selected → getAriaValue; aria-valuenow → hasAriaValue + getAriaValue
  • commons/text/accessible-text / accessible-text-virtual - computes accessible names via commons/aria functions; no direct ARIA attr access
  • commons/text/label-text / label-virtual / label - delegates to commons/aria functions; no direct ARIA attr access
  • commons/text/native-text-alternative / native-text-methods / native-element-type - checks native HTML semantics (type, value, placeholder, etc.), not ARIA props
  • commons/text/title-text - checks title attribute, not an ARIA prop
  • commons/text/visible-virtual / visible / visible-text-nodes / subtree-text - text visibility utilities, no ARIA attr access
  • commons/text/sanitize / unicode / has-unicode / remove-unicode / is-human-interpretable / is-icon-ligature / is-valid-autocomplete - text processing utilities, no ARIA attr access

Closes: #5141

@straker
straker requested a review from a team as a code owner June 15, 2026 21:58
@straker
straker force-pushed the internals-commons-text branch from a7b2266 to 85c9d5f Compare June 15, 2026 22:07
straker added 2 commits June 15, 2026 16:28
getAriaValue with { lowercase: true } lowercases nmtoken values after
trimming, causing 'TRUE' to match '=== true'. The existing test
intentionally verifies that incorrectly-cased values are rejected, so
aria-selected (nmtoken type) should not use the lowercase option here.

@chutchins25 chutchins25 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me.

@WilcoFiers WilcoFiers left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left you a Q on case sensitivity.

owned =>
getRole(owned) === 'option' && owned.attr('aria-selected') === 'true'
getRole(owned) === 'option' &&
getAriaValue(owned, 'aria-selected')?.value === 'true'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like this case sensitivity is intentional. Can you add a comment about which browser/AT+versions you saw that case sensitivity mattered here for future reference?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a msg on Slack. I actually think we should put a prop on the standard object on which things are case insensitive and put a comment on where / why we deviate from the standard there. That's a separate PR, so I think this is fine.

owned =>
getRole(owned) === 'option' && owned.attr('aria-selected') === 'true'
getRole(owned) === 'option' &&
getAriaValue(owned, 'aria-selected')?.value === 'true'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a msg on Slack. I actually think we should put a prop on the standard object on which things are case insensitive and put a comment on where / why we deviate from the standard there. That's a separate PR, so I think this is fine.

@chutchins25
chutchins25 merged commit e841a33 into develop Jun 18, 2026
24 checks passed
@chutchins25
chutchins25 deleted the internals-commons-text branch June 18, 2026 17:42
WilcoFiers added a commit that referenced this pull request Aug 5, 2026
All notable changes to this project will be documented in this file. See
[commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version)
for commit guidelines.

##
[4.13.0](v4.12.1...v4.13.0)
(2026-08-05)

### Features

- **aria-actions:** add aria-actions to allowed ARIA attributes
([#5200](#5200))
([029655d](029655d)),
closes [#4584](#4584)
[#5199](#5199), references
[#5215](#5215)
[#5215](#5215)
- **aria-allowed-attr:** flag deprecated ARIA attributes as needs-review
([#5246](#5246))
([518f3cc](518f3cc)),
closes [#3341](#3341)
- **aria-prohibited-attr:** allow many elements to be named and disallow
label and body from being named
([#5259](#5259))
([d8b1ea5](d8b1ea5))
- **aria-roles:** add sectionheader and sectionfooter roles
([#5238](#5238))
([c36c109](c36c109)),
closes [#4734](#4734),
references [#4734](#4734)
- **aria/get-aria-value:** new function to get aria values of a node
([#5109](#5109))
([a7d8f3e](a7d8f3e)),
references [#5042](#5042)
- **aria/has-attr-value:** new function to check if node has aria value
([#5136](#5136))
([61f2624](61f2624)),
references [#5109](#5109)
- **aria:** support role=image as equivalent to role=img
([#5248](#5248))
([5aa8aaf](5aa8aaf)),
closes [#4656](#4656),
references [#5272](#5272)
- **checks/aria:** support ARIA element internals properties
([#5172](#5172))
([9b7f754](9b7f754))
- **checks/label:** support ARIA element internals properties
([#5170](#5170))
([21c5f8b](21c5f8b))
- **checks/navigation:** support ARIA element internals properties
([#5167](#5167))
([2c3a98f](2c3a98f))
- **commons/aria:** support ARIA element internals properties
([#5171](#5171))
([31f09e7](31f09e7))
- **commons/dom:** support ARIA element internals properties
([#5163](#5163))
([f0a12cf](f0a12cf))
- **commons/forms:** support ARIA element internals properties
([#5165](#5165))
([27a4686](27a4686))
- **commons/matches/fromPrimative:** deprecate in favor of correct
spelling ([#5270](#5270))
([31cfb2e](31cfb2e))
- **commons/text:** support ARIA element internals properties
([#5169](#5169))
([e841a33](e841a33))
- **commons/text:** support form-associated labels via element internals
([#5182](#5182))
([57cfe0a](57cfe0a)),
closes [#5045](#5045),
references [#5170](#5170)
[#5039](#5039)
[#5151](#5151)
[#5039](#5039)
- **dom/getResolvedRefs:** new function to get the resolved virtual
nodes of idrefs
([#5151](#5151))
([489cdea](489cdea)),
references [#5109](#5109)
- **element-internals:** enable ElementInternals by default
([#5284](#5284))
([2740d42](2740d42)),
closes [#5277](#5277)
- **i18n:** Add Swedish locale
([#5190](#5190))
([dcd13f2](dcd13f2)),
references [#5189](#5189)
- **matches:** add inSectioningContent, hasChild, and
isSummaryForDetails matches
([#5262](#5262))
([c47cdcd](c47cdcd))
- **rules:** support ARIA element internals properties
([#5168](#5168))
([065baf7](065baf7))
- **standards/ariaAttrs:** add caseInsensitive property for attributes
([#5224](#5224))
([bcd791c](bcd791c))

### Bug Fixes

- **aria-allowed-role:** allow roles on a non-details summary
([#5242](#5242))
([3bd9875](3bd9875)),
closes [#3911](#3911),
references [#3443](#3443)
[#3911](#3911)
- **aria-allowed-role:** restrict figure roles with child figcaption
([#5240](#5240))
([178a635](178a635)),
closes [#3443](#3443)
- **aria-prohibited-attr:** visible aria-labelledby requires review only
([#5285](#5285))
([fd6fa9f](fd6fa9f))
- **axe.d.ts:** make enabled property of RuleMetadata optional
([#5129](#5129))
([90fce18](90fce18))
- **color-contrast:** fix various stacking context bugs
([#5214](#5214))
([d5e5b04](d5e5b04)),
references [#8](#8)
[#5213](#5213)
- **gather-internals:** handle non-HTMLElement nodes
([#5161](#5161))
([06e84c3](06e84c3))
- **get-selector:** escape control characters in attribute selectors
([#5273](#5273))
([4b60ac5](4b60ac5)),
closes [#5204](#5204)
[#5204](#5204)
- **image-alt:** allow whitespace alt on presentational images
([#5218](#5218))
([c5dd0ef](c5dd0ef)),
closes [#5216](#5216)
- **landmark-unique:** exclude section/form with non-landmark roles from
landmark match
([#5085](#5085))
([c5fd013](c5fd013)),
closes [#4722](#4722)
[#5064](#5064)
- name the image role in role-img-alt and svg-img-alt metadata
([#5279](#5279))
([995a269](995a269)),
closes [#5272](#5272),
references [#5248](#5248)
[#5248](#5248)
- **standards:** update aria-errormessage and aria-details to be idrefs
([#5157](#5157))
([fb94f8a](fb94f8a))

This PR was opened by a robot 🤖 🎉
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ElementInternals: convert lib/commons/text to getAriaValue/hasAriaValue

3 participants