@fanvue/ui and renders
in the same box, so swapping the import path changes the motion and nothing
about your layout.
Shared props
Every animated icon accepts the standardSVGAttributes of an <svg> element
(className, style, aria-*), plus:
16 | 24 | 32
default:"24"
Pixel size, matching the static icon’s box exactly. Available on the 58 icons
whose static twin is prop-based; the other 11 are sized with a utility
class instead, e.g.
className="size-6".Ref<AnimatedIconHandle>
Drives the animation yourself. When set, hovering the icon no longer starts it,
and
onMouseEnter / onMouseLeave are forwarded untouched. The handle exposes
startAnimation() and stopAnimation().never
Not available. The animated artwork is stroke-only, so there is no filled variant
to swap to; the prop is typed as
never so passing it through a wrapper’s spread
fails to compile instead of reaching the DOM.<Name>Props and <Name>Handle type, so a
wrapper component can forward the ref with full typing.
Driving the animation
Each icon animates on its own hover and focus. To drive it from a parent — a card that plays its icon when the whole card is hovered — pass acontrolRef
and call the handle.
Nothing animates under
prefers-reduced-motion. SpinnerIcon is deliberately
absent — a loading indicator must not wait for a hover.All animated icons
Every name below imports from@fanvue/ui/animated-icons. The sizing column says how the icon is sized: the 58 icons whose static twin is prop-based take size, and the remaining 11 take a utility class.
Artwork and animations from lucide-animated (MIT).
Setup: Installation · Theming · Subpath exports