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

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

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/motion-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/motion-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/motion-patterns/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.

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 AnimatePresence com 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 AnimatePresence com um key.
  • 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

  1. Sempre envolva renderizações condicionais em AnimatePresence com um key no filho direto. Sem uma chave, animações de saída nunca são acionadas.
  2. Sempre defina exit ao definir initial + animate. Uma animação sem saída está incompleta.
  3. Use mode="wait" em transições de página. A entrada não deve começar até que a saída termine.
  4. Nunca use layout em subárvores com mais de ~5 filhos ou DOM profundamente aninhado. Use transforms explícitos de x/y em vez disso.
  5. O intervalo de stagger deve permanecer entre 0.05s e 0.10s. Abaixo parece mecânico; acima parece lento.
  6. Modais devem sempre incluir: armadilha de foco, fechamento com tecla Escape, bloqueio de scroll, role="dialog", aria-modal="true".
  7. Scroll reveals usam viewport={{ once: true }}. Repetir no scroll-out é distrativo, não informativo.
  8. 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:

  1. AnimatePresence envolve o condicional
  2. O filho direto tem uma key
  3. 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 lugar
  • layoutId — 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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas