motion-patterns
Faz seu agente animar elementos comuns de interface. Ajuda a criar transições suaves para botões, janelas, notificações e páginas.
O que ela faz
Este código ajuda a criar animações suaves e prontas para uso em sites feitos com React ou Next.js. Ele oferece padrões para botões, janelas (modais), notificações (toasts), listas que aparecem em sequência e transições entre páginas.
Quando usar
- ✓Animar um botão que muda ao ser clicado.
- ✓Fazer uma lista de itens aparecer um após o outro.
- ✓Criar uma transição suave ao mudar de página no site.
Exemplo do que pedir para a IA
“Crie uma animação para um botão que parece 'afundar' quando clicado e volta ao normal quando solto.”
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
Ele usa 'padrões' de animação pré-definidos que importam configurações de velocidade e movimento de um arquivo separado. Isso garante que as animações sejam consistentes e não usem valores inventados na hora.
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 affaan-m/ECC --skill motion-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/motion-patterns/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.
Padrões de Movimento
Copie e cole padrões para as necessidades mais comuns de animação de UI.
Cada padrão aqui é construído sobre tokens motion-foundations e molas.
Não defina novos valores de duração ou easing aqui — importe-os.
Quando Ativar
- Animando um botão, card, modal ou notificação toast
- Construindo entradas de lista com stagger
- Configurando transições de página no Next.js App Router
- Adicionando animações de entrada ou saída a conteúdo condicional
- Implementando scroll-reveal, progresso vinculado a scroll ou seções de história fixas
- Construindo cards expansíveis, accordions ou transições de elemento compartilhado
Saídas
Esta habilidade produz:
- Animação acessível e segura para SSR para todos os componentes de UI padrão
- Renderizações condicionais envolvidas por
AnimatePresencecom comportamento de saída correto - Componente wrapper de transição de página para Next.js App Router
- Padrões de scroll-reveal e scroll-linked usando
useScroll+useTransform - Padrões de animação de layout (
layout,layoutId) para elementos expansíveis e crossfading
Princípios
- Todo padrão importa de
motion-foundations. Sem números brutos. - Toda renderização condicional é envolvida por
AnimatePresencecom umkey. - Animações de saída são sempre definidas junto com animações de entrada — nunca como um pensamento posterior.
layouté usado apenas para mudanças pequenas e isoladas. Subárvores grandes recebem transforms explícitos.
Regras
- Sempre envolva renderizações condicionais em
AnimatePresencecom umkeyno filho direto. Sem uma chave, animações de saída nunca são acionadas. - Sempre defina
exitao definirinitial+animate. Uma animação sem saída está incompleta. - Use
mode="wait"em transições de página. A entrada não deve começar até que a saída termine. - Nunca use
layoutem subárvores com mais de ~5 filhos ou DOM profundamente aninhado. Use transforms explícitos dex/yem vez disso. - O intervalo de stagger deve permanecer entre
0.05se0.10s. Abaixo parece mecânico; acima parece lento. - Modais devem sempre incluir: armadilha de foco, fechamento com tecla Escape, bloqueio de scroll,
role="dialog",aria-modal="true". - Scroll reveals usam
viewport={{ once: true }}. Repetir no scroll-out é distrativo, não informativo. - Todos os valores de token são importados de
motion-foundations. Sem números inline.
Orientação de Decisão
Escolhendo o padrão certo
| Situação | Padrão |
|---|---|
| Elemento aparece / desaparece | AnimatePresence |
| Lista de itens carregando em sequência | Variantes de Stagger |
| Navegando entre rotas | Wrapper de transição de página |
| Elemento muda de tamanho no lugar | Prop layout |
| Mesmo elemento se move entre contextos de página | layoutId |
| Elemento entra ao ser rolado para a vista | whileInView |
| Valor vinculado à posição de scroll | useScroll + useTransform |
Quando usar mode="wait" vs mode="sync"
| Modo | Use quando |
|---|---|
wait |
Transições de página, trocas de conteúdo (uma de cada vez) |
sync |
Notificações empilhadas, itens de lista (sobreposição é aceitável) |
popLayout |
Itens removidos de uma lista que se reorganiza |
Conceitos Principais
Contrato AnimatePresence
Três coisas devem ser sempre verdadeiras:
AnimatePresenceenvolve o condicional- O filho direto tem uma
key - O filho tem uma prop
exit
Falhe em qualquer um desses e a animação de saída falha silenciosamente.
layout vs layoutId
layout— anima a mudança de tamanho/posição do próprio elemento no lugarlayoutId— vincula dois elementos separados, fazendo crossfade entre eles em diferentes renders
Use layout="position" em texto dentro de um contêiner expansível para evitar que a animação de reflow do texto ocorra.
Exemplos de Código
Feedback de botão
"use client"
import { motion } from "motion/react"
import { springs, motionTokens } from "@/lib/motion-tokens"
<motion.button
whileHover={{ scale: motionTokens.scale.pop }}
whileTap={{ scale: motionTokens.scale.press }}
transition={springs.snappy}
/>
Lista com Stagger
"use client"
import { motion } from "motion/react"
import { motionTokens, springs } from "@/lib/motion-tokens"
const container = {
hidden: {},
visible: {
transition: {
staggerChildren: 0.08, // dentro da regra 0.05–0.10
delayChildren: 0.1,
},
},
}
const item = {
hidden: { opacity: 0, y: motionTokens.distance.md },
visible: { opacity: 1, y: 0, transition: springs.gentle },
}
…
Perguntas frequentes
O que é 'AnimatePresence'?
É uma ferramenta que garante que um elemento que desaparece faça isso de forma animada, em vez de simplesmente sumir de repente.
O que são 'tokens' e 'springs'?
São configurações pré-definidas para aparência (tokens) e movimento (springs), como velocidade e 'quique' da animação, para manter tudo consistente.
Por que não usar números diretamente nas animações?
Usar valores pré-definidos (tokens) garante que todas as animações no site tenham a mesma 'sensação' e sejam fáceis de atualizar se necessário.
Detalhes
Descrição original do autor
Production-ready animation patterns for React / Next.js — button, modal, toast, stagger, page transitions, exit animations, scroll, and layout — built on motion-foundations tokens and springs. Use when animating a specific UI element in React or Next.js — button, modal, toast, stagger, page transition, or scroll.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #88
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
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
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
frontend-design
Orienta seu agente na criação de interfaces visuais únicas e intencionais. Ajuda a definir a direção estética e a escolher tipografia.
anthropics/skills
paperclip-capsules
Ajuda seu agente a criar visuais para 'cápsulas'. Isso inclui arte para agentes, status e identificação visual.
paperclipai/paperclip
wireframe
Faz seu agente desenhar telas de forma simples. É útil para planejar o visual de aplicativos antes de criá-los.
paperclipai/paperclip