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

interaction-design

Faz seu agente criar interações fluidas e agradáveis na interface. Ele adiciona animações sutis e feedback visual, melhorando a experiência do usuário.

O que ela faz

Esta ferramenta ajuda a criar animações e efeitos visuais para tornar aplicativos e sites mais interessantes e fáceis de usar. Ela adiciona 'vida' às interfaces, como botões que se movem ou mudam de cor quando você interage com eles.

Quando usar

  • ✓Ao adicionar um efeito visual a um botão quando o mouse passa por cima.
  • ✓Para fazer uma tela carregar de forma suave, mostrando um 'esqueleto' antes do conteúdo aparecer.
  • ✓Ao criar transições animadas entre diferentes telas de um aplicativo.

Exemplo do que pedir para a IA

“Crie uma animação de 'fade-in' para um card que aparece na tela.”

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/interaction-design/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/wshobson/agents/blob/main/plugins/ui-design/skills/interaction-design/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ela funciona definindo como os elementos devem se mover, mudar de tamanho ou cor ao longo do tempo. Isso é feito através de códigos que controlam a velocidade e o tipo de animação, como um 'suavizar' ou um 'pulo'.

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 interaction-design

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/ui-design/skills/interaction-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 Interação

Crie interações envolventes e intuitivas através de movimento, feedback e transições de estado pensadas que aprimoram a usabilidade e encantam os usuários.

Quando Usar Esta Habilidade

  • Adicionar microinterações para aprimorar o feedback do usuário
  • Implementar transições suaves de página e componentes
  • Projetar estados de carregamento e telas esqueléticas
  • Criar interações baseadas em gestos
  • Construir sistemas de notificação e "toasts"
  • Implementar interfaces de arrastar e soltar
  • Adicionar animações acionadas por rolagem
  • Projetar estados de "hover" e foco

Princípios Fundamentais

1. Movimento Intencional

O movimento deve comunicar, não decorar:

  • Feedback: Confirmar que as ações do usuário ocorreram
  • Orientação: Mostrar de onde os elementos vêm/para onde vão
  • Foco: Direcionar a atenção para mudanças importantes
  • Continuidade: Manter o contexto durante as transições

2. Diretrizes de Tempo

Duração Caso de Uso
100-150ms Microfeedback (hovers, cliques)
200-300ms Transições pequenas (alternâncias, dropdowns)
300-500ms Transições médias (modais, mudanças de página)
500ms+ Animações coreografadas complexas

3. Funções de Easing

/* Common easings */
--ease-out: cubic-bezier(0.16, 1, 0.3, 1); /* Decelerate - entering */
--ease-in: cubic-bezier(0.55, 0, 1, 0.45); /* Accelerate - exiting */
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* Both - moving between */
--spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* Overshoot - playful */

Início Rápido: Microinteração de Botão

import { motion } from "framer-motion";

export function InteractiveButton({ children, onClick }) {
  return (
    <motion.button
      onClick={onClick}
      whileHover={{ scale: 1.02 }}
      whileTap={{ scale: 0.98 }}
      transition={{ type: "spring", stiffness: 400, damping: 17 }}
      className="px-4 py-2 bg-blue-600 text-white rounded-lg"
    >
      {children}
    </motion.button>
  );
}

Padrões de Interação

1. Estados de Carregamento

Telas Esqueléticas: Preservam o layout durante o carregamento

function CardSkeleton() {
  return (
    <div className="animate-pulse">
      <div className="h-48 bg-gray-200 rounded-lg" />
      <div className="mt-4 h-4 bg-gray-200 rounded w-3/4" />
      <div className="mt-2 h-4 bg-gray-200 rounded w-1/2" />
    </div>
  );
}

Indicadores de Progresso: Mostram progresso determinado

function ProgressBar({ progress }: { progress: number }) {
  return (
    <div className="h-2 bg-gray-200 rounded-full overflow-hidden">
      <motion.div
        className="h-full bg-blue-600"
        initial={{ width: 0 }}
        animate={{ width: `${progress}%` }}
        transition={{ ease: "easeOut" }}
      />
    </div>
  );
}

2. Transições de Estado

Alternância com transição suave:

function Toggle({ checked, onChange }) {
  return (
    <button
      role="switch"
      aria-checked={checked}
      onClick={() => onChange(!checked)}
      className={`
        relative w-12 h-6 rounded-full transition-colors duration-200
        ${checked ? "bg-blue-600" : "bg-gray-300"}
      `}
    >
      <motion.span
        className="absolute top-1 left-1 w-4 h-4 bg-white rounded-full shadow"
        animate={{ x: checked ? 24 : 0 }}
        transition={{ type: "spring", stiffness: 500, damping: 30 }}
      />
    </button>
  );
}

3. Transições de Página

Animações de layout com Framer Motion:

import { AnimatePresence, motion } from "framer-motion";

function PageTransition({ children, key }) {
  return (
    <AnimatePresence mode="wait">
      <motion.div
        key={key}
        initial={{ opacity: 0, y: 20 }}
        animate={{ opacity: 1, y: 0 }}
        exit={{ opacity: 0, y: -20 }}
        transition={{ duration: 0.3 }}
      >
        {children}
      </motion.div>
    </AnimatePresence>
  );
}

4. Padrões de Feedback

Efeito de ondulação ao clicar:

function RippleButton({ children, onClick }) {
  const [ripples, setRipples] = useState([]);

  const handleClick = (e) => {
    const rect = e.currentTarget.getBoundingClientRect();
    const ripple = {
      x: e.clientX - rect.left,
      y: e.clientY - rect.top,
      id: Date.now(),
    };
    setRipples((prev) => [...prev, ripple]);
    setTimeout(() => {
      setRipples((prev) => prev.filter((r) => r.id !== ripple.id));
    }, 600);
    onClick?.(e);
  };

  return (

…
Perguntas frequentes

O que são 'microinterações'?

São pequenas animações que dão feedback visual ao usuário, como um botão que muda de cor quando clicado ou um ícone que se move levemente.

Por que usar animações?

Animações ajudam a guiar o usuário, mostram o que está acontecendo, dão uma sensação de fluidez e tornam a experiência mais agradável e intuitiva.

O que são 'loading states'?

São as telas ou elementos que aparecem enquanto o conteúdo principal está sendo carregado. Podem ser barras de progresso ou 'esqueletos' que mostram a estrutura da página.

Detalhes

Descrição original do autor

Design and implement microinteractions, motion design, transitions, and user feedback patterns. Use when adding polish to UI interactions, implementing loading states, or creating delightful user experiences.

repo: wshobson/agents

Popularidade

Estrelas no GitHub
41 mil
Posição no ranking
#4970
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas