Repository navigation
Align OpenAI template behavior across nav and Studio accessibility controls - #2547
groupthinking with Codex wants to merge 2 commits into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
Co-authored-by: groupthinking <154503486+groupthinking@users.noreply.github.com>
🔍 PR Validation |
| <div className="template-pane-tabs" role="tablist" aria-label="Studio views"> | ||
| {MOBILE_PANES.map((pane) => ( | ||
| <button key={pane} type="button" role="tab" id={`studio-tab-${pane}`} | ||
| aria-selected={mobilePane === pane} aria-controls={`studio-panel-${pane}`} |
There was a problem hiding this comment.
🟡 Changes recommended
The change breaks mobile tab selection styling, exposes resizers whose announced values diverge from fixed pane widths, and removes the page’s only main landmark.
3 open issues
What changed in this PR
This PR advances #2386 by aligning UVAI navigation and Studio controls with the OpenAI Responses starter’s accessibility patterns, without changing pricing or the core product flow.
Changes:
- Adds mobile navigation active-page semantics matching desktop links.
- Adds Studio tab semantics, keyboard resizing, and pane-control accessibility attributes.
- Adds navigation tests and updates Studio interaction tests.
| File | Description |
|---|---|
apps/web/src/components/studio/StudioIdeShell.tsx |
Adds accessible tabs, keyboard splitters, and collapse/restore semantics. |
apps/web/src/components/Nav.tsx |
Adds aria-current to active mobile links. |
apps/web/src/components/__tests__/StudioIdeShell.template.test.tsx |
Updates tab assertions and tests keyboard splitter behavior. |
apps/web/src/components/__tests__/Nav.template.test.tsx |
Adds Home and Pricing active-navigation tests. |
Review effort: Balanced
| if (key === 'ArrowUp') next = current + RESIZE_STEP; | ||
| if (key === 'ArrowDown') next = current - RESIZE_STEP; | ||
| if (next === null) return false; | ||
| update(clampPaneWidth(next)); |
| <div className="template-pane-tabs" role="tablist" aria-label="Studio views"> | ||
| {MOBILE_PANES.map((pane) => ( | ||
| <button key={pane} type="button" role="tab" id={`studio-tab-${pane}`} | ||
| aria-selected={mobilePane === pane} aria-controls={`studio-panel-${pane}`} |
| id="studio-panel-chat" | ||
| data-testid="studio-ide-chat-pane" | ||
| aria-label="Chat" | ||
| role="tabpanel" |
✅ E2E Test Results: ALL TESTS PASSED
Test Output |

Canonical issue
Linked by repository automation.
Outcome
Home/Pricing navigation and Studio pane controls now match the OpenAI Responses starter interaction model more closely, with responsive pane switching and stronger accessibility semantics. This addresses the template-completeness gap without changing product flow or pricing behavior.
Scope
aria-currentparity with desktop active-state semantics.tablist/tabsemantics with keyboard navigation.aria-controls/aria-expanded.Risk
apps/web/src/components/studio/StudioIdeShell.tsx,apps/web/src/components/Nav.tsx, and related new/updated tests.Verification
List exact automated and manual checks, tied to the current head SHA.
Production evidence
Not yet applicable for this PR body update; runtime evidence should come from preview validation in PR checks.
Agent handoff
Security dependency evidence