Skip to content

📱 feat: Give the Mobile Drawer One Place for Each Control - #16248

Open
berry-13 wants to merge 1 commit into
berry-13/grouped-model-paramsfrom
berry-13/mobile-drawer-controls
Open

berry-13 wants to merge 1 commit into
berry-13/grouped-model-paramsfrom
berry-13/mobile-drawer-controls

Conversation

@berry-13

@berry-13 berry-13 commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

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 ghost like 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

  • Feature
  • Bug fix

Testing

Tested environments/configuration:

  • Linux, Node 24, local build of the stack branch on top of canary
  • Checked in the browser in light and dark mode against a seeded dev account (a project with chats, memories, prompts)

Automated tests:

  • npx tsc --noEmit in client and packages/client
  • npx eslint on every changed file, including the shadcn/* design rules
  • npx jest --findRelatedTests over the changed client files: 437 suites, 5,437 tests passing at the top of the stack
  • drawerPaint.spec.tsx mocks useShowMarketplace, which the drawer now renders through the marketplace entry

Screenshots / 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.

Before After
Mobile drawer, light drawer before, light drawer after, light
Mobile drawer, dark drawer before, dark drawer after, dark

Risk / compatibility

AgentMarketplaceButton gains a row layout and records one no-restyle suppression for its row padding, which lines its icon up with the panel rows below it.

Checklist

  • I reviewed my own changes
  • Existing relevant tests pass
  • The change does not introduce new warnings or errors
  • Required documentation PR: N/A

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.
@berry-13
berry-13 added this pull request to stack #16249 September 23, 2026 15:15
@berry-13
berry-13 marked this pull request as ready for review September 23, 2026 16:42
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-23T16:51:13.126798Z b171124 Draft marked ready
🔒 Security Review ✅ Completed 2026-09-23T16:46:39.189358Z b171124 Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +23 to +24
if (!showSearch) {
return null;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment thread eslint-suppressions.json
Comment on lines +1261 to +1264
"client/src/components/Nav/AgentMarketplaceButton.tsx": {
"shadcn/no-restyle": {
"count": 1
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🗺️ Chat UI Shell codegraph: the taxonomy area this belongs to (classifier, confidence ≥ 0.9)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants