Repository navigation
fix(react-headless-components-preview): correct InfoLabel note semantics - #36953
Open
Paul Mardling (PaulGMardling) wants to merge 8 commits into
Open
Paul Mardling (PaulGMardling) wants to merge 8 commits into
Paul Mardling (PaulGMardling) wants to merge 8 commits into
Conversation
Track ownership from controlled open state or the current optional button lifetime. Ignore stale lifetime callbacks, consume defaultOpen once, and delegate dismissal to the shared Popover engine. Integrated focus dismissal validation remains blocked on PR microsoft#36929 reaching the base. Custom render-function slot key forwarding remains unverified. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d006ca2-c036-45bf-bac0-93275c5dfe08
📊 Bundle size report
Unchanged fixtures
|
|
Pull request demo site: URL |
…daries Forward root and InfoButton keys through the slot runtime so custom render functions cannot bypass the keyed boundary. Reset ownership for root-driven remounts and cover normalized keys, defaults, stale callbacks, and commit-time ownership. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d006ca2-c036-45bf-bac0-93275c5dfe08
…tions Add explicit outside controls and assert destination focus in InfoLabel Tab dismissal tests. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…cus dismissal Defer shared focus-dismissal integration and preserve the existing blur behavior. Keep controlled/default/keyed ownership fixes, and exercise their accepted and rejected requests through trigger toggles without excluding tests. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d006ca2-c036-45bf-bac0-93275c5dfe08
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d006ca2-c036-45bf-bac0-93275c5dfe08
…import Use the repository's react-hooks alias so ownership lifecycle tests run with React 17's Testing Library as well as React 18 and 19. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d006ca2-c036-45bf-bac0-93275c5dfe08
…rship lifetime Replace the callback-driven open mirror with private mounted-instance reports. Reconcile ownership during layout for renderer-owned keys, renderer-mode changes, omitted buttons, and stale callbacks, while isolating nested buttons and preserving SSR bootstrap and consumer ownership. Keep legacy blur behavior, public API signatures, and shared JSX/Popover implementations unchanged. Add before/after regression coverage and real-browser returned-key replacement checks. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d006ca2-c036-45bf-bac0-93275c5dfe08
Paul Mardling (PaulGMardling)
marked this pull request as ready for review
October 20, 2026 16:01
2 tasks done
…s with WAI-ARIA Use a div-based note with no menu announcement and retain the open trigger-to-note details relationship. Remove generated ownership and its private state/context machinery while preserving consumer ARIA overrides and actual InfoButton state. Preserve explicit focus-trapping as a named native dialog with matching popup semantics. Cover controlled/default state, SSR, remounts, portals, keyboard behavior, names and consumer overrides across React versions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d006ca2-c036-45bf-bac0-93275c5dfe08
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Previous Behavior
InfoButton announced a menu while displaying a note. InfoLabel generated redundant, potentially stale
aria-owns.New Behavior
Use
<div popover role="note">,aria-haspopup="false", and the existing open-onlyaria-detailslink instead of generated ownership. Preserve consumer ARIA, controlled state, and blur behavior. Explicit focus trapping uses a named native dialog. No public API changes.Related Issue(s)
Validation
All CI checks pass. Local React 17/18/19 suites: 1,302 tests each; InfoLabel browser spec: 9 cases per version. Build, types, lint, and formatting pass.
Reproduction and fix verification
Open the verified PR story.
aria-haspopup="false",aria-expanded="true", andaria-detailspoints to the visible DIV/note; wrapper has no generatedaria-owns.aria-details. Space reopens it.Any mismatch fails verification. Checked locally and on the preview on 2026-10-26, macOS/Chrome 155, React 19.2.0; fresh-page and reload checks passed without runtime errors. Screen-reader output is unverified.
Revision-pinned local reproduction
In an authorized task workspace at fixed commit
deb9c1e01fb4865a0136bbe723ff845c814aaa77, follow repository Node/Yarn setup, then run from the repository root:Open
http://localhost:6029/iframe.html?id=components-infolabel--default&viewMode=storyand repeat the steps. The committed fixture ispackages/react-components/react-headless-components-preview/stories/src/InfoLabel/InfoLabelDefault.stories.tsx. Local verification skipped already-built dependencies with--excludeTaskDependencies.Baseline
78a76c1a1cddd0f4c95328cf0d604f5face54ec6has the menu token, dialog/note mismatch, and generated ownership. Its full manual browser run is unverified; use the same story/command in a separate authorized baseline workspace to compare. Earlier failing-before tests substituted baseline implementation files, not a historical browser deployment. The hosted preview is mutable and has no verified SHA stamp.