Loading...
Loading...
Apply a named StyleSeed motion to a component — either one of the 5 personality seeds (Spring/Silk/Snap/Float/Pulse × entrance/exit/hover/press/layout) or a distinctive keyword move from the motion library (toggle-flip, toggle-curtain, reveal-blur, pop-in, shimmer, …). Translates vibe words into framer-motion code from one source of truth.
npx skill4agent add bitjaru/styleseed ss-motionmotion.Xengine/components/ui/motion.tsxengine/motion/index.ts| Words the user might say | Seed |
|---|---|
| bouncy, springy, playful, energetic, alive | Spring |
| smooth, silky, fluid, elegant, composed, continuous | Silk |
| snappy, quick, instant, decisive, sharp, precise | Snap |
| floaty, gentle, weightless, dreamy, ambient, drifting | Float |
| rhythmic, punchy, pulsing, heartbeat, beat | Pulse |
| "Toss style", "Arc style" | Spring (per brand default) |
| "Stripe style", "Notion style" | Silk |
| "Linear style", "Raycast style", "Vercel style" | Snap |
BRAND_DEFAULT_SEEDspringsilkMOTION_BY_USECASEengine/motion/library.ts@engine/motion| Use case | Reach for | Why |
|---|---|---|
| Primary button / CTA press | | tactile, confident — the press should "give" |
| Modal / dialog / sheet enter | | smooth; never bounce serious/destructive content |
| Dropdown / popover / menu | | instant, precise — frequent UI shouldn't wait |
| Toast / inline notification | | small friendly arrival, non-blocking |
| List / feed items appearing | | choreograph order, gently |
| Feature / marketing card hover | | depth/flair OK on content-light marketing |
| Dashboard / data card hover | | a subtle lift only — keep dense UI calm |
| Like / favorite / reaction | | a celebratory one-shot; reward the tap |
| Live / online / recording dot | | looping heartbeat = "alive" |
| Loading / skeleton | | calm directional progress |
| Success / confirmation | | positive little "done" |
| Toggle / tab / segment switch | | distinctive, recognizable switch |
| Page / route transition | | smooth, minimal, get out of the way |
| Number / balance / KPI / price reveal | none | don't animate the payload — it must read instantly |
engine/motion/library.tsengine/motion/library.tsMOTION_LIBRARYMOTION_BY_KEY@engine/motionsnippet| Keyword | Move | Say it when the user wants… |
|---|---|---|
| 3D Y-axis card flip | a switch/toggle to flip between two faces |
| slide-stack swap | a value to slide out and the next to slide in |
| pill ⇄ circle morph | a control to change shape on toggle |
| top→bottom clip-path wipe | a panel to reveal like a curtain |
| blur(12px)→0 focus-in | content to focus-pull into place |
| masked clip-path text rise | a headline/text to climb into view |
| scaleY from top edge | an accordion/panel to unfold |
| spring overshoot from 0 | a badge/checkmark to pop in bouncily |
| scale-down + skew | a button to feel jelly/tactile on tap |
| radial ripple from tap | Material-style press feedback |
| looping scale pulse | a live/recording/heartbeat indicator |
| quick horizontal shake | error / invalid-input feedback |
| skeleton loading sweep | a loading placeholder |
| children fade-up in sequence | a list to animate in one-by-one |
engine/motion/library.tskeysnippetuseStatekey/motionhoverpressentranceexit<AnimatePresence>layoutentrancehoverpress<button><div><Card>motionAnimatePresenceexit"framer-motion""@engine/motion"@engine/*engine/motion<motion.X>// hover example
<motion.button {...spring.hover}>Save</motion.button>
// press + hover combined
<motion.button {...spring.press} {...spring.hover}>Save</motion.button>
// entrance (mount)
<motion.div {...silk.entrance}>...</motion.div>
// exit (requires AnimatePresence wrapper somewhere up the tree)
<AnimatePresence>
{open && <motion.div {...silk.entrance} {...silk.exit} />}
</AnimatePresence>
// layout (FLIP)
<motion.div {...snap.layout}>...</motion.div>{ type: "spring", stiffness: 300, damping: 18 }prefers-reduced-motionusePrefersReducedMotionREDUCED_TRANSITION@engine/motionexitpresspressengine/motion/seeds/*.ts