Repository navigation
fix(web): anchor popup animations to their aligned edge - #22812
brandon-julio-t wants to merge 4 commits into
Conversation
Toggling Thread Details with the right panel open makes the card scale sideways: its header-wide anchor puts the animation origin near the opposite edge. In the browser reproduction, the 296px popup uses an origin of 58px and its right edge moves 4.76px during the transition. Adopt Base UI 1.8.0, the first release containing mui/base-ui#5015: mui/base-ui#5015 The released fix uses the aligned edge for arrowless, unshifted popups and retains anchor-aware positioning for centered or shifted popups. The same T3 workflow now uses a 296px origin with a stationary right edge. Keep the lockfile update limited to Base UI and its required Floating UI dependencies, preserving other consumers' resolutions. Verified the actual web UI at 1280x800 and 390x844, repeated open/close, Escape focus return, and the model picker. check:changed passes format, knip, and 32 package typechecks; 7 focused browser suites pass 8 tests. Frozen installation passes. Native Electron and mobile were not run.
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — The PR is confined to ignored dependency metadata and lockfile paths, with no non-ignored source, schema, security, billing, deployment, product-default, or static-analysis changes. Its scope is consistent with a focused dependency-based UI bug fix. Notes:
You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Update Base UI version range apps/web/package.json |
The @base-ui/react dependency range changes from ^1.4.1 to ^1.8.0. |
Priority:
Estimated code review effort: 1 (Trivial) | ~3 minutes
Change: Bug fix
Suggested labels: bugfix
Suggested reviewers: juliusmarminge
Merge Risk: 
Minimal · up to a07e9
-
The dependency update has no identified merge-blocking risk.
Architecture risk: 
Low · up to 1d6e5
-
The change affects 1 system.
Changed systems:
apps/webArchitecture concerns
No architecture-level concerns identified.Review details
-
Systems and components
- observed — apps/web (ui) was modified; 1 changed file maps to changed impact.
Before / after behavior
- observed — Modified behavior in apps/web/package.json: The
@base-ui/reactdependency constraint changed from^1.4.1to^1.8.0.
-
Pre-merge checks: 
4
Finishing Touches
-
🧪 Generate unit tests (beta)
-
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Comment @coderabbitai help to get the list of available commands.
Base UI 1.8 warns when a detached handle is closed. SidebarUpdateControl runs its closing effect even when the web/no-update path renders no Popover.Root, producing two warnings during a StrictMode mount. Close only an open handle. A detached handle reports isOpen=false; attached open release notes still close when update visibility changes. This is a compatibility adjustment for the Base UI upgrade in this PR. Verified the warning disappears on a fresh dev-page load, Thread Details still opens with its right-edge origin, and 18 focused update tests pass. check:changed passes formatting, lint, knip, and 32 package typechecks.
Resolve the lockfile conflict between the popup-origin fix's Floating UI utils entry and main's new Inter font entry by retaining both package and snapshot records. Preserve main's dependency updates and the Base UI 1.8.0 upgrade with its existing popover lifecycle guard. The frozen-lockfile install and focused formatting checks pass. The diff against main remains confined to the original three PR files.
Keep main's new document-preview dependencies alongside the Base UI 1.8.0 upgrade. Adopt main's controlled sidebar release-notes popover, which removes the effect previously protected by this branch's guard. The PR now changes only the web dependency manifest and lockfile. The merged frozen lockfile installs successfully and focused formatting passes. Required checks and popup regression tests run before pushing.
Thread Details scales sideways when opened with the right panel visible: Base UI 1.5.0 derives the origin from the wide chat header’s center, although the popup is end-aligned. This adopts Base UI’s existing fix #5015, first released in 1.8.0.
The popup now scales from its aligned edge. Centered, collision-shifted, and arrow-bearing popups retain their anchor-aware origin. The app’s animation duration and scale are unchanged.
Reproduction and motion evidence
At 1280 × 800, open a thread, open the right panel, and toggle Thread Details. The right panel’s empty launcher is enough to reproduce it. Watch the card’s right edge while it opens and closes; the settled layout is intentionally unchanged.
Before — Base UI 1.5.0, normal speed
before.mp4
After — Base UI 1.8.0, normal speed
after.mp4
Enlarged motion detail — 0.25× playback
Crops of the same recordings, slowed in playback only. The application’s timings were not changed. The host label is blurred in all recordings.
Before
before-detail.mp4
After
after-detail.mp4
Frame measurements of the same 296px popup: origin changes from
58px 0pxto296px 0px; its right edge changes from731.24–736pxduring the transition to a fixed736px. These are geometry observations, not a frame-rate benchmark.Scope and compatibility
This uses the small, focused bug-fix exception: an existing animation defect is reproduced above and the correction already exists upstream. Related PRs #22434 and #22614 address timing and layout switching, respectively; neither fixes the origin.
This does upgrade shared UI behavior, including the web renderer used by Electron. Reviewed the cumulative 1.6–1.8 release notes and T3’s imports. The documented OTP Field rename does not apply; T3 does not import it. The lockfile updates only Base UI and its required Floating UI dependencies, preserving other consumers’ resolutions. Native React Native does not consume this package.
The PR changes only the web dependency manifest and lockfile. The current sidebar uses upstream’s controlled popover state; its release-notes lifecycle is covered by the focused browser tests below.
Verification
vp install --frozen-lockfilepasses.vp run check:changedpasses formatting, lint, knip, and 34 affected package typechecks on the final candidate.vp run --filter @t3tools/web buildpassed during the original verification. It was not rerun for this dependency-manifest/lockfile conflict resolution.main, 29 focused tests across 11 files pass, covering menus/popovers, settings color and writing controls, Thread Details PR rows, update controls, and upstream’s controlled sidebar release-notes popover. See the command below. The earlier broader audit also passed 51 tests across 24 files.Limits: native Electron and Safari/Firefox were not exercised. Native iOS/Android and the full repository CI suites were not run locally. The first browser-test attempt lacked Chromium; installing the required Playwright browser resolved that setup failure. These checks provide evidence for the tested paths, not a guarantee that every shared primitive is regression-free.
Focused test commands
vp test run apps/web/src/components/chat/OpenInPicker.browser.test.tsx apps/web/src/components/chat/ComposerStashMenu.browser.test.tsx apps/web/src/components/chat/AssistantCitationChip.browser.test.tsx apps/web/src/components/GitActionsControl.browser.test.tsx apps/web/src/components/settings/colorPickers.browser.test.tsx apps/web/src/components/settings/SourceControlWritingSettings.browser.test.tsx apps/web/src/components/chat/ThreadDetailsPrRow.browser.test.tsx apps/web/src/components/ServerUpdateAction.browser.test.tsx apps/web/src/components/desktopUpdate.logic.test.ts apps/web/src/components/sidebar/updateEverything.logic.test.ts apps/web/src/components/sidebar/SidebarUpdatePill.browser.test.tsxImplemented and verified with GPT-6-Astra and GPT-6.1-Sol through the Codex harness in T3 Code; independently reviewed with GPT-6.1-Sol through Codex.