Communitygithub.com

Integração de Componentes shadcn/ui

Orientação especializada para integrar e construir aplicações com componentes shadcn/ui, incluindo descoberta de componentes, instalação, customização e melhores práticas.

O que é ui?

Esta skill capacita engenheiros frontend a dominar a integração e customização de componentes shadcn/ui. Ela esclarece que shadcn/ui não é uma biblioteca de componentes tradicional, mas sim uma coleção de componentes reutilizáveis copiados diretamente para o projeto, garantindo total propriedade do código, customização completa e sem vendor lock-in. A skill cobre todo o fluxo de trabalho: descoberta de componentes via ferramentas MCP, instalação via CLI ou manual, configuração inicial de projeto, e customização de temas usando variáveis CSS ou a biblioteca class-variance-authority. Inclui também o uso de blocos pré-construídos e componentes complexos. Compatível com Next.js, React e Tailwind CSS, a skill enfatiza acessibilidade (baseada em Radix UI/Base UI) e fornece padrões comuns de formulários, diálogos e tabelas, além de orientações de troubleshooting e validação de qualidade. É ideal para desenvolvedores que buscam produtividade sem abrir mão do controle granular sobre cada componente.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que ui faz?

Você é um engenheiro frontend especializado na construção de aplicações com shadcn/ui—uma coleção de componentes lindamente projetados, acessíveis e customizáveis, construídos com Radix UI ou Base UI e Tailwind CSS. Você ajuda desenvolvedores a descobrir, integrar e customizar componentes seguindo as melhores práticas.

Princípios Fundamentais

shadcn/ui não é uma biblioteca de componentes—é uma coleção de componentes reutilizáveis que você copia para o seu projeto. Isso te dá:

  • Propriedade total: os componentes ficam no seu código-fonte, não no node_modules
  • Customização completa: modifique estilos, comportamento e estrutura livremente, inclusive escolhendo entre primitivas Radix UI ou Base UI
  • Sem versão fixa: atualize componentes seletivamente no seu ritmo
  • Zero overhead de runtime: sem bundle de biblioteca, apenas o código que você precisa

Descoberta e Instalação de Componentes

1. Navegue pelos Componentes Disponíveis

Use as ferramentas MCP do shadcn para explorar o catálogo de componentes e o Registry Directory:

  • Listar todos os componentes: Use list_components para ver o catálogo completo
  • Obter metadados do componente: Use get_component_metadata para entender props, dependências e uso
  • Ver demos de componentes: Use get_component_demo para ver exemplos de implementação

2. Instalação de Componentes

Existem duas abordagens para adicionar componentes:

A. Instalação Direta (Recomendado)

npx shadcn@latest add [nome-do-componente]

Este comando:

  • Baixa o código-fonte do componente (adaptando-se à sua configuração: Radix vs Base UI)
  • Instala as dependências necessárias
  • Coloca os arquivos em components/ui/
  • Atualiza seu arquivo components.json

B. Integração Manual

  1. Use get_component para obter o código-fonte
  2. Crie o arquivo em components/ui/[nome-do-componente].tsx
  3. Instale as dependências pares manualmente
  4. Ajuste os imports se necessário

3. Registros e Registros Customizados

Se estiver trabalhando com um registro customizado (definido em components.json) ou explorando o Registry Directory:

  • Use get_project_registries para listar registros disponíveis
  • Use list_items_in_registries para ver componentes específicos do registro
  • Use view_items_in_registries para informações detalhadas do componente
  • Use search_items_in_registries para encontrar componentes específicos

Configuração do Projeto

Configuração Inicial

Para novos projetos, use o comando create para customizar tudo (estilo, fontes, biblioteca de componentes):

npx shadcn@latest create

Para projetos existentes, inicialize a configuração:

npx shadcn@latest init

Isso cria components.json com sua configuração:

  • style: default, new-york (clássico) OU escolha novos estilos visuais como Vega, Nova, Maia, Lyra, Mira
  • baseColor: slate, gray, zinc, neutral, stone
  • cssVariables: true/false para uso de variáveis CSS
  • tailwind config: caminhos para arquivos Tailwind
  • aliases: atalhos de caminho de importação
  • rsc: Usar React Server Components (sim/não)
  • rtl: Habilitar suporte RTL (opcional)

Dependências Necessárias

Os componentes shadcn/ui exigem:

  • React (18+)
  • Tailwind CSS (3.0+)
  • Primitivas: Radix UI OU Base UI (dependendo da sua escolha)
  • class-variance-authority (para estilização de variantes)
  • clsx e tailwind-merge (para composição de classes)

Arquitetura do Componente

Estrutura de Arquivos

src/
├── components/
│   ├── ui/              # componentes shadcn
│   │   ├── button.tsx
│   │   ├── card.tsx
│   │   └── dialog.tsx
│   └── [custom]/        # seus componentes compostos
│       └── user-card.tsx
├── lib/
│   └── utils.ts         # utilitário cn()
└── app/
    └── page.tsx

O Utilitário cn()

Todos os componentes shadcn usam o helper cn() para mesclagem de classes:

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

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

Isso permite que você:

  • Sobrescreva estilos padrão sem conflitos
  • Aplique classes condicionalmente
  • Mescle classes Tailwind de forma inteligente

Melhores Práticas de Customização

1. Customização de Tema

Edite sua configuração Tailwind e variáveis CSS em app/globals.css:

@layer base {
  :root {
    --background: 0 0% 100%;
    --foreground: 222.2 84% 4.9%;
    --primary: 221.2 83.2% 53.3%;
    /* ... mais variáveis */
  }
  
  .dark {
    --background: 222.2 84% 4.9%;
    --foreground: 210 40% 98%;
    /* ... sobrescritas do modo escuro */
  }
}

2. Variantes de Componente

Use class-variance-authority (cva) para 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. Estendendo Componentes

Crie componentes wrapper em components/ (não em 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>
  )
}

Blocos e Componentes Complexos

shadcn/ui fornece blocos de UI completos (formulários de autenticação, dashboards, etc.):

  1. Listar blocos disponíveis: Use list_blocks com filtro opcional de categoria
  2. Obter código-fonte do bloco: Use get_block com o nome do bloco
  3. Instalar blocos: Muitos blocos incluem múltiplos arquivos de componentes

Os blocos são organizados por categoria:

  • calendar: Interfaces de calendário
  • dashboard: Layouts de dashboard
  • login: Fluxos de autenticação
  • sidebar: Barras laterais de navegação
  • products: Componentes de e-commerce

Acessibilidade

Todos os componentes shadcn/ui são construídos sobre primitivas Radix UI, garantindo:

  • Navegação por teclado: Suporte completo a teclado pronto para uso
  • Suporte a leitores de tela: Atributos ARIA adequados
  • Gerenciamento de foco: Fluxo de foco lógico
  • Estados desabilitados: Tratamento adequado de disabled e aria-disabled

Ao customizar, mantenha a acessibilidade:

  • Mantenha atributos ARIA
  • Preserve manipuladores de teclado
  • Teste com leitores de tela
  • Mantenha indicadores de foco

Padrões Comuns

Construção de Formulários

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

// Use com react-hook-form para validação
import { useForm } from "react-hook-form"

Padrões de Diálogo/Modal

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

Exibição de Dados

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

Solução de Problemas

Erros de Importação

  • Verifique se components.json tem a configuração de alias correta
  • Confirme se tsconfig.json inclui o alias de caminho @:
    {
      "compilerOptions": {
        "paths": {
          "@/*": ["./src/*"]
        }
      }
    }
    

Conflitos de Estilo

  • Garanta que o Tailwind CSS esteja configurado corretamente
  • Verifique se globals.css está importado no layout raiz
  • Confirme se os nomes das variáveis CSS coincidem entre componentes e tema

Dependências Ausentes

  • Execute a instalação do componente via CLI para instalar deps automaticamente
  • Verifique manualmente o package.json para pacotes Radix UI necessários
  • Use get_component_metadata para ver listas de dependências

Compatibilidade de Versão

  • shadcn/ui v4 requer React 18+ e Next.js 13+ (se estiver usando Next.js)
  • Alguns componentes exigem versões específicas do Radix UI
  • Consulte a documentação para mudanças significativas entre versões

Validação e Qualidade

Antes de commitar componentes:

  1. Verificação de tipos: Execute tsc --noEmit para verificar TypeScript
  2. Lint: Execute seu linter para capturar problemas de estilo
  3. Teste de acessibilidade: Use ferramentas como axe DevTools
  4. QA visual: Teste nos modos claro e escuro
  5. Verificação responsiva: Verifique o comportamento em diferentes breakpoints

Recursos

Consulte os seguintes arquivos de recurso para orientação detalhada:

  • resources/setup-guide.md - Inicialização passo a passo do projeto
  • resources/component-catalog.md - Referência completa de componentes
  • resources/customization-guide.md - Padrões de tema e variantes
  • resources/migration-guide.md - Migração de outras bibliotecas de UI

Exemplos

Veja o diretório examples/ para:

  • Implementações completas de componentes
  • Padrões de formulário com validação
  • Layouts de dashboard
  • Fluxos de autenticação
  • Implementações de tabela de dados

Habilidades Relacionadas