333 lines
6.3 KiB
TypeScript
333 lines
6.3 KiB
TypeScript
export const baseColors = {
|
|
// Base colors
|
|
white: "#ffffff",
|
|
black: "#000000",
|
|
|
|
// Zinc scale (primary gray palette)
|
|
zinc: {
|
|
50: "#fafafa",
|
|
100: "#f4f4f5",
|
|
200: "#e4e4e7",
|
|
300: "#d4d4d8",
|
|
400: "#a1a1aa",
|
|
500: "#71717a",
|
|
600: "#52525b",
|
|
700: "#3f3f46",
|
|
800: "#27272a",
|
|
850: "#1a1a1d",
|
|
900: "#18181b",
|
|
950: "#121214",
|
|
},
|
|
|
|
// Gray scale
|
|
gray: {
|
|
50: "#f9fafb",
|
|
100: "#f3f4f6",
|
|
200: "#e5e7eb",
|
|
300: "#d1d5db",
|
|
400: "#9ca3af",
|
|
500: "#6b7280",
|
|
600: "#4b5563",
|
|
700: "#374151",
|
|
800: "#1f2937",
|
|
900: "#111827",
|
|
},
|
|
|
|
// Slate scale
|
|
slate: {
|
|
200: "#e2e8f0",
|
|
},
|
|
|
|
// Blue scale
|
|
blue: {
|
|
50: "#eff6ff",
|
|
100: "#dbeafe",
|
|
200: "#bfdbfe",
|
|
300: "#93c5fd",
|
|
400: "#60a5fa",
|
|
500: "#3b82f6",
|
|
600: "#2563eb",
|
|
700: "#1d4ed8",
|
|
800: "#1e40af",
|
|
900: "#1e3a8a",
|
|
950: "#172554",
|
|
},
|
|
|
|
// Green scale
|
|
green: {
|
|
100: "#dcfce7",
|
|
200: "#bbf7d0",
|
|
400: "#4ade80",
|
|
500: "#22c55e",
|
|
600: "#16a34a",
|
|
800: "#166534",
|
|
900: "#14532d",
|
|
},
|
|
|
|
// Red scale
|
|
red: {
|
|
100: "#fee2e2",
|
|
200: "#fecaca",
|
|
300: "#fca5a5",
|
|
500: "#ef4444",
|
|
600: "#dc2626",
|
|
800: "#991b1b",
|
|
900: "#7f1d1d",
|
|
},
|
|
|
|
// Teal scale
|
|
teal: {
|
|
200: "#99f6e4",
|
|
},
|
|
|
|
// Amber scale
|
|
amber: {
|
|
500: "#f59e0b",
|
|
},
|
|
|
|
// Yellow scale
|
|
yellow: {
|
|
400: "#fbbf24",
|
|
},
|
|
|
|
// Purple scale
|
|
purple: {
|
|
500: "#a855f7",
|
|
600: "#9333ea",
|
|
},
|
|
|
|
// Orange scale
|
|
orange: {
|
|
500: "#f97316",
|
|
600: "#ea580c",
|
|
},
|
|
} as const;
|
|
|
|
// Semantic color tokens - Layer-based system
|
|
const lightSemanticColors = {
|
|
// Surfaces (layers) - shifted one step lighter
|
|
surface0: "#ffffff", // App background
|
|
surface1: "#fafafa", // Subtle hover (was zinc-100, now zinc-50)
|
|
surface2: "#f4f4f5", // Elevated: badges, inputs, sheets (was zinc-200, now zinc-100)
|
|
surface3: "#e4e4e7", // Highest elevation (was zinc-300, now zinc-200)
|
|
surface4: "#d4d4d8", // Extra emphasis (was zinc-400, now zinc-300)
|
|
surfaceSidebar: "#f4f4f5", // Sidebar background (darker than main)
|
|
|
|
// Text
|
|
foreground: "#09090b",
|
|
foregroundMuted: "#71717a",
|
|
|
|
// Borders - shifted one step lighter
|
|
border: "#e4e4e7", // (was zinc-200, now zinc-200 - keep for contrast)
|
|
borderAccent: "#ececf1", // Softer accent border for low-emphasis outlines
|
|
|
|
// Brand
|
|
accent: "#20744A",
|
|
accentBright: "#239956",
|
|
accentForeground: "#ffffff",
|
|
|
|
// Semantic
|
|
destructive: "#dc2626",
|
|
destructiveForeground: "#ffffff",
|
|
success: "#20744A",
|
|
successForeground: "#ffffff",
|
|
|
|
// Legacy aliases (for gradual migration)
|
|
background: "#ffffff",
|
|
popover: "#ffffff",
|
|
popoverForeground: "#09090b",
|
|
primary: "#18181b",
|
|
primaryForeground: "#fafafa",
|
|
secondary: "#f4f4f5",
|
|
secondaryForeground: "#09090b",
|
|
muted: "#f4f4f5",
|
|
mutedForeground: "#71717a",
|
|
accentBorder: "#ececf1",
|
|
input: "#f4f4f5",
|
|
ring: "#18181b",
|
|
|
|
terminal: {
|
|
background: "#ffffff",
|
|
foreground: "#09090b",
|
|
cursor: "#09090b",
|
|
cursorAccent: "#ffffff",
|
|
selectionBackground: "rgba(0, 0, 0, 0.15)",
|
|
selectionForeground: "#09090b",
|
|
|
|
black: "#09090b",
|
|
red: "#dc2626",
|
|
green: "#16a34a",
|
|
yellow: "#ca8a04",
|
|
blue: "#2563eb",
|
|
magenta: "#9333ea",
|
|
cyan: "#0891b2",
|
|
white: "#ffffff",
|
|
|
|
brightBlack: "#3f3f46",
|
|
brightRed: "#ef4444",
|
|
brightGreen: "#22c55e",
|
|
brightYellow: "#f59e0b",
|
|
brightBlue: "#3b82f6",
|
|
brightMagenta: "#a855f7",
|
|
brightCyan: "#06b6d4",
|
|
brightWhite: "#fafafa",
|
|
},
|
|
} as const;
|
|
|
|
const darkSemanticColors = {
|
|
// Surfaces (layers)
|
|
surface0: "#18181c", // App background
|
|
surface1: "#1f1f23", // Subtle hover
|
|
surface2: "#27272a", // Elevated: badges, inputs, sheets
|
|
surface3: "#3f3f46", // Highest elevation
|
|
surface4: "#52525b", // Extra emphasis
|
|
surfaceSidebar: "#121216", // Sidebar background (darker than main)
|
|
|
|
// Text
|
|
foreground: "#fafafa",
|
|
foregroundMuted: "#a1a1aa",
|
|
|
|
// Borders
|
|
border: "#27272a",
|
|
borderAccent: "#34343a",
|
|
|
|
// Brand
|
|
accent: "#20744A",
|
|
accentBright: "#7ccba0",
|
|
accentForeground: "#ffffff",
|
|
|
|
// Semantic
|
|
destructive: "#ef4444",
|
|
destructiveForeground: "#ffffff",
|
|
success: "#20744A",
|
|
successForeground: "#ffffff",
|
|
|
|
// Legacy aliases (for gradual migration)
|
|
background: "#18181c",
|
|
popover: "#27272a",
|
|
popoverForeground: "#fafafa",
|
|
primary: "#fafafa",
|
|
primaryForeground: "#18181b",
|
|
secondary: "#27272a",
|
|
secondaryForeground: "#fafafa",
|
|
muted: "#27272a",
|
|
mutedForeground: "#a1a1aa",
|
|
accentBorder: "#34343a",
|
|
input: "#27272a",
|
|
ring: "#d4d4d8",
|
|
|
|
terminal: {
|
|
background: "#18181c",
|
|
foreground: "#fafafa",
|
|
cursor: "#fafafa",
|
|
cursorAccent: "#18181c",
|
|
selectionBackground: "rgba(255, 255, 255, 0.2)",
|
|
selectionForeground: "#fafafa",
|
|
|
|
black: "#121214",
|
|
red: "#ef4444",
|
|
green: "#22c55e",
|
|
yellow: "#f59e0b",
|
|
blue: "#3b82f6",
|
|
magenta: "#a855f7",
|
|
cyan: "#06b6d4",
|
|
white: "#e4e4e7",
|
|
|
|
brightBlack: "#3f3f46",
|
|
brightRed: "#f87171",
|
|
brightGreen: "#4ade80",
|
|
brightYellow: "#fbbf24",
|
|
brightBlue: "#60a5fa",
|
|
brightMagenta: "#c084fc",
|
|
brightCyan: "#22d3ee",
|
|
brightWhite: "#ffffff",
|
|
},
|
|
} as const;
|
|
|
|
const commonTheme = {
|
|
spacing: {
|
|
0: 0,
|
|
1: 4,
|
|
2: 8,
|
|
3: 12,
|
|
4: 16,
|
|
6: 24,
|
|
8: 32,
|
|
12: 48,
|
|
16: 64,
|
|
20: 80,
|
|
24: 96,
|
|
32: 128,
|
|
},
|
|
|
|
fontSize: {
|
|
xs: 12,
|
|
sm: 14,
|
|
base: 16,
|
|
lg: 18,
|
|
xl: 20,
|
|
"2xl": 22,
|
|
"3xl": 26,
|
|
"4xl": 34,
|
|
},
|
|
|
|
iconSize: {
|
|
xs: 12,
|
|
sm: 14,
|
|
md: 16,
|
|
lg: 20,
|
|
},
|
|
|
|
fontWeight: {
|
|
normal: "normal" as const,
|
|
medium: "500" as const,
|
|
semibold: "600" as const,
|
|
bold: "bold" as const,
|
|
},
|
|
|
|
borderRadius: {
|
|
none: 0,
|
|
sm: 2,
|
|
base: 4,
|
|
md: 6,
|
|
lg: 8,
|
|
xl: 12,
|
|
"2xl": 16,
|
|
full: 9999,
|
|
},
|
|
|
|
borderWidth: {
|
|
0: 0,
|
|
1: 1,
|
|
2: 2,
|
|
},
|
|
|
|
opacity: {
|
|
0: 0,
|
|
50: 0.5,
|
|
100: 1,
|
|
},
|
|
} as const;
|
|
|
|
export const darkTheme = {
|
|
colors: {
|
|
...darkSemanticColors,
|
|
palette: baseColors,
|
|
},
|
|
...commonTheme,
|
|
} as const;
|
|
|
|
export const lightTheme = {
|
|
colors: {
|
|
...lightSemanticColors,
|
|
palette: baseColors,
|
|
},
|
|
...commonTheme,
|
|
} as const;
|
|
|
|
// Keep compatibility with existing code
|
|
export const theme = darkTheme;
|
|
|
|
// Export a union type that works for both themes
|
|
export type Theme = typeof darkTheme | typeof lightTheme;
|