Appica UIUI 1.0.0

Animation

Built-in motion that's reduced-motion aware and customizable.


Components in Appica UI animate their open, close, and state changes out of the box. Most of this motion is plain CSS, but a few components use Motion when an interaction needs smoother, interruptible animation. In both cases, if the user has asked their system to reduce motion, the animations are turned off automatically — see Reduced motion.

State-driven transitions

Interactive components expose their state as data-* attributes — data-open, data-closed, data-starting-style, data-ending-style, and so on. Transitions hang off those attributes through Tailwind's data-* variants, so enter and exit animations are just utility classes — no animation library required:

The element starts and ends scaled-down and transparent, and animates to its natural state while open. Because exit is just another state (data-ending-style), elements animate out before they unmount. The single motion-reduce:transition-none is what drops the animation when the user prefers reduced motion — see below.

Reduced motion

Every animated component is reduced-motion aware. Most disable their transition in one line with motion-reduce:transition-none; a few instead gate each rule behind motion-safe:. Both rely on the same pair of custom variants the library defines:

This means animations are skipped in two situations: when the OS requests reduced motion, or when a ReducedMotionProvider sets data-disable-animations — which also reaches portaled popups, since they render outside the React tree.

Use the same variants in your own markup so it honors the preference too:

Disabling animations globally

Wrap a subtree (or the whole app) to force-disable animation regardless of the OS setting — useful for tests, demos, or a user preference toggle:

For JavaScript-driven animation (e.g. with Motion), read the resolved preference with useReducedMotion:

Customizing transitions

Tune timing per instance by overriding the relevant utilities through className — tailwind-merge keeps the last value:

For larger durations, easing, and keyframes, override the corresponding tokens in your stylesheet — see Theming.

© 2026 Appica UI. A free component library, crafted by the Appica team.