Habilidade de Estilização de UI
Habilidade abrangente para criar interfaces de usuário bonitas e acessíveis, combinando componentes shadcn/ui, estilização utilitária Tailwind CSS e sistemas de design visual baseados em canvas.
Referência
- shadcn/ui: https://ui.shadcn.com/llms.txt
- Tailwind CSS: https://tailwindcss.com/docs
Quando Usar Esta Habilidade
Use quando:
- Construir UI com frameworks baseados em React (Next.js, Vite, Remix, Astro)
- Implementar componentes acessíveis (diálogos, formulários, tabelas, navegação)
- Estilizar com abordagem CSS utilitária
- Criar layouts responsivos mobile-first
- Implementar modo escuro e personalização de temas
- Construir sistemas de design com tokens consistentes
- Gerar designs visuais, pôsteres ou materiais de marca
- Prototipar rapidamente com feedback visual imediato
- Adicionar padrões complexos de UI (tabelas de dados, gráficos, paletas de comandos)
Stack Principal
Camada de Componentes: shadcn/ui
- Componentes acessíveis pré-construídos via primitivas Radix UI
- Modelo de distribuição copiar-colar (componentes vivem em seu código)
- TypeScript-first com segurança de tipos total
- Primitivas combináveis para UIs complexas
- Instalação e gerenciamento baseados em CLI
Camada de Estilização: Tailwind CSS
- Framework CSS utilitário
- Processamento em tempo de compilação sem overhead em tempo de execução
- Design responsivo mobile-first
- Tokens de design consistentes (cores, espaçamento, tipografia)
- Eliminação automática de código morto
Camada de Design Visual: Canvas
- Composições visuais de qualidade de museu
- Abordagem de design orientada por filosofia
- Comunicação visual sofisticada
- Texto mínimo, máximo impacto visual
- Padrões sistemáticos e estética refinada
Início Rápido
Configuração de Componente + Estilização
Instalar shadcn/ui com Tailwind:
npx shadcn@latest init
O CLI solicita informações sobre framework, TypeScript, caminhos e preferências de tema. Isso configura tanto shadcn/ui quanto Tailwind CSS.
Adicionar componentes:
npx shadcn@latest add button card dialog form
Usar componentes com estilização utilitária:
import { Button } from "@/components/ui/button"
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"
export function Dashboard() {
return (
<div className="container mx-auto p-6 grid gap-6 md:grid-cols-2 lg:grid-cols-3">
<Card className="hover:shadow-lg transition-shadow">
<CardHeader>
<CardTitle className="text-2xl font-bold">Analytics</CardTitle>
</CardHeader>
<CardContent className="space-y-4">
<p className="text-muted-foreground">Veja suas métricas</p>
<Button variant="default" className="w-full">
Ver Detalhes
</Button>
</CardContent>
</Card>
</div>
)
}
Alternativa: Configuração Apenas com Tailwind
Projetos Vite:
npm install -D tailwindcss @tailwindcss/vite
// vite.config.ts
import tailwindcss from '@tailwindcss/vite'
export default { plugins: [tailwindcss()] }
/* src/index.css */
@import "tailwindcss";
Guia de Biblioteca de Componentes
Catálogo abrangente de componentes com padrões de uso, instalação e exemplos de composição.
Veja: references/shadcn-components.md
Cobre:
- Componentes de formulário e entrada (Button, Input, Select, Checkbox, Date Picker, validação de formulário)
- Layout e navegação (Card, Tabs, Accordion, Navigation Menu)
- Overlays e diálogos (Dialog, Drawer, Popover, Toast, Command)
- Feedback e status (Alert, Progress, Skeleton)
- Componentes de exibição (Table, Data Table, Avatar, Badge)
Tema e Personalização
Configuração de tema, variáveis CSS, implementação de modo escuro e personalização de componentes.
Veja: references/shadcn-theming.md
Cobre:
- Configuração de modo escuro com next-themes
- Sistema de variáveis CSS
- Personalização de cores e paletas
- Personalização de variantes de componentes
- Implementação de alternância de tema
Padrões de Acessibilidade
Padrões ARIA, navegação por teclado, suporte a leitores de tela e uso de componentes acessíveis.
Veja: references/shadcn-accessibility.md
Cobre:
- Recursos de acessibilidade do Radix UI
- Padrões de navegação por teclado
- Gerenciamento de foco
- Anúncios para leitores de tela
- Acessibilidade em validação de formulários
Utilitários Tailwind
Classes utilitárias principais para layout, espaçamento, tipografia, cores, bordas e sombras.
Veja: references/tailwind-utilities.md
Cobre:
- Utilitários de layout (Flexbox, Grid, posicionamento)
- Sistema de espaçamento (padding, margin, gap)
- Tipografia (tamanhos de fonte, pesos, alinhamento, altura de linha)
- Cores e fundos
- Bordas e sombras
- Valores arbitrários para estilização personalizada
Design Responsivo
Breakpoints mobile-first, utilitários responsivos e layouts adaptativos.
Veja: references/tailwind-responsive.md
Cobre:
- Abordagem mobile-first
- Sistema de breakpoints (sm, md, lg, xl, 2xl)
- Padrões de utilitários responsivos
- Container queries
- Consultas de max-width
- Breakpoints personalizados
Personalização Tailwind
Estrutura do arquivo de configuração, utilitários personalizados, plugins e extensões de tema.
Veja: references/tailwind-customization.md
Cobre:
- Diretiva @theme para tokens personalizados
- Cores e fontes personalizadas
- Extensões de espaçamento e breakpoints
- Criação de utilitários personalizados
- Variantes personalizadas
- Organização de camadas (@layer base, components, utilities)
- Diretiva Apply para extração de componentes
Sistema de Design Visual
Filosofia de design baseada em canvas, princípios de comunicação visual e composições sofisticadas.
Veja: references/canvas-design-system.md
Cobre:
- Abordagem de filosofia de design
- Comunicação visual sobre texto
- Padrões sistemáticos e composição
- Design de cor, forma e espaço
- Integração de texto mínimo
- Execução de qualidade de museu
- Sistemas de design com várias páginas
Scripts Utilitários
Automação em Python para instalação de componentes e geração de configuração.
shadcn_add.py
Adicionar componentes shadcn/ui com gerenciamento de dependências:
python scripts/shadcn_add.py button card dialog
tailwind_config_gen.py
Gerar tailwind.config.js com tema personalizado:
python scripts/tailwind_config_gen.py --colors brand:blue --fonts display:Inter
Melhores Práticas
- Composição de Componentes: Construa UIs complexas a partir de primitivas simples e combináveis
- Estilização Utilitária: Use classes Tailwind diretamente; extraia componentes apenas para repetição verdadeira
- Responsivo Mobile-First: Comece com estilos mobile, adicione variantes responsivas
- Acessibilidade em Primeiro Lugar: Aproveite as primitivas do Radix UI, adicione estados de foco, use HTML semântico
- Tokens de Design: Use escala de espaçamento consistente, paletas de cores, sistema tipográfico
- Consistência do Modo Escuro: Aplique variantes escuras a todos os elementos temáticos
- Performance: Aproveite a eliminação automática de CSS, evite nomes de classe dinâmicos
- TypeScript: Use segurança de tipos total para melhor experiência de desenvolvimento
- Hierarquia Visual: Deixe a composição guiar a atenção, use espaçamento e cor intencionalmente
- Artesanato de Especialista: Cada detalhe importa - trate UI como um ofício
Navegação de Referências
Biblioteca de Componentes
references/shadcn-components.md- Catálogo completo de componentesreferences/shadcn-theming.md- Temas e personalizaçãoreferences/shadcn-accessibility.md- Padrões de acessibilidade
Sistema de Estilização
references/tailwind-utilities.md- Classes utilitárias principaisreferences/tailwind-responsive.md- Design responsivoreferences/tailwind-customization.md- Configuração e extensões
Design Visual
references/canvas-design-system.md- Filosofia de design e workflows de canvas
Automação
scripts/shadcn_add.py- Instalação de componentesscripts/tailwind_config_gen.py- Geração de configuração
Padrões Comuns
Formulário com validação:
import { useForm } from "react-hook-form"
import { zodResolver } from "@hookform/resolvers/zod"
import * as z from "zod"
import { Form, FormField, FormItem, FormLabel, FormControl, FormMessage } from "@/components/ui/form"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
const schema = z.object({
email: z.string().email(),
password: z.string().min(8)
})
export function LoginForm() {
const form = useForm({
resolver: zodResolver(schema),
defaultValues: { email: "", password: "" }
})
return (
<Form {...form}>
<form onSubmit={form.handleSubmit(console.log)} className="space-y-6">
<FormField control={form.control} name="email" render={({ field }) => (
<FormItem>
<FormLabel>Email</FormLabel>
<FormControl>
<Input type="email" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)} />
<Button type="submit" className="w-full">Entrar</Button>
</form>
</Form>
)
}
Layout responsivo com modo escuro:
<div className="min-h-screen bg-white dark:bg-gray-900">
<div className="container mx-auto px-4 py-8">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<Card className="bg-white dark:bg-gray-800 border-gray-200 dark:border-gray-700">
<CardContent className="p-6">
<h3 className="text-xl font-semibold text-gray-900 dark:text-white">
Conteúdo
</h3>
</CardContent>
</Card>
</div>
</div>
</div>
Recursos
- Documentação shadcn/ui: https://ui.shadcn.com
- Documentação Tailwind CSS: https://tailwindcss.com
- Radix UI: https://radix-ui.com
- Tailwind UI: https://tailwindui.com
- Headless UI: https://headlessui.com
- v0 (Gerador de UI com IA): https://v0.dev