Motion
PopIn
Opacity + scale 0.85→1 on entrance, `easing.emphasized` (overshoot). Reserved for the small set of elements the motion system allows overshoot on — the primary button and logo mark — not a general-purpose entrance.
Preview
I
Code
src/components/motion/PopIn.tsx
"use client";
import { motion, useReducedMotion, type HTMLMotionProps } from "framer-motion";
import { popIn, reducedFade } from "@/lib/motion";
/**
* PopIn — opacity + scale 0.85→1, `easing.emphasized` (overshoot). Reserve
* for the same small set of elements the motion system allows emphasized
* easing on (per hyliox-motion-system.md), not general-purpose entrances.
*/
export function PopIn(props: HTMLMotionProps<"div">) {
const reduced = useReducedMotion();
return <motion.div variants={reduced ? reducedFade : popIn} {...props} />;
}
Installation
Usage
import { PopIn } from "@/components/motion/PopIn";
<PopIn initial="hidden" animate="show">
<LogoMark size={64} />
</PopIn>Props
| Prop | Type | Default | Description |
|---|---|---|---|
| ...props | HTMLMotionProps<'div'> | — | Any framer-motion div prop. |
Accessibility
Same reduced-motion fallback as FadeUp — opacity-only, no overshoot, when the user has requested less motion.