# Dynamic Button

> An animated button that smoothly resizes its width to fit new content and crossfades its label and icon whenever the action or state changes. Built with motion/react, it uses a spring width transition, a coordinated vertical fade for content swaps, and an active-press scale. Supports primary and secondary variants, an optional icon, content or full width, and respects reduced-motion preferences.

- Author: [dqnamo](https://21st.dev/@dqnamo)
- License: mit
- Tags: Button, Animation, Motion
- npm dependencies: motion
- Live preview: https://21st.dev/@dqnamo/components/dynamic-button

## Install

```bash
npx shadcn@latest add "https://21st.dev/r/dqnamo/dynamic-button?api_key=$API_KEY_21ST"
```

Requires a 21st API key (generate one at https://21st.dev/mcp) passed as `API_KEY_21ST`. Free accounts get a limited number of installs per day; unlimited on a paid plan — see https://21st.dev/pricing.

Full component directory: https://21st.dev/llms.txt · More like this: https://21st.dev/community/components/s/button.md
