Pular para o conteúdo
Skillpedia
Interfaces (UI/UX)41 mil · #4976

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

https://github.com/wshobson/agents/blob/main/plugins/ui-design/skills/web-component-design/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/wshobson/agents/blob/main/plugins/ui-design/skills/web-component-design/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-design

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/ui-design/skills/web-component-design/SKILL.md -o SKILL.md
Conteú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 (isLoading vs loading)
  • Forneça valores padrão sensatos
  • Suporte à composição via children
  • Permita substituições de estilo via className ou style

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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas