Skip to content
Skillpedia
Interfaces (UI/UX)280k · #86

motion-advanced

Lets your agent create complex interface animations. Helps with effects like drag and drop, gestures, and text or SVG animations.

What it does

This tool allows you to create complex and interactive animations for websites built with React or Next.js. It helps make elements move, respond to touch, or change shape, like drawings that appear or texts that type themselves out.

When to use it

  • ✓When you want an item to be draggable on the screen.
  • ✓To make text appear letter by letter or word by word.
  • ✓When creating animated SVG drawings or buttons that change on hover.

Example of what to ask your AI

“Create an animation so a card can be dragged sideways and disappears if dragged too far.”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

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

Ready-to-paste message

Use this skill to help me: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/motion-advanced/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

Internally, it uses advanced techniques to control element movement on the screen. It can create animations continuously or in sequences, ensuring everything runs smoothly and without glitches, even on touch devices.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add affaan-m/ECC --skill motion-advanced

Or download just the file:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/motion-advanced/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Motion Advanced

Complex, interactive, and physics-based animation patterns. Requires motion-foundations to be set up first. Use these when motion-patterns is not enough.

When to Activate

  • Building drag-to-dismiss sheets, swipe gestures, or reorderable lists
  • Animating text word-by-word, character-by-character, or as a live counter
  • Drawing SVG paths, morphing icons, or animating circular progress
  • Writing a custom animation hook (useScrollReveal, magnetic button, cursor follower)
  • Sequencing multi-step animations imperatively with useAnimate
  • Building spinners, shimmer skeletons, pulse indicators, or loading button states

Outputs

This skill produces:

  • Drag interactions: draggable cards, drag-to-dismiss sheets, Reorder.Group lists
  • Gesture hooks: swipe detection, long press, pinch outline
  • Text animation components: word reveal, character typewriter, number counter
  • SVG animation: path draw-on, icon morph, stroke progress ring
  • Custom hooks: useScrollReveal, useHoverScale, useNavigationDirection, useInViewOnce
  • Imperative sequences via useAnimate with interrupt-safe async/await
  • Loader components: spinner, shimmer, pulse dot, progress bar, button loading state

Principles

  • Physics-based motion (useSpring, springs.*) always feels more natural than duration-based for direct manipulation.
  • useMotionValue + useTransform computes derived values without triggering re-renders.
  • useAnimate sequences are imperative and interrupt-safe — calling animate() mid-flight cancels the previous animation automatically.
  • Motion values (useMotionValue, useSpring) are SSR-safe and do not cause hydration errors.

Rules

  1. Drag interactions must be tested on touch devices, not just mouse. drag prop works on both but feel and threshold differ.
  2. Infinite animations must pause when document.visibilityState === "hidden". Background tabs must not consume GPU/CPU.
  3. Swipe threshold must be explicit. Never infer intent from velocity alone; combine offset + velocity checks.
  4. useAnimate scope ref must be attached to a mounted DOM element. Calling animate() before mount throws silently.
  5. Motion values must not be recreated on render. useMotionValue(0) inside a component body is correct; new MotionValue(0) in a render is not.
  6. All token values are imported from motion-foundations. No inline numbers.
  7. Custom hooks must handle cleanup. Every window.addEventListener needs a matching removeEventListener in the useEffect return.
  8. SVG morphing requires equal path command counts. Paths with different command structures snap instead of interpolating.

Decision Guidance

Choosing the right advanced API

Scenario API
Drag with physics on release drag + dragTransition: springs.release
Ordered drag-to-reorder list Reorder.Group + Reorder.Item
Dismiss on drag offset drag="y" + onDragEnd offset check
Swipe left/right drag="x" + onDragEnd offset check
Long press useLongPress hook
Value smoothed over time useSpring
Value derived from another useTransform
Multi-step sequence useAnimate with async/await
One-shot imperative animation animate() from motion
Text entering word by word Stagger on inline-block spans
SVG drawing on pathLength 0 → 1
SVG morph d attribute tween (equal commands)
Circular progress strokeDashoffset tween

When to use useSpring vs a spring transition

useSpring transition: springs.*
Use for Cursor follower, pointer-tracked values Discrete state changes
Updates Continuous, on every frame Triggered by state change
Interrupt Smooth — physics picks up from velocity Restarts from current value

Core Concepts

useMotionValue + useTransform

Reactive computation without re-renders:

const x = useMotionValue(0)
const opacity = useTransform(x, [-200, 0, 200], [0, 1, 0])
// opacity updates every frame as x changes — no setState, no re-render

useAnimate

Returns [scope, animate]. The scope ref must be attached to a DOM element. animate() calls are interrupt-safe — calling mid-flight cancels the previous run.

const [scope, animate] = useAnimate()


…
FAQ

Do I need to be an expert programmer to use this?

You don't need to be an expert, but basic knowledge of React or Next.js is recommended, as this tool is an add-on for those environments.

Does this work on any website?

This tool is specific to projects using the React or Next.js web development libraries.

Can I create animations that feel physical, like in the real world?

Yes, the tool allows for animations based on physics principles, making movements more natural and realistic, especially for interactions like drag and drop.

Details

Original description by the author

Advanced motion patterns for React / Next.js — drag & drop, gestures, text animations, SVG path drawing, custom hooks, imperative sequences (useAnimate), loaders, and the full API decision tree. Requires motion-foundations. Use when building drag and drop, gestures, text or SVG animation, or imperative animation sequences in React or Next.js.

repo: affaan-m/ECC

Popularity

GitHub stars
280k
Ranking position
#86
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills