Skip to content

spec(Popover): a Popover is a focus region, modal or not (DEC-9) - #8608

Merged
cixzhang merged 1 commit into
mainfrom
spec/7687-popover-focus-region
Oct 26, 2026
Merged

cixzhang merged 1 commit into
mainfrom
spec/7687-popover-focus-region

Conversation

@cixzhang

Copy link
Copy Markdown
Contributor

Exact decision needed

How an open Popover treats Tab. Today a non-modal Popover pulls a Tab pressed anywhere on the page into itself (#7687), so keyboard users can't move through the rest of the page while it is open.

Existing authority searched

Decision

The owner decided: a Popover is a focus region, like a dialog's, whether it is modal or not.

  • While focus is inside it, Tab and Shift+Tab cycle through its controls, and a dismissal returns focus to the trigger.
  • A Tab pressed outside it follows the page's own order and is never pulled into the popup. The browser's order, which puts an anchored popup right after its trigger, can still lead into it.
  • isModal changes only the modal semantics.
  • A role-neutral popup keeps its child role's own Tab model: a menu closes on Tab, and a listbox keeps focus in its input.

Rejected alternatives

  • No Tab containment for non-modal popovers: focus would fall out of an open popup into the page behind it.

Claim scope and non-goals

Only Popover's Tab handling. Not changed: Escape and light-dismiss policy, initial focus, focus return, the isModal semantics, and each role-neutral popup's own keyboard model. No public API change.

Evidence and implementation relationship

The reporter's reproduction in #7687, and two contributors' real-browser checks there (Chrome, Safari). The implementation PR follows this one.

Writing rubric results

  • R1 narration: none. DEC-9 and AR3 describe the system in the present tense.
  • R2 research in the record: none. The consumer audit stays in this PR description.
  • R3 evidence naming a change: none.
  • R4 rejected alternatives over one line or outside a decision: one, one line, inside DEC-9.
  • R5 pull request or issue references remaining: none added.
  • R6 ruled open questions still listing options: none. Open questions now names DEC-9 as settled.

Scope

  • This PR contains specification records only.
  • It records observable behavior and preserves equivalent internal implementations.
  • Any named internal mechanism is intentionally public, names its dependent caller/system, and explains why an equivalent implementation would not satisfy the contract.
  • Verification states the evidence layer and failure signal without prescribing CI job/workflow topology.
  • It records one intentional durable decision, not a rescue for a separable tagalong.
  • The canonical knowledge owner, affected current claims, and overlapping open work are named; any ownership collision is resolved or called out for human decision.
  • Adjacent API, visual, accessibility, composition, and implementation facts remain outside scope unless this exact decision depends on them.
  • Public text and artifacts contain no internal Meta context.

Validation

  • pnpm check:knowledge: aligned
  • Prettier: clean
  • git diff --check: clean

A Tab pressed outside an open popover follows the page's order instead of being pulled into the popover; focus inside still cycles. Records the owner decision for #7687.
@vercel

vercel Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
astryx Ready Ready Preview Oct 26, 2026 11:18pm UTC

Request Review

@astracat-bot

astracat-bot Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

AI review status for this pull request.

Review status Updated
🔄 In progress (for maintainers only) Oct 26, 2026, 11:17 PM UTC

@github-actions github-actions Bot added the needs:spec-owner-review Current knowledge records await owner approval label Oct 26, 2026
@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec fc503c0

@github-actions github-actions Bot added spec-auto-merge Auto-merge was enabled by the spec owner gate and removed needs:spec-owner-review Current knowledge records await owner approval labels Oct 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

PR Analysis Report

Previews ready: Storybook and Sandbox were built with this PR's docsite. CI evidence will be added when available.

View Storybook for this PR · View Sandbox for this PR

@cixzhang
cixzhang merged commit 4e6bc19 into main Oct 26, 2026
50 checks passed
vjeux added a commit to vjeux/astryx that referenced this pull request Oct 27, 2026
Main's meta#8608 (DEC-9, a Popover is a focus region) added two Tab rows to the focus-entry matrix beside this branch's anchor-rectangle row; both stay.
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Oct 27, 2026
@github-actions
github-actions Bot deleted the spec/7687-popover-focus-region branch October 27, 2026 06:22

This branch was successfully deployed

1 active deployment
Preview — fc503c04 Deployed Oct 26, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Meta Open Source bot. spec-auto-merge Auto-merge was enabled by the spec owner gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant