web-component-design
Faz seu agente criar componentes de interface reutilizáveis para web. É útil para construir bibliotecas de componentes e garantir consistência no design.
O que ela faz
Esta ferramenta ajuda a criar componentes de interface de usuário reutilizáveis e organizados para sites e aplicativos. Ela ensina padrões para construir esses componentes de forma eficiente e estilizada usando tecnologias como React, Vue e Svelte.
Quando usar
- ✓Ao criar uma biblioteca de componentes visuais para um projeto.
- ✓Ao projetar a aparência e o comportamento de botões, cards ou outros elementos.
- ✓Ao decidir como aplicar estilos (cores, fontes, tamanhos) aos componentes.
Exemplo do que pedir para a IA
“Como posso criar um botão reutilizável em React que possa ter cores diferentes e um ícone?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A ferramenta ensina diferentes maneiras de combinar componentes para que eles funcionem bem juntos, como 'componentes compostos' ou 'slots'. Ela também mostra como usar diferentes métodos para estilizar esses componentes, como CSS-in-JS.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add wshobson/agents --skill web-component-designOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/ui-design/skills/web-component-design/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Design de Componentes Web
Crie componentes de UI reutilizáveis e fáceis de manter usando frameworks modernos com padrões de composição limpos e abordagens de estilização.
Quando Usar Esta Habilidade
- Projetar bibliotecas de componentes reutilizáveis ou sistemas de design
- Implementar padrões complexos de composição de componentes
- Escolher e aplicar soluções de CSS-in-JS
- Construir componentes de UI acessíveis e responsivos
- Criar APIs de componentes consistentes em uma base de código
- Refatorar componentes legados em padrões modernos
- Implementar componentes compostos ou render props
Conceitos Essenciais
1. Padrões de Composição de Componentes
Componentes Compostos: Componentes relacionados que trabalham juntos
// Usage
<Select value={value} onChange={setValue}>
<Select.Trigger>Choose option</Select.Trigger>
<Select.Options>
<Select.Option value="a">Option A</Select.Option>
<Select.Option value="b">Option B</Select.Option>
</Select.Options>
</Select>
Render Props: Delega a renderização para o componente pai
<DataFetcher url="/api/users">
{({ data, loading, error }) =>
loading ? <Spinner /> : <UserList users={data} />
}
</DataFetcher>
Slots (Vue/Svelte): Pontos de injeção de conteúdo nomeados
<template>
<Card>
<template #header>Title</template>
<template #content>Body text</template>
<template #footer><Button>Action</Button></template>
</Card>
</template>
2. Abordagens de CSS-in-JS
| Solução | Abordagem | Ideal Para |
|---|---|---|
| Tailwind CSS | Classes utilitárias | Prototipagem rápida, sistemas de design |
| CSS Modules | Arquivos CSS com escopo | CSS existente, adoção gradual |
| styled-components | Template literals | React, estilização dinâmica |
| Emotion | Estilos em objeto/template | Flexível, amigável para SSR |
| Vanilla Extract | Zero-runtime | Apps com performance crítica |
3. Design de API de Componentes
interface ButtonProps {
variant?: "primary" | "secondary" | "ghost";
size?: "sm" | "md" | "lg";
isLoading?: boolean;
isDisabled?: boolean;
leftIcon?: React.ReactNode;
rightIcon?: React.ReactNode;
children: React.ReactNode;
onClick?: () => void;
}
Princípios:
- Use nomes de props semânticos (
isLoadingvsloading) - Forneça valores padrão sensatos
- Suporte à composição via
children - Permita substituições de estilo via
classNameoustyle
Início Rápido: Componente React com Tailwind
import { forwardRef, type ComponentPropsWithoutRef } from "react";
import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "@/lib/utils";
const buttonVariants = cva(
"inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50",
{
variants: {
variant: {
primary: "bg-blue-600 text-white hover:bg-blue-700",
secondary: "bg-gray-100 text-gray-900 hover:bg-gray-200",
ghost: "hover:bg-gray-100 hover:text-gray-900",
},
size: {
sm: "h-8 px-3 text-sm",
md: "h-10 px-4 text-sm",
lg: "h-12 px-6 text-base",
},
},
defaultVariants: {
variant: "primary",
size: "md",
},
},
);
interface ButtonProps
extends
ComponentPropsWithoutRef<"button">,
VariantProps<typeof buttonVariants> {
isLoading?: boolean;
}
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
({ className, variant, size, isLoading, children, ...props }, ref) => (
<button
ref={ref}
className={cn(buttonVariants({ variant, size }), className)}
disabled={isLoading || props.disabled}
{...props}
>
{isLoading && <Spinner className="mr-2 h-4 w-4" />}
{children}
</button>
),
);
Button.displayName = "Button";
Padrões de Framework
React: Componentes Compostos
import { createContext, useContext, useState, type ReactNode } from "react";
interface AccordionContextValue {
openItems: Set<string>;
toggle: (id: string) => void;
}
const AccordionContext = createContext<AccordionContextValue | null>(null);
function useAccordion() {
const context = useContext(AccordionContext);
if (!context) throw new Error("Must be used within Accordion");
return context;
}
export function Accordion({ children }: { children: ReactNode }) {
…
Perguntas frequentes
O que são 'componentes compostos'?
São componentes que trabalham juntos como um conjunto. Por exemplo, um componente de seleção pode ter partes separadas para mostrar a opção, a lista de opções e cada item da lista, mas funcionam como uma unidade.
O que é 'CSS-in-JS'?
É uma forma de escrever o código de estilo (CSS) diretamente dentro do código do componente (JavaScript/TypeScript), permitindo estilos mais dinâmicos e organizados.
O que significa 'design de API de componente'?
Refere-se a como você define as opções e propriedades que um componente aceita (por exemplo, cor, tamanho, se está desabilitado) para que outros desenvolvedores saibam como usá-lo facilmente.
Detalhes
Descrição original do autor
Master React, Vue, and Svelte component patterns including CSS-in-JS, composition strategies, and reusable component architecture. Use when building UI component libraries, designing component APIs, or implementing frontend design systems.
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4976
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
design-system
Ajuda seu agente a criar um sistema de design a partir de um código existente. Ele extrai informações visuais e verifica a consistência, gerando um relatório e uma prévia interativa.
affaan-m/ECC
liquid-glass-design
Ajuda seu agente a criar interfaces de usuário com efeito 'Liquid Glass' para iOS. Permite adicionar efeitos visuais dinâmicos e interativos em SwiftUI e UIKit.
affaan-m/ECC