From e378704c63d502b24726bb5330b502875e445b2c Mon Sep 17 00:00:00 2001 From: SuperComboGamer Date: Sun, 14 Dec 2025 19:21:20 -0500 Subject: [PATCH] style: enhance UI components with improved styling and layout - Updated global CSS to include new status colors for better visual feedback. - Refined button, badge, card, and input components with enhanced styles and transitions for a more polished user experience. - Adjusted sidebar and dialog components for improved aesthetics and usability. - Implemented gradient backgrounds and shadow effects across various sections to elevate the overall design. - Enhanced keyboard shortcuts and settings views with consistent styling and layout adjustments for better accessibility. --- apps/app/src/app/globals.css | 78 +++ apps/app/src/components/layout/sidebar.tsx | 445 +++++++++++++----- apps/app/src/components/ui/badge.tsx | 33 +- apps/app/src/components/ui/button.tsx | 37 +- apps/app/src/components/ui/card.tsx | 20 +- apps/app/src/components/ui/dialog.tsx | 32 +- apps/app/src/components/ui/input.tsx | 52 +- apps/app/src/components/ui/textarea.tsx | 6 +- apps/app/src/components/ui/tooltip.tsx | 14 +- apps/app/src/components/views/agent-view.tsx | 332 +++++++------ apps/app/src/components/views/board-view.tsx | 25 +- apps/app/src/components/views/kanban-card.tsx | 395 ++++++---------- .../src/components/views/kanban-column.tsx | 46 +- .../src/components/views/settings-view.tsx | 64 +-- .../api-keys/api-keys-section.tsx | 33 +- .../appearance/appearance-section.tsx | 61 ++- .../cli-status/claude-cli-status.tsx | 89 ++-- .../components/settings-header.tsx | 22 +- .../components/settings-navigation.tsx | 34 +- .../danger-zone/danger-zone-section.tsx | 36 +- .../feature-defaults-section.tsx | 176 +++---- .../keyboard-shortcuts-section.tsx | 46 +- .../app/src/components/views/welcome-view.tsx | 121 ++--- 23 files changed, 1312 insertions(+), 885 deletions(-) diff --git a/apps/app/src/app/globals.css b/apps/app/src/app/globals.css index af1f2f93..0f2e2d70 100644 --- a/apps/app/src/app/globals.css +++ b/apps/app/src/app/globals.css @@ -79,6 +79,19 @@ --color-running-indicator: var(--running-indicator); --color-running-indicator-text: var(--running-indicator-text); + /* Status colors */ + --color-status-success: var(--status-success); + --color-status-success-bg: var(--status-success-bg); + --color-status-warning: var(--status-warning); + --color-status-warning-bg: var(--status-warning-bg); + --color-status-error: var(--status-error); + --color-status-error-bg: var(--status-error-bg); + --color-status-info: var(--status-info); + --color-status-info-bg: var(--status-info-bg); + --color-status-backlog: var(--status-backlog); + --color-status-in-progress: var(--status-in-progress); + --color-status-waiting: var(--status-waiting); + /* Border radius */ --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); @@ -142,6 +155,31 @@ /* Running indicator - Purple */ --running-indicator: oklch(0.55 0.25 265); --running-indicator-text: oklch(0.6 0.22 265); + + /* Status colors - Light mode */ + --status-success: oklch(0.55 0.2 140); + --status-success-bg: oklch(0.55 0.2 140 / 0.15); + --status-warning: oklch(0.7 0.15 70); + --status-warning-bg: oklch(0.7 0.15 70 / 0.15); + --status-error: oklch(0.55 0.22 25); + --status-error-bg: oklch(0.55 0.22 25 / 0.15); + --status-info: oklch(0.55 0.2 230); + --status-info-bg: oklch(0.55 0.2 230 / 0.15); + --status-backlog: oklch(0.5 0 0); + --status-in-progress: oklch(0.7 0.15 70); + --status-waiting: oklch(0.65 0.18 50); + + /* Shadow tokens */ + --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05); + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + + /* Transition tokens */ + --transition-fast: 150ms ease; + --transition-normal: 200ms ease; + --transition-slow: 300ms ease-out; } /* Apply dark mode immediately based on system preference (before JS runs) */ @@ -215,6 +253,26 @@ /* Running indicator - Purple */ --running-indicator: oklch(0.6 0.25 265); --running-indicator-text: oklch(0.65 0.22 265); + + /* Status colors - Dark mode */ + --status-success: oklch(0.65 0.2 140); + --status-success-bg: oklch(0.65 0.2 140 / 0.2); + --status-warning: oklch(0.75 0.15 70); + --status-warning-bg: oklch(0.75 0.15 70 / 0.2); + --status-error: oklch(0.65 0.22 25); + --status-error-bg: oklch(0.65 0.22 25 / 0.2); + --status-info: oklch(0.65 0.2 230); + --status-info-bg: oklch(0.65 0.2 230 / 0.2); + --status-backlog: oklch(0.6 0 0); + --status-in-progress: oklch(0.75 0.15 70); + --status-waiting: oklch(0.7 0.18 50); + + /* Shadow tokens - darker for dark mode */ + --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3); + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3); + --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -2px rgba(0, 0, 0, 0.2); + --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.3); } } @@ -344,6 +402,26 @@ /* Running indicator - Purple */ --running-indicator: oklch(0.6 0.25 265); --running-indicator-text: oklch(0.65 0.22 265); + + /* Status colors - Dark mode */ + --status-success: oklch(0.65 0.2 140); + --status-success-bg: oklch(0.65 0.2 140 / 0.2); + --status-warning: oklch(0.75 0.15 70); + --status-warning-bg: oklch(0.75 0.15 70 / 0.2); + --status-error: oklch(0.65 0.22 25); + --status-error-bg: oklch(0.65 0.22 25 / 0.2); + --status-info: oklch(0.65 0.2 230); + --status-info-bg: oklch(0.65 0.2 230 / 0.2); + --status-backlog: oklch(0.6 0 0); + --status-in-progress: oklch(0.75 0.15 70); + --status-waiting: oklch(0.7 0.18 50); + + /* Shadow tokens - darker for dark mode */ + --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3); + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3); + --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -2px rgba(0, 0, 0, 0.2); + --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.3); } .retro { diff --git a/apps/app/src/components/layout/sidebar.tsx b/apps/app/src/components/layout/sidebar.tsx index cf163102..ba8edcda 100644 --- a/apps/app/src/components/layout/sidebar.tsx +++ b/apps/app/src/components/layout/sidebar.tsx @@ -146,9 +146,10 @@ function SortableProjectItem({ ref={setNodeRef} style={style} className={cn( - "flex items-center gap-2 px-2 py-1.5 rounded-md cursor-pointer text-muted-foreground hover:text-foreground hover:bg-accent", - isDragging && "bg-accent shadow-lg", - isHighlighted && "bg-brand-500/10 text-foreground" + "flex items-center gap-2 px-2.5 py-2 rounded-lg cursor-pointer transition-all duration-200", + "text-muted-foreground hover:text-foreground hover:bg-accent/80", + isDragging && "bg-accent shadow-lg scale-[1.02]", + isHighlighted && "bg-brand-500/10 text-foreground ring-1 ring-brand-500/20" )} data-testid={`project-option-${project.id}`} > @@ -156,20 +157,20 @@ function SortableProjectItem({ {/* Project content - clickable area */}
onSelect(project)} > - - {project.name} + + {project.name} {currentProjectId === project.id && ( )} @@ -1161,7 +1162,13 @@ export function Sidebar() { return (