Skip to content

🩹 fix: Keep Chrome Surfaces and Destructive Confirms Legible in Quiet-Chrome Themes - #16833

Merged
berry-13 merged 5 commits into
devfrom
berry-13/theme-regressions
Oct 7, 2026
Merged

berry-13 merged 5 commits into
devfrom
berry-13/theme-regressions

Conversation

@berry-13

@berry-13 berry-13 commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

Since #16741 (chrome borders off), #16751 (soft destructive) and #16736/#16739 (ghost header buttons), the ClickHouse theme has four chrome regressions. The scroll-to-bottom chip lost its outline and became a bare chevron over the thread. The chat header bar is a fading gradient, so scrolled text bleeds between the now-ghost header buttons. The delete-chat confirm and every other dialog confirm turned into the soft tint, weaker than Cancel. The sidebar search field had a fill but no stroke next to stroked selects.

A new theme-chrome-quiet: variant fires when chromeBorderAlpha is 0. The scroll chip moves to a floating Button variant that takes an opaque fill and a shadow under that variant, and the header bar goes opaque under it. destructive is now always the solid filled button; the soft tint lives on a new destructive-soft variant used by the eight inline triggers (row deletes, revoke, clear). The sidebar search takes the control stroke under the existing theme-field-fill: variant. Default and high-contrast themes are unchanged.

Not touched: the truncated "Steer" select is the real label since #16759 (com_ui_steer), and the Inline/Prompt toggle in the agent builder is a layout change unrelated to themes. The share control tile edge no longer shows once the header bar is opaque.

Type of change

  • Bug fix

Testing

Tested environments/configuration: Chromium 1440x900 and 390x844, interface.theme: clickhouse and the default theme, light and dark, against this branch and dev (abed1a2).

Automated tests:

  • cd packages/client && npx jest src/components/Button.spec.tsx (26 passed, new cases for floating and destructive/destructive-soft)
  • cd client && npx jest --findRelatedTests on the ten touched components (552 suites, 7637 tests passed)
  • npx tsc --noEmit in packages/client and client, npm run static-checks -- --against origin/dev (all passed)
  • Default theme: re-captured dev vs branch for new chat, chat bottom, delete dialog, search and mobile chat in light and dark; every touched region is pixel-identical (one scrim fade at max 1/255 under the dialog, sidebar rows differ only by seed-data drift).

Screenshots / recordings

Before on the left, after on the right, ClickHouse theme.

Risks

destructive Buttons that were relying on the soft tint in the ClickHouse theme (the eight inline callers) were moved to destructive-soft; any new inline destructive control should use it.

Checklist

  • I reviewed my own changes
  • Relevant tests have been added or updated
  • Existing relevant tests pass
  • The change does not introduce new warnings or errors
  • User-facing or complex behavior is documented where necessary
  • Required dependency changes have been merged/published
  • Required documentation PR: N/A

Scroll chip, light

Scroll chip, dark

Delete confirm, light

Delete confirm, dark

Header bar, light

Header bar, dark

Search, light

Search, dark

Copilot AI balanced review requested due to automatic review settings October 6, 2026 14:42

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 6, 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-10-07T10:55:06.191129Z b753f24 New commits
🔒 Security Review ✅ Completed 2026-10-06T14:48:44.885914Z 5ee65f9 PR opened
ℹ️ 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: 5ee65f9e8a

ℹ️ 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 65 to +66
destructive:
'bg-surface-destructive text-text-on-status hover:bg-surface-destructive-hover',

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Migrate every inline destructive caller to the soft variant

When destructiveStyle is soft (as in the ClickHouse theme), removing the theme classes from destructive makes every unconverted caller solid. The migration misses several clear inline dialog triggers, including Nav/SettingsTabs/ApiKeys/Item.tsx:60, Nav/SettingsTabs/Data/RevokeKeys.tsx:45, Nav/SettingsTabs/Data/DeleteCache.tsx:50, and Skills/dialogs/DeleteSkill.tsx:65; these now look like dominant confirmation buttons before the confirmation dialog is opened, contrary to the new inline-versus-confirm contract. Convert the remaining inline delete/revoke triggers to destructive-soft while leaving their confirmation actions as destructive.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed in a744f61: the five remaining inline triggers use destructive-soft; the callers left on destructive are dialog confirms. Covered by Button.spec and the precheck at bef3482.

Comment on lines +294 to +295
@custom-variant theme-chrome-quiet {
@container style(--theme-border-chrome-alpha: 0) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Normalize valid zero-alpha values before querying them

A custom theme can validly specify chromeBorderAlpha as .0, 0.0, or 0.00 because packages/data-provider/src/theme.ts:isOpacity accepts those forms, and applyResolvedTheme writes the string verbatim. The border calculation still treats each as numeric zero, but this unregistered-custom-property style query matches only the literal token value 0, so the header and floating-control compensations do not activate for those valid quiet-chrome themes. Normalize zero opacity values before applying them or query a separate canonical appearance flag.

AGENTS.md reference: AGENTS.md:L147-L151

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed in a744f61: applyTheme writes every zero spelling as 0 (applyTheme.spec), and scenario chrome-quiet-zero-spelling runs a theme with chromeBorderAlpha 0.0 and passes at bef3482.

@berry-13
berry-13 force-pushed the berry-13/theme-regressions branch from 5ee65f9 to bef3482 Compare October 7, 2026 10:25

@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: bef3482e48

ℹ️ 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 70 to +71
destructive:
'bg-surface-destructive text-text-on-status hover:bg-surface-destructive-hover',

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep the 2FA dialog trigger on the soft variant

When 2FA is enabled, DisableTwoFactorToggle.tsx:26 still selects destructive, although that button only opens two-factor-authentication-dialog; the actual confirmation uses destructive in DisablePhase.tsx:64-67. Removing the soft-theme classes here therefore makes the ClickHouse trigger solid and as visually dominant as its confirmation. Fresh evidence beyond the earlier review thread is this conditional variant caller, which the literal variant="destructive" migration missed; use destructive-soft for its enabled arm.

AGENTS.md reference: AGENTS.md:L144-L148

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed in b753f24: the enabled arm of DisableTwoFactorToggle uses destructive-soft; a grep of destructive string literals outside the variant attribute finds no other caller. Precheck and scenarios pass at this head.

@berry-13
berry-13 force-pushed the berry-13/theme-regressions branch from bef3482 to b753f24 Compare October 7, 2026 10:52
@berry-13
berry-13 merged commit 3e95156 into dev Oct 7, 2026
43 checks passed
@berry-13
berry-13 deleted the berry-13/theme-regressions branch October 7, 2026 14:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants