Conversation
The drawer put its two global destinations in opposite corners and repeated one of them under every panel. The marketplace was a bare icon in the top strip, the hardest thing there to notice; new chat was a large footer button sitting under prompts, memories and MCP settings alike, none of which it has anything to do with; and the close toggle wore the chat header's bordered plate beside two flat icons, so the row read as one control and two afterthoughts. They swap. New chat takes the icon slot beside the panel switcher, which is where the drawer keeps what means the same thing whichever panel is showing, and its click behaviour moves with it into a component of its own rather than staying behind in the footer. The marketplace becomes a full-width entry above the panel content, labelled, in the list where someone already looks for somewhere to go, and outside the scroller so it stays put while the panels change under it. The toggle drops to `ghost` like its neighbours. The footer is left with search alone and stands down entirely on a panel that has nothing to search, rather than taking its padding out of the list above it. The drawer now carries a text colour beside its background. Only the panel nav set one, so the header strip, the new marketplace row and the footer all inherited black from the document and rendered near-invisible in dark mode, except where a control happened to name a token itself. That was hidden while the toggle wore `header-action`, which brought its own.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b17112431d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (!showSearch) { | ||
| return null; |
There was a problem hiding this comment.
Keep safe-area padding when search is absent
On devices with a nonzero bottom safe-area, this return removes the drawer's only env(safe-area-inset-bottom) padding whenever search is disabled or the active panel is prompts, memories, MCP, and so on. The footer previously remained mounted because it also contained New Chat, so the panel stayed above the home indicator; now bottom rows and actions can render beneath the system gesture area. Keep a safe-area spacer or move the padding to the drawer independently of search visibility.
Useful? React with 👍 / 👎.
| */ | ||
| function NewChat({ onNewChat }: { onNewChat: (afterSlide?: () => void) => void }) { | ||
| const localize = useLocalize(); | ||
| const switchToHistory = useRecoilValue(store.newChatSwitchToHistory); |
There was a problem hiding this comment.
Pass the global new-chat preference into the mobile control
newChatSwitchToHistory is an app-global stored preference also consumed outside this mobile component, but the newly added leaf reaches directly into ~/store. The client-state ownership rule requires a feature that merely consumes global preference state to receive it through props or a host-supplied context rather than establishing another direct Recoil dependency.
AGENTS.md reference: AGENTS.md:L104-L114
Useful? React with 👍 / 👎.
| "client/src/components/Nav/AgentMarketplaceButton.tsx": { | ||
| "shadcn/no-restyle": { | ||
| "count": 1 | ||
| } |
There was a problem hiding this comment.
Remove the newly added design-rule suppression
This adds a fresh shadcn/no-restyle allowance for AgentMarketplaceButton, masking the new Button override instead of using or extending an appropriate shared primitive variant. The repository explicitly prohibits widening eslint-suppressions.json to land a restyle, so the component should be corrected and this entry removed.
AGENTS.md reference: AGENTS.md:L88-L94
Useful? React with 👍 / 👎.
Summary
Part 6 of 6 of the quieter-layout stack, based on #16247 (
berry-13/grouped-model-params).The mobile drawer put its two global destinations in opposite corners and repeated one under every panel: the marketplace was a bare icon in the top strip, and New chat was a large footer button under prompts, memories and MCP settings alike. They swap. New chat takes the icon slot beside the panel switcher, and the marketplace becomes a labelled full-width entry above the panel content that stays put while panels change. The close toggle drops to
ghostlike its neighbours, and the footer keeps only search, hiding on panels with nothing to search.The drawer now sets a text color beside its background. Only the panel nav set one before, so the header strip and footer inherited black from the document and were near-invisible in dark mode.
Type of change
Testing
Tested environments/configuration:
canaryAutomated tests:
npx tsc --noEmitinclientandpackages/clientnpx eslinton every changed file, including theshadcn/*design rulesnpx jest --findRelatedTestsover the changed client files: 437 suites, 5,437 tests passing at the top of the stackdrawerPaint.spec.tsxmocksuseShowMarketplace, which the drawer now renders through the marketplace entryScreenshots / recordings
Before is
canary; after is the top of this stack, so an image can also show changes from later PRs in the chain. Chromium, 1440x900 desktop and 390x844 mobile.Risk / compatibility
AgentMarketplaceButtongains arowlayout and records oneno-restylesuppression for its row padding, which lines its icon up with the panel rows below it.Checklist