Communitygithub.com

Integración de Componentes shadcn/ui

Guía experta para integrar y construir aplicaciones con componentes shadcn/ui, incluyendo descubrimiento, instalación, personalización y mejores prácticas.

¿Qué es ui?

Esta habilidad te convierte en un ingeniero frontend especializado en la construcción de aplicaciones con shadcn/ui, una colección de componentes reutilizables, accesibles y personalizables, construidos sobre Radix UI o Base UI y Tailwind CSS. A diferencia de una librería tradicional, shadcn/ui coloca el código fuente directamente en tu proyecto, dándote control total de estilos y comportamiento, sin dependencias ocultas ni sobrecarga en tiempo de ejecución. La habilidad guía a través del descubrimiento de componentes, su instalación mediante CLI (npx shadcn@latest add), la configuración del proyecto con `components.json`, y la personalización avanzada usando `class-variance-authority`. También cubre bloques complejos (como formularios, paneles y barras laterales), accesibilidad nativa, resolución de problemas comunes y ejemplos prácticos. Está diseñada para desarrolladores que trabajan con React, Next.js y Tailwind CSS en cualquier entorno compatible.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Anand-4-6/skills/tree/HEAD/personal/shadcn-ui

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace ui?

Eres un ingeniero frontend especializado en la construcción de aplicaciones con shadcn/ui, una colección de componentes hermosamente diseñados, accesibles y personalizables, construidos con Radix UI o Base UI y Tailwind CSS. Ayudas a los desarrolladores a descubrir, integrar y personalizar componentes siguiendo las mejores prácticas.

Principios Fundamentales

shadcn/ui no es una librería de componentes – es una colección de componentes reutilizables que copias en tu proyecto. Esto te brinda:

  • Propiedad total: Los componentes residen en tu código fuente, no en node_modules
  • Personalización completa: Modifica libremente estilos, comportamiento y estructura, eligiendo entre primitivas Radix UI o Base UI
  • Sin bloqueo de versiones: Actualiza componentes de forma selectiva a tu propio ritmo
  • Sin sobrecarga en tiempo de ejecución: Sin paquete de librería, solo el código que necesitas

Descubrimiento e Instalación de Componentes

1. Explorar Componentes Disponibles

Usa las herramientas shadcn MCP para explorar el catálogo de componentes y el Directorio de Registros:

  • Listar todos los componentes: Usa list_components para ver el catálogo completo
  • Obtener metadatos del componente: Usa get_component_metadata para entender props, dependencias y uso
  • Ver demos de componentes: Usa get_component_demo para ver ejemplos de implementación

2. Instalación de Componentes

Hay dos enfoques para añadir componentes:

A. Instalación Directa (Recomendada)

npx shadcn@latest add [nombre-del-componente]

Este comando:

  • Descarga el código fuente del componente (adaptándose a tu configuración: Radix vs Base UI)
  • Instala las dependencias requeridas
  • Coloca los archivos en components/ui/
  • Actualiza tu configuración components.json

B. Integración Manual

  1. Usa get_component para obtener el código fuente
  2. Crea el archivo en components/ui/[nombre-del-componente].tsx
  3. Instala las dependencias peer manualmente
  4. Ajusta las importaciones si es necesario

3. Registros y Registros Personalizados

Si trabajas con un registro personalizado (definido en components.json) o exploras el Directorio de Registros:

  • Usa get_project_registries para listar los registros disponibles
  • Usa list_items_in_registries para ver componentes específicos de un registro
  • Usa view_items_in_registries para obtener información detallada del componente
  • Usa search_items_in_registries para encontrar componentes específicos

Configuración del Proyecto

Configuración Inicial

Para proyectos nuevos, usa el comando create para personalizar todo (estilo, fuentes, librería de componentes):

npx shadcn@latest create

Para proyectos existentes, inicializa la configuración:

npx shadcn@latest init

Esto crea components.json con tu configuración:

  • style: default, new-york (clásico) O elige nuevos estilos visuales como Vega, Nova, Maia, Lyra, Mira
  • baseColor: slate, gray, zinc, neutral, stone
  • cssVariables: true/false para uso de variables CSS
  • tailwind config: rutas a archivos de Tailwind
  • aliases: atajos de rutas de importación
  • rsc: Usar React Server Components (sí/no)
  • rtl: Habilitar soporte RTL (opcional)

Dependencias Requeridas

Los componentes shadcn/ui requieren:

  • React (18+)
  • Tailwind CSS (3.0+)
  • Primitivas: Radix UI O Base UI (según tu elección)
  • class-variance-authority (para estilos con variantes)
  • clsx y tailwind-merge (para composición de clases)

Arquitectura de Componentes

Estructura de Archivos

src/
├── components/
│   ├── ui/              # Componentes shadcn
│   │   ├── button.tsx
│   │   ├── card.tsx
│   │   └── dialog.tsx
│   └── [personalizados]/ # Tus componentes compuestos
│       └── user-card.tsx
├── lib/
│   └── utils.ts         # Utilidad cn()
└── app/
    └── page.tsx

La Utilidad cn()

Todos los componentes shadcn usan el helper cn() para fusionar clases:

import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"

export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs))
}

Esto te permite:

  • Sobrescribir estilos por defecto sin conflictos
  • Aplicar clases condicionalmente
  • Fusionar clases de Tailwind de forma inteligente

Mejores Prácticas de Personalización

1. Personalización del Tema

Edita tu configuración de Tailwind y las variables CSS en app/globals.css:

@layer base {
  :root {
    --background: 0 0% 100%;
    --foreground: 222.2 84% 4.9%;
    --primary: 221.2 83.2% 53.3%;
    /* ... más variables */
  }
  
  .dark {
    --background: 222.2 84% 4.9%;
    --foreground: 210 40% 98%;
    /* ... sobrescrituras de modo oscuro */
  }
}

2. Variantes de Componentes

Usa class-variance-authority (cva) para la lógica de variantes:

import { cva } from "class-variance-authority"

const buttonVariants = cva(
  "inline-flex items-center justify-center rounded-md",
  {
    variants: {
      variant: {
        default: "bg-primary text-primary-foreground",
        outline: "border border-input",
      },
      size: {
        default: "h-10 px-4 py-2",
        sm: "h-9 rounded-md px-3",
      },
    },
    defaultVariants: {
      variant: "default",
      size: "default",
    },
  }
)

3. Extensión de Componentes

Crea componentes envoltorio en components/ (no en components/ui/):

// components/custom-button.tsx
import { Button } from "@/components/ui/button"
import { Loader2 } from "lucide-react"

export function LoadingButton({ 
  loading, 
  children, 
  ...props 
}: ButtonProps & { loading?: boolean }) {
  return (
    <Button disabled={loading} {...props}>
      {loading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
      {children}
    </Button>
  )
}

Bloques y Componentes Complejos

shadcn/ui proporciona bloques UI completos (formularios de autenticación, paneles, etc.):

  1. Listar bloques disponibles: Usa list_blocks con filtro opcional de categoría
  2. Obtener código fuente del bloque: Usa get_block con el nombre del bloque
  3. Instalar bloques: Muchos bloques incluyen múltiples archivos de componentes

Los bloques se organizan por categoría:

  • calendar: Interfaces de calendario
  • dashboard: Diseños de panel
  • login: Flujos de autenticación
  • sidebar: Barras laterales de navegación
  • products: Componentes de comercio electrónico

Accesibilidad

Todos los componentes shadcn/ui están construidos sobre primitivas de Radix UI, garantizando:

  • Navegación por teclado: Soporte completo de teclado listo para usar
  • Soporte para lectores de pantalla: Atributos ARIA adecuados
  • Gestión de enfoque: Flujo de enfoque lógico
  • Estados deshabilitados: Manejo correcto de estados disabled y aria-disabled

Al personalizar, mantén la accesibilidad:

  • Conserva los atributos ARIA
  • Preserva los manejadores de teclado
  • Prueba con lectores de pantalla
  • Mantén los indicadores de enfoque

Patrones Comunes

Construcción de Formularios

import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"

// Úsalo con react-hook-form para validación
import { useForm } from "react-hook-form"

Patrones de Diálogo/Modal

import {
  Dialog,
  DialogContent,
  DialogDescription,
  DialogHeader,
  DialogTitle,
  DialogTrigger,
} from "@/components/ui/dialog"

Visualización de Datos

import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from "@/components/ui/table"

Solución de Problemas

Errores de Importación

  • Verifica que components.json tenga la configuración de alias correcta
  • Asegúrate de que tsconfig.json incluya el alias de ruta @:
    {
      "compilerOptions": {
        "paths": {
          "@/*": ["./src/*"]
        }
      }
    }
    

Conflictos de Estilo

  • Asegúrate de que Tailwind CSS esté configurado correctamente
  • Verifica que globals.css esté importado en tu layout raíz
  • Confirma que los nombres de las variables CSS coincidan entre los componentes y el tema

Dependencias Faltantes

  • Ejecuta la instalación del componente a través de CLI para instalar dependencias automáticamente
  • Revisa manualmente package.json para los paquetes de Radix UI requeridos
  • Usa get_component_metadata para ver las listas de dependencias

Compatibilidad de Versiones

  • shadcn/ui v4 requiere React 18+ y Next.js 13+ (si usas Next.js)
  • Algunos componentes requieren versiones específicas de Radix UI
  • Consulta la documentación para cambios importantes entre versiones

Validación y Calidad

Antes de confirmar componentes:

  1. Verificación de tipos: Ejecuta tsc --noEmit para verificar TypeScript
  2. Linting: Ejecuta tu linter para detectar problemas de estilo
  3. Prueba de accesibilidad: Usa herramientas como axe DevTools
  4. QA visual: Prueba en modo claro y oscuro
  5. Verificación responsive: Comprueba el comportamiento en diferentes puntos de quiebre

Recursos

Consulta los siguientes archivos de recursos para guía detallada:

  • resources/setup-guide.md - Inicialización del proyecto paso a paso
  • resources/component-catalog.md - Referencia completa de componentes
  • resources/customization-guide.md - Patrones de tematización y variantes
  • resources/migration-guide.md - Migración desde otras librerías UI

Ejemplos

Consulta el directorio examples/ para:

  • Implementaciones completas de componentes
  • Patrones de formularios con validación
  • Diseños de panel
  • Flujos de autenticación
  • Implementaciones de tablas de datos

Skills relacionados