web: pin Connection Info modal header while body scrolls#1755
Merged
Conversation
Same fix as #1698, applied to the Connection Info modal, which had the same pattern: a custom header Group (title + close) inside a Stack in the modal body, using the default `<Modal>` with no `scrollAreaComponent`. With a long server `instructions` section (e.g. the everything server) the details overflow the viewport and the whole modal scrolled, taking the header out of view. Switch to the compound `Modal.Root`/`Content`/`Header`/`Body` API, move the header into `Modal.Header` (sticky by design) and set `scrollAreaComponent={ScrollArea.Autosize}` so only the body scrolls. The fade-down transition is supplied app-wide by `ThemeModalRoot` (added in #1753), so no `transitionProps` literal is needed here. Closes #1754 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XNdjEPKLG637X8YmhDiEk5
Member
Author
|
@claude review |
Contributor
|
Claude finished @cliffhall's task in 47s —— View job Code Review — Connection Info sticky header
Verdict: LGTM. ✅ Clean, low-risk, props-only change that faithfully mirrors the pattern established for the settings modals in #1698/#1753. What's good
Minor notes (non-blocking, no change requested)
Nothing to fix here — the PR does exactly what it says and matches the precedent it cites. |
Member
Author
|
Thanks for the review! Both notes are non-blocking with no change requested — |
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.
Closes #1754
Follow-up to #1698 / #1753. The Connection Info modal had the same pattern the settings modals had before #1698 — a custom header
Group(title + close) inside aStackin the modal body, using the default<Modal>with noscrollAreaComponent. With a long serverinstructionssection (e.g. the everything server in a typical config), the connection details overflow the viewport, so the whole modal scrolled and the header (title + close) scrolled out of view.Fix
Switched
ConnectionInfoModal.tsxto the compoundModal.Root/Modal.Overlay/Modal.Content/Modal.Header/Modal.BodyAPI, moving the header row intoModal.Header(which Mantine rendersposition: sticky; top: 0) and settingscrollAreaComponent={ScrollArea.Autosize}so only the body scrolls. Thefade-downtransition is already supplied app-wide byThemeModalRoot(added in #1753), so notransitionPropsliteral is needed. Props-only, no CSS.Verification
Storybook
ConnectionInfoModal(WithOAuth, ~620px viewport) via Playwright. Measured in-page: the body scroll container isscrollHeight1172 ×clientHeight558 (scrolls internally), headerposition: stickyflush to the dialog top after scrolling.More detail in
pr-screenshots/README.md.Tests
Existing
ConnectionInfoModalunit tests pass unchanged (5 tests); the file stays above the ≥90 coverage gate.npm run cipasses (validate → coverage → smoke → Storybook).🤖 Generated with Claude Code
https://claude.ai/code/session_01XNdjEPKLG637X8YmhDiEk5