AgentSkillsCN

component-library

梳理项目中可用的shadcn/ui组件,并明确每个组件的适用场景。适用于需要为UI选择组件的场景。

SKILL.md
--- frontmatter
name: component-library
description: Catálogo de componentes shadcn/ui disponíveis no projeto e quando usar cada um. Use quando precisar escolher componentes para UI.
user-invocable: false
allowed-tools: Read, Grep, Glob

Biblioteca de Componentes

Stack UI

  • shadcn/ui (New York style) — componentes base
  • Radix UI — primitivos acessíveis (base do shadcn)
  • Tailwind CSS v4 — styling
  • Lucide React — ícones

Adicionar Novo Componente shadcn

bash
npx shadcn@latest add <component-name>
# Componente é copiado para client/src/components/ui/

Componentes Disponíveis (~72)

Layout e Containers

ComponenteQuando usar
cardContainer com borda para agrupar conteúdo
dialogModal/popup para ações focadas
drawerPainel lateral deslizante
sheetPainel lateral (similar ao drawer)
tabsNavegar entre seções de conteúdo
accordionConteúdo colapsável em seções
collapsibleToggle show/hide de conteúdo
separatorLinha divisória
scroll-areaScroll customizado
resizablePainéis redimensionáveis

Formulários

ComponenteQuando usar
formWrapper para react-hook-form
inputCampo de texto
textareaCampo de texto multilinha
selectDropdown de seleção
checkboxOpção on/off
radio-groupSeleção exclusiva
switchToggle on/off
sliderSeleção de range
date-pickerSeleção de data
calendarCalendário inline
input-otpCódigo de verificação

Botões e Ações

ComponenteQuando usar
buttonAção primária/secundária
toggleBotão on/off
toggle-groupGrupo de toggles
dropdown-menuMenu contextual com ações
context-menuMenu de clique direito
menubarBarra de menus

Dados e Feedback

ComponenteQuando usar
tableDados tabulares
data-tableTabela avançada (sort, filter, pagination) — custom
badgeLabel/tag pequeno
avatarFoto/iniciais de usuário
progressBarra de progresso
skeletonPlaceholder de loading
spinnerLoading indicator
toast / sonnerNotificações temporárias
alertMensagem de destaque
alert-dialogConfirmação de ação destrutiva

Navegação

ComponenteQuando usar
navigation-menuMenu de navegação principal
breadcrumbTrilha de navegação
paginationNavegação entre páginas
sidebarMenu lateral
commandPaleta de comandos (Cmd+K)

Overlay

ComponenteQuando usar
tooltipTexto explicativo ao hover
popoverConteúdo flutuante ao clicar
hover-cardPreview ao hover

Tipografia

ComponenteQuando usar
labelLabel de form field
aspect-ratioManter proporção de imagem/vídeo

Componentes Custom do Projeto

Além do shadcn, o projeto tem componentes específicos:

ComponenteArquivoUso
StatusBadgestatus-badge.tsxBadge com cores por status
StarRatingStarRating.tsxRating com estrelas
InstagramAvatarinstagram-avatar.tsxAvatar com foto do IG
NotificationBellnotification-bell.tsxSino com contador
ObjectUploaderObjectUploader.tsxUpload para GCS
DataTabledata-table.tsxTabela com sort/filter/pagination
ShareCampaignButtonshare-campaign-button.tsxBotão de compartilhar
CompanySwitchercompany-switcher.tsxTrocar empresa ativa

Padrões de Uso

Import

typescript
import { Button } from "@/components/ui/button";
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { useToast } from "@/hooks/use-toast";

Toast (Notificações)

typescript
const { toast } = useToast();

// Sucesso
toast({ title: "Salvo com sucesso!" });

// Erro
toast({
  title: "Erro",
  description: "Não foi possível salvar",
  variant: "destructive",
});

Confirmação de Ação Destrutiva

typescript
<AlertDialog>
  <AlertDialogTrigger asChild>
    <Button variant="destructive">Excluir</Button>
  </AlertDialogTrigger>
  <AlertDialogContent>
    <AlertDialogHeader>
      <AlertDialogTitle>Tem certeza?</AlertDialogTitle>
      <AlertDialogDescription>Esta ação não pode ser desfeita.</AlertDialogDescription>
    </AlertDialogHeader>
    <AlertDialogFooter>
      <AlertDialogCancel>Cancelar</AlertDialogCancel>
      <AlertDialogAction onClick={handleDelete}>Excluir</AlertDialogAction>
    </AlertDialogFooter>
  </AlertDialogContent>
</AlertDialog>