2026-01-11 01:37:48 +00:00
|
|
|
import { Palette } from 'lucide-react';
|
|
|
|
|
|
|
|
|
|
interface ThemeSwitcherProps {
|
2026-01-13 18:47:57 +00:00
|
|
|
currentTheme: string;
|
|
|
|
|
onThemeChange: (theme: string) => void;
|
2026-01-11 01:37:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const themes = [
|
2026-01-13 18:47:57 +00:00
|
|
|
{
|
|
|
|
|
id: 'cyber',
|
|
|
|
|
name: 'Cyber',
|
2026-02-12 00:54:47 +00:00
|
|
|
colors: ['#7c9dd6', '#d4634a'],
|
|
|
|
|
description: 'Indigo & Vermillion',
|
|
|
|
|
gradient: 'linear-gradient(135deg, #7c9dd6 0%, #d4634a 100%)',
|
2026-01-13 18:47:57 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: 'ocean',
|
|
|
|
|
name: 'Ocean',
|
2026-02-12 00:54:47 +00:00
|
|
|
colors: ['#7a9e6c', '#8eb280'],
|
|
|
|
|
description: 'Sage & Moss',
|
|
|
|
|
gradient: 'linear-gradient(135deg, #7a9e6c 0%, #8eb280 100%)',
|
2026-01-13 18:47:57 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: 'forest',
|
|
|
|
|
name: 'Forest',
|
2026-02-12 00:54:47 +00:00
|
|
|
colors: ['#c9a84c', '#d6b860'],
|
|
|
|
|
description: 'Gold & Amber',
|
|
|
|
|
gradient: 'linear-gradient(135deg, #c9a84c 0%, #d6b860 100%)',
|
2026-01-13 18:47:57 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: 'sunset',
|
|
|
|
|
name: 'Sunset',
|
2026-02-12 00:54:47 +00:00
|
|
|
colors: ['#e0a0b8', '#c840a0'],
|
|
|
|
|
description: 'Sakura & Magenta',
|
|
|
|
|
gradient: 'linear-gradient(135deg, #e0a0b8 0%, #c840a0 100%)',
|
2026-01-13 18:47:57 +00:00
|
|
|
},
|
2026-01-11 01:37:48 +00:00
|
|
|
];
|
|
|
|
|
|
2026-01-13 18:47:57 +00:00
|
|
|
export function ThemeSwitcher({
|
|
|
|
|
currentTheme,
|
|
|
|
|
onThemeChange,
|
|
|
|
|
}: ThemeSwitcherProps) {
|
|
|
|
|
return (
|
|
|
|
|
<div className="space-y-6">
|
aesthetic-improvements: align spacing to 8px grid (Action 11.2.1.3)
- Created automated script (scripts/align-8px-grid.py) to align all spacing to 8px grid
- Replaced non-8px-aligned spacing: gap-3/p-3/m-3 (12px) → gap-4/p-4/m-4 (16px), gap-5/p-5/m-5 (20px) → gap-6/p-6/m-6 (24px), gap-10/p-10/m-10 (40px) → gap-12/p-12/m-12 (48px), gap-20/p-20/m-20 (80px) → gap-24/p-24/m-24 (96px)
- Preserved: 4px values (gap-1, p-1, m-1) as they may be intentional fine-tuning, responsive breakpoints (sm:, md:, lg:), test files, documentation
- Modified files across all components to ensure consistent 8px grid alignment
- Action 11.2.1.3: Align all elements to 8px grid - COMPLETE
2026-01-16 10:50:46 +00:00
|
|
|
<div className="flex items-center gap-4">
|
ui(tokens): migrate kodo-cyan to primary (51 files, 88 instances)
Replace legacy text-kodo-cyan/border-kodo-cyan/bg-kodo-cyan with semantic
text-primary/border-primary/bg-primary across 51 components.
The brand primary color now uses the design system token, enabling proper
theme adaptation. Covers UI primitives, search, dashboard, chat, playlists,
settings, social, marketplace, and auth components.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 23:19:12 +00:00
|
|
|
<div className="w-10 h-10 rounded-xl bg-primary flex items-center justify-center">
|
2026-02-12 01:09:29 +00:00
|
|
|
<Palette className="w-5 h-5 text-foreground" />
|
2026-01-13 18:47:57 +00:00
|
|
|
</div>
|
|
|
|
|
<div>
|
2026-02-12 01:09:29 +00:00
|
|
|
<h3 className="text-xl font-bold text-foreground">Color Theme</h3>
|
2026-02-08 23:13:27 +00:00
|
|
|
<p className="text-sm text-muted-foreground">
|
2026-01-13 18:47:57 +00:00
|
|
|
Choose your visual style
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-01-11 01:37:48 +00:00
|
|
|
|
2026-01-13 18:47:57 +00:00
|
|
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
|
|
|
{themes.map((theme) => (
|
|
|
|
|
<button
|
|
|
|
|
key={theme.id}
|
|
|
|
|
onClick={() => onThemeChange(theme.id)}
|
2026-02-12 01:09:29 +00:00
|
|
|
className={`group relative p-8 rounded-2xl border-2 transition-all duration-[var(--sumi-duration-normal)] text-left overflow-hidden ${
|
2026-01-13 18:47:57 +00:00
|
|
|
currentTheme === theme.id
|
refactor: Phase 3a — Global color class migration to SUMI semantics
- Replace all kodo-* color classes across ~100 TSX files:
kodo-void → background, kodo-ink → card, kodo-graphite → muted,
kodo-steel → muted-foreground, kodo-cyan → primary, kodo-magenta → destructive,
kodo-lime → success, kodo-red → destructive, kodo-gold → warning
- Replace cyan-500, magenta-500, lime-500 default Tailwind colors with
semantic equivalents (primary, destructive, success)
- Fix WaveformVisualizer hardcoded hex colors to SUMI values
- Delete global-effects.css (conflicting, redundant with index.css)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 00:51:49 +00:00
|
|
|
? 'border-primary bg-primary/10 shadow-lg shadow-primary/20'
|
|
|
|
|
: 'border-white/10 bg-muted/50 hover:border-white/30 hover:bg-muted'
|
2026-01-13 18:47:57 +00:00
|
|
|
}`}
|
|
|
|
|
>
|
|
|
|
|
{/* Gradient Background */}
|
|
|
|
|
<div
|
|
|
|
|
className="absolute inset-0 opacity-10 group-hover:opacity-20 transition-opacity"
|
|
|
|
|
style={{ background: theme.gradient }}
|
|
|
|
|
/>
|
2026-01-11 01:37:48 +00:00
|
|
|
|
2026-01-13 18:47:57 +00:00
|
|
|
{/* Content */}
|
|
|
|
|
<div className="relative z-10">
|
|
|
|
|
<div className="flex items-center gap-4 mb-3">
|
|
|
|
|
<div className="flex gap-2">
|
|
|
|
|
{theme.colors.map((color, i) => (
|
|
|
|
|
<div
|
|
|
|
|
key={i}
|
2026-01-16 11:06:00 +00:00
|
|
|
className="w-10 h-10 rounded-lg shadow-lg transition-opacity group-hover:opacity-80"
|
2026-01-13 18:47:57 +00:00
|
|
|
style={{ backgroundColor: color }}
|
|
|
|
|
/>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-01-11 01:37:48 +00:00
|
|
|
|
2026-01-13 18:47:57 +00:00
|
|
|
<div className="mb-2">
|
2026-02-12 01:09:29 +00:00
|
|
|
<div className="font-bold text-lg text-foreground mb-1">
|
2026-01-13 18:47:57 +00:00
|
|
|
{theme.name}
|
|
|
|
|
</div>
|
2026-02-08 23:13:27 +00:00
|
|
|
<div className="text-sm text-muted-foreground">
|
2026-01-13 18:47:57 +00:00
|
|
|
{theme.description}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-01-11 01:37:48 +00:00
|
|
|
|
2026-01-13 18:47:57 +00:00
|
|
|
{currentTheme === theme.id && (
|
refactor: Phase 3a — Global color class migration to SUMI semantics
- Replace all kodo-* color classes across ~100 TSX files:
kodo-void → background, kodo-ink → card, kodo-graphite → muted,
kodo-steel → muted-foreground, kodo-cyan → primary, kodo-magenta → destructive,
kodo-lime → success, kodo-red → destructive, kodo-gold → warning
- Replace cyan-500, magenta-500, lime-500 default Tailwind colors with
semantic equivalents (primary, destructive, success)
- Fix WaveformVisualizer hardcoded hex colors to SUMI values
- Delete global-effects.css (conflicting, redundant with index.css)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 00:51:49 +00:00
|
|
|
<div className="flex items-center gap-2 text-muted-foreground font-mono text-sm animate-slide-in-left">
|
ui(tokens): migrate kodo-cyan to primary (51 files, 88 instances)
Replace legacy text-kodo-cyan/border-kodo-cyan/bg-kodo-cyan with semantic
text-primary/border-primary/bg-primary across 51 components.
The brand primary color now uses the design system token, enabling proper
theme adaptation. Covers UI primitives, search, dashboard, chat, playlists,
settings, social, marketplace, and auth components.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 23:19:12 +00:00
|
|
|
<div className="w-2 h-2 rounded-full bg-primary animate-glow-pulse" />
|
2026-01-13 18:47:57 +00:00
|
|
|
Active Theme
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
2026-01-11 01:37:48 +00:00
|
|
|
</div>
|
2026-01-13 18:47:57 +00:00
|
|
|
</button>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
2026-01-11 01:37:48 +00:00
|
|
|
}
|