From 14fe0c0cc88eed16e97aecf31907c96e54891482 Mon Sep 17 00:00:00 2001
From: Danny White <3104761+dnywh@users.noreply.github.com>
Date: Mon, 17 Aug 2026 17:28:22 +1000
Subject: [PATCH] fix(studio): slightly round split-button corners on focus
(#49129)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## What kind of change does this PR introduce?
UI polish for split buttons (primary action + dropdown chevron).
Follow-up to #49055.
## What is the current behavior?
The focus ring sits above the neighbouring half, but the inner edge
stays square, so the ring has two sharp corners at the join.
## What is the new behavior?
On keyboard focus, the squared-off edge uses a slight radius so the ring
matches the outer corners more closely. Resting state is unchanged.
Split-button callsites now share the same join classes as the
design-system example.
| Before | After |
| --- | --- |
| |
|
## To test
Tab to each half (labelled button, then chevron). Inner corners of the
focus ring should be slightly rounded, not square.
1. [Split with
dropdown](https://design-system-git-fix-split-button-focus-radius-supabase.vercel.app/design-system/docs/components/button#split-with-dropdown)
(no login)
2. [Access
Tokens](https://studio-staging-git-fix-split-button-focus-radius-supabase.vercel.app/dashboard/account/tokens)
→ Generate new token
3. Any project on [studio
staging](https://studio-staging-git-fix-split-button-focus-radius-supabase.vercel.app/dashboard/_/settings/general)
→ Settings → General → Restart project
## Summary by CodeRabbit
- **Accessibility**
- Added accessible labels to dropdown and export controls.
- Improved keyboard-focus visibility, layering, and rounded edge
treatment across joined buttons and menus.
- Removed misleading or redundant screen-reader text and titles.
- **Bug Fixes**
- Prevented split-button controls from shrinking or displaying awkward
borders and corners.
- Refined hover and focus behavior for action buttons throughout
settings, database, storage, account, and documentation interfaces.
- **Documentation**
- Clarified guidance for using overflow menus and responsive
split-button actions.
---
apps/design-system/content/docs/components/button.mdx | 9 +++++----
.../registry/default/example/admonition-button-split.tsx | 4 ++--
.../registry/default/example/button-split-dropdown.tsx | 8 ++++++--
.../AccessTokens/Classic/ExperimentalTokenDropdown.tsx | 2 +-
.../Account/AccessTokens/Classic/NewTokenButton.tsx | 2 +-
.../Account/AccessTokens/Scoped/NewScopedTokenSheet.tsx | 5 ++++-
.../CustomEmailTemplateRestrictionAdmonition.tsx | 4 ++--
.../ReplicationPipelineStatus.tsx | 5 +++--
.../interfaces/Database/Schemas/SchemaGraph.tsx | 9 ++++-----
.../interfaces/LogDrains/OrgAuditLogDrains.tsx | 6 +++---
.../QueryInsights/hooks/useQueryInsightsTableColumns.tsx | 5 +++--
.../General/Infrastructure/RestartServerButton.tsx | 4 ++--
.../CreateTable/CreateTableInstructionsDialog.tsx | 6 ++++--
apps/studio/components/ui/AiAssistantDropdown.tsx | 4 ++--
apps/studio/pages/project/[ref]/settings/log-drains.tsx | 6 +++---
.../components/Changelog/ChangelogLlmMarkdownButton.tsx | 4 ++--
.../src/form/KeyValueFieldArray/KeyValueFieldArray.tsx | 8 ++++++--
17 files changed, 53 insertions(+), 38 deletions(-)
diff --git a/apps/design-system/content/docs/components/button.mdx b/apps/design-system/content/docs/components/button.mdx
index b1369d8174a..fc7c1575839 100644
--- a/apps/design-system/content/docs/components/button.mdx
+++ b/apps/design-system/content/docs/components/button.mdx
@@ -125,17 +125,18 @@ Supports slot behavior with `asChild` prop.
Pair a button with a chevron `DropdownMenu` trigger when there are variations of the same action, or alternative ways to accomplish the same goal. The default or most likely option should be used on the exposed button.
-When secondary actions are related but distinct—not alternatives to the primary action—display the primary action as a button and place the rest in an overflow menu instead. See [Table multiple actions](./table#multiple-actions).
+When secondary actions are related but distinct (not alternatives to the primary action) display the primary action as a button and place the rest in an overflow menu instead. See [Table multiple actions](./table#multiple-actions).