Add example for shadcn-ui #13211
Replies: 2 comments 2 replies
-
As of a few weeks ago, plugins became supported in tailwind v4 alpha. And recently, p3 colors were added to the tailwind color palette. If you're using zinc theme (default), you can use the following config to get the tailwindcss-animate plugin and p3 colors working: tailwind.css @import 'tailwindcss';
@import './shadcn.css';
@plugin 'tailwindcss-animate';
@theme {
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-destructive: var(--destructive);
--color-destructive-foreground: var(--destructive-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--color-chart-1: var(--chart-1);
--color-chart-2: var(--chart-2);
--color-chart-3: var(--chart-3);
--color-chart-4: var(--chart-4);
--color-chart-5: var(--chart-5);
--radius-radius: var(--radius);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--font-family-sans: var(--font-geist-sans);
--font-family-mono: var(--font-geist-mono);
--animate-accordion-down: accordion-down 0.2s ease-out;
--animate-accordion-up: accordion-up 0.2s ease-out;
@keyframes accordion-down {
from {
height: 0;
}
to {
height: var(--radix-accordion-content-height);
}
}
@keyframes accordion-up {
from {
height: var(--radix-accordion-content-height);
}
to {
height: 0;
}
}
}
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
} shadcn.css :root {
--background: 0 0% 100%;
--foreground: var(--color-zinc-950); /* 240 10% 3.9% */
--card: 0 0% 100%;
--card-foreground: var(--color-zinc-950); /* 240 10% 3.9% */
--popover: 0 0% 100%;
--popover-foreground: var(--color-zinc-950); /* 240 10% 3.9% */
--primary: var(--color-zinc-900); /* 240 5.9% 10% */
--primary-foreground: var(--color-zinc-50); /* 0 0% 98% */
--secondary: var(--color-zinc-100); /* 240 4.8% 95.9% */
--secondary-foreground: var(--color-zinc-900); /* 240 5.9% 10% */
--muted: var(--color-zinc-100); /* 240 4.8% 95.9% */
--muted-foreground: var(--color-zinc-500); /* 240 3.8% 46.1% */
--accent: var(--color-zinc-100); /* 240 4.8% 95.9% */
--accent-foreground: var(--color-zinc-900); /* 240 5.9% 10% */
--destructive: var(--color-red-500); /* 0 84.2% 60.2% */
--destructive-foreground: var(--color-zinc-50); /* 0 0% 98% */
--border: var(--color-zinc-200); /* 240 5.9% 90% */
--input: var(--color-zinc-200); /* 240 5.9% 90% */
--ring: var(--color-zinc-900); /* 240 5.9% 10% */
--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%;
}
@media (prefers-color-scheme: dark) {
:root {
--background: var(--color-zinc-950); /* 240 10% 3.9% */
--foreground: var(--color-zinc-50); /* 0 0% 98% */
--card: var(--color-zinc-950); /* 240 10% 3.9% */
--card-foreground: var(--color-zinc-50); /* 0 0% 98% */
--popover: var(--color-zinc-950); /* 240 10% 3.9% */
--popover-foreground: var(--color-zinc-50); /* 0 0% 98% */
--primary: var(--color-zinc-50); /* 0 0% 98% */
--primary-foreground: var(--color-zinc-900); /* 240 5.9% 10% */
--secondary: var(--color-zinc-800); /* 240 3.7% 15.9% */
--secondary-foreground: var(--color-zinc-50); /* 0 0% 98% */
--muted: var(--color-zinc-800); /* 240 3.7% 15.9% */
--muted-foreground: var(--color-zinc-400); /* 240 5% 64.9% */
--accent: var(--color-zinc-800); /* 240 3.7% 15.9% */
--accent-foreground: var(--color-zinc-50); /* 0 0% 98% */
--destructive: var(--color-red-900); /* 0 62.8% 30.6% */
--destructive-foreground: var(--color-zinc-50); /* 0 0% 98% */
--border: var(--color-zinc-800); /* 240 3.7% 15.9% */
--input: var(--color-zinc-800); /* 240 3.7% 15.9% */
--ring: var(--color-zinc-300); /* 240 4.9% 83.9% */
--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%;
}
} |
Beta Was this translation helpful? Give feedback.
-
For people who are still looking for a solution, here's one that works well for me.
/* ./index.css */
@import "tailwindcss";
@import "./style/shadcn.css" layer(base);
@variant dark (&:where(.dark, .dark *));
@theme {
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-destructive: var(--destructive);
--color-destructive-foreground: var(--destructive-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--color-chart-1: var(--chart-1);
--color-chart-2: var(--chart-2);
--color-chart-3: var(--chart-3);
--color-chart-4: var(--chart-4);
--color-chart-5: var(--chart-5);
--radius-radius: var(--radius);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--font-family-sans: var(--font-geist-sans);
--font-family-mono: var(--font-geist-mono);
--chart-1: var(--chart-1);
--chart-2: var(--chart-2);
--chart-3: var(--chart-3);
--chart-4: var(--chart-4);
--chart-5: var(--chart-5);
--sidebar-background: var(--sidebar-background);
--sidebar-foreground: var(--sidebar-foreground);
--sidebar-primary: var(--sidebar-primary);
--sidebar-primary-foreground: var(--sidebar-primary-foreground);
--sidebar-accent: var(--sidebar-accent);
--sidebar-accent-foreground: var(--sidebar-accent-foreground);
--sidebar-border: var(--sidebar-border);
--sidebar-ring: var(--sidebar-ring);
} /* ./style/shadcn.css */
.dark {
--radius: 0.5rem;
--background: var(--color-neutral-900);
--foreground: var(--color-neutral-50);
--card: var(--color-neutral-950);
--card-foreground: var(--color-neutral-50);
--popover: var(--color-neutral-900);
--popover-foreground: var(--color-neutral-50);
--primary: var(--color-neutral-50);
--primary-foreground: var(--color-neutral-900);
--secondary: var(--color-neutral-800);
--secondary-foreground: var(--color-neutral-50);
--muted: var(--color-neutral-800);
--muted-foreground: var(--color-neutral-400);
--accent: var(--color-neutral-800);
--accent-foreground: var(--color-neutral-50);
--destructive: var(--color-red-900);
--destructive-foreground: var(--color-neutral-50);
--border: var(--color-neutral-800);
--input: var(--color-neutral-800);
--ring: var(--color-neutral-300);
--chart-1: var(--color-neutral-600);
--chart-2: var(--color-neutral-700);
--chart-3: var(--color-neutral-800);
--chart-4: var(--color-neutral-900);
--chart-5: var(--color-neutral-950);
--sidebar-background: var(--color-neutral-900);
--sidebar-foreground: var(--color-neutral-100);
--sidebar-primary: var(--color-neutral-800);
--sidebar-primary-foreground: var(--color-neutral-50);
--sidebar-accent: var(--color-neutral-700);
--sidebar-accent-foreground: var(--color-neutral-100);
--sidebar-border: var(--color-neutral-800);
--sidebar-ring: var(--color-neutral-600);
}
.light {
--radius: 0.5rem;
--background: var(--color-white);
--foreground: var(--color-neutral-950);
--card: var(--color-white);
--card-foreground: var(--color-neutral-950);
--popover: var(--color-white);
--popover-foreground: var(--color-neutral-950);
--primary: var(--color-neutral-900);
--primary-foreground: var(--color-neutral-50);
--secondary: var(--color-neutral-100);
--secondary-foreground: var(--color-neutral-900);
--muted: var(--color-neutral-100);
--muted-foreground: var(--color-neutral-500);
--accent: var(--color-neutral-100);
--accent-foreground: var(--color-neutral-900);
--destructive: var(--color-red-500);
--destructive-foreground: var(--color-neutral-50);
--border: var(--color-neutral-200);
--input: var(--color-neutral-200);
--ring: var(--color-neutral-900);
--chart-1: var(--color-neutral-500);
--chart-2: var(--color-neutral-600);
--chart-3: var(--color-neutral-700);
--chart-4: var(--color-neutral-800);
--chart-5: var(--color-neutral-900);
--sidebar-background: var(--color-neutral-100);
--sidebar-foreground: var(--color-neutral-800);
--sidebar-primary: var(--color-neutral-700);
--sidebar-primary-foreground: var(--color-neutral-50);
--sidebar-accent: var(--color-neutral-300);
--sidebar-accent-foreground: var(--color-neutral-900);
--sidebar-border: var(--color-neutral-200);
--sidebar-ring: var(--color-neutral-600);
} |
Beta Was this translation helpful? Give feedback.
-
If you wish to migrate to the newest version of Tailwind v4.0.0-alpha, for most people it will be a bit harsh to do so if they're using shadcn-ui.
Adding tailwind v4 and Postcss is fine, but the layout won't look like it was on the previous version, because all of the variables that shadcn set automatically on tailwind.config.ts, will need to be rewritten using a regular CSS file.
I've just migrated a project from tailwind v3.4.1 to v4.0.0-alpha successfully, and I'd like to share my .css file with the theme already configurated for shadcn-ui, so other people that are also migrating can get their variables re-defined in a simple copy and paste.
It would be great if that could be available in this post you guys did.
Beta Was this translation helpful? Give feedback.
All reactions