¿Qué es chadcn?
Como su documentacion menciona, Chadcn NO es una biblioteca de componentes. Es una colección de componentes reutilizables que puede copiar y pegar en sus aplicaciones.
chadcn esta desarrollado encima de bibliotecas como TailwindCSS, RadixUI
- no es necesario instalarlo como una dependencia. No está disponible ni se distribuye a través de npm.
- Elige los componentes que necesitas. Copie y pegue el código en su proyecto y personalícelo según sus necesidades. El código es tuyo.
- Utilícelo como referencia para crear sus propias bibliotecas de componentes.
Instalacion
tiene varias guias de Instalacion en las que se pueden encontrar Frameworks o generadores de proyectos como Nextjs, Vitejs, Remix, Astro, Gatsby o un proyecto creado manualmente con React.
Para este ejemplo usaremos Nextjs:
npx create-next-app@latest my-app --typescript --tailwind --eslint
cd myapp
npx shadcn-ui@latest init
Si has configurado la carpeta
app
, es importante que el css vaya ensrc/app/globals.css
Luego de escoger algunas opciones ya puedes ejecutar el proyecto con npm run dev
Listo a partir de aqui puedes añadir componentes de chadcn.
Componente Boton
Por ejemplo para añadir un boton de chadcn, puedes ejecutar el siguiente comando.
npx shadcn-ui@latest add button
Tambien chadcn permite añadir manualmente componentes, es decir que te permite copiar y pegar codigo.
<Button>
Click me
</Button>
<Button variant="secondary">
Click me
</Button>
Aplicar Estilos
tambien puedes aplicar estilos de componentes de chadcn a otros componentes de React, por ejemplo este aplica los estilos de botones a etiquetas Link de Nextjs:
<Link href="/" className={buttonVariants({ variant: "destructive" })}>
Go Back
</Link>
Dark Mode
"use client";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { ModeToggle } from "@/components/ModeToggle";
function HomePage() {
return (
<div className="flex h-screen items-center justify-center">
<div>
<Tabs defaultValue="account">
<TabsList className="w-full">
<TabsTrigger value="account">Account</TabsTrigger>
<TabsTrigger value="password">Password</TabsTrigger>
</TabsList>
<TabsContent value="account">
Make changes to your account here.
</TabsContent>
<TabsContent value="password">Change your password here.</TabsContent>
</Tabs>
<ModeToggle />
</div>
</div>
);
}
export default HomePage;