From 1704104d64c42c12d862362d45c6de53ba87a247 Mon Sep 17 00:00:00 2001 From: 0x00-sys <71561164+0x00-sys@users.noreply.github.com> Date: Tue, 11 Aug 2026 22:41:48 +0200 Subject: [PATCH 01/20] fix(web): 130+ UI consistency fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cursor, focus-ring, disabled-opacity, popup-animation, glass-surface, padding/typography, and descender-clipping consistency fixes across the web app, aligning hand-rolled elements with the shared ui/ primitives. Model: Claude Fable 5 · Harness: Claude Code in T3 Code --- apps/web/src/browser/BrowserDeviceToolbar.tsx | 2 +- apps/web/src/components/AgentsPanel.tsx | 10 +- .../BranchToolbarBranchSelector.tsx | 4 +- apps/web/src/components/ChatMarkdown.tsx | 2 +- apps/web/src/components/ChatView.tsx | 9 +- apps/web/src/components/CommandPalette.tsx | 2 +- .../src/components/CommandPaletteResults.tsx | 2 +- apps/web/src/components/DiffPanel.tsx | 6 +- apps/web/src/components/DiffPanelShell.tsx | 4 +- apps/web/src/components/GitActionsControl.tsx | 10 +- apps/web/src/components/LegacySidebar.tsx | 15 +-- apps/web/src/components/RightPanelTabs.tsx | 4 +- apps/web/src/components/Sidebar.tsx | 49 +++++--- .../src/components/ThreadTerminalDrawer.tsx | 25 ++-- .../src/components/chat/ChangedFilesTree.tsx | 10 +- apps/web/src/components/chat/ChatComposer.tsx | 6 +- apps/web/src/components/chat/ChatHeader.tsx | 4 +- .../chat/ComposerPendingApprovalPanel.tsx | 4 +- .../chat/ComposerPendingUserInputPanel.tsx | 4 +- .../chat/ComposerPreviewAnnotationCards.tsx | 4 +- .../chat/ComposerPrimaryActions.test.ts | 2 +- .../chat/ComposerPrimaryActions.tsx | 2 +- .../src/components/chat/ComposerStashMenu.tsx | 2 +- .../src/components/chat/DraftHeroHeadline.tsx | 2 +- .../components/chat/ExpandedImageDialog.tsx | 2 +- .../src/components/chat/MessagesTimeline.tsx | 20 +-- .../components/chat/ModelPickerContent.tsx | 4 +- .../components/chat/ModelPickerSidebar.tsx | 2 +- .../components/chat/ProviderModelPicker.tsx | 2 +- .../components/chat/ProviderStatusBanner.tsx | 2 +- apps/web/src/components/chat/TraitsPicker.tsx | 4 +- .../clerk/MobileClientsUserProfilePage.tsx | 115 ++++++++++-------- .../clerk/T3ConnectSidebarSignIn.tsx | 3 +- .../cloud/ConnectOnboardingDialog.tsx | 2 +- .../diffs/DiffCommentAnnotation.tsx | 2 +- .../src/components/files/FilePreviewPanel.tsx | 2 +- .../preview/PreviewLocalServerCard.tsx | 2 +- .../components/preview/PreviewPanelShell.tsx | 2 +- .../preview/PreviewRecentUrlCard.tsx | 4 +- .../src/components/preview/PreviewView.tsx | 2 +- .../preview/ThreadPreviewMiniPlayer.tsx | 2 +- .../src/components/projectScriptEditor.tsx | 4 +- .../pullRequest/PullRequestCodeTab.tsx | 6 +- .../pullRequest/PullRequestDetailPanel.tsx | 8 +- .../PullRequestReviewAnnotation.tsx | 2 +- .../pullRequest/PullRequestReviewerPicker.tsx | 2 +- .../components/pullRequest/PullRequestRow.tsx | 2 +- .../pullRequest/PullRequestSummaryTab.tsx | 2 +- .../pullRequest/PullRequestTimelineTab.tsx | 2 +- .../search/ProjectContentSearchDialog.tsx | 4 +- .../settings/AddProviderInstanceDialog.tsx | 2 +- .../AddProviderInstanceWizardSteps.tsx | 2 +- .../settings/ConnectionsSettings.tsx | 10 +- .../settings/DiagnosticsSettings.tsx | 4 +- .../settings/KeybindingsSettings.tsx | 4 +- .../settings/ProjectSettingsPanel.tsx | 12 +- .../settings/ProviderAccentColorPicker.tsx | 2 +- .../settings/ProviderSettingsPanel.tsx | 4 +- .../settings/ResourceTelemetryDiagnostics.tsx | 4 +- .../components/settings/SettingsPanels.tsx | 6 +- .../settings/SettingsSidebarNav.tsx | 4 +- .../settings/SourceControlSettings.tsx | 6 +- .../settings/SourceControlWritingSettings.tsx | 2 +- .../components/settings/ThemeColorPicker.tsx | 8 +- .../components/settings/ThemeEditorPanel.tsx | 2 +- .../src/components/settings/ThemeSettings.tsx | 2 +- .../components/settings/settingsLayout.tsx | 2 +- .../sidebar/SidebarProviderUpdatePill.tsx | 4 +- .../components/sidebar/SidebarUpdatePill.tsx | 2 +- apps/web/src/components/ui/autocomplete.tsx | 10 +- apps/web/src/components/ui/checkbox.tsx | 2 +- apps/web/src/components/ui/combobox.tsx | 6 +- apps/web/src/components/ui/input-group.tsx | 2 +- apps/web/src/components/ui/menu.tsx | 6 +- apps/web/src/components/ui/number-field.tsx | 2 +- apps/web/src/components/ui/popover.tsx | 2 +- apps/web/src/components/ui/radio-group.tsx | 2 +- apps/web/src/components/ui/scroll-area.tsx | 2 +- apps/web/src/components/ui/select.tsx | 11 +- apps/web/src/components/ui/sheet.tsx | 2 +- apps/web/src/components/ui/sidebar.tsx | 12 +- apps/web/src/components/ui/switch.tsx | 2 +- apps/web/src/components/ui/toast.tsx | 6 +- apps/web/src/components/ui/toggle.tsx | 2 +- apps/web/src/index.css | 100 +++------------ apps/web/src/routes/_chat.pull-requests.tsx | 2 +- 86 files changed, 309 insertions(+), 332 deletions(-) diff --git a/apps/web/src/browser/BrowserDeviceToolbar.tsx b/apps/web/src/browser/BrowserDeviceToolbar.tsx index f20ab0b37109..bc3f13b1640f 100644 --- a/apps/web/src/browser/BrowserDeviceToolbar.tsx +++ b/apps/web/src/browser/BrowserDeviceToolbar.tsx @@ -193,7 +193,7 @@ export function BrowserDeviceToolbar({ }} > {width >= 560 ? ( - + Dimensions ) : null} diff --git a/apps/web/src/components/AgentsPanel.tsx b/apps/web/src/components/AgentsPanel.tsx index 4eeff67ce5f7..b590093020e0 100644 --- a/apps/web/src/components/AgentsPanel.tsx +++ b/apps/web/src/components/AgentsPanel.tsx @@ -286,7 +286,7 @@ function WorkflowScriptView({ type="button" onClick={onClose} aria-label="Close script" - className="ml-auto text-muted-foreground hover:text-foreground" + className="ml-auto cursor-pointer text-muted-foreground hover:text-foreground" > @@ -336,7 +336,7 @@ function PhaseSection({ onClick={() => setOpen((value) => !value)} aria-expanded={open} className={cn( - "mt-2 flex w-full items-center gap-1.5 rounded-sm px-1.5 text-left text-[.65rem] font-medium uppercase tracking-wider hover:bg-accent/40", + "mt-2 flex w-full cursor-pointer items-center gap-1.5 rounded-sm px-1.5 text-left text-[.65rem] font-medium uppercase tracking-wider hover:bg-accent/40", phase.state === "done" ? "text-success-foreground" : phase.state === "running" @@ -406,7 +406,7 @@ function ExpandedWorkflowSection({ type="button" onClick={() => setScriptOpen((value) => !value)} className={cn( - "rounded-sm border border-border/60 px-1 font-mono normal-case hover:text-foreground", + "cursor-pointer rounded-sm border border-border/60 px-1 font-mono normal-case hover:text-foreground", scriptOpen && "text-foreground", )} aria-expanded={scriptOpen} @@ -421,7 +421,7 @@ function ExpandedWorkflowSection({ type="button" onClick={onCollapse} aria-label="Collapse workflow" - className="text-muted-foreground hover:text-foreground" + className="cursor-pointer text-muted-foreground hover:text-foreground" > @@ -476,7 +476,7 @@ function CollapsedWorkflowSection({ } @@ -4543,7 +4546,7 @@ function ChatViewContent(props: ChatViewProps) { ), - className: "dark:shadow-none", + actions: ( ) : ( - + )} @@ -131,7 +131,7 @@ export function ComposerPreviewAnnotationCards({ @@ -891,7 +891,7 @@ function TimelineMinimap({ transform: `translateY(${activeTooltipTranslate})`, }} > - + {activeItem.userText ?? "User message"} @@ -993,7 +993,7 @@ function UserTimelineRow({ row }: { row: Extract { const preview = buildExpandedImagePreview(regularImages, image.id); @@ -1210,11 +1210,13 @@ const TurnPlanTimelineRow = memo(function TurnPlanTimelineRow({
+ + +
{devicesState.error ? (
@@ -141,7 +152,7 @@ export function MobileClientsUserProfilePage() { {isInitialLoad ? ( ) : hasErrorWithoutData ? null : devices.length > 0 ? ( -
    +
      {devices.map((device) => ( ))} @@ -150,6 +161,6 @@ export function MobileClientsUserProfilePage() { )}
- +
); } diff --git a/apps/web/src/components/clerk/T3ConnectSidebarSignIn.tsx b/apps/web/src/components/clerk/T3ConnectSidebarSignIn.tsx index 9dfd8dce13b1..7099b8b2cb73 100644 --- a/apps/web/src/components/clerk/T3ConnectSidebarSignIn.tsx +++ b/apps/web/src/components/clerk/T3ConnectSidebarSignIn.tsx @@ -29,7 +29,8 @@ function ConfiguredT3ConnectSidebarAvatar() { appearance={{ elements: { avatarBox: "size-7", - userButtonTrigger: "rounded-lg p-1 hover:bg-sidebar-row-hover", + userButtonTrigger: + "cursor-pointer rounded-lg p-1 outline-hidden ring-ring transition-colors hover:bg-sidebar-row-hover focus-visible:ring-2", }, }} > diff --git a/apps/web/src/components/cloud/ConnectOnboardingDialog.tsx b/apps/web/src/components/cloud/ConnectOnboardingDialog.tsx index 6248fb00bcfe..cd346b89be67 100644 --- a/apps/web/src/components/cloud/ConnectOnboardingDialog.tsx +++ b/apps/web/src/components/cloud/ConnectOnboardingDialog.tsx @@ -307,7 +307,7 @@ function OnboardingStepper({ type="button" disabled={disabled} className={cn( - "grid min-w-0 grid-cols-[1rem_minmax(0,1fr)] gap-x-2 rounded-lg border px-3 py-2 text-left", + "grid min-w-0 cursor-pointer grid-cols-[1rem_minmax(0,1fr)] gap-x-2 rounded-lg border px-3 py-2 text-left outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-64", index === currentIndex ? "border-primary bg-primary/10 ring-1 ring-primary/25" : index < currentIndex diff --git a/apps/web/src/components/diffs/DiffCommentAnnotation.tsx b/apps/web/src/components/diffs/DiffCommentAnnotation.tsx index d210732b6b60..4009fb0276ad 100644 --- a/apps/web/src/components/diffs/DiffCommentAnnotation.tsx +++ b/apps/web/src/components/diffs/DiffCommentAnnotation.tsx @@ -63,7 +63,7 @@ export function DiffCommentAnnotation({ aria-label="Delete comment" onClick={onDelete} > - + ) : null}
diff --git a/apps/web/src/components/files/FilePreviewPanel.tsx b/apps/web/src/components/files/FilePreviewPanel.tsx index f528fe894569..14a971f907eb 100644 --- a/apps/web/src/components/files/FilePreviewPanel.tsx +++ b/apps/web/src/components/files/FilePreviewPanel.tsx @@ -857,7 +857,7 @@ export default function FilePreviewPanel({ return (
{relativePath ? ( -
+
diff --git a/apps/web/src/components/preview/PreviewPanelShell.tsx b/apps/web/src/components/preview/PreviewPanelShell.tsx index 30a0c9eed0ff..4e43d36459b8 100644 --- a/apps/web/src/components/preview/PreviewPanelShell.tsx +++ b/apps/web/src/components/preview/PreviewPanelShell.tsx @@ -63,7 +63,7 @@ export function PreviewPanelShell(props: { data-preview-panel-maximized={props.maximized ? "true" : "false"} > {isInline && !props.maximized ? : null} - {useDragRegion ?
: null} + {useDragRegion ?
: null} {props.children}
); diff --git a/apps/web/src/components/preview/PreviewRecentUrlCard.tsx b/apps/web/src/components/preview/PreviewRecentUrlCard.tsx index 892ff579d1d7..7c3187cf38f8 100644 --- a/apps/web/src/components/preview/PreviewRecentUrlCard.tsx +++ b/apps/web/src/components/preview/PreviewRecentUrlCard.tsx @@ -25,7 +25,7 @@ export function PreviewRecentUrlCard({ entry, onOpen, onRemove }: Props) { diff --git a/apps/web/src/components/preview/PreviewView.tsx b/apps/web/src/components/preview/PreviewView.tsx index 6979a1a4006d..b36fe23914d3 100644 --- a/apps/web/src/components/preview/PreviewView.tsx +++ b/apps/web/src/components/preview/PreviewView.tsx @@ -729,7 +729,7 @@ export function PreviewView({ /> ) : null} {controller !== "none" ? ( -
+
{controller === "agent" ? "Agent controlling browser" : "Human control"}
) : null} diff --git a/apps/web/src/components/preview/ThreadPreviewMiniPlayer.tsx b/apps/web/src/components/preview/ThreadPreviewMiniPlayer.tsx index 3e7c46ef0e0a..bdef636a2165 100644 --- a/apps/web/src/components/preview/ThreadPreviewMiniPlayer.tsx +++ b/apps/web/src/components/preview/ThreadPreviewMiniPlayer.tsx @@ -303,7 +303,7 @@ export function ThreadPreviewMiniPlayer({ threadRef, tabId, bottomInset }: Props type="button" aria-label="Resize floating preview" title="Resize floating preview" - className="pointer-events-auto absolute bottom-0 right-0 z-[33] size-5 cursor-nwse-resize rounded-br-xl after:absolute after:bottom-1 after:right-1 after:size-2 after:border-b after:border-r after:border-foreground/45" + className="pointer-events-auto absolute bottom-0 right-0 z-[33] size-5 cursor-nwse-resize rounded-br-xl outline-none transition-colors after:absolute after:bottom-1 after:right-1 after:size-2 after:border-b after:border-r after:border-foreground/45 focus-visible:bg-foreground/[0.04] focus-visible:after:border-foreground" onPointerDown={handleResizePointerDown} onPointerMove={handleResizePointerMove} onPointerUp={endResize} diff --git a/apps/web/src/components/projectScriptEditor.tsx b/apps/web/src/components/projectScriptEditor.tsx index 4b728c2e07eb..c1bda7f81030 100644 --- a/apps/web/src/components/projectScriptEditor.tsx +++ b/apps/web/src/components/projectScriptEditor.tsx @@ -284,7 +284,7 @@ export function ProjectScriptEditorDialog({
{scripts.length === 0 ? ( -

+

No actions configured for this checkout.

) : ( @@ -1086,7 +1086,7 @@ function ProjectDetail({ group }: { group: SidebarProjectSnapshot }) { return ( +
onSignal(process, "SIGINT")} > INT @@ -547,7 +547,7 @@ function ProcessActions({