# Button
> Trigger actions with variants, sizes, and asChild.
Import from `@aspyn-io/kit`. Scaffold source: `npx shadcn@latest add https://design.aspyn.io/r/button.json`
## Install
```tsx
import { Button } from "@aspyn-io/kit";
```
### Variants
Six visual intents. Default is the primary action; use one primary per view.
```tsx
```
### Sizes
```tsx
```
### As a link (asChild)
Render the button as a Next.js Link (or any element) while keeping styling and focus behavior.
```tsx
import Link from "next/link";
```
### Loading state
Disable while pending and communicate progress to assistive tech.
```tsx
```
### With icon
Icons sit inline before the label and inherit its size.
```tsx
```
### Icon only
Use size="icon" and always provide an aria-label.
```tsx
```
### Rounded
```tsx
```
## Notes
- Icon-only buttons require an aria-label.
- Buttons get cursor:pointer automatically from @aspyn-io/tokens: no per-app fixes needed.
- Use variant="destructive" only for irreversible actions, paired with a confirmation Dialog.