export interface Theme { name: string; label: string; cssVars: { light: Record; dark: Record; }; } export const themes: Theme[] = [ { name: "neutral", label: "Default", cssVars: { light: { background: "oklch(1 0 0)", foreground: "oklch(0.145 0 0)", card: "oklch(1 0 0)", "card-foreground": "oklch(0.145 0 0)", popover: "oklch(1 0 0)", "popover-foreground": "oklch(0.145 0 0)", primary: "oklch(0.205 0 0)", "primary-foreground": "oklch(0.985 0 0)", secondary: "oklch(0.97 0 0)", "secondary-foreground": "oklch(0.205 0 0)", muted: "oklch(0.97 0 0)", "muted-foreground": "oklch(0.556 0 0)", accent: "oklch(0.97 0 0)", "accent-foreground": "oklch(0.205 0 0)", destructive: "oklch(0.577 0.245 27.325)", border: "oklch(0.922 0 0)", input: "oklch(0.922 0 0)", ring: "oklch(0.708 0 0)", "chart-1": "oklch(0.646 0.222 41.116)", "chart-2": "oklch(0.6 0.118 184.704)", "chart-3": "oklch(0.398 0.07 227.392)", "chart-4": "oklch(0.828 0.189 84.429)", "chart-5": "oklch(0.769 0.188 70.08)", }, dark: { background: "oklch(0.145 0 0)", foreground: "oklch(0.985 0 0)", card: "oklch(0.205 0 0)", "card-foreground": "oklch(0.985 0 0)", popover: "oklch(0.205 0 0)", "popover-foreground": "oklch(0.985 0 0)", primary: "oklch(0.922 0 0)", "primary-foreground": "oklch(0.205 0 0)", secondary: "oklch(0.269 0 0)", "secondary-foreground": "oklch(0.985 0 0)", muted: "oklch(0.269 0 0)", "muted-foreground": "oklch(0.708 0 0)", accent: "oklch(0.269 0 0)", "accent-foreground": "oklch(0.985 0 0)", destructive: "oklch(0.704 0.191 22.216)", border: "oklch(1 0 0 / 10%)", input: "oklch(1 0 0 / 15%)", ring: "oklch(0.556 0 0)", "chart-1": "oklch(0.488 0.243 264.376)", "chart-2": "oklch(0.696 0.17 162.48)", "chart-3": "oklch(0.769 0.188 70.08)", "chart-4": "oklch(0.627 0.265 303.9)", "chart-5": "oklch(0.645 0.246 16.439)", }, }, }, { name: "blue", label: "Blue", cssVars: { light: { background: "oklch(1 0 0)", foreground: "oklch(0.141 0.005 285.823)", card: "oklch(1 0 0)", "card-foreground": "oklch(0.141 0.005 285.823)", popover: "oklch(1 0 0)", "popover-foreground": "oklch(0.141 0.005 285.823)", primary: "oklch(0.488 0.243 264.376)", "primary-foreground": "oklch(0.97 0.014 254.604)", secondary: "oklch(0.967 0.001 286.375)", "secondary-foreground": "oklch(0.21 0.006 285.885)", muted: "oklch(0.967 0.001 286.375)", "muted-foreground": "oklch(0.552 0.016 285.938)", accent: "oklch(0.967 0.001 286.375)", "accent-foreground": "oklch(0.21 0.006 285.885)", destructive: "oklch(0.577 0.245 27.325)", border: "oklch(0.92 0.004 286.32)", input: "oklch(0.92 0.004 286.32)", ring: "oklch(0.708 0 0)", "chart-1": "oklch(0.809 0.105 251.813)", "chart-2": "oklch(0.623 0.214 259.815)", "chart-3": "oklch(0.546 0.245 262.881)", "chart-4": "oklch(0.488 0.243 264.376)", "chart-5": "oklch(0.424 0.199 265.638)", }, dark: { background: "oklch(0.141 0.005 285.823)", foreground: "oklch(0.985 0 0)", card: "oklch(0.21 0.006 285.885)", "card-foreground": "oklch(0.985 0 0)", popover: "oklch(0.21 0.006 285.885)", "popover-foreground": "oklch(0.985 0 0)", primary: "oklch(0.488 0.243 264.376)", "primary-foreground": "oklch(0.97 0.014 254.604)", secondary: "oklch(0.274 0.006 286.033)", "secondary-foreground": "oklch(0.985 0 0)", muted: "oklch(0.274 0.006 286.033)", "muted-foreground": "oklch(0.705 0.015 286.067)", accent: "oklch(0.274 0.006 286.033)", "accent-foreground": "oklch(0.985 0 0)", destructive: "oklch(0.704 0.191 22.216)", border: "oklch(1 0 0 / 10%)", input: "oklch(1 0 0 / 15%)", ring: "oklch(0.556 0 0)", "chart-1": "oklch(0.809 0.105 251.813)", "chart-2": "oklch(0.623 0.214 259.815)", "chart-3": "oklch(0.546 0.245 262.881)", "chart-4": "oklch(0.488 0.243 264.376)", "chart-5": "oklch(0.424 0.199 265.638)", }, }, }, { name: "green", label: "Green", cssVars: { light: { background: "oklch(1 0 0)", foreground: "oklch(0.141 0.005 285.823)", card: "oklch(1 0 0)", "card-foreground": "oklch(0.141 0.005 285.823)", popover: "oklch(1 0 0)", "popover-foreground": "oklch(0.141 0.005 285.823)", primary: "oklch(0.648 0.2 131.684)", "primary-foreground": "oklch(0.986 0.031 120.757)", secondary: "oklch(0.967 0.001 286.375)", "secondary-foreground": "oklch(0.21 0.006 285.885)", muted: "oklch(0.967 0.001 286.375)", "muted-foreground": "oklch(0.552 0.016 285.938)", accent: "oklch(0.967 0.001 286.375)", "accent-foreground": "oklch(0.21 0.006 285.885)", destructive: "oklch(0.577 0.245 27.325)", border: "oklch(0.92 0.004 286.32)", input: "oklch(0.92 0.004 286.32)", ring: "oklch(0.841 0.238 128.85)", "chart-1": "oklch(0.871 0.15 154.449)", "chart-2": "oklch(0.723 0.219 149.579)", "chart-3": "oklch(0.627 0.194 149.214)", "chart-4": "oklch(0.527 0.154 150.069)", "chart-5": "oklch(0.448 0.119 151.328)", }, dark: { background: "oklch(0.141 0.005 285.823)", foreground: "oklch(0.985 0 0)", card: "oklch(0.21 0.006 285.885)", "card-foreground": "oklch(0.985 0 0)", popover: "oklch(0.21 0.006 285.885)", "popover-foreground": "oklch(0.985 0 0)", primary: "oklch(0.648 0.2 131.684)", "primary-foreground": "oklch(0.986 0.031 120.757)", secondary: "oklch(0.274 0.006 286.033)", "secondary-foreground": "oklch(0.985 0 0)", muted: "oklch(0.274 0.006 286.033)", "muted-foreground": "oklch(0.705 0.015 286.067)", accent: "oklch(0.274 0.006 286.033)", "accent-foreground": "oklch(0.985 0 0)", destructive: "oklch(0.704 0.191 22.216)", border: "oklch(1 0 0 / 10%)", input: "oklch(1 0 0 / 15%)", ring: "oklch(0.405 0.101 131.063)", "chart-1": "oklch(0.871 0.15 154.449)", "chart-2": "oklch(0.723 0.219 149.579)", "chart-3": "oklch(0.627 0.194 149.214)", "chart-4": "oklch(0.527 0.154 150.069)", "chart-5": "oklch(0.448 0.119 151.328)", }, }, }, { name: "orange", label: "Orange", cssVars: { light: { background: "oklch(1 0 0)", foreground: "oklch(0.141 0.005 285.823)", card: "oklch(1 0 0)", "card-foreground": "oklch(0.141 0.005 285.823)", popover: "oklch(1 0 0)", "popover-foreground": "oklch(0.141 0.005 285.823)", primary: "oklch(0.646 0.222 41.116)", "primary-foreground": "oklch(0.98 0.016 73.684)", secondary: "oklch(0.967 0.001 286.375)", "secondary-foreground": "oklch(0.21 0.006 285.885)", muted: "oklch(0.967 0.001 286.375)", "muted-foreground": "oklch(0.552 0.016 285.938)", accent: "oklch(0.967 0.001 286.375)", "accent-foreground": "oklch(0.21 0.006 285.885)", destructive: "oklch(0.577 0.245 27.325)", border: "oklch(0.92 0.004 286.32)", input: "oklch(0.92 0.004 286.32)", ring: "oklch(0.75 0.183 55.934)", "chart-1": "oklch(0.837 0.128 66.29)", "chart-2": "oklch(0.705 0.213 47.604)", "chart-3": "oklch(0.646 0.222 41.116)", "chart-4": "oklch(0.553 0.195 38.402)", "chart-5": "oklch(0.47 0.157 37.304)", }, dark: { background: "oklch(0.141 0.005 285.823)", foreground: "oklch(0.985 0 0)", card: "oklch(0.21 0.006 285.885)", "card-foreground": "oklch(0.985 0 0)", popover: "oklch(0.21 0.006 285.885)", "popover-foreground": "oklch(0.985 0 0)", primary: "oklch(0.705 0.213 47.604)", "primary-foreground": "oklch(0.98 0.016 73.684)", secondary: "oklch(0.274 0.006 286.033)", "secondary-foreground": "oklch(0.985 0 0)", muted: "oklch(0.274 0.006 286.033)", "muted-foreground": "oklch(0.705 0.015 286.067)", accent: "oklch(0.274 0.006 286.033)", "accent-foreground": "oklch(0.985 0 0)", destructive: "oklch(0.704 0.191 22.216)", border: "oklch(1 0 0 / 10%)", input: "oklch(1 0 0 / 15%)", ring: "oklch(0.408 0.123 38.172)", "chart-1": "oklch(0.837 0.128 66.29)", "chart-2": "oklch(0.705 0.213 47.604)", "chart-3": "oklch(0.646 0.222 41.116)", "chart-4": "oklch(0.553 0.195 38.402)", "chart-5": "oklch(0.47 0.157 37.304)", }, }, }, { name: "red", label: "Red", cssVars: { light: { background: "oklch(1 0 0)", foreground: "oklch(0.141 0.005 285.823)", card: "oklch(1 0 0)", "card-foreground": "oklch(0.141 0.005 285.823)", popover: "oklch(1 0 0)", "popover-foreground": "oklch(0.141 0.005 285.823)", primary: "oklch(0.577 0.245 27.325)", "primary-foreground": "oklch(0.971 0.013 17.38)", secondary: "oklch(0.967 0.001 286.375)", "secondary-foreground": "oklch(0.21 0.006 285.885)", muted: "oklch(0.967 0.001 286.375)", "muted-foreground": "oklch(0.552 0.016 285.938)", accent: "oklch(0.967 0.001 286.375)", "accent-foreground": "oklch(0.21 0.006 285.885)", destructive: "oklch(0.577 0.245 27.325)", border: "oklch(0.92 0.004 286.32)", input: "oklch(0.92 0.004 286.32)", ring: "oklch(0.704 0.191 22.216)", "chart-1": "oklch(0.808 0.114 19.571)", "chart-2": "oklch(0.637 0.237 25.331)", "chart-3": "oklch(0.577 0.245 27.325)", "chart-4": "oklch(0.505 0.213 27.518)", "chart-5": "oklch(0.444 0.177 26.899)", }, dark: { background: "oklch(0.141 0.005 285.823)", foreground: "oklch(0.985 0 0)", card: "oklch(0.21 0.006 285.885)", "card-foreground": "oklch(0.985 0 0)", popover: "oklch(0.21 0.006 285.885)", "popover-foreground": "oklch(0.985 0 0)", primary: "oklch(0.637 0.237 25.331)", "primary-foreground": "oklch(0.971 0.013 17.38)", secondary: "oklch(0.274 0.006 286.033)", "secondary-foreground": "oklch(0.985 0 0)", muted: "oklch(0.274 0.006 286.033)", "muted-foreground": "oklch(0.705 0.015 286.067)", accent: "oklch(0.274 0.006 286.033)", "accent-foreground": "oklch(0.985 0 0)", destructive: "oklch(0.704 0.191 22.216)", border: "oklch(1 0 0 / 10%)", input: "oklch(1 0 0 / 15%)", ring: "oklch(0.396 0.141 25.723)", "chart-1": "oklch(0.808 0.114 19.571)", "chart-2": "oklch(0.637 0.237 25.331)", "chart-3": "oklch(0.577 0.245 27.325)", "chart-4": "oklch(0.505 0.213 27.518)", "chart-5": "oklch(0.444 0.177 26.899)", }, }, }, { name: "rose", label: "Rose", cssVars: { light: { background: "oklch(1 0 0)", foreground: "oklch(0.141 0.005 285.823)", card: "oklch(1 0 0)", "card-foreground": "oklch(0.141 0.005 285.823)", popover: "oklch(1 0 0)", "popover-foreground": "oklch(0.141 0.005 285.823)", primary: "oklch(0.586 0.253 17.585)", "primary-foreground": "oklch(0.969 0.015 12.422)", secondary: "oklch(0.967 0.001 286.375)", "secondary-foreground": "oklch(0.21 0.006 285.885)", muted: "oklch(0.967 0.001 286.375)", "muted-foreground": "oklch(0.552 0.016 285.938)", accent: "oklch(0.967 0.001 286.375)", "accent-foreground": "oklch(0.21 0.006 285.885)", destructive: "oklch(0.577 0.245 27.325)", border: "oklch(0.92 0.004 286.32)", input: "oklch(0.92 0.004 286.32)", ring: "oklch(0.712 0.194 13.428)", "chart-1": "oklch(0.81 0.117 11.638)", "chart-2": "oklch(0.645 0.246 16.439)", "chart-3": "oklch(0.586 0.253 17.585)", "chart-4": "oklch(0.514 0.222 16.935)", "chart-5": "oklch(0.455 0.188 13.697)", }, dark: { background: "oklch(0.141 0.005 285.823)", foreground: "oklch(0.985 0 0)", card: "oklch(0.21 0.006 285.885)", "card-foreground": "oklch(0.985 0 0)", popover: "oklch(0.21 0.006 285.885)", "popover-foreground": "oklch(0.985 0 0)", primary: "oklch(0.645 0.246 16.439)", "primary-foreground": "oklch(0.969 0.015 12.422)", secondary: "oklch(0.274 0.006 286.033)", "secondary-foreground": "oklch(0.985 0 0)", muted: "oklch(0.274 0.006 286.033)", "muted-foreground": "oklch(0.705 0.015 286.067)", accent: "oklch(0.274 0.006 286.033)", "accent-foreground": "oklch(0.985 0 0)", destructive: "oklch(0.704 0.191 22.216)", border: "oklch(1 0 0 / 10%)", input: "oklch(1 0 0 / 15%)", ring: "oklch(0.41 0.159 10.272)", "chart-1": "oklch(0.81 0.117 11.638)", "chart-2": "oklch(0.645 0.246 16.439)", "chart-3": "oklch(0.586 0.253 17.585)", "chart-4": "oklch(0.514 0.222 16.935)", "chart-5": "oklch(0.455 0.188 13.697)", }, }, }, { name: "violet", label: "Violet", cssVars: { light: { background: "oklch(1 0 0)", foreground: "oklch(0.141 0.005 285.823)", card: "oklch(1 0 0)", "card-foreground": "oklch(0.141 0.005 285.823)", popover: "oklch(1 0 0)", "popover-foreground": "oklch(0.141 0.005 285.823)", primary: "oklch(0.541 0.281 293.009)", "primary-foreground": "oklch(0.969 0.016 293.756)", secondary: "oklch(0.967 0.001 286.375)", "secondary-foreground": "oklch(0.21 0.006 285.885)", muted: "oklch(0.967 0.001 286.375)", "muted-foreground": "oklch(0.552 0.016 285.938)", accent: "oklch(0.967 0.001 286.375)", "accent-foreground": "oklch(0.21 0.006 285.885)", destructive: "oklch(0.577 0.245 27.325)", border: "oklch(0.92 0.004 286.32)", input: "oklch(0.92 0.004 286.32)", ring: "oklch(0.702 0.183 293.541)", "chart-1": "oklch(0.811 0.111 293.571)", "chart-2": "oklch(0.606 0.25 292.717)", "chart-3": "oklch(0.541 0.281 293.009)", "chart-4": "oklch(0.491 0.27 292.581)", "chart-5": "oklch(0.432 0.232 292.759)", }, dark: { background: "oklch(0.141 0.005 285.823)", foreground: "oklch(0.985 0 0)", card: "oklch(0.21 0.006 285.885)", "card-foreground": "oklch(0.985 0 0)", popover: "oklch(0.21 0.006 285.885)", "popover-foreground": "oklch(0.985 0 0)", primary: "oklch(0.606 0.25 292.717)", "primary-foreground": "oklch(0.969 0.016 293.756)", secondary: "oklch(0.274 0.006 286.033)", "secondary-foreground": "oklch(0.985 0 0)", muted: "oklch(0.274 0.006 286.033)", "muted-foreground": "oklch(0.705 0.015 286.067)", accent: "oklch(0.274 0.006 286.033)", "accent-foreground": "oklch(0.985 0 0)", destructive: "oklch(0.704 0.191 22.216)", border: "oklch(1 0 0 / 10%)", input: "oklch(1 0 0 / 15%)", ring: "oklch(0.38 0.189 293.745)", "chart-1": "oklch(0.811 0.111 293.571)", "chart-2": "oklch(0.606 0.25 292.717)", "chart-3": "oklch(0.541 0.281 293.009)", "chart-4": "oklch(0.491 0.27 292.581)", "chart-5": "oklch(0.432 0.232 292.759)", }, }, }, { name: "yellow", label: "Yellow", cssVars: { light: { background: "oklch(1 0 0)", foreground: "oklch(0.141 0.005 285.823)", card: "oklch(1 0 0)", "card-foreground": "oklch(0.141 0.005 285.823)", popover: "oklch(1 0 0)", "popover-foreground": "oklch(0.141 0.005 285.823)", primary: "oklch(0.852 0.199 91.936)", "primary-foreground": "oklch(0.421 0.095 57.708)", secondary: "oklch(0.967 0.001 286.375)", "secondary-foreground": "oklch(0.21 0.006 285.885)", muted: "oklch(0.967 0.001 286.375)", "muted-foreground": "oklch(0.552 0.016 285.938)", accent: "oklch(0.967 0.001 286.375)", "accent-foreground": "oklch(0.21 0.006 285.885)", destructive: "oklch(0.577 0.245 27.325)", border: "oklch(0.92 0.004 286.32)", input: "oklch(0.92 0.004 286.32)", ring: "oklch(0.852 0.199 91.936)", "chart-1": "oklch(0.905 0.182 98.111)", "chart-2": "oklch(0.795 0.184 86.047)", "chart-3": "oklch(0.681 0.162 75.834)", "chart-4": "oklch(0.554 0.135 66.442)", "chart-5": "oklch(0.476 0.114 61.907)", }, dark: { background: "oklch(0.141 0.005 285.823)", foreground: "oklch(0.985 0 0)", card: "oklch(0.21 0.006 285.885)", "card-foreground": "oklch(0.985 0 0)", popover: "oklch(0.21 0.006 285.885)", "popover-foreground": "oklch(0.985 0 0)", primary: "oklch(0.795 0.184 86.047)", "primary-foreground": "oklch(0.421 0.095 57.708)", secondary: "oklch(0.274 0.006 286.033)", "secondary-foreground": "oklch(0.985 0 0)", muted: "oklch(0.274 0.006 286.033)", "muted-foreground": "oklch(0.705 0.015 286.067)", accent: "oklch(0.274 0.006 286.033)", "accent-foreground": "oklch(0.985 0 0)", destructive: "oklch(0.704 0.191 22.216)", border: "oklch(1 0 0 / 10%)", input: "oklch(1 0 0 / 15%)", ring: "oklch(0.421 0.095 57.708)", "chart-1": "oklch(0.905 0.182 98.111)", "chart-2": "oklch(0.795 0.184 86.047)", "chart-3": "oklch(0.681 0.162 75.834)", "chart-4": "oklch(0.554 0.135 66.442)", "chart-5": "oklch(0.476 0.114 61.907)", }, }, }, ]; export function applyTheme(themeName: string) { const theme = themes.find((t) => t.name === themeName) || themes[0]; const root = document.documentElement; const isDark = root.classList.contains("dark"); const vars = isDark ? theme.cssVars.dark : theme.cssVars.light; Object.entries(vars).forEach(([key, value]) => { root.style.setProperty(`--${key}`, value); }); }