UNPKG

@page-ui/wizard

Version:

Landing page components & templates that you can copy & paste

73 lines (69 loc) 2.44 kB
import chroma from 'chroma-js'; export const getShadcnTheme = (colors: { primary: Record<string, string>; secondary: Record<string, string>; }) => { return `@layer base { :root { --background: 0 0% 100%; --foreground: 240 10% 3.9%; --card: 0 0% 100%; --card-foreground: 240 10% 3.9%; --popover: 0 0% 100%; --popover-foreground: 240 10% 3.9%; --primary: ${convertToHSL(colors.primary.main)}; --primary-foreground: ${convertToHSL(colors.primary.lighter)}; --secondary: ${convertToHSL(colors.secondary.main)}; --secondary-foreground: ${convertToHSL(colors.secondary.lighter)}; --muted: 240 4.8% 95.9%; --muted-foreground: 240 3.8% 46.1%; --accent: 240 4.8% 95.9%; --accent-foreground: 240 5.9% 10%; --destructive: ${convertToHSL(colors.primary.dark)}; --destructive-foreground: ${convertToHSL(colors.primary.lighter)}; --border: 240 5.9% 90%; --input: 240 5.9% 90%; --ring: ${convertToHSL(colors.primary.main)}; --radius: 0.5rem; --chart-1: 12 76% 61%; --chart-2: 173 58% 39%; --chart-3: 197 37% 24%; --chart-4: 43 74% 66%; --chart-5: 27 87% 67%; } .dark { --background: 20 14.3% 4.1%; --foreground: 0 0% 95%; --card: 24 9.8% 10%; --card-foreground: 0 0% 95%; --popover: 0 0% 9%; --popover-foreground: 0 0% 95%; --primary: ${convertToHSL(colors.primary.darker)}; --primary-foreground: ${convertToHSL(colors.primary.light)}; --secondary: ${convertToHSL(colors.secondary.darker)}; --secondary-foreground: ${convertToHSL(colors.secondary.light)}; --muted: 0 0% 15%; --muted-foreground: 240 5% 64.9%; --accent: 12 6.5% 15.1%; --accent-foreground: 0 0% 98%; --destructive: ${convertToHSL(colors.primary.dark)}; --destructive-foreground: ${convertToHSL(colors.primary.lighter)}; --border: 240 3.7% 15.9%; --input: 240 3.7% 15.9%; --ring: ${convertToHSL(colors.primary.darker)}; --chart-1: 220 70% 50%; --chart-2: 160 60% 45%; --chart-3: 30 80% 55%; --chart-4: 280 65% 60%; --chart-5: 340 75% 55%; } } `; }; export const convertToHSL = (hex: string): string => { const hsl = chroma(hex).hsl(); const h = hsl[0] || 0; const s = hsl[1] * 100; // chroma gives 0-1, we convert to percentage const l = hsl[2] * 100; // chroma gives 0-1, we convert to percentage return `${h.toFixed(1)} ${s.toFixed(1)}% ${l.toFixed(1)}%`; };